From 65552da79655512b657c954a6aab7c8240e5d29d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 21 Feb 2022 22:14:05 +0800 Subject: [PATCH 0001/1057] Add solution and README for problem 169 --- .../101-200/0169.Majority-Element/README.md | 27 +++++++++++++++++++ .../101-200/0169.Majority-Element/Solution.go | 17 ++++++++++++ .../0169.Majority-Element/Solution_test.go | 1 + 3 files changed, 45 insertions(+) create mode 100644 leetcode/101-200/0169.Majority-Element/README.md diff --git a/leetcode/101-200/0169.Majority-Element/README.md b/leetcode/101-200/0169.Majority-Element/README.md new file mode 100644 index 000000000..deff78f11 --- /dev/null +++ b/leetcode/101-200/0169.Majority-Element/README.md @@ -0,0 +1,27 @@ +# [169.Majority Element][title] + +## Description +Given an array `nums` of size `n`, return the majority element. + +The majority element is the element that appears more than `⌊n / 2⌋` times. You may assume that the majority element always exists in the array. + +**Example 1:** + +``` +Input: nums = [3,2,3] +Output: 3 +``` + +**Example 2:** + +``` +Input: nums = [2,2,1,1,1,2,2] +Output: 2 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/majority-element/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0169.Majority-Element/Solution.go b/leetcode/101-200/0169.Majority-Element/Solution.go index 91a1a10c5..6c474d423 100644 --- a/leetcode/101-200/0169.Majority-Element/Solution.go +++ b/leetcode/101-200/0169.Majority-Element/Solution.go @@ -49,3 +49,20 @@ func majorityElement_3(nums []int) int { return majorityElement_3(numsTmp) } + +func majorityElement_4(nums []int) int { + times := 1 + target := nums[0] + for idx := 1; idx < len(nums); idx++ { + if nums[idx] == target { + times++ + continue + } + times-- + if times == 0 { + target = nums[idx] + times = 1 + } + } + return target +} diff --git a/leetcode/101-200/0169.Majority-Element/Solution_test.go b/leetcode/101-200/0169.Majority-Element/Solution_test.go index a77ed968b..1674cc38c 100644 --- a/leetcode/101-200/0169.Majority-Element/Solution_test.go +++ b/leetcode/101-200/0169.Majority-Element/Solution_test.go @@ -17,6 +17,7 @@ var SolutionFuncList = []SolutionFuncType{ majorityElement_1, majorityElement_2, majorityElement_3, + majorityElement_4, } // Test case info struct From 9297c497d3c3a9369d12557962b7575f87642c9a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Feb 2022 14:51:35 +0800 Subject: [PATCH 0002/1057] Add solution and test-cases for problem 673 --- .../README.md | 26 +++++++------- .../Solution.go | 34 +++++++++++++++++-- .../Solution_test.go | 12 ++++--- 3 files changed, 51 insertions(+), 21 deletions(-) diff --git a/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/README.md b/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/README.md index 3db88eb7d..95c3d0a8b 100644 --- a/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/README.md +++ b/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/README.md @@ -1,28 +1,26 @@ # [673.Number of Longest Increasing Subsequence][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums`, return the number of longest increasing subsequences. + +__Notice__ that the sequence has to be __strictly__ increasing. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,5,4,7] +Output: 2 +Explanation: The two longest increasing subsequences are [1, 3, 4, 7] and [1, 3, 5, 7]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Longest Increasing Subsequence -```go ``` - +Input: nums = [2,2,2,2,2] +Output: 5 +Explanation: The length of longest continuous increasing subsequence is 1, and there are 5 subsequences' length is 1, so output 5. +``` ## 结语 diff --git a/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution.go b/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution.go index d115ccf5e..e65fa74af 100644 --- a/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution.go +++ b/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + dp := make([]int, len(nums)) + maxCount := make([]int, len(nums)) + dp[0], maxCount[0] = 1, 1 + longestSubSeq := 1 + for idx := 1; idx < len(nums); idx++ { + dp[idx] = 1 + maxCount[idx] = 1 + for pre := idx - 1; pre >= 0; pre-- { + if nums[pre] < nums[idx] { + times := dp[pre] + 1 + if times == dp[idx] { + maxCount[idx] += maxCount[pre] + continue + } + if times > dp[idx] { + dp[idx] = times + maxCount[idx] = maxCount[pre] + } + if longestSubSeq < dp[idx] { + longestSubSeq = dp[idx] + } + } + } + } + result := 0 + for idx := 0; idx < len(nums); idx++ { + if longestSubSeq == dp[idx] { + result += maxCount[idx] + } + } + return result } diff --git a/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution_test.go b/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution_test.go index 14ff50eb4..24cf87cf7 100644 --- a/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/Solution_test.go +++ b/leetcode/601-700/0673.Number-of-Longest-Increasing-Subsequence/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{1, 3, 5, 4, 7}, 2}, + {"TestCase2", []int{2, 2, 2, 2, 2}, 5}, + {"TestCase3", []int{1, 2, 3}, 1}, + {"TestCase4", []int{1, 3, 5, 4, 7, 7, 8, 7, 2, 10, 19, 23, 10, 101, 234, 78, 23}, 4}, + {"TestCase5", []int{1, 1, 1, 2, 2, 2, 3, 3, 3}, 27}, } // 开始测试 From 1bc468926ad644204194cc332416ff8c93b6e306 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 28 Feb 2022 22:19:35 +0800 Subject: [PATCH 0003/1057] Add solution and test-cases for problem 228 --- .../201-300/0228.Summary-Ranges/README.md | 37 ++++++++++++------- .../201-300/0228.Summary-Ranges/Solution.go | 30 ++++++++++++++- .../0228.Summary-Ranges/Solution_test.go | 12 +++--- 3 files changed, 58 insertions(+), 21 deletions(-) diff --git a/leetcode/201-300/0228.Summary-Ranges/README.md b/leetcode/201-300/0228.Summary-Ranges/README.md index afd2f898f..ca659f9c3 100644 --- a/leetcode/201-300/0228.Summary-Ranges/README.md +++ b/leetcode/201-300/0228.Summary-Ranges/README.md @@ -1,28 +1,37 @@ # [228.Summary Ranges][title] -> [!WARNING|style:flat] -> 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 unique** integer array nums. + +Return the **smallest sorted** list of ranges that **cover all the numbers in the array exactly**. That is, each element of `nums` is covered by exactly one of the ranges, and there is no integer `x` such that `x` is in one of the ranges but not in `nums`. + +Each range `[a,b]` in the list should be output as: + +- `"a->b"` if `a != b` +- `"a"` if `a == b` **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,1,2,4,5,7] +Output: ["0->2","4->5","7"] +Explanation: The ranges are: +[0,2] --> "0->2" +[4,5] --> "4->5" +[7,7] --> "7" ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Summary Ranges -```go ``` - +Input: nums = [0,2,3,4,6,8,9] +Output: ["0","2->4","6","8->9"] +Explanation: The ranges are: +[0,0] --> "0" +[2,4] --> "2->4" +[6,6] --> "6" +[8,9] --> "8->9" +``` ## 结语 diff --git a/leetcode/201-300/0228.Summary-Ranges/Solution.go b/leetcode/201-300/0228.Summary-Ranges/Solution.go index d115ccf5e..41a8f11a4 100644 --- a/leetcode/201-300/0228.Summary-Ranges/Solution.go +++ b/leetcode/201-300/0228.Summary-Ranges/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" +) + +func Solution(nums []int) []string { + result := make([]string, 0) + if len(nums) == 0 { + return result + } + start, end := 0, 1 + for ; end < len(nums); end++ { + if nums[end]-nums[end-1] == 1 { + continue + } + + writeObj := fmt.Sprintf("%d", nums[start]) + if end-start != 1 { + writeObj = fmt.Sprintf("%d->%d", nums[start], nums[end-1]) + } + result = append(result, writeObj) + start = end + } + writeObj := fmt.Sprintf("%d", nums[start]) + if end-start != 1 { + writeObj = fmt.Sprintf("%d->%d", nums[start], nums[end-1]) + } + result = append(result, writeObj) + return result } diff --git a/leetcode/201-300/0228.Summary-Ranges/Solution_test.go b/leetcode/201-300/0228.Summary-Ranges/Solution_test.go index 14ff50eb4..d32c3ad63 100644 --- a/leetcode/201-300/0228.Summary-Ranges/Solution_test.go +++ b/leetcode/201-300/0228.Summary-Ranges/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 2, 4, 5, 7}, []string{"0->2", "4->5", "7"}}, + {"TestCase2", []int{0, 2, 3, 4, 6, 8, 9}, []string{"0", "2->4", "6", "8->9"}}, + {"TestCase3", []int{1, 2, 3}, []string{"1->3"}}, + {"TestCase4", []int{0, 1, 2, 4, 5, 6, 8}, []string{"0->2", "4->6", "8"}}, + {"TestCase5", []int{1, 2, 3, 5}, []string{"1->3", "5"}}, } // 开始测试 From 4af756512359ac22a929032429bc613837a5ec58 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 6 Mar 2022 11:24:21 +0800 Subject: [PATCH 0004/1057] Add solution and test-cases for problem 234 --- .../0234.Palindrome-Linked-List/README.md | 25 +++++++----------- .../0234.Palindrome-Linked-List/Solution.go | 17 ++++++++++-- .../Solution_test.go | 8 +++--- .../pal1linked-list.jpg | Bin 0 -> 7140 bytes .../pal2linked-list.jpg | Bin 0 -> 3572 bytes .../0234.Palindrome-Linked-List/type.go | 6 +++++ 6 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 leetcode/201-300/0234.Palindrome-Linked-List/pal1linked-list.jpg create mode 100644 leetcode/201-300/0234.Palindrome-Linked-List/pal2linked-list.jpg create mode 100644 leetcode/201-300/0234.Palindrome-Linked-List/type.go diff --git a/leetcode/201-300/0234.Palindrome-Linked-List/README.md b/leetcode/201-300/0234.Palindrome-Linked-List/README.md index 52812de73..c8255ba21 100644 --- a/leetcode/201-300/0234.Palindrome-Linked-List/README.md +++ b/leetcode/201-300/0234.Palindrome-Linked-List/README.md @@ -1,28 +1,23 @@ # [234.Palindrome 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 +Given the `head` of a singly linked list, return true if it is a palindrome. -**Example 1:** +**Example 1:** +![exampl1](pal1linked-list.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [1,2,2,1] +Output: true ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](pal2linked-list.jpg) -### 思路1 -> ... -Palindrome Linked List -```go ``` - +Input: head = [1,2] +Output: false +``` ## 结语 diff --git a/leetcode/201-300/0234.Palindrome-Linked-List/Solution.go b/leetcode/201-300/0234.Palindrome-Linked-List/Solution.go index d115ccf5e..257f8c366 100644 --- a/leetcode/201-300/0234.Palindrome-Linked-List/Solution.go +++ b/leetcode/201-300/0234.Palindrome-Linked-List/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(head *ListNode) bool { + walk := head + r := true + isPalindromeAux(head, &walk, &r) + return r +} +func isPalindromeAux(head *ListNode, tail **ListNode, r *bool) { + if head == nil { + return + } + isPalindromeAux(head.Next, tail, r) + res := head.Val == (*tail).Val + + *r = *r && res + *tail = (*tail).Next } diff --git a/leetcode/201-300/0234.Palindrome-Linked-List/Solution_test.go b/leetcode/201-300/0234.Palindrome-Linked-List/Solution_test.go index 14ff50eb4..b6752a574 100644 --- a/leetcode/201-300/0234.Palindrome-Linked-List/Solution_test.go +++ b/leetcode/201-300/0234.Palindrome-Linked-List/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs *ListNode expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &ListNode{1, &ListNode{2, &ListNode{2, &ListNode{1, nil}}}}, true}, + {"TestCase2", &ListNode{1, &ListNode{2, nil}}, false}, + {"TestCase3", &ListNode{Val: 1}, true}, } // 开始测试 diff --git a/leetcode/201-300/0234.Palindrome-Linked-List/pal1linked-list.jpg b/leetcode/201-300/0234.Palindrome-Linked-List/pal1linked-list.jpg new file mode 100644 index 0000000000000000000000000000000000000000..52dae3ce6085d18549554fd80693a451a0458ebb GIT binary patch literal 7140 zcmcJTcQBm)_QzMZBzlXmh`IzJqD0Fg!Rkv0s|1l~ixotP5JU|&>=GeLSgUudr`RBf z-tFo(B5DYtgkLiE-nrlV$DO(NH*?Q(=9yu=b4yU zSXfyY&attxv9SMsX899@;*XMwn*O(tg%Qa3d-T7wv-bd2dVmH+Ar-|X03|C06)VNr zM*!cSQYoqa)cX&kr=_E&0a8-^ehXm%{K-p6Ny9)zM@{v61_dP*HGqbej-HiG2*`d( z4q`UU!ObIYb;l8zis4k&;<_Mg?(1JG>J(6O)j8sK2#&vo{#%MaqpW{P`1jFiz&Wbl zwXjmL0yF`8#`RnaN;k1^MD0yXCP}34tzFuMnkCD$x90vW*KZHA5dgbg>hYsmkd1CL zsDU3msus}z#eUhzmDzZlbsUi8-qT}&^O~?~I;X2=@rV2*;LpJ4sfqYtqhc|6=ENJwvE?$t_kVa760C(&qp#=RdG72d?1^`V0) z^b^#S!F-c1TYb-dI6~`mlMl}8=rQ!GbIpt9^0xWTxpJ=#Gf<@*MueMgVO*;6b=uZ| zM-=H{Z)k(hQ7FeAw8>hqkeCX&%e2W;d=#$B84O1ylzXz;JH$$Z_~w(({&1vKI!x6 zJL`^7XhLs!@sDiiwB8a~NU%tP3CsG4eAnNsS+2A(pv4UndAmv_{>e~SyZ}Omi9hM9 zs7%%TzA`Zm#@Qu|P61N0T_^`bY5wju3I7EO+W(xeaY~%)cN)?gqs{}gO~6ugFI{&% zaY<|~MXh@;Xh1ef*UIsOC%$e+>jm+xLw#bI?RGD^JZ$2yj~qOO$<_2})S#TMR>=GM zJ}ReV+B9_#D?af7YGN{8_*Fz)?V7@XAXLQN3%_RRuO>qCsr3t!#KTQ3SU4=lXZiaU z?!aepa)i-7c~c4Q1AY*ZgL3f*kc{06dR{EpsL51)dqYAPJmqz=-)PjO)qpi|PyM-W?5TdJX8Q!%4kpH7eEC;Ts;D3X|#N(Kl3Up3c!e51EG3`8avJh>bi)O)M{Mz zO@RnTJhb@-GANDvOfV@e9WhP-t!CTK1(SUpUOcFR^Bx)vuOAB1=Ihd7KzjVTQ4u#p z*eJXV?8{XBhgX}(!@}uOshbU+Ro0Ws?*f|DKP7WkQHT^p=mSvbqHsOH+D6Sr+Sc=# zWiMu*hj)6e;UrvDWZ-d($;rB=WW}#QwP;lM8;rF2XmATk-_)5^*n18sum`ltRGjfS zn-3zw5?JB;Sl#Ei>hM;s7rUMOVd>^l?XDHvQ{ecb z8<^gt(KoQ92F;eTPeu7&<2E+r^~B}t?y7iJOo^v_*s*YH3ZFoXX+^Ua;_dlbDowNX zfSD)n-z43el`8@_+^d?>Q#Wp+77)7uV7{3@wkB!H=>UtQ8`|&~F$y9$uh`h3Z?zKn z)tRD#nLmakS@doQ=;P?>B|(cS)a+Rn$&Kabd;B6Vr?<>h-Z1nmoSn;gwTK)xW0u9| z?y2^=t!KoVzy{~}p=w8?fp(k))7Y3b%hz}6wW%6`Y48&>vFph$_zI}yNaT^NRy!(h z9cDyp2ZcTTyIa1Q;aa#%L<|=PwH7h9IEZV^;CO3lFkoW+*rqn?F#B8*1Qxr=hC%kk z!yt`DLvEHt&moul2f(Y|=`PWpjbqqK^o&t{tVGhTa8A$|R5fcA~M~nOb>+fyDQb+cRn}NWA^F~)cvBmLbmN$>RHUU!j%Bn=h z^Btqmxg0o>idx9(FOo7|p?xC%IB}fBU_FmpzF;#G|3=;3SyE4inNW5+1WMl%0Dq@m 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 literal 0 HcmV?d00001 diff --git a/leetcode/201-300/0234.Palindrome-Linked-List/type.go b/leetcode/201-300/0234.Palindrome-Linked-List/type.go new file mode 100644 index 000000000..828b9b826 --- /dev/null +++ b/leetcode/201-300/0234.Palindrome-Linked-List/type.go @@ -0,0 +1,6 @@ +package Solution + +type ListNode struct { + Val int + Next *ListNode +} From ff12cf2cd727b6f79e922eb3a2e431a1b22b9537 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 7 Mar 2022 23:32:54 +0800 Subject: [PATCH 0005/1057] Add solution and test-cases and README for problem 21 --- .../0021.Merge-Two-Sorted-Lists/README.md | 36 ++++++++++++++++++ .../0021.Merge-Two-Sorted-Lists/Solution.go | 18 +++++++++ .../Solution_test.go | 24 +++++++++++- .../0021.Merge-Two-Sorted-Lists/merge_ex1.jpg | Bin 0 -> 26408 bytes 4 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 leetcode/1-100/0021.Merge-Two-Sorted-Lists/README.md create mode 100644 leetcode/1-100/0021.Merge-Two-Sorted-Lists/merge_ex1.jpg diff --git a/leetcode/1-100/0021.Merge-Two-Sorted-Lists/README.md b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/README.md new file mode 100644 index 000000000..979c523d4 --- /dev/null +++ b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/README.md @@ -0,0 +1,36 @@ +# [21.Merge Two Sorted Lists][title] + +## Description +You are given the heads of two sorted linked lists `list1` and `list2`. + +Merge the two lists in a one **sorted** list. The list should be made by splicing together the nodes of the first two lists. + +Return the head of the merged linked list. + +**Example 1:** +![exampl1](./merge_ex1.jpg) + +``` +Input: list1 = [1,2,4], list2 = [1,3,4] +Output: [1,1,2,3,4,4] +``` + +**Example 2:** + +``` +Input: list1 = [], list2 = [] +Output: [] +``` + +**Example 3:** +``` +Input: list1 = [], list2 = [0] +Output: [0] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-two-sorted-lists/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution.go b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution.go index 487e245cb..146b6152d 100644 --- a/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution.go +++ b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution.go @@ -27,3 +27,21 @@ func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode { return head.Next } + +func mergeTwoLists1(l1, l2 *ListNode) *ListNode { + if l1 == nil { + return l2 + } + if l2 == nil { + return l1 + } + n := &ListNode{} + if l1.Val < l2.Val { + n.Val = l1.Val + n.Next = mergeTwoLists1(l1.Next, l2) + } else { + n.Val = l2.Val + n.Next = mergeTwoLists1(l1, l2.Next) + } + return n +} diff --git a/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution_test.go b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution_test.go index d2e85b2e4..8102a3471 100644 --- a/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution_test.go +++ b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/Solution_test.go @@ -10,7 +10,8 @@ func TestSolution(t *testing.T) { data1 := []int{1, 2, 4} data2 := []int{1, 3, 4} - got := mergeTwoLists(MakeListNote(data1), MakeListNote(data2)) + l1, l2 := MakeListNote(data1), MakeListNote(data2) + got := mergeTwoLists(l1, l2) want := MakeListNote([]int{1, 1, 2, 3, 4, 4}) if !Equal(got, want) { @@ -20,13 +21,23 @@ func TestSolution(t *testing.T) { PrintList(want) t.Error("GOT:", got, "WANT:", want) } + + got = mergeTwoLists1(l1, l2) + if !Equal(got, want) { + fmt.Print("GOT:") + PrintList(got) + fmt.Print("WANT:") + PrintList(want) + t.Error("GOT:", got, "WANT:", want) + } }) t.Run("Test-2", func(t *testing.T) { data1 := []int{1, 2, 4, 5, 6, 7} data2 := []int{1, 3, 4, 9, 10} - got := mergeTwoLists(MakeListNote(data1), MakeListNote(data2)) + l1, l2 := MakeListNote(data1), MakeListNote(data2) + got := mergeTwoLists(l1, l2) want := MakeListNote([]int{1, 1, 2, 3, 4, 4, 5, 6, 7, 9, 10}) if !Equal(got, want) { @@ -36,6 +47,15 @@ func TestSolution(t *testing.T) { PrintList(want) t.Error("GOT:", got, "WANT:", want) } + + got = mergeTwoLists1(l1, l2) + if !Equal(got, want) { + fmt.Print("GOT:") + PrintList(got) + fmt.Print("WANT:") + PrintList(want) + t.Error("GOT:", got, "WANT:", want) + } }) } diff --git a/leetcode/1-100/0021.Merge-Two-Sorted-Lists/merge_ex1.jpg b/leetcode/1-100/0021.Merge-Two-Sorted-Lists/merge_ex1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a926641f80a7c6a1a665becad24929eaef71d331 GIT binary patch literal 26408 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 Date: Sun, 13 Mar 2022 01:34:43 +0800 Subject: [PATCH 0006/1057] Add solution and test-cases for problem 238 --- .../README.md | 25 ++++++++----------- .../Solution.go | 23 +++++++++++++++-- .../Solution_test.go | 11 ++++---- 3 files changed, 38 insertions(+), 21 deletions(-) diff --git a/leetcode/201-300/0238.Product-of-Array-Except-Self/README.md b/leetcode/201-300/0238.Product-of-Array-Except-Self/README.md index 70d1980dd..a3f7e3272 100644 --- a/leetcode/201-300/0238.Product-of-Array-Except-Self/README.md +++ b/leetcode/201-300/0238.Product-of-Array-Except-Self/README.md @@ -1,28 +1,25 @@ # [238.Product of Array Except Self][title] -> [!WARNING|style:flat] -> 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 an array `answer` such that `answer[i]` is equal to the product of all the elements of `nums` except `nums[i]`. + +The product of any prefix or suffix of `nums` is **guaranteed** to fit in a **32-bit** integer. + +You must write an algorithm that runs in `O(n)` time and without using the division operation. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4] +Output: [24,12,8,6] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Product of Array Except Self -```go ``` - +Input: nums = [-1,1,0,-3,3] +Output: [0,0,9,0,0] +``` ## 结语 diff --git a/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution.go b/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution.go index d115ccf5e..b6220a526 100644 --- a/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution.go +++ b/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + length := len(nums) + r := make([]int, length) + if length == 0 || length == 1 { + return r + } + + r[0] = nums[0] + for i := 1; i < length-1; i++ { + r[i] = r[i-1] * nums[i] + } + r[length-1] = r[length-2] + + rightProduct := nums[length-1] + for idx := length - 2; idx > 0; idx-- { + r[idx] = r[idx-1] * rightProduct + rightProduct *= nums[idx] + } + r[0] = rightProduct + + return r } diff --git a/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution_test.go b/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution_test.go index 14ff50eb4..ac6616e0f 100644 --- a/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution_test.go +++ b/leetcode/201-300/0238.Product-of-Array-Except-Self/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4}, []int{24, 12, 8, 6}}, + {"TestCase2", []int{-1, 1, 0, -3, 3}, []int{0, 0, 9, 0, 0}}, + {"TestCase3", []int{2, 3, 5, 0}, []int{0, 0, 0, 30}}, + {"TestCase4", []int{1, 1, 1}, []int{1, 1, 1}}, } // 开始测试 From 72e1245f2407fdc72f5fccac8c43bf0eec8e28b4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Mar 2022 11:42:37 +0800 Subject: [PATCH 0007/1057] Add solution and test-cases for problem 1007 --- .../README.md | 34 +++++++------ .../Solution.go | 47 +++++++++++++++++- .../Solution_test.go | 18 +++---- .../domino.png | Bin 0 -> 17968 bytes 4 files changed, 73 insertions(+), 26 deletions(-) create mode 100644 leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/domino.png diff --git a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/README.md b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/README.md index e9547d137..fd4173894 100644 --- a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/README.md +++ b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/README.md @@ -1,28 +1,32 @@ # [1007.Minimum Domino Rotations For Equal Row][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +In a row of dominoes, `tops[i]` and `bottoms[i]` represent the top and bottom halves of the __ith__ domino. (A domino is a tile with two numbers from 1 to 6 - one on each half of the tile.) -**Example 1:** +We may rotate the __ith__ domino, so that `tops[i]` and `bottoms[i]` swap values. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return the minimum number of rotations so that all the values in `tops` are the same, or all the values in `bottoms` are the same. -## 题意 -> ... +If it cannot be done, return `-1`. -## 题解 +**Example 1:** +![domino](./domino.png) -### 思路1 -> ... -Minimum Domino Rotations For Equal Row -```go +``` +Input: tops = [2,1,2,4,2,2], bottoms = [5,2,6,2,3,2] +Output: 2 +Explanation: +The first figure represents the dominoes as given by tops and bottoms: before we do any rotations. +If we rotate the second and fourth dominoes, we can make every value in the top row equal to 2, as indicated by the second figure. ``` +**Example 2:** +``` +Input: tops = [3,5,1,2,3], bottoms = [3,6,3,3,4] +Output: -1 +Explanation: +In this case, it is not possible to rotate the dominoes to make one row of values equal. +``` ## 结语 diff --git a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution.go b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution.go index d115ccf5e..63fb8e79c 100644 --- a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution.go +++ b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +func topCanImpl(elem int, tops, bottoms []int) (bool, int) { + count := 0 + for idx := 1; idx < len(tops); idx++ { + if tops[idx] == elem { + continue + } + if bottoms[idx] != elem { + return false, count + } + count++ + } + + return true, count +} + +func bottomCanImpl(elem int, tops, bottoms []int) (bool, int) { + count := 0 + for idx := 1; idx < len(bottoms); idx++ { + if bottoms[idx] == elem { + continue + } + if tops[idx] != elem { + return false, count + } + count++ + } + + return true, count +} + +func Solution(tops []int, bottoms []int) int { + minCount := -1 + if ttOk, ttCount := topCanImpl(tops[0], tops, bottoms); ttOk && (minCount == -1 || minCount > ttCount) { + minCount = ttCount + } + if tbOk, tbCount := topCanImpl(bottoms[0], tops, bottoms); tbOk && (minCount == -1 || minCount > tbCount+1) { + minCount = tbCount + 1 + } + if bbOk, bbCount := bottomCanImpl(bottoms[0], tops, bottoms); bbOk && (minCount == -1 || minCount > bbCount) { + minCount = bbCount + } + if btOk, btCount := bottomCanImpl(tops[0], tops, bottoms); btOk && (minCount == -1 || minCount > btCount+1) { + minCount = btCount + 1 + } + return minCount } diff --git a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution_test.go b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution_test.go index 14ff50eb4..efb19b586 100644 --- a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution_test.go +++ b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/Solution_test.go @@ -9,22 +9,22 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + tops, bottoms []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 1, 2, 4, 2, 2}, []int{5, 2, 6, 2, 3, 2}, 2}, + {"TestCase2", []int{3, 5, 1, 2, 3}, []int{3, 6, 3, 3, 4}, -1}, + {"Testcase3", []int{1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1}, []int{2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 2, 2, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1}, 1056}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.tops, c.bottoms) 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 tops:: %v, bottoms: %v", + c.expect, got, c.tops, c.bottoms) } }) } diff --git a/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/domino.png b/leetcode/1001-1100/1007.Minimum-Domino-Rotations-For-Equal-Row/domino.png new file mode 100644 index 0000000000000000000000000000000000000000..1060f1754a8e2b032464225c6de91358eff1dfc2 GIT binary patch literal 17968 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 Kl&BIn3jSZs?pk61 literal 0 HcmV?d00001 From f901e3d7de050e304a84ff58befb8f5618ea86f7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Mar 2022 13:14:36 +0800 Subject: [PATCH 0008/1057] Add solution and test-cases for problem 405 --- .../README.md | 25 +++--- .../Solution.go | 83 ++++++++++++++++++- .../Solution_test.go | 17 ++-- 3 files changed, 104 insertions(+), 21 deletions(-) diff --git a/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/README.md b/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/README.md index 0bab0f559..ca1f9c9ea 100644 --- a/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/README.md +++ b/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/README.md @@ -1,28 +1,25 @@ # [405.Convert a Number to Hexadecimal][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `num`, return a string representing its hexadecimal representation. For negative integers, `two’s complement` method is used. + +All the letters in the answer string should be lowercase characters, and there should not be any leading zeros in the answer except for the zero itself. + +**Note**: You are not allowed to use any built-in library method to directly solve this problem. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 26 +Output: "1a" ``` -## 题意 -> ... +**Example 2** -## 题解 - -### 思路1 -> ... -Convert a Number to Hexadecimal -```go ``` - +Input: num = -1 +Output: "ffffffff" +``` ## 结语 diff --git a/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution.go b/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution.go index d115ccf5e..6d9e23987 100644 --- a/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution.go +++ b/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution.go @@ -1,5 +1,84 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int) string { + n2b := map[int]byte{ + 0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', + 8: '8', 9: '9', 10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', 15: 'f', + } + if num >= 0 { + bs := make([]byte, 0) + for num >= 16 { + mod := num % 16 + num /= 16 + bs = append(bs, n2b[mod]) + } + bs = append(bs, n2b[num]) + for s, e := 0, len(bs)-1; s < e; s, e = s+1, e-1 { + bs[s], bs[e] = bs[e], bs[s] + } + return string(bs) + } + num = -num + bs := make([]uint8, 32) + bs[0] = 1 + end := 31 + for num >= 2 { + mod := num % 2 + bs[end] = uint8(mod) + num /= 2 + end-- + } + bs[end] = uint8(num) + cf := uint8(1) + for idx := 31; idx > 0; idx-- { + bs[idx] ^= uint8(1) + bs[idx] += cf + cf = bs[idx] / 2 + bs[idx] %= 2 + } + power := [4]uint8{1, 2, 4, 8} + result := make([]byte, 8) + bsIdx, idx := 7, 31 + for idx > 0 { + base := uint8(0) + for i := 0; i < 4; i++ { + base += bs[idx-i] * power[i] + } + result[bsIdx] = n2b[int(base)] + bsIdx-- + idx -= 4 + } + // ^=1 + return string(result) +} + +func Solution2(num int) string { + maxInt := 2147483647 // 2**31-1 + minInt := -maxInt - 1 // -2**31 + compare := 4294967295 // 2**32-1 + if num > maxInt || num < minInt { + return "" + } + if num == 0 { + return "0" + } + if num < 0 { + num = num + 1 + compare + } + numMap := map[int]byte{ + 0: '0', 1: '1', 2: '2', 3: '3', 4: '4', + 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', + 10: 'a', 11: 'b', 12: 'c', 13: 'd', 14: 'e', + 15: 'f', + } + res := make([]byte, 0) + for num > 0 { + remainer := num % 16 + num = num / 16 + res = append(res, numMap[remainer]) + } + for s, e := 0, len(res)-1; s < e; s, e = s+1, e-1 { + res[s], res[e] = res[e], res[s] + } + return string(res) } diff --git a/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution_test.go b/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution_test.go index 14ff50eb4..3c6825a21 100644 --- a/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution_test.go +++ b/leetcode/401-500/0405.Convert-a-Number-to-Hexadecimal/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 26, "1a"}, + {"TestCase2", -1, "ffffffff"}, + {"TestCase3", -10, "fffffff6"}, + {"TestCase4", -23478, "ffffa44a"}, + {"TestCase5", -2, "fffffffe"}, } // 开始测试 @@ -26,6 +28,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } From fe90675788d8ed4ae4d64f23049cbfa4e68cb5ce Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 22 Mar 2022 00:48:12 +0800 Subject: [PATCH 0009/1057] Add solution and test-cases for problem 763 --- .../701-800/0763.Partition-Labels/README.md | 29 ++++++++++--------- .../701-800/0763.Partition-Labels/Solution.go | 22 ++++++++++++-- .../0763.Partition-Labels/Solution_test.go | 11 +++---- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/leetcode/701-800/0763.Partition-Labels/README.md b/leetcode/701-800/0763.Partition-Labels/README.md index f8cc4bff9..a6102c850 100644 --- a/leetcode/701-800/0763.Partition-Labels/README.md +++ b/leetcode/701-800/0763.Partition-Labels/README.md @@ -1,28 +1,29 @@ # [763.Partition 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 +You are given a string `s`. We want to partition the string into as many parts as possible so that each letter appears in at most one part. + +Note that the partition is done so that after concatenating all the parts in order, the resultant string should be `s`. + +Return a list of integers representing the size of these parts. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ababcbacadefegdehijhklij" +Output: [9,7,8] +Explanation: +The partition is "ababcbaca", "defegde", "hijhklij". +This is a partition so that each letter appears in at most one part. +A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits s into less parts. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Partition Labels -```go ``` - +Input: s = "eccbbbbdec" +Output: [10] +``` ## 结语 diff --git a/leetcode/701-800/0763.Partition-Labels/Solution.go b/leetcode/701-800/0763.Partition-Labels/Solution.go index d115ccf5e..a02816721 100644 --- a/leetcode/701-800/0763.Partition-Labels/Solution.go +++ b/leetcode/701-800/0763.Partition-Labels/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) []int { + partLength := make([]int, 0) + charsLastIndex := make([]int, 26) + for idx, b := range s { + charsLastIndex[b-'a'] = idx + } + + lastIdx, length := -1, 0 + for idx := 0; idx < len(s); idx++ { + if charsLastIndex[s[idx]-'a'] > lastIdx { + lastIdx = charsLastIndex[s[idx]-'a'] + } + if idx == lastIdx { + partLength = append(partLength, length+1) + length = 0 + continue + } + length++ + } + return partLength } diff --git a/leetcode/701-800/0763.Partition-Labels/Solution_test.go b/leetcode/701-800/0763.Partition-Labels/Solution_test.go index 14ff50eb4..1c6e392ab 100644 --- a/leetcode/701-800/0763.Partition-Labels/Solution_test.go +++ b/leetcode/701-800/0763.Partition-Labels/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", "ababcbacadefegdehijhklij", []int{9, 7, 8}}, + {"TestCase2", "eccbbbbdec", []int{10}}, + {"TestCase3", "abc", []int{1, 1, 1}}, + {"TestCase4", "aabbadec", []int{5, 1, 1, 1}}, } // 开始测试 From aa898d881bd0314acb85a262d7cfc49e39bf0241 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 26 Mar 2022 16:10:53 +0800 Subject: [PATCH 0010/1057] Add solution and test-cases for problem 172 --- .../0172.Factorial-Trailing-Zeroes/README.md | 34 +++++++++++++++++++ .../Solution.go | 22 ++++++++++-- .../Solution_test.go | 17 +++++++--- 3 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 leetcode/101-200/0172.Factorial-Trailing-Zeroes/README.md diff --git a/leetcode/101-200/0172.Factorial-Trailing-Zeroes/README.md b/leetcode/101-200/0172.Factorial-Trailing-Zeroes/README.md new file mode 100644 index 000000000..3a06cbf6d --- /dev/null +++ b/leetcode/101-200/0172.Factorial-Trailing-Zeroes/README.md @@ -0,0 +1,34 @@ +# [172. Factorial Trailing Zeroes][title] + +## Description +Given an integer `n`, return the number of trailing zeroes in `n!`. + +Note that `n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1`. + +**Example 1:** +``` +Input: n = 3 +Output: 0 +Explanation: 3! = 6, no trailing zero. +``` + +**Example 2:** +``` +Input: n = 5 +Output: 1 +Explanation: 5! = 120, one trailing zero. +``` + +**Example 3:** +``` +Input: n = 0 +Output: 0 +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/factorial-trailing-zeroes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution.go b/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution.go index d115ccf5e..5ff169642 100644 --- a/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution.go +++ b/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + count := 0 + countOfFive := make(map[int]int) + for step := 5; step <= n; step += 5 { + countOfFive[step] = 1 + if c, ok := countOfFive[step/5]; ok { + countOfFive[step] += c + } + count += countOfFive[step] + } + return count +} + +func Solution2(n int) int { + res := 0 + for n > 0 { + res += n / 5 + n /= 5 + } + return res } diff --git a/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution_test.go b/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution_test.go index 14ff50eb4..32ff63be5 100644 --- a/leetcode/101-200/0172.Factorial-Trailing-Zeroes/Solution_test.go +++ b/leetcode/101-200/0172.Factorial-Trailing-Zeroes/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", 3, 0}, + {"TestCase2", 5, 1}, + {"TestCase3", 0, 0}, + {"TestCase4", 150, 37}, } // 开始测试 @@ -26,6 +27,12 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } From 3491c1aa5d0f0726f74e4d9722c2699bdebe812f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Apr 2022 19:34:14 +0800 Subject: [PATCH 0011/1057] Add solution and test-cases for problem 1018 --- .../Solution.go | 24 +++++++++++++++++++ .../Solution_test.go | 5 ++++ 2 files changed, 29 insertions(+) diff --git a/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution.go b/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution.go index 5551d8b17..7fdc0adef 100644 --- a/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution.go +++ b/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution.go @@ -20,3 +20,27 @@ func Solution(A []int) []bool { } return ans } + +func Solution2(nums []int) []bool { + base := make([]int, len(nums)) + base[0] = nums[0] + result := make([]bool, len(nums)) + result[0] = nums[0] == 0 + for idx := 1; idx < len(nums); idx++ { + base[idx] = nums[idx] + nums[idx-1]*2 + if idx >= 4 { + base[idx] += base[idx-4] + } + cmp := base[idx] + if idx >= 2 { + cmp -= base[idx-2] + if cmp < 0 { + cmp = -cmp + } + } + if cmp%5 == 0 { + result[idx] = true + } + } + return result +} diff --git a/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution_test.go b/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution_test.go index 8070269e9..01d772935 100644 --- a/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution_test.go +++ b/leetcode/1001-1100/1018.Binary-Prefix-Divisible-By-5/Solution_test.go @@ -29,6 +29,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } From bc5e712d19e017be5aec22f0baa61df36b26f640 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Apr 2022 22:29:46 +0800 Subject: [PATCH 0012/1057] Add solution and test-cases for problem 682 --- leetcode/601-700/0682.Baseball-Game/README.md | 53 ++++++++++++++----- .../601-700/0682.Baseball-Game/Solution.go | 31 ++++++++++- .../0682.Baseball-Game/Solution_test.go | 10 ++-- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/leetcode/601-700/0682.Baseball-Game/README.md b/leetcode/601-700/0682.Baseball-Game/README.md index 00e44634d..e4f84956c 100644 --- a/leetcode/601-700/0682.Baseball-Game/README.md +++ b/leetcode/601-700/0682.Baseball-Game/README.md @@ -1,28 +1,55 @@ # [682.Baseball Game][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are keeping score for a baseball game with strange rules. The game consists of several rounds, where the scores of past rounds may affect future rounds' scores. + +At the beginning of the game, you start with an empty record. You are given a list of strings `ops`, where `ops[i]` is the ith operation you must apply to the record and is one of the following: + +1. An integer `x` - Record a new score of `x`. +2. `"+"` - Record a new score that is the sum of the previous two scores. It is guaranteed there will always be two previous scores. +3. `"D"` - Record a new score that is double the previous score. It is guaranteed there will always be a previous score. +4. `"C"` - Invalidate the previous score, removing it from the record. It is guaranteed there will always be a previous score. + +Return the sum of all the scores on the record. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: ops = ["5","2","C","D","+"] +Output: 30 +Explanation: +"5" - Add 5 to the record, record is now [5]. +"2" - Add 2 to the record, record is now [5, 2]. +"C" - Invalidate and remove the previous score, record is now [5]. +"D" - Add 2 * 5 = 10 to the record, record is now [5, 10]. +"+" - Add 5 + 10 = 15 to the record, record is now [5, 10, 15]. +The total sum is 5 + 10 + 15 = 30. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Baseball Game -```go ``` +Input: ops = ["5","-2","4","C","D","9","+","+"] +Output: 27 +Explanation: +"5" - Add 5 to the record, record is now [5]. +"-2" - Add -2 to the record, record is now [5, -2]. +"4" - Add 4 to the record, record is now [5, -2, 4]. +"C" - Invalidate and remove the previous score, record is now [5, -2]. +"D" - Add 2 * -2 = -4 to the record, record is now [5, -2, -4]. +"9" - Add 9 to the record, record is now [5, -2, -4, 9]. +"+" - Add -4 + 9 = 5 to the record, record is now [5, -2, -4, 9, 5]. +"+" - Add 9 + 5 = 14 to the record, record is now [5, -2, -4, 9, 5, 14]. +The total sum is 5 + -2 + -4 + 9 + 5 + 14 = 27. +``` + +**Example 3:** +``` +Input: ops = ["1"] +Output: 1 +``` ## 结语 diff --git a/leetcode/601-700/0682.Baseball-Game/Solution.go b/leetcode/601-700/0682.Baseball-Game/Solution.go index d115ccf5e..286fa593b 100644 --- a/leetcode/601-700/0682.Baseball-Game/Solution.go +++ b/leetcode/601-700/0682.Baseball-Game/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +import "strconv" + +func Solution(ops []string) int { + ans := 0 + + points := make([]int, len(ops)) + idx := 0 + for i := 0; i < len(ops); i, idx = i+1, idx+1 { + op := ops[i] + if op == "C" { + idx -= 2 + continue + } + if op == "D" { + points[idx] = points[idx-1] * 2 + continue + } + + if op == "+" { + points[idx] = points[idx-1] + points[idx-2] + continue + } + _t, _ := strconv.Atoi(op) + points[idx] = _t + } + for i := 0; i < idx; i++ { + ans += points[i] + } + return ans } diff --git a/leetcode/601-700/0682.Baseball-Game/Solution_test.go b/leetcode/601-700/0682.Baseball-Game/Solution_test.go index 14ff50eb4..2d5520ad3 100644 --- a/leetcode/601-700/0682.Baseball-Game/Solution_test.go +++ b/leetcode/601-700/0682.Baseball-Game/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{"5", "2", "C", "D", "+"}, 30}, + {"TestCase2", []string{"5", "-2", "4", "C", "D", "9", "+", "+"}, 27}, + {"TestCase3", []string{"1"}, 1}, } // 开始测试 From a5038d9dfc702ff65fee061fd2c9219f7b153126 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 13 Apr 2022 23:15:51 +0800 Subject: [PATCH 0013/1057] add 1801-1900 problems, fix path error --- cmd/leetcode/makedir.go | 4 +- .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1813.Sentence-Similarity-III/README.md | 32 +++++++++++++++ .../1813.Sentence-Similarity-III/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1816.Truncate-Sentence/README.md | 32 +++++++++++++++ .../1816.Truncate-Sentence/Solution.go | 5 +++ .../1816.Truncate-Sentence/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 +++++++++++++++++++ .../1824.Minimum-Sideway-Jumps/README.md | 32 +++++++++++++++ .../1824.Minimum-Sideway-Jumps/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1825.Finding-MK-Average/README.md | 32 +++++++++++++++ .../1825.Finding-MK-Average/Solution.go | 5 +++ .../1825.Finding-MK-Average/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1829.Maximum-XOR-for-Each-Query/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1833.Maximum-Ice-Cream-Bars/README.md | 32 +++++++++++++++ .../1833.Maximum-Ice-Cream-Bars/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1834.Single-Threaded-CPU/README.md | 32 +++++++++++++++ .../1834.Single-Threaded-CPU/Solution.go | 5 +++ .../1834.Single-Threaded-CPU/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1837.Sum-of-Digits-in-Base-K/README.md | 32 +++++++++++++++ .../1837.Sum-of-Digits-in-Base-K/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1840.Maximum-Building-Height/README.md | 32 +++++++++++++++ .../1840.Maximum-Building-Height/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1845.Seat-Reservation-Manager/README.md | 32 +++++++++++++++ .../1845.Seat-Reservation-Manager/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1801-1900/1847.Closest-Room/README.md | 32 +++++++++++++++ .../1801-1900/1847.Closest-Room/Solution.go | 5 +++ .../1847.Closest-Room/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 +++++++++++++++++++ .../1854.Maximum-Population-Year/README.md | 32 +++++++++++++++ .../1854.Maximum-Population-Year/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1859.Sorting-the-Sentence/README.md | 32 +++++++++++++++ .../1859.Sorting-the-Sentence/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1860.Incremental-Memory-Leak/README.md | 32 +++++++++++++++ .../1860.Incremental-Memory-Leak/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1801-1900/1861.Rotating-the-Box/README.md | 32 +++++++++++++++ .../1861.Rotating-the-Box/Solution.go | 5 +++ .../1861.Rotating-the-Box/Solution_test.go | 39 +++++++++++++++++++ .../1862.Sum-of-Floored-Pairs/README.md | 32 +++++++++++++++ .../1862.Sum-of-Floored-Pairs/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1801-1900/1871.Jump-Game-VII/README.md | 32 +++++++++++++++ .../1801-1900/1871.Jump-Game-VII/Solution.go | 5 +++ .../1871.Jump-Game-VII/Solution_test.go | 39 +++++++++++++++++++ .../1801-1900/1872.Stone-Game-VIII/README.md | 32 +++++++++++++++ .../1872.Stone-Game-VIII/Solution.go | 5 +++ .../1872.Stone-Game-VIII/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 +++++++++++++++++++ .../1895.Largest-Magic-Square/README.md | 32 +++++++++++++++ .../1895.Largest-Magic-Square/Solution.go | 5 +++ .../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 +++++++++++++++++++ 229 files changed, 5778 insertions(+), 2 deletions(-) create mode 100755 leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/README.md create mode 100644 leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution.go create mode 100644 leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution_test.go create mode 100755 leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/README.md create mode 100644 leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution.go create mode 100644 leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution_test.go create mode 100755 leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/README.md create mode 100644 leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution.go create mode 100644 leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution_test.go create mode 100755 leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md create mode 100644 leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go create mode 100644 leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go create mode 100755 leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/README.md create mode 100644 leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution.go create mode 100644 leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution_test.go create mode 100755 leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md create mode 100644 leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go create mode 100644 leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go create mode 100755 leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/README.md create mode 100644 leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution.go create mode 100644 leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution_test.go create mode 100755 leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md create mode 100644 leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go create mode 100644 leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go create mode 100755 leetcode/1801-1900/1813.Sentence-Similarity-III/README.md create mode 100644 leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go create mode 100644 leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go create mode 100755 leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md create mode 100644 leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution.go create mode 100644 leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution_test.go create mode 100755 leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/README.md create mode 100644 leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution.go create mode 100644 leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution_test.go create mode 100755 leetcode/1801-1900/1816.Truncate-Sentence/README.md create mode 100644 leetcode/1801-1900/1816.Truncate-Sentence/Solution.go create mode 100644 leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go create mode 100755 leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md create mode 100644 leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go create mode 100644 leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go create mode 100755 leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md create mode 100644 leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go create mode 100644 leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution_test.go create mode 100755 leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/README.md create mode 100644 leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution.go create mode 100644 leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution_test.go create mode 100755 leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md create mode 100644 leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go create mode 100644 leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go create mode 100755 leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/README.md create mode 100644 leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution.go create mode 100644 leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution_test.go create mode 100755 leetcode/1801-1900/1824.Minimum-Sideway-Jumps/README.md create mode 100644 leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution.go create mode 100644 leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution_test.go create mode 100755 leetcode/1801-1900/1825.Finding-MK-Average/README.md create mode 100644 leetcode/1801-1900/1825.Finding-MK-Average/Solution.go create mode 100644 leetcode/1801-1900/1825.Finding-MK-Average/Solution_test.go create mode 100755 leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/README.md create mode 100644 leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution.go create mode 100644 leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution_test.go create mode 100755 leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md create mode 100644 leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go create mode 100644 leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go create mode 100755 leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/README.md create mode 100644 leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution.go create mode 100644 leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution_test.go create mode 100755 leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/README.md create mode 100644 leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution.go create mode 100644 leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution_test.go create mode 100755 leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/README.md create mode 100644 leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution.go create mode 100644 leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution_test.go create mode 100755 leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md create mode 100644 leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go create mode 100644 leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go create mode 100755 leetcode/1801-1900/1834.Single-Threaded-CPU/README.md create mode 100644 leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go create mode 100644 leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go create mode 100755 leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md create mode 100644 leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go create mode 100644 leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go create mode 100755 leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md create mode 100644 leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go create mode 100644 leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go create mode 100755 leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md create mode 100644 leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution.go create mode 100644 leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution_test.go create mode 100755 leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md create mode 100644 leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go create mode 100644 leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go create mode 100755 leetcode/1801-1900/1840.Maximum-Building-Height/README.md create mode 100644 leetcode/1801-1900/1840.Maximum-Building-Height/Solution.go create mode 100644 leetcode/1801-1900/1840.Maximum-Building-Height/Solution_test.go create mode 100755 leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/README.md create mode 100644 leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution.go create mode 100644 leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution_test.go create mode 100755 leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md create mode 100644 leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go create mode 100644 leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go create mode 100755 leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md create mode 100644 leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution.go create mode 100644 leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution_test.go create mode 100755 leetcode/1801-1900/1847.Closest-Room/README.md create mode 100644 leetcode/1801-1900/1847.Closest-Room/Solution.go create mode 100644 leetcode/1801-1900/1847.Closest-Room/Solution_test.go create mode 100755 leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/README.md create mode 100644 leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution.go create mode 100644 leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution_test.go create mode 100755 leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/README.md create mode 100644 leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution.go create mode 100644 leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution_test.go create mode 100755 leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/README.md create mode 100644 leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution.go create mode 100644 leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution_test.go create mode 100755 leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/README.md create mode 100644 leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution.go create mode 100644 leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution_test.go create mode 100755 leetcode/1801-1900/1854.Maximum-Population-Year/README.md create mode 100644 leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go create mode 100644 leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go create mode 100755 leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/README.md create mode 100644 leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution.go create mode 100644 leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution_test.go create mode 100755 leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md create mode 100644 leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go create mode 100644 leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution_test.go create mode 100755 leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/README.md create mode 100644 leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution.go create mode 100644 leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution_test.go create mode 100755 leetcode/1801-1900/1859.Sorting-the-Sentence/README.md create mode 100644 leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go create mode 100644 leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go create mode 100755 leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md create mode 100644 leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go create mode 100644 leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go create mode 100755 leetcode/1801-1900/1861.Rotating-the-Box/README.md create mode 100644 leetcode/1801-1900/1861.Rotating-the-Box/Solution.go create mode 100644 leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go create mode 100755 leetcode/1801-1900/1862.Sum-of-Floored-Pairs/README.md create mode 100644 leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution.go create mode 100644 leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution_test.go create mode 100755 leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md create mode 100644 leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go create mode 100644 leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go create mode 100755 leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/README.md create mode 100644 leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution.go create mode 100644 leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution_test.go create mode 100755 leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md create mode 100644 leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go create mode 100644 leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go create mode 100755 leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/README.md create mode 100644 leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution.go create mode 100644 leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution_test.go create mode 100755 leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/README.md create mode 100644 leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution.go create mode 100644 leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution_test.go create mode 100755 leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md create mode 100644 leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go create mode 100644 leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go create mode 100755 leetcode/1801-1900/1871.Jump-Game-VII/README.md create mode 100644 leetcode/1801-1900/1871.Jump-Game-VII/Solution.go create mode 100644 leetcode/1801-1900/1871.Jump-Game-VII/Solution_test.go create mode 100755 leetcode/1801-1900/1872.Stone-Game-VIII/README.md create mode 100644 leetcode/1801-1900/1872.Stone-Game-VIII/Solution.go create mode 100644 leetcode/1801-1900/1872.Stone-Game-VIII/Solution_test.go create mode 100755 leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/README.md create mode 100644 leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution.go create mode 100644 leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution_test.go create mode 100755 leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md create mode 100644 leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go create mode 100644 leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go create mode 100755 leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/README.md create mode 100644 leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution.go create mode 100644 leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution_test.go create mode 100755 leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/README.md create mode 100644 leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution.go create mode 100644 leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution_test.go create mode 100755 leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/README.md create mode 100644 leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution.go create mode 100644 leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution_test.go create mode 100755 leetcode/1801-1900/1881.Maximum-Value-after-Insertion/README.md create mode 100644 leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution.go create mode 100644 leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution_test.go create mode 100755 leetcode/1801-1900/1882.Process-Tasks-Using-Servers/README.md create mode 100644 leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution.go create mode 100644 leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution_test.go create mode 100755 leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/README.md create mode 100644 leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution.go create mode 100644 leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution_test.go create mode 100755 leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/README.md create mode 100644 leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution.go create mode 100644 leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution_test.go create mode 100755 leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/README.md create mode 100644 leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution.go create mode 100644 leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution_test.go create mode 100755 leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/README.md create mode 100644 leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution.go create mode 100644 leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution_test.go create mode 100755 leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/README.md create mode 100644 leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution.go create mode 100644 leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution_test.go create mode 100755 leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/README.md create mode 100644 leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution.go create mode 100644 leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution_test.go create mode 100755 leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/README.md create mode 100644 leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution.go create mode 100644 leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution_test.go create mode 100755 leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md create mode 100644 leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go create mode 100644 leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go create mode 100755 leetcode/1801-1900/1895.Largest-Magic-Square/README.md create mode 100644 leetcode/1801-1900/1895.Largest-Magic-Square/Solution.go create mode 100644 leetcode/1801-1900/1895.Largest-Magic-Square/Solution_test.go create mode 100755 leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/README.md create mode 100644 leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution.go create mode 100644 leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution_test.go create mode 100755 leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/README.md create mode 100644 leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution.go create mode 100644 leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution_test.go create mode 100755 leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/README.md create mode 100644 leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution.go create mode 100644 leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution_test.go create mode 100755 leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/README.md create mode 100644 leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution.go create mode 100644 leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution_test.go create mode 100755 leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/README.md create mode 100644 leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution.go create mode 100644 leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution_test.go diff --git a/cmd/leetcode/makedir.go b/cmd/leetcode/makedir.go index de17f3a43..56c249cbb 100644 --- a/cmd/leetcode/makedir.go +++ b/cmd/leetcode/makedir.go @@ -9,8 +9,8 @@ import ( const ( SOLUTIONS_PATH = "leetcode/" - SOURCE_SOLUTION_FILE_PATH = "cmd/template/solution/solution.go" - SOURCE_SOLUTION_TEST_FILE_PATH = "cmd/template/solution/solution_test.go" + SOURCE_SOLUTION_FILE_PATH = "cmd/template/solution/Solution.go" + SOURCE_SOLUTION_TEST_FILE_PATH = "cmd/template/solution/Solution_test.go" SOURCE_SOLUTION_README_FILE_PATH = "cmd/template/solution/README.md" ) diff --git a/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/README.md b/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/README.md new file mode 100755 index 000000000..2a325be96 --- /dev/null +++ b/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/README.md @@ -0,0 +1,32 @@ +# [1801.Number of Orders in the Backlog][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Orders in the Backlog +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-orders-in-the-backlog/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution.go b/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution_test.go b/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1801.Number-of-Orders-in-the-Backlog/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/README.md b/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/README.md new file mode 100755 index 000000000..3f2f991fb --- /dev/null +++ b/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/README.md @@ -0,0 +1,32 @@ +# [1802.Maximum Value at a Given Index in a Bounded Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Value at a Given Index in a Bounded Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-at-a-given-index-in-a-bounded-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution.go b/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution_test.go b/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1802.Maximum-Value-at-a-Given-Index-in-a-Bounded-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/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/README.md b/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/README.md new file mode 100755 index 000000000..c28fe2170 --- /dev/null +++ b/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/README.md @@ -0,0 +1,32 @@ +# [1803.Count Pairs With XOR in a Range][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Pairs With XOR in a Range +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-pairs-with-xor-in-a-range/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution.go b/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution_test.go b/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1803.Count-Pairs-With-XOR-in-a-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md new file mode 100755 index 000000000..f82e2bcf0 --- /dev/null +++ b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/README.md @@ -0,0 +1,32 @@ +# [1805.Number of Different Integers in a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Different Integers in a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-different-integers-in-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1805.Number-of-Different-Integers-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/README.md b/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/README.md new file mode 100755 index 000000000..d847eb52f --- /dev/null +++ b/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/README.md @@ -0,0 +1,32 @@ +# [1806.Minimum Number of Operations to Reinitialize a Permutation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Reinitialize a Permutation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-reinitialize-a-permutation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution.go b/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution_test.go b/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1806.Minimum-Number-of-Operations-to-Reinitialize-a-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md new file mode 100755 index 000000000..a85c563e0 --- /dev/null +++ b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/README.md @@ -0,0 +1,32 @@ +# [1807.Evaluate the Bracket Pairs of a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Evaluate the Bracket Pairs of a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/evaluate-the-bracket-pairs-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1807.Evaluate-the-Bracket-Pairs-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/README.md b/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/README.md new file mode 100755 index 000000000..4b6f82caf --- /dev/null +++ b/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/README.md @@ -0,0 +1,32 @@ +# [1808.Maximize Number of Nice Divisors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Number of Nice Divisors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-number-of-nice-divisors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution.go b/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution_test.go b/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1808.Maximize-Number-of-Nice-Divisors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md new file mode 100755 index 000000000..6d75014f2 --- /dev/null +++ b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md @@ -0,0 +1,32 @@ +# [1812.Determine Color of a Chessboard Square][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Determine Color of a Chessboard Square +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/determine-color-of-a-chessboard-square/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md b/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md new file mode 100755 index 000000000..a9bf61a12 --- /dev/null +++ b/leetcode/1801-1900/1813.Sentence-Similarity-III/README.md @@ -0,0 +1,32 @@ +# [1813.Sentence Similarity III][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sentence Similarity III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sentence-similarity-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1813.Sentence-Similarity-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md new file mode 100755 index 000000000..9ef197ae3 --- /dev/null +++ b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Nice Pairs in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-nice-pairs-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1814.Count-Nice-Pairs-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/README.md b/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/README.md new file mode 100755 index 000000000..bca73b23c --- /dev/null +++ b/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/README.md @@ -0,0 +1,32 @@ +# [1815.Maximum Number of Groups Getting Fresh Donuts][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Groups Getting Fresh Donuts +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-groups-getting-fresh-donuts/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution.go b/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution_test.go b/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1815.Maximum-Number-of-Groups-Getting-Fresh-Donuts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1816.Truncate-Sentence/README.md b/leetcode/1801-1900/1816.Truncate-Sentence/README.md new file mode 100755 index 000000000..29cd24ec7 --- /dev/null +++ b/leetcode/1801-1900/1816.Truncate-Sentence/README.md @@ -0,0 +1,32 @@ +# [1816.Truncate Sentence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Truncate Sentence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/truncate-sentence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go b/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go b/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md new file mode 100755 index 000000000..6cf46d386 --- /dev/null +++ b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/README.md @@ -0,0 +1,32 @@ +# [1817.Finding the Users Active Minutes][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Finding the Users Active Minutes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/finding-the-users-active-minutes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1817.Finding-the-Users-Active-Minutes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md new file mode 100755 index 000000000..c3b35cce0 --- /dev/null +++ b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Absolute Sum Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-absolute-sum-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1818.Minimum-Absolute-Sum-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/README.md b/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/README.md new file mode 100755 index 000000000..7f2c0dccd --- /dev/null +++ b/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/README.md @@ -0,0 +1,32 @@ +# [1819.Number of Different Subsequences GCDs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Different Subsequences GCDs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-different-subsequences-gcds/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution.go b/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution_test.go b/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1819.Number-of-Different-Subsequences-GCDs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md new file mode 100755 index 000000000..c430c3bf3 --- /dev/null +++ b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md @@ -0,0 +1,32 @@ +# [1822.Sign of the Product 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 +> ... +Sign of the Product of an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sign-of-the-product-of-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1822.Sign-of-the-Product-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/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/README.md b/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/README.md new file mode 100755 index 000000000..250578d05 --- /dev/null +++ b/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/README.md @@ -0,0 +1,32 @@ +# [1823.Find the Winner of the Circular Game][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Winner of the Circular Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-winner-of-the-circular-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution.go b/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution_test.go b/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1823.Find-the-Winner-of-the-Circular-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/1801-1900/1824.Minimum-Sideway-Jumps/README.md b/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/README.md new file mode 100755 index 000000000..27d44bf79 --- /dev/null +++ b/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/README.md @@ -0,0 +1,32 @@ +# [1824.Minimum Sideway Jumps][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Sideway Jumps +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-sideway-jumps/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution.go b/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution_test.go b/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1824.Minimum-Sideway-Jumps/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1825.Finding-MK-Average/README.md b/leetcode/1801-1900/1825.Finding-MK-Average/README.md new file mode 100755 index 000000000..de6ac2022 --- /dev/null +++ b/leetcode/1801-1900/1825.Finding-MK-Average/README.md @@ -0,0 +1,32 @@ +# [1825.Finding MK Average][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Finding MK Average +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/finding-mk-average/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1825.Finding-MK-Average/Solution.go b/leetcode/1801-1900/1825.Finding-MK-Average/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1825.Finding-MK-Average/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1825.Finding-MK-Average/Solution_test.go b/leetcode/1801-1900/1825.Finding-MK-Average/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1825.Finding-MK-Average/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/README.md b/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/README.md new file mode 100755 index 000000000..a778d64ec --- /dev/null +++ b/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/README.md @@ -0,0 +1,32 @@ +# [1827.Minimum Operations to Make the Array Increasing][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make the Array Increasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-the-array-increasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution.go b/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution_test.go b/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1827.Minimum-Operations-to-Make-the-Array-Increasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md new file mode 100755 index 000000000..20e4df9bd --- /dev/null +++ b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/README.md @@ -0,0 +1,32 @@ +# [1828.Queries on Number of Points Inside a Circle][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Queries on Number of Points Inside a Circle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/queries-on-number-of-points-inside-a-circle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1828.Queries-on-Number-of-Points-Inside-a-Circle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..e5d37500c --- /dev/null +++ b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum XOR for Each Query +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-xor-for-each-query/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1829.Maximum-XOR-for-Each-Query/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/README.md b/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/README.md new file mode 100755 index 000000000..3a04e921e --- /dev/null +++ b/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/README.md @@ -0,0 +1,32 @@ +# [1830.Minimum Number of Operations to Make String Sorted][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Make String Sorted +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-string-sorted/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution.go b/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution_test.go b/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1830.Minimum-Number-of-Operations-to-Make-String-Sorted/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/README.md b/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/README.md new file mode 100755 index 000000000..fbd489485 --- /dev/null +++ b/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/README.md @@ -0,0 +1,32 @@ +# [1832.Check if the Sentence Is Pangram][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if the Sentence Is Pangram +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-the-sentence-is-pangram/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution.go b/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution_test.go b/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1832.Check-if-the-Sentence-Is-Pangram/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md new file mode 100755 index 000000000..dc244df9c --- /dev/null +++ b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md @@ -0,0 +1,32 @@ +# [1833.Maximum Ice Cream Bars][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Ice Cream Bars +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-ice-cream-bars/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md b/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md new file mode 100755 index 000000000..fa5b462f9 --- /dev/null +++ b/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md @@ -0,0 +1,32 @@ +# [1834.Single-Threaded CPU][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Single-Threaded CPU +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/single-threaded-cpu/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md new file mode 100755 index 000000000..4b3e31ca3 --- /dev/null +++ b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/README.md @@ -0,0 +1,32 @@ +# [1835.Find XOR Sum of All Pairs Bitwise AND][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find XOR Sum of All Pairs Bitwise AND +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-xor-sum-of-all-pairs-bitwise-and/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1835.Find-XOR-Sum-of-All-Pairs-Bitwise-AND/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md new file mode 100755 index 000000000..cea028f27 --- /dev/null +++ b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md @@ -0,0 +1,32 @@ +# [1837.Sum of Digits in Base 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 +> ... +Sum of Digits in Base K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-digits-in-base-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-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/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md new file mode 100755 index 000000000..ff4cd8471 --- /dev/null +++ b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Frequency of the Most Frequent Element +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/frequency-of-the-most-frequent-element/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1838.Frequency-of-the-Most-Frequent-Element/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md new file mode 100755 index 000000000..0795ff28c --- /dev/null +++ b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/README.md @@ -0,0 +1,32 @@ +# [1839.Longest Substring Of All Vowels in Order][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Substring Of All Vowels in Order +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-substring-of-all-vowels-in-order/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1839.Longest-Substring-Of-All-Vowels-in-Order/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1840.Maximum-Building-Height/README.md b/leetcode/1801-1900/1840.Maximum-Building-Height/README.md new file mode 100755 index 000000000..579f5c389 --- /dev/null +++ b/leetcode/1801-1900/1840.Maximum-Building-Height/README.md @@ -0,0 +1,32 @@ +# [1840.Maximum Building Height][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Building Height +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-building-height/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1840.Maximum-Building-Height/Solution.go b/leetcode/1801-1900/1840.Maximum-Building-Height/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1840.Maximum-Building-Height/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1840.Maximum-Building-Height/Solution_test.go b/leetcode/1801-1900/1840.Maximum-Building-Height/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1840.Maximum-Building-Height/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/README.md b/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/README.md new file mode 100755 index 000000000..32a2563e2 --- /dev/null +++ b/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/README.md @@ -0,0 +1,32 @@ +# [1844.Replace All Digits with 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 +> ... +Replace All Digits with Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/replace-all-digits-with-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution.go b/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution_test.go b/leetcode/1801-1900/1844.Replace-All-Digits-with-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1844.Replace-All-Digits-with-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/1801-1900/1845.Seat-Reservation-Manager/README.md b/leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md new file mode 100755 index 000000000..5c23f512e --- /dev/null +++ b/leetcode/1801-1900/1845.Seat-Reservation-Manager/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Seat Reservation Manager +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/seat-reservation-manager/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1845.Seat-Reservation-Manager/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md new file mode 100755 index 000000000..76dd78e3b --- /dev/null +++ b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Element After Decreasing and Rearranging +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-element-after-decreasing-and-rearranging/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1846.Maximum-Element-After-Decreasing-and-Rearranging/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1847.Closest-Room/README.md b/leetcode/1801-1900/1847.Closest-Room/README.md new file mode 100755 index 000000000..f94087cac --- /dev/null +++ b/leetcode/1801-1900/1847.Closest-Room/README.md @@ -0,0 +1,32 @@ +# [1847.Closest Room][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Closest Room +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-room/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1847.Closest-Room/Solution.go b/leetcode/1801-1900/1847.Closest-Room/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1847.Closest-Room/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1847.Closest-Room/Solution_test.go b/leetcode/1801-1900/1847.Closest-Room/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1847.Closest-Room/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/README.md b/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/README.md new file mode 100755 index 000000000..077911e0e --- /dev/null +++ b/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/README.md @@ -0,0 +1,32 @@ +# [1848.Minimum Distance to the Target Element][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Distance to the Target Element +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-distance-to-the-target-element/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution.go b/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution_test.go b/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1848.Minimum-Distance-to-the-Target-Element/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/README.md b/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/README.md new file mode 100755 index 000000000..32751fdbc --- /dev/null +++ b/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/README.md @@ -0,0 +1,32 @@ +# [1849.Splitting a String Into Descending Consecutive 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 +> ... +Splitting a String Into Descending Consecutive Values +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/splitting-a-string-into-descending-consecutive-values/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution.go b/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution_test.go b/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-Values/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1849.Splitting-a-String-Into-Descending-Consecutive-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/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/README.md b/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/README.md new file mode 100755 index 000000000..e38d631b6 --- /dev/null +++ b/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/README.md @@ -0,0 +1,32 @@ +# [1850.Minimum Adjacent Swaps to Reach the Kth Smallest 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Adjacent Swaps to Reach the Kth Smallest Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-adjacent-swaps-to-reach-the-kth-smallest-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution.go b/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution_test.go b/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1850.Minimum-Adjacent-Swaps-to-Reach-the-Kth-Smallest-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/README.md b/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/README.md new file mode 100755 index 000000000..28f5a5c88 --- /dev/null +++ b/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/README.md @@ -0,0 +1,32 @@ +# [1851.Minimum Interval to Include 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Interval to Include Each Query +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-interval-to-include-each-query/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution.go b/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution_test.go b/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1851.Minimum-Interval-to-Include-Each-Query/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1854.Maximum-Population-Year/README.md b/leetcode/1801-1900/1854.Maximum-Population-Year/README.md new file mode 100755 index 000000000..36f1c73fb --- /dev/null +++ b/leetcode/1801-1900/1854.Maximum-Population-Year/README.md @@ -0,0 +1,32 @@ +# [1854.Maximum Population Year][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Population Year +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-population-year/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/README.md b/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/README.md new file mode 100755 index 000000000..677f61a3f --- /dev/null +++ b/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/README.md @@ -0,0 +1,32 @@ +# [1855.Maximum Distance Between a Pair of 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 +> ... +Maximum Distance Between a Pair of Values +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-distance-between-a-pair-of-values/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution.go b/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution_test.go b/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-Values/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1855.Maximum-Distance-Between-a-Pair-of-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/1801-1900/1856.Maximum-Subarray-Min-Product/README.md b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md new file mode 100755 index 000000000..10c44683a --- /dev/null +++ b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md @@ -0,0 +1,32 @@ +# [1856.Maximum Subarray Min-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 Subarray Min-Product +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-subarray-min-product/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution_test.go b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1856.Maximum-Subarray-Min-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/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/README.md b/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/README.md new file mode 100755 index 000000000..f72770465 --- /dev/null +++ b/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/README.md @@ -0,0 +1,32 @@ +# [1857.Largest Color Value in a Directed Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Color Value in a Directed Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-color-value-in-a-directed-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution.go b/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution_test.go b/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1857.Largest-Color-Value-in-a-Directed-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md b/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md new file mode 100755 index 000000000..f2e7116a5 --- /dev/null +++ b/leetcode/1801-1900/1859.Sorting-the-Sentence/README.md @@ -0,0 +1,32 @@ +# [1859.Sorting the Sentence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sorting the Sentence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sorting-the-sentence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1859.Sorting-the-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md b/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md new file mode 100755 index 000000000..23e6e0294 --- /dev/null +++ b/leetcode/1801-1900/1860.Incremental-Memory-Leak/README.md @@ -0,0 +1,32 @@ +# [1860.Incremental Memory Leak][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Incremental Memory Leak +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/incremental-memory-leak/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1860.Incremental-Memory-Leak/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/README.md b/leetcode/1801-1900/1861.Rotating-the-Box/README.md new file mode 100755 index 000000000..ea7cee165 --- /dev/null +++ b/leetcode/1801-1900/1861.Rotating-the-Box/README.md @@ -0,0 +1,32 @@ +# [1861.Rotating the Box][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Rotating the Box +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rotating-the-box/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go b/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1861.Rotating-the-Box/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go b/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1861.Rotating-the-Box/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/README.md b/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/README.md new file mode 100755 index 000000000..b294f0fe6 --- /dev/null +++ b/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/README.md @@ -0,0 +1,32 @@ +# [1862.Sum of Floored Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Floored Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-floored-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution.go b/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution_test.go b/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1862.Sum-of-Floored-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md new file mode 100755 index 000000000..9c8a608b9 --- /dev/null +++ b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/README.md @@ -0,0 +1,32 @@ +# [1863.Sum of All Subset XOR Totals][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of All Subset XOR Totals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-all-subset-xor-totals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1863.Sum-of-All-Subset-XOR-Totals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/README.md b/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/README.md new file mode 100755 index 000000000..a54e763e5 --- /dev/null +++ b/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/README.md @@ -0,0 +1,32 @@ +# [1864.Minimum Number of Swaps to Make the Binary String Alternating][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Swaps to Make the Binary String Alternating +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-swaps-to-make-the-binary-string-alternating/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution.go b/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution_test.go b/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1864.Minimum-Number-of-Swaps-to-Make-the-Binary-String-Alternating/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md new file mode 100755 index 000000000..17f3b3006 --- /dev/null +++ b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/README.md @@ -0,0 +1,32 @@ +# [1865.Finding Pairs With a Certain Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Finding Pairs With a Certain Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/finding-pairs-with-a-certain-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1865.Finding-Pairs-With-a-Certain-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/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/README.md b/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/README.md new file mode 100755 index 000000000..f2860dc32 --- /dev/null +++ b/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/README.md @@ -0,0 +1,32 @@ +# [1866.Number of Ways to Rearrange Sticks With K Sticks Visible][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Rearrange Sticks With K Sticks Visible +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-rearrange-sticks-with-k-sticks-visible/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution.go b/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution_test.go b/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1866.Number-of-Ways-to-Rearrange-Sticks-With-K-Sticks-Visible/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/README.md b/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/README.md new file mode 100755 index 000000000..c6b238226 --- /dev/null +++ b/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/README.md @@ -0,0 +1,32 @@ +# [1869.Longer Contiguous Segments of Ones than 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 +> ... +Longer Contiguous Segments of Ones than Zeros +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longer-contiguous-segments-of-ones-than-zeros/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution.go b/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution_test.go b/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-Zeros/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1869.Longer-Contiguous-Segments-of-Ones-than-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/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md new file mode 100755 index 000000000..bc406036b --- /dev/null +++ b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md @@ -0,0 +1,32 @@ +# [1870.Minimum Speed to Arrive on Time][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Speed to Arrive on Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-speed-to-arrive-on-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1871.Jump-Game-VII/README.md b/leetcode/1801-1900/1871.Jump-Game-VII/README.md new file mode 100755 index 000000000..824b5d6ef --- /dev/null +++ b/leetcode/1801-1900/1871.Jump-Game-VII/README.md @@ -0,0 +1,32 @@ +# [1871.Jump Game VII][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Jump Game VII +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/jump-game-vii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1871.Jump-Game-VII/Solution.go b/leetcode/1801-1900/1871.Jump-Game-VII/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1871.Jump-Game-VII/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1871.Jump-Game-VII/Solution_test.go b/leetcode/1801-1900/1871.Jump-Game-VII/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1871.Jump-Game-VII/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1872.Stone-Game-VIII/README.md b/leetcode/1801-1900/1872.Stone-Game-VIII/README.md new file mode 100755 index 000000000..2498ecf15 --- /dev/null +++ b/leetcode/1801-1900/1872.Stone-Game-VIII/README.md @@ -0,0 +1,32 @@ +# [1872.Stone Game VIII][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Game VIII +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-game-viii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1872.Stone-Game-VIII/Solution.go b/leetcode/1801-1900/1872.Stone-Game-VIII/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1872.Stone-Game-VIII/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1872.Stone-Game-VIII/Solution_test.go b/leetcode/1801-1900/1872.Stone-Game-VIII/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1872.Stone-Game-VIII/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/README.md b/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/README.md new file mode 100755 index 000000000..c429bde99 --- /dev/null +++ b/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/README.md @@ -0,0 +1,32 @@ +# [1876.Substrings of Size Three with Distinct Characters][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Substrings of Size Three with Distinct Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/substrings-of-size-three-with-distinct-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution.go b/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution_test.go b/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1876.Substrings-of-Size-Three-with-Distinct-Characters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md new file mode 100755 index 000000000..9a3acedd6 --- /dev/null +++ b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md @@ -0,0 +1,32 @@ +# [1877.Minimize Maximum Pair Sum in Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize Maximum Pair Sum in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-maximum-pair-sum-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/README.md b/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/README.md new file mode 100755 index 000000000..596350e45 --- /dev/null +++ b/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/README.md @@ -0,0 +1,32 @@ +# [1878.Get Biggest Three Rhombus Sums in a Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Get Biggest Three Rhombus Sums in a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/get-biggest-three-rhombus-sums-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution.go b/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution_test.go b/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1878.Get-Biggest-Three-Rhombus-Sums-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/README.md b/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/README.md new file mode 100755 index 000000000..0e67a5dde --- /dev/null +++ b/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/README.md @@ -0,0 +1,32 @@ +# [1879.Minimum XOR Sum of 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 +> ... +Minimum XOR Sum of Two Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-xor-sum-of-two-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution.go b/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution_test.go b/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-Two-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1879.Minimum-XOR-Sum-of-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/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/README.md b/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/README.md new file mode 100755 index 000000000..3f1857ac9 --- /dev/null +++ b/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/README.md @@ -0,0 +1,32 @@ +# [1880.Check if Word Equals Summation of Two 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Word Equals Summation of Two Words +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-word-equals-summation-of-two-words/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution.go b/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution_test.go b/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1880.Check-if-Word-Equals-Summation-of-Two-Words/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/README.md b/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/README.md new file mode 100755 index 000000000..6ca0e306f --- /dev/null +++ b/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/README.md @@ -0,0 +1,32 @@ +# [1881.Maximum Value after Insertion][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Value after Insertion +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-after-insertion/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution.go b/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution_test.go b/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1881.Maximum-Value-after-Insertion/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/README.md b/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/README.md new file mode 100755 index 000000000..bb6183ec0 --- /dev/null +++ b/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/README.md @@ -0,0 +1,32 @@ +# [1882.Process Tasks Using Servers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Process Tasks Using Servers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/process-tasks-using-servers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution.go b/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution_test.go b/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1882.Process-Tasks-Using-Servers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/README.md b/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/README.md new file mode 100755 index 000000000..47d405f33 --- /dev/null +++ b/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/README.md @@ -0,0 +1,32 @@ +# [1883.Minimum Skips to Arrive at Meeting On Time][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Skips to Arrive at Meeting On Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-skips-to-arrive-at-meeting-on-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution.go b/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution_test.go b/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1883.Minimum-Skips-to-Arrive-at-Meeting-On-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/README.md b/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/README.md new file mode 100755 index 000000000..277e38f99 --- /dev/null +++ b/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/README.md @@ -0,0 +1,32 @@ +# [1884.Egg Drop With 2 Eggs and N Floors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Egg Drop With 2 Eggs and N Floors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/egg-drop-with-2-eggs-and-n-floors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution.go b/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution_test.go b/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1884.Egg-Drop-With-2-Eggs-and-N-Floors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/README.md b/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/README.md new file mode 100755 index 000000000..4b8413fd7 --- /dev/null +++ b/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/README.md @@ -0,0 +1,32 @@ +# [1886.Determine Whether Matrix Can Be Obtained By Rotation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Determine Whether Matrix Can Be Obtained By Rotation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/determine-whether-matrix-can-be-obtained-by-rotation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution.go b/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution_test.go b/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1886.Determine-Whether-Matrix-Can-Be-Obtained-By-Rotation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..cda492638 --- /dev/null +++ b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reduction Operations to Make the Array Elements Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reduction-operations-to-make-the-array-elements-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1887.Reduction-Operations-to-Make-the-Array-Elements-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/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/README.md b/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/README.md new file mode 100755 index 000000000..7457380ce --- /dev/null +++ b/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/README.md @@ -0,0 +1,32 @@ +# [1888.Minimum Number of Flips to Make the Binary String Alternating][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Flips to Make the Binary String Alternating +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution.go b/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution_test.go b/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1888.Minimum-Number-of-Flips-to-Make-the-Binary-String-Alternating/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/README.md b/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/README.md new file mode 100755 index 000000000..c840c098a --- /dev/null +++ b/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/README.md @@ -0,0 +1,32 @@ +# [1889.Minimum Space Wasted From Packaging][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Space Wasted From Packaging +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-space-wasted-from-packaging/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution.go b/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution_test.go b/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1889.Minimum-Space-Wasted-From-Packaging/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/README.md b/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/README.md new file mode 100755 index 000000000..dfea0bd0f --- /dev/null +++ b/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/README.md @@ -0,0 +1,32 @@ +# [1893.Check if All the Integers in a Range Are Covered][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 All the Integers in a Range Are Covered +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-all-the-integers-in-a-range-are-covered/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution.go b/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution_test.go b/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1893.Check-if-All-the-Integers-in-a-Range-Are-Covered/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md new file mode 100755 index 000000000..dbec3cfed --- /dev/null +++ b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/README.md @@ -0,0 +1,32 @@ +# [1894.Find the Student that Will Replace the Chalk][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Student that Will Replace the Chalk +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-student-that-will-replace-the-chalk/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1894.Find-the-Student-that-Will-Replace-the-Chalk/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1895.Largest-Magic-Square/README.md b/leetcode/1801-1900/1895.Largest-Magic-Square/README.md new file mode 100755 index 000000000..98e9abc69 --- /dev/null +++ b/leetcode/1801-1900/1895.Largest-Magic-Square/README.md @@ -0,0 +1,32 @@ +# [1895.Largest Magic Square][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Magic Square +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-magic-square/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1895.Largest-Magic-Square/Solution.go b/leetcode/1801-1900/1895.Largest-Magic-Square/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1895.Largest-Magic-Square/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1895.Largest-Magic-Square/Solution_test.go b/leetcode/1801-1900/1895.Largest-Magic-Square/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1895.Largest-Magic-Square/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/README.md b/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/README.md new file mode 100755 index 000000000..2624a3e32 --- /dev/null +++ b/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/README.md @@ -0,0 +1,32 @@ +# [1896.Minimum Cost to Change the Final Value of Expression][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Change the Final Value of Expression +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-change-the-final-value-of-expression/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution.go b/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution_test.go b/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1896.Minimum-Cost-to-Change-the-Final-Value-of-Expression/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..b193ba0f5 --- /dev/null +++ b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Redistribute Characters to Make All Strings Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/redistribute-characters-to-make-all-strings-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-Strings-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1897.Redistribute-Characters-to-Make-All-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/1801-1900/1898.Maximum-Number-of-Removable-Characters/README.md b/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/README.md new file mode 100755 index 000000000..cafb6cf56 --- /dev/null +++ b/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/README.md @@ -0,0 +1,32 @@ +# [1898.Maximum Number of Removable 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 +> ... +Maximum Number of Removable Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-removable-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution.go b/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution_test.go b/leetcode/1801-1900/1898.Maximum-Number-of-Removable-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1898.Maximum-Number-of-Removable-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/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/README.md b/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/README.md new file mode 100755 index 000000000..8a5b994f5 --- /dev/null +++ b/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/README.md @@ -0,0 +1,32 @@ +# [1899.Merge Triplets to Form Target Triplet][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Merge Triplets to Form Target Triplet +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-triplets-to-form-target-triplet/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution.go b/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution_test.go b/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1899.Merge-Triplets-to-Form-Target-Triplet/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/README.md b/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/README.md new file mode 100755 index 000000000..e136c8b7a --- /dev/null +++ b/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/README.md @@ -0,0 +1,32 @@ +# [1900.The Earliest and Latest Rounds Where Players Compete][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Earliest and Latest Rounds Where Players Compete +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-earliest-and-latest-rounds-where-players-compete/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution.go b/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution_test.go b/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1900.The-Earliest-and-Latest-Rounds-Where-Players-Compete/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, 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 80046db5a5c23314db36ba0085ebc8845750dd3d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 14 Apr 2022 21:33:58 +0800 Subject: [PATCH 0014/1057] Add solution and test-cases for problem 700 --- .../README.md | 27 +++--- .../Solution.go | 16 +++- .../Solution_test.go | 78 +++++++++++++++--- .../tree1.jpg | Bin 0 -> 12557 bytes .../tree2.jpg | Bin 0 -> 12077 bytes .../type.go | 22 +++++ 6 files changed, 116 insertions(+), 27 deletions(-) create mode 100644 leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/tree1.jpg create mode 100644 leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/tree2.jpg create mode 100644 leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/type.go diff --git a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/README.md b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/README.md index fa2504479..d128ff2aa 100644 --- a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/README.md +++ b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/README.md @@ -1,28 +1,25 @@ # [700.Search in a 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 +You are given the `root` of a binary search tree (BST) and an integer `val`. + +Find the node in the BST that the node's value equals `val` and return the subtree rooted with that node. If such a node does not exist, return `null`. -**Example 1:** +**Example 1:** +![tree1](./tree1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [4,2,7,1,3], val = 2 +Output: [2,1,3] ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![tree2](./tree2.jpg) -### 思路1 -> ... -Search in a Binary Search Tree -```go ``` - +Input: root = [4,2,7,1,3], val = 5 +Output: [] +``` ## 结语 diff --git a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution.go b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution.go index d115ccf5e..26cb18e28 100644 --- a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution.go +++ b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(root *TreeNode, val int) *TreeNode { + walker := root + for walker != nil { + if walker.Val == val { + return walker + } + if walker.Val < val { + walker = walker.Right + continue + } + walker = walker.Left + } + + return nil } diff --git a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution_test.go b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution_test.go index 14ff50eb4..3e5c63795 100644 --- a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution_test.go +++ b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/Solution_test.go @@ -1,7 +1,6 @@ package Solution import ( - "reflect" "strconv" "testing" ) @@ -10,26 +9,85 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + tree *TreeNode + val int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", nil, 1, nil}, + {"Testcase2", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 7}, + }, 2, &TreeNode{Val: 2, Left: &TreeNode{Val: 1}, Right: &TreeNode{Val: 3}}}, + {"TestCase3", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 7}, + }, 7, &TreeNode{Val: 7}}, + {"TestCase4", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 7}, + }, 5, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + got := Solution(c.tree, c.val) + if !isSameTree(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v, val: %d", + c.expect, got, c.tree, c.val) } }) } } +func TestIsSameTree(t *testing.T) { + t1 := &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 7}, + } + if !isSameTree(t1, t1) { + t.Fatalf("expect true get false") + } + + var t2 *TreeNode + if isSameTree(t1, t2) { + t.Fatalf("expect false get ture") + } + + t2 = &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 8}, + } + if isSameTree(t1, t2) { + t.Fatalf("expect false get true") + } +} + // 压力测试 func BenchmarkSolution(b *testing.B) { } diff --git a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/tree1.jpg b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/tree1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce67d2ad90f768a50aea01013752127cf6d84ef9 GIT binary patch literal 12557 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/tree2.jpg b/leetcode/601-700/0700.Search-in-a-Binary-Search-Tree/tree2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5b3f28937d2ce941c98dcc758a3f9db7caec6032 GIT binary patch literal 12077 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 vtbE83+Mt-AFy Date: Sat, 16 Apr 2022 10:46:51 +0800 Subject: [PATCH 0015/1057] Add solution and test-cases for problem 357 --- .../README.md | 23 ++++++++----------- .../Solution.go | 23 +++++++++++++++++-- .../Solution_test.go | 12 ++++++---- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/README.md b/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/README.md index 6be318d37..deb19beae 100644 --- a/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/README.md +++ b/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/README.md @@ -1,28 +1,23 @@ # [357.Count Numbers with Unique Digits][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `n`, return the count of all numbers with unique digits, `x`, where 0 <= x < 10n. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2 +Output: 91 +Explanation: The answer should be the total numbers in the range of 0 ≤ x < 100, excluding 11,22,33,44,55,66,77,88,99 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Numbers with Unique Digits -```go ``` - +Input: n = 0 +Output: 1 +``` ## 结语 diff --git a/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution.go b/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution.go index d115ccf5e..868a1a9c4 100644 --- a/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution.go +++ b/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +/* + +1: 10 + 末尾是0 +2: 10 + 1*9 + 8*9 = 91 + 末尾是0 末尾非0, +3: 91 + 1*9*8 + 9*8*8 = 739 + +4: 739 + 1*9*8*7 + 9*8*8*7 = 5275 +*/ +func Solution(n int) int { + ans := make([]int, 9) + ans[0], ans[1] = 1, 10 + base1, base2 := 1, 8 + for idx := 2; idx <= 8; idx++ { + diff := 11 - idx + base1 *= diff + base2 *= diff + ans[idx] = ans[idx-1] + base1 + base2 + } + return ans[n] } diff --git a/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution_test.go b/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution_test.go index 14ff50eb4..34eed2a1b 100644 --- a/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/Solution_test.go +++ b/leetcode/301-400/0357.Count-Numbers-with-Unique-Digits/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", 0, 1}, + {"TestCase2", 2, 91}, + {"TestCase3", 3, 739}, + {"TestCase4", 4, 5275}, + {"TestCase5", 8, 2345851}, } // 开始测试 From 53219428628ecd87701b3d78f78a60855ee12dc4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 30 Apr 2022 14:47:10 +0800 Subject: [PATCH 0016/1057] Add solution and test-cases for problem 279 --- .../201-300/0279.Perfect-Squares/README.md | 25 ++++++------- .../201-300/0279.Perfect-Squares/Solution.go | 37 ++++++++++++++++++- .../0279.Perfect-Squares/Solution_test.go | 10 ++--- 3 files changed, 51 insertions(+), 21 deletions(-) diff --git a/leetcode/201-300/0279.Perfect-Squares/README.md b/leetcode/201-300/0279.Perfect-Squares/README.md index e8ede5cee..2f29350ca 100644 --- a/leetcode/201-300/0279.Perfect-Squares/README.md +++ b/leetcode/201-300/0279.Perfect-Squares/README.md @@ -1,28 +1,25 @@ # [279.Perfect Squares][title] -> [!WARNING|style:flat] -> 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 the least number of perfect square numbers that sum to `n`. + +A **perfect square** is an integer that is the square of an integer; in other words, it is the product of some integer with itself. For example, `1`, `4`, `9`, and `16` are perfect squares while `3` and `11` are not. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 12 +Output: 3 +Explanation: 12 = 4 + 4 + 4. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Perfect Squares -```go ``` - +Input: n = 13 +Output: 2 +Explanation: 13 = 4 + 9. +``` ## 结语 diff --git a/leetcode/201-300/0279.Perfect-Squares/Solution.go b/leetcode/201-300/0279.Perfect-Squares/Solution.go index d115ccf5e..4abc09c5c 100644 --- a/leetcode/201-300/0279.Perfect-Squares/Solution.go +++ b/leetcode/201-300/0279.Perfect-Squares/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + if n <= 3 { + return n + } + base := 1 + target := make([]int, n+1) + for ; base*base <= n; base++ { + target[base*base] = base * base + } + for idx := 1; idx <= n; idx++ { + if target[idx] != 0 { + base = target[idx] + continue + } + target[idx] = base + } + + dp := make([]int, n+1) + dp[1], dp[2], dp[3] = 1, 2, 3 + for idx := 4; idx <= n; idx++ { + if target[idx] == idx { + dp[idx] = 1 + continue + } + + start := target[idx] + for ; start >= idx-start; start-- { + diff := idx - start + if dp[idx] == 0 || dp[idx] > dp[diff]+dp[start] { + dp[idx] = dp[diff] + dp[start] + } + } + } + + return dp[n] } diff --git a/leetcode/201-300/0279.Perfect-Squares/Solution_test.go b/leetcode/201-300/0279.Perfect-Squares/Solution_test.go index 14ff50eb4..0d80a7b2b 100644 --- a/leetcode/201-300/0279.Perfect-Squares/Solution_test.go +++ b/leetcode/201-300/0279.Perfect-Squares/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", 12, 3}, + {"TestCase2", 13, 2}, + {"TestCase3", 268, 3}, } // 开始测试 From 799ad45e8147b855ebc24822c4d534e366c9ebd9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 30 Apr 2022 16:03:01 +0800 Subject: [PATCH 0017/1057] Add solution and test-cases for problem 396 --- .../301-400/0396.Rotate-Function/README.md | 35 +++++++++------ .../301-400/0396.Rotate-Function/Solution.go | 43 ++++++++++++++++++- .../0396.Rotate-Function/Solution_test.go | 10 ++--- 3 files changed, 67 insertions(+), 21 deletions(-) diff --git a/leetcode/301-400/0396.Rotate-Function/README.md b/leetcode/301-400/0396.Rotate-Function/README.md index 6ca61e4dc..79c6d2e28 100644 --- a/leetcode/301-400/0396.Rotate-Function/README.md +++ b/leetcode/301-400/0396.Rotate-Function/README.md @@ -1,28 +1,35 @@ # [396.Rotate Function][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer array nums of length `n`. + +Assume arrk to be an array obtained by rotating `nums` by `k` positions clock-wise. We define the **rotation function** F on `nums` as follow: + +- `F(k) = 0 * arrk[0] + 1 * arrk[1] + ... + (n - 1) * arrk[n - 1].` + +Return the maximum value of `F(0), F(1), ..., F(n-1).` + +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 = [4,3,2,6] +Output: 26 +Explanation: +F(0) = (0 * 4) + (1 * 3) + (2 * 2) + (3 * 6) = 0 + 3 + 4 + 18 = 25 +F(1) = (0 * 6) + (1 * 4) + (2 * 3) + (3 * 2) = 0 + 4 + 6 + 6 = 16 +F(2) = (0 * 2) + (1 * 6) + (2 * 4) + (3 * 3) = 0 + 6 + 8 + 9 = 23 +F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26 +So the maximum value of F(0), F(1), F(2), F(3) is F(3) = 26. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Rotate Function -```go ``` - +Input: nums = [100] +Output: 0 +``` ## 结语 diff --git a/leetcode/301-400/0396.Rotate-Function/Solution.go b/leetcode/301-400/0396.Rotate-Function/Solution.go index d115ccf5e..084d9875c 100644 --- a/leetcode/301-400/0396.Rotate-Function/Solution.go +++ b/leetcode/301-400/0396.Rotate-Function/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + /* + timeout + length := len(nums) + if length <= 1 { + return 0 + } + ans := -2147483648 + for loop := 0; loop < len(nums); loop++ { + base, tmpAns := 1, 0 + start := (length-loop)%length + for next := (start+1)%length; next != start; next = (next+1)%length { + tmpAns += (base*nums[next]) + base ++ + } + if ans < tmpAns { + ans = tmpAns + } + } + return ans + */ + sum, ans := 0, 0 + for idx, n := range nums { + sum += n + ans += idx * n + } + + maxAns := ans + length := len(nums) + // 0: 0*4 + 1*3 + 2*2 + 3*6 = 25 + // 1: 0*6 + 1*4 + 2*3 + 3*2 == > ans[0]-3*6 + 4+3+2 === > ans[i] = ans[n-i] - (n-1)(nums[n-i]) + sum-(n-i) = 16 + // 2: 0*2 + 1*6 + 2*4 + 3*3 == > ans[1]-3*2 + 6+4+3 = 23 + // ... + for idx := 1; idx < length; idx++ { + ans = ans - (length-1)*(nums[length-idx]) + sum - nums[length-idx] + if ans > maxAns { + maxAns = ans + } + } + + return maxAns } diff --git a/leetcode/301-400/0396.Rotate-Function/Solution_test.go b/leetcode/301-400/0396.Rotate-Function/Solution_test.go index 14ff50eb4..6afb05790 100644 --- a/leetcode/301-400/0396.Rotate-Function/Solution_test.go +++ b/leetcode/301-400/0396.Rotate-Function/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, 6}, 26}, + {"TestCase2", []int{100}, 0}, + {"TestCase3", []int{1, 2, 3, 4, 5}, 40}, } // 开始测试 From e5972072834a168db45fdc28dbfec4ca102841dc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 30 Apr 2022 18:00:31 +0800 Subject: [PATCH 0018/1057] Add solution and test-cases for problem 401 --- leetcode/401-500/0401.Binary-Watch/README.md | 33 +++++---- .../401-500/0401.Binary-Watch/Solution.go | 63 +++++++++++++++++- .../0401.Binary-Watch/Solution_test.go | 13 ++-- .../401-500/0401.Binary-Watch/binarywatch.jpg | Bin 0 -> 17271 bytes 4 files changed, 89 insertions(+), 20 deletions(-) create mode 100644 leetcode/401-500/0401.Binary-Watch/binarywatch.jpg diff --git a/leetcode/401-500/0401.Binary-Watch/README.md b/leetcode/401-500/0401.Binary-Watch/README.md index 1001b492f..f0a9f8782 100644 --- a/leetcode/401-500/0401.Binary-Watch/README.md +++ b/leetcode/401-500/0401.Binary-Watch/README.md @@ -1,26 +1,33 @@ # [401.Binary Watch][title] -> [!WARNING|style:flat] -> 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 binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom represent the minutes (0-59). Each LED represents a zero or one, with the least significant bit on the right. + +- For example, the below binary watch reads `"4:51"` +![watch](./binarywatch.jpg) + +Given an integer `turnedOn` which represents the number of LEDs that are currently on, return all possible times the watch could represent. You may return the answer in **any order**. + +The hour must not contain a leading zero. + +- For example, `"01:00"` is not valid. It should be `"1:00"`. + +The minute must be consist of two digits and may contain a leading zero. + +- For example, `"10:2"` is not valid. It should be `"10:02"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: turnedOn = 1 +Output: ["0:01","0:02","0:04","0:08","0:16","0:32","1:00","2:00","4:00","8:00"] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Binary Watch -```go +``` +Input: turnedOn = 9 +Output: [] ``` diff --git a/leetcode/401-500/0401.Binary-Watch/Solution.go b/leetcode/401-500/0401.Binary-Watch/Solution.go index d115ccf5e..bacd4498c 100644 --- a/leetcode/401-500/0401.Binary-Watch/Solution.go +++ b/leetcode/401-500/0401.Binary-Watch/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +/* +func countOf1(n int) int { + cnt := 0 + for n > 0 { + cnt++ + n = n & (n-1) + } + return cnt +} + +func gen() { + r := make(map[int][]string) + for n := 1; n < 60 ; n++ { + c := countOf1(n) + if _, ok := r[c]; !ok { + r[c] = make([]string, 0) + } + r[c] = append(r[c], fmt.Sprintf("%d", n)) + } + for k, v := range r { + fmt.Printf(`%d: '"%s"'`, k, strings.Join(v, `","`)) + } +} +*/ +var ( + hour = [4][]string{ + {"0"}, + {"1", "2", "4", "8"}, + {"3", "5", "6", "9", "10"}, + {"7", "11"}, + } + + minute = [6][]string{ + {"00"}, + {"01", "02", "04", "08", "16", "32"}, + {"03", "05", "06", "09", "10", "12", "17", "18", "20", "24", "33", "34", "36", "40", "48"}, + {"07", "11", "13", "14", "19", "21", "22", "25", "26", "28", "35", "37", "38", "41", "42", "44", "49", "50", "52", "56"}, + {"15", "23", "27", "29", "30", "39", "43", "45", "46", "51", "53", "54", "57", "58"}, + {"31", "47", "55", "59"}, + } +) + +func Solution(turnedOn int) []string { + ans := make([]string, 0) + for top := 0; top <= turnedOn && top < 4; top++ { + binaryWatch(top, turnedOn-top, &ans) + } + return ans +} + +func binaryWatch(top, down int, ans *[]string) { + if down >= 6 { + return + } + for _, h := range hour[top] { + for _, m := range minute[down] { + *ans = append(*ans, fmt.Sprintf("%s:%s", h, m)) + } + } } diff --git a/leetcode/401-500/0401.Binary-Watch/Solution_test.go b/leetcode/401-500/0401.Binary-Watch/Solution_test.go index 14ff50eb4..06fd3806d 100644 --- a/leetcode/401-500/0401.Binary-Watch/Solution_test.go +++ b/leetcode/401-500/0401.Binary-Watch/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,20 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, []string{"0:01", "0:02", "0:04", "0:08", "0:16", "0:32", "1:00", "2:00", "4:00", "8:00"}}, + {"TestCase2", 9, []string{}}, + {"TestCase3", 2, []string{"0:03", "0:05", "0:06", "0:09", "0:10", "0:12", "0:17", "0:18", "0:20", "0:24", "0:33", "0:34", "0:36", "0:40", "0:48", "1:01", "1:02", "1:04", "1:08", "1:16", "1:32", "2:01", "2:02", "2:04", "2:08", "2:16", "2:32", "3:00", "4:01", "4:02", "4:04", "4:08", "4:16", "4:32", "5:00", "6:00", "8:01", "8:02", "8:04", "8:08", "8:16", "8:32", "9:00", "10:00"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) + sort.Strings(got) + sort.Strings(c.expect) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) diff --git a/leetcode/401-500/0401.Binary-Watch/binarywatch.jpg b/leetcode/401-500/0401.Binary-Watch/binarywatch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08144388ec504ee49e46a9821c3078fb4473d769 GIT binary patch literal 17271 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 Y{Yh1M)FC_d(SJJ#|IgBx(7W0H0lY5b4gdfE literal 0 HcmV?d00001 From 39bedc562b1203586a3cde6f9140dc7334105b6f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 May 2022 16:35:00 +0800 Subject: [PATCH 0019/1057] Add solution and test-cases for problem 844 --- .../0844.Backspace-String-Compare/README.md | 31 +++++++++++-------- .../0844.Backspace-String-Compare/Solution.go | 31 +++++++++++++++++-- .../Solution_test.go | 15 ++++----- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0844.Backspace-String-Compare/README.md b/leetcode/801-900/0844.Backspace-String-Compare/README.md index 218862a1b..bfb84f12e 100644 --- a/leetcode/801-900/0844.Backspace-String-Compare/README.md +++ b/leetcode/801-900/0844.Backspace-String-Compare/README.md @@ -1,28 +1,33 @@ # [844.Backspace String Compare][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two strings `s` and `t`, return `true` if they are equal when both are typed into empty text editors. `'#'` means a backspace character. + +Note that after backspacing an empty text, the text will continue empty. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ab#c", t = "ad#c" +Output: true +Explanation: Both s and t become "ac". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Backspace String Compare -```go +``` +Input: s = "ab##", t = "c#d#" +Output: true +Explanation: Both s and t become "". ``` +**Example 3:** + +``` +Input: s = "a#c", t = "b" +Output: false +Explanation: s becomes "c" while t becomes "b". +``` ## 结语 diff --git a/leetcode/801-900/0844.Backspace-String-Compare/Solution.go b/leetcode/801-900/0844.Backspace-String-Compare/Solution.go index d115ccf5e..90f572cd0 100644 --- a/leetcode/801-900/0844.Backspace-String-Compare/Solution.go +++ b/leetcode/801-900/0844.Backspace-String-Compare/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, t string) bool { + sbs := []byte(s) + tbs := []byte(t) + sidx := -1 + for _, b := range sbs { + if b == '#' { + if sidx != -1 { + sidx-- + } + continue + } + sidx++ + sbs[sidx] = b + } + + tidx := -1 + for _, b := range tbs { + if b == '#' { + if tidx != -1 { + tidx-- + } + continue + } + + tidx++ + tbs[tidx] = b + } + + return string(sbs[:sidx+1]) == string(tbs[:tidx+1]) } diff --git a/leetcode/801-900/0844.Backspace-String-Compare/Solution_test.go b/leetcode/801-900/0844.Backspace-String-Compare/Solution_test.go index 14ff50eb4..c8a909e3e 100644 --- a/leetcode/801-900/0844.Backspace-String-Compare/Solution_test.go +++ b/leetcode/801-900/0844.Backspace-String-Compare/Solution_test.go @@ -10,21 +10,22 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s, t string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ab#c", "ad#c", true}, + {"TestCase2", "ab##", "c#d#", true}, + {"TestCase3", "a#c", "b", false}, + {"TestCase4", "###ab", "ab", true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.t) 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-s: %v, inputs-t: %v", + c.expect, got, c.s, c.t) } }) } From f09ca2ee2868324daa1001f0fb7cc50fd9039bc9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 May 2022 15:06:44 +0800 Subject: [PATCH 0020/1057] Add solution and test-cases for problem 905 --- .../0905.Sort-Array-By-Parity/README.md | 25 +++++----- .../0905.Sort-Array-By-Parity/Solution.go | 48 ++++++++++++++++++- .../Solution_test.go | 36 ++++++++++++-- 3 files changed, 88 insertions(+), 21 deletions(-) diff --git a/leetcode/901-1000/0905.Sort-Array-By-Parity/README.md b/leetcode/901-1000/0905.Sort-Array-By-Parity/README.md index d5fb3d340..97569bdcd 100644 --- a/leetcode/901-1000/0905.Sort-Array-By-Parity/README.md +++ b/leetcode/901-1000/0905.Sort-Array-By-Parity/README.md @@ -1,28 +1,25 @@ # [905.Sort Array By Parity][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums`, move all the even integers at the beginning of the array followed by all the odd integers. + +Return **any array** that satisfies this condition. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,1,2,4] +Output: [2,4,3,1] +Explanation: The outputs [4,2,3,1], [2,4,1,3], and [4,2,1,3] would also be accepted. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sort Array By Parity -```go ``` - +Input: nums = [0] +Output: [0] +``` ## 结语 diff --git a/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution.go b/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution.go index d115ccf5e..cafd7ef61 100644 --- a/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution.go +++ b/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + inQuickSort(nums, 0, len(nums)-1, less) + return nums +} + +func inQuickSort(nums []int, start, end int, less func(i, j int) bool) { + if r := end - start + 1; r == 0 || r == 1 { + return + } + cmpObj := nums[start] + lessIdx := start + for idx := start + 1; idx <= end; idx++ { + if less(nums[idx], cmpObj) { + lessIdx++ + nums[lessIdx], nums[idx] = nums[idx], nums[lessIdx] + } + } + nums[start], nums[lessIdx] = nums[lessIdx], nums[start] + inQuickSort(nums, start, lessIdx-1, less) + inQuickSort(nums, lessIdx+1, end, less) +} + +func less(i, j int) bool { + iEven := i&1 == 0 + jEven := j&1 == 0 + if iEven && jEven || !iEven && !jEven { + return i < j + } + if !jEven { + return true + } + return false +} + +func Solution1(nums []int) []int { + s, e := 0, len(nums)-1 + for s < e { + for ; s < e && nums[s]&1 == 0; s++ { + } + for ; s < e && nums[e]&1 == 1; e-- { + } + if s < e { + nums[s], nums[e] = nums[e], nums[s] + } + } + return nums } diff --git a/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution_test.go b/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution_test.go index 14ff50eb4..7a87c3dab 100644 --- a/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution_test.go +++ b/leetcode/901-1000/0905.Sort-Array-By-Parity/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1, 2, 4}, []int{2, 4, 1, 3}}, + {"TestCase2", []int{1, 3, 5, 7, 9, 2, 4, 8, 11}, []int{2, 4, 8, 1, 3, 5, 7, 9, 11}}, + {"TestCase3", []int{1}, []int{1}}, + {"testCase4", []int{2}, []int{2}}, } // 开始测试 @@ -30,6 +31,31 @@ func TestSolution(t *testing.T) { } } +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + expect []int + }{ + {"TestCase1", []int{3, 1, 2, 4}, []int{4, 2, 1, 3}}, + {"TestCase2", []int{1, 3, 5, 7, 9, 2, 4, 8, 11}, []int{8, 4, 2, 7, 9, 5, 3, 1, 11}}, + {"TestCase3", []int{1}, []int{1}}, + {"testCase4", []int{2}, []int{2}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + // 压力测试 func BenchmarkSolution(b *testing.B) { } From 95c3c8a1be9640113eb09b214b460ed1b108692b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 May 2022 23:36:00 +0800 Subject: [PATCH 0021/1057] Add solution and test-cases for problem 1005 --- .../README.md | 35 ++++++++------ .../Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 73 insertions(+), 21 deletions(-) diff --git a/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/README.md b/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/README.md index 1be211198..d02b5f389 100644 --- a/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/README.md +++ b/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/README.md @@ -1,28 +1,37 @@ # [1005.Maximize Sum Of Array After K Negations][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums` and an integer `k`, modify the array in the following way: + +- choose an index `i` and replace `nums[i]` with `-nums[i]`. + +You should apply this process exactly `k` times. You may choose the same index `i` multiple times. + +Return the largest possible sum of the array after modifying it in this way. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,2,3], k = 1 +Output: 5 +Explanation: Choose index 1 and nums becomes [4,-2,3]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximize Sum Of Array After K Negations -```go ``` +Input: nums = [3,-1,0,2], k = 3 +Output: 6 +Explanation: Choose indices (1, 2, 2) and nums becomes [3,1,0,2]. +``` + +**Example 3:** +``` +Input: nums = [2,-3,-1,5,-4], k = 2 +Output: 13 +Explanation: Choose indices (1, 4) and nums becomes [2,3,-1,5,4]. +``` ## 结语 diff --git a/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution.go b/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution.go index d115ccf5e..309f90c0c 100644 --- a/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution.go +++ b/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func _abs(n int) int { + if n < 0 { + n = -n + } + return n +} +func Solution(nums []int, k int) int { + // 如果负数比k小, + negations := 0 + asbMin := 101 + ans := 0 + for _, n := range nums { + abs := _abs(n) + ans += abs + if abs < asbMin { + asbMin = abs + } + if n < 0 { + negations++ + } + } + if negations == k { + return ans + } + sort.Ints(nums) + if negations < k { + if (k-negations)&1 == 1 { + ans -= 2 * asbMin + } + return ans + } + for idx, n := range nums { + if idx < k { + continue + } + if n > 0 { + break + } + ans += 2 * n + } + + return ans } diff --git a/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution_test.go b/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution_test.go index 14ff50eb4..0dbcd1372 100644 --- a/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution_test.go +++ b/leetcode/1001-1100/1005.Maximize-Sum-Of-Array-After-K-Negations/Solution_test.go @@ -10,18 +10,19 @@ 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, 3}, 1, 5}, + {"TestCase2", []int{3, -1, 0, 2}, 3, 6}, + {"TestCase3", []int{2, -3, -1, 5, -4}, 2, 13}, } // 开始测试 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) From e9e8e2733b33bdf7c413d8f30a575738cc829ea6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 15 May 2022 12:22:55 +0800 Subject: [PATCH 0022/1057] Add solution and test-cases for problem 1302 --- .../1302.Deepest-Leaves-Sum/1483_ex1.png | Bin 0 -> 16549 bytes .../1302.Deepest-Leaves-Sum/README.md | 26 ++++----- .../1302.Deepest-Leaves-Sum/Solution.go | 53 +++++++++++++++++- .../1302.Deepest-Leaves-Sum/Solution_test.go | 34 +++++++++-- .../1301-1400/1302.Deepest-Leaves-Sum/type.go | 7 +++ 5 files changed, 97 insertions(+), 23 deletions(-) create mode 100644 leetcode/1301-1400/1302.Deepest-Leaves-Sum/1483_ex1.png create mode 100644 leetcode/1301-1400/1302.Deepest-Leaves-Sum/type.go diff --git a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/1483_ex1.png b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/1483_ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..39ea9af25888a1021837664744940730ae1565cd GIT binary patch literal 16549 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 ZFQGx4^e*)CIqd#$3NotTYAMse{}1QCsjmP4 literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/README.md b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/README.md index b5b8ddc1a..1acc08fd1 100644 --- a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/README.md +++ b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/README.md @@ -1,28 +1,22 @@ # [1302.Deepest Leaves 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 the `root` of a binary tree, return the sum of values of its deepest leaves. + -**Example 1:** - +**Example 1:** +![tree](./1483_ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,4,5,null,6,7,null,null,null,null,8] +Output: 15 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Deepest Leaves Sum -```go ``` - +Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] +Output: 19 +``` ## 结语 diff --git a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution.go b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution.go index d115ccf5e..93ad96dce 100644 --- a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution.go +++ b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(root *TreeNode) int { + if root == nil { + return 0 + } + queue := []*TreeNode{root} + sum := 0 + for len(queue) > 0 { + tmp := make([]*TreeNode, 0) + sum = 0 + for _, node := range queue { + sum += node.Val + if node.Left != nil { + tmp = append(tmp, node.Left) + } + if node.Right != nil { + tmp = append(tmp, node.Right) + } + } + queue = tmp + } + return sum +} + +func Solution2(root *TreeNode) int { + maxDep, sum := 0, 0 + dfs(root, &maxDep, &sum, 0) + return sum +} + +func dfs(root *TreeNode, maxDep, sum *int, nowDep int) { + if root == nil { + return + } + + if root.Left == nil && root.Right == nil { + // leaves + if nowDep > *maxDep { + *maxDep = nowDep + *sum = root.Val + return + } else if nowDep == *maxDep { + *sum += root.Val + } + return + } + if root.Left != nil { + dfs(root.Left, maxDep, sum, nowDep+1) + } + if root.Right != nil { + dfs(root.Right, maxDep, sum, nowDep+1) + } } diff --git a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution_test.go b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution_test.go index 14ff50eb4..5a8c06976 100644 --- a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution_test.go +++ b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/Solution_test.go @@ -10,12 +10,31 @@ 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, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 7}, + }, + Right: &TreeNode{Val: 5}, + }, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 6, + Right: &TreeNode{ + Val: 8, + }, + }, + }, + }, 15}, + {"TestCase2", &TreeNode{Val: 1}, 1}, + {"TestCase3", nil, 0}, } // 开始测试 @@ -26,6 +45,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } diff --git a/leetcode/1301-1400/1302.Deepest-Leaves-Sum/type.go b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/type.go new file mode 100644 index 000000000..e5cbbb34f --- /dev/null +++ b/leetcode/1301-1400/1302.Deepest-Leaves-Sum/type.go @@ -0,0 +1,7 @@ +package Solution + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} From d597448a930247f8f6ebcfe80509a34a1e1f65cb Mon Sep 17 00:00:00 2001 From: Kyle Liu Date: Mon, 16 May 2022 18:59:17 +0800 Subject: [PATCH 0023/1057] add logo file --- assets/images/logo.png | Bin 0 -> 108014 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/images/logo.png diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a408d04b8319c3e11f48dc40d3bb6d2f466c1aee GIT binary patch literal 108014 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 %MVm*yRS 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 C9K8Gh literal 0 HcmV?d00001 From 8c1147a32a84594481852764c703c022edd2e7f3 Mon Sep 17 00:00:00 2001 From: Kyle Liu Date: Mon, 16 May 2022 19:00:11 +0800 Subject: [PATCH 0024/1057] add logo file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cf876f624..6982223a8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- Logo + Logo

Awesome Golang Algorithm

From 79fe501df9ba2dd0dfbc1fa1339157f25a4cdb84 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 22 May 2022 10:31:01 +0800 Subject: [PATCH 0025/1057] Add solution and test-cases for problem 647 --- .../0647.Palindromic-Substrings/README.md | 28 ++++++------ .../0647.Palindromic-Substrings/Solution.go | 43 ++++++++++++++++++- .../Solution_test.go | 16 ++++--- 3 files changed, 66 insertions(+), 21 deletions(-) diff --git a/leetcode/601-700/0647.Palindromic-Substrings/README.md b/leetcode/601-700/0647.Palindromic-Substrings/README.md index 5fe9d0e8e..eaf849ab7 100644 --- a/leetcode/601-700/0647.Palindromic-Substrings/README.md +++ b/leetcode/601-700/0647.Palindromic-Substrings/README.md @@ -1,28 +1,28 @@ # [647.Palindromic 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 **palindromic substrings** in it. + +A string is a **palindrome** when it reads the same backward as forward. + +A **substring** is a contiguous sequence of characters within the string. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abc" +Output: 3 +Explanation: Three palindromic strings: "a", "b", "c". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Palindromic Substrings -```go ``` - +Input: s = "aaa" +Output: 6 +Explanation: Six palindromic strings: "a", "a", "a", "aa", "aa", "aaa". +``` ## 结语 diff --git a/leetcode/601-700/0647.Palindromic-Substrings/Solution.go b/leetcode/601-700/0647.Palindromic-Substrings/Solution.go index d115ccf5e..51034984c 100644 --- a/leetcode/601-700/0647.Palindromic-Substrings/Solution.go +++ b/leetcode/601-700/0647.Palindromic-Substrings/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + ans := 0 + dp := make([][]int, len(s)) + for row := 0; row < len(s); row++ { + dp[row] = make([]int, len(s)) + } + + for idx := len(s) - 1; idx >= 0; idx-- { + for in := idx; in < len(s); in++ { + if idx == in || (s[idx] == s[in] && (idx+1 == in || dp[idx+1][in-1] == 1)) { + dp[idx][in] = 1 + ans++ + } + } + } + + return ans +} + +func Solution1(s string) int { + baseLen := len(s) + ans := baseLen + + sBytes := []byte(s) + for length := 2; length <= baseLen; length++ { + for start := 0; start <= baseLen-length; start++ { + if isPalindromic(sBytes, start, start+length-1) { + ans++ + } + } + } + return ans +} + +func isPalindromic(sBytes []byte, start, end int) bool { + for s, e := start, end; s < e; s, e = s+1, e-1 { + if sBytes[s] != sBytes[e] { + return false + } + } + return true } diff --git a/leetcode/601-700/0647.Palindromic-Substrings/Solution_test.go b/leetcode/601-700/0647.Palindromic-Substrings/Solution_test.go index 14ff50eb4..5f2a2ee7a 100644 --- a/leetcode/601-700/0647.Palindromic-Substrings/Solution_test.go +++ b/leetcode/601-700/0647.Palindromic-Substrings/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", "abc", 3}, + {"TestCase2", "aaa", 6}, + {"TestCase3", "ababa", 9}, + {"TestCase4", "aaaaaa", 21}, } // 开始测试 @@ -26,6 +27,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } From b2cfe80124edad0a9e0ce51b5055d04f05ea95a3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 22 May 2022 16:15:28 +0800 Subject: [PATCH 0026/1057] Add solution and test-cases for problem 925 --- .../901-1000/0925.Long-Pressed-Name/README.md | 26 +++-- .../0925.Long-Pressed-Name/Solution.go | 98 ++++++++++++++++++- .../0925.Long-Pressed-Name/Solution_test.go | 25 +++-- 3 files changed, 124 insertions(+), 25 deletions(-) diff --git a/leetcode/901-1000/0925.Long-Pressed-Name/README.md b/leetcode/901-1000/0925.Long-Pressed-Name/README.md index 328810829..96f2eeb5d 100644 --- a/leetcode/901-1000/0925.Long-Pressed-Name/README.md +++ b/leetcode/901-1000/0925.Long-Pressed-Name/README.md @@ -1,28 +1,26 @@ # [925.Long Pressed Name][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Your friend is typing his `name` into a keyboard. Sometimes, when typing a character `c`, the key might get long pressed, and the character will be typed 1 or more times. + +You examine the `typed` characters of the keyboard. Return `True` if it is possible that it was your friends name, with some characters (possibly none) being long pressed. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: name = "alex", typed = "aaleex" +Output: true +Explanation: 'a' and 'e' in 'alex' were long pressed. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Long Pressed Name -```go ``` - +Input: name = "saeed", typed = "ssaaedd" +Output: false +Explanation: 'e' must have been pressed twice, but it was not in the typed output. +``` ## 结语 diff --git a/leetcode/901-1000/0925.Long-Pressed-Name/Solution.go b/leetcode/901-1000/0925.Long-Pressed-Name/Solution.go index d115ccf5e..8eb2783fc 100644 --- a/leetcode/901-1000/0925.Long-Pressed-Name/Solution.go +++ b/leetcode/901-1000/0925.Long-Pressed-Name/Solution.go @@ -1,5 +1,99 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(name, typed string) bool { + if name == typed { + return true + } + + nowByte := name[0] + repeatBytes := 1 + typedIdx := 0 + typedRepeatBytes := 0 + ans := false + for nameIdx := 1; nameIdx < len(name); nameIdx++ { + if name[nameIdx] == nowByte { + repeatBytes++ + continue + } + + for ; typedIdx < len(typed) && typed[typedIdx] == nowByte; typedIdx++ { + typedRepeatBytes++ + } + + if typedRepeatBytes < repeatBytes { + return false + } + + if repeatBytes < typedRepeatBytes { + ans = true + } + + typedRepeatBytes, repeatBytes = 0, 1 + nowByte = name[nameIdx] + } + for ; typedIdx < len(typed) && typed[typedIdx] == nowByte; typedIdx++ { + typedRepeatBytes++ + } + if typedRepeatBytes < repeatBytes || typedIdx != len(typed) { + return false + } + + if repeatBytes < typedRepeatBytes { + ans = true + } + return ans +} + +type byteRepeat struct { + b byte + c int +} + +func checkPressTimes(s string) []byteRepeat { + r := make([]byteRepeat, 0) + if len(s) == 0 { + return r + } + nowByte := s[0] + repeatTimes := 1 + for idx := 1; idx < len(s); idx++ { + if s[idx] == nowByte { + repeatTimes++ + continue + } + + r = append(r, byteRepeat{b: nowByte, c: repeatTimes}) + + nowByte = s[idx] + repeatTimes = 1 + } + r = append(r, byteRepeat{b: nowByte, c: repeatTimes}) + return r +} + +func Solution2(name string, typed string) bool { + if name == typed { + return true + } + baseName := checkPressTimes(name) + baseTyped := checkPressTimes(typed) + if len(baseTyped) != len(baseName) { + return false + } + + multiByte := false + for idx := 0; idx < len(baseName); idx++ { + if baseName[idx].b == baseTyped[idx].b { + if baseName[idx].c > baseTyped[idx].c { + return false + } + if baseName[idx].c < baseTyped[idx].c { + multiByte = true + } + continue + } + return false + } + + return multiByte } diff --git a/leetcode/901-1000/0925.Long-Pressed-Name/Solution_test.go b/leetcode/901-1000/0925.Long-Pressed-Name/Solution_test.go index 14ff50eb4..1d6e664be 100644 --- a/leetcode/901-1000/0925.Long-Pressed-Name/Solution_test.go +++ b/leetcode/901-1000/0925.Long-Pressed-Name/Solution_test.go @@ -9,23 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + username, typed string + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "alex", "aaleex", true}, + {"TestCase2", "alex", "alex", true}, + {"TestCase3", "saeed", "ssaaedd", false}, + {"TestCase4", "alex", "aaleexa", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.username, c.typed) 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.username, c.typed) } + got = Solution2(c.username, c.typed) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v, %v", + c.expect, got, c.username, c.typed) + } + }) } } From ff9d74bbc5c4178e918d4534b61432a52f68d472 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 24 May 2022 22:03:05 +0800 Subject: [PATCH 0027/1057] Add solution and test-cases for problem 437 --- leetcode/401-500/0437.Path-Sum-III/README.md | 29 +++++---- .../401-500/0437.Path-Sum-III/Solution.go | 59 +++++++++++++++++- .../0437.Path-Sum-III/Solution_test.go | 53 +++++++++++++--- .../0437.Path-Sum-III/pathsum3-1-tree.jpg | Bin 0 -> 42148 bytes leetcode/401-500/0437.Path-Sum-III/type.go | 7 +++ 5 files changed, 123 insertions(+), 25 deletions(-) create mode 100644 leetcode/401-500/0437.Path-Sum-III/pathsum3-1-tree.jpg create mode 100644 leetcode/401-500/0437.Path-Sum-III/type.go diff --git a/leetcode/401-500/0437.Path-Sum-III/README.md b/leetcode/401-500/0437.Path-Sum-III/README.md index c1ff426d1..f259b893c 100644 --- a/leetcode/401-500/0437.Path-Sum-III/README.md +++ b/leetcode/401-500/0437.Path-Sum-III/README.md @@ -1,28 +1,27 @@ # [437.Path Sum 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 the `root` of a binary tree and an integer `targetSum`, return the number of paths where the sum of the values along the path equals `targetSum`. + +The path does not need to start or end at the root or a leaf, but it must go downwards (i.e., traveling only from parent nodes to child nodes). + -**Example 1:** +**Example 1:** + +![pathsum3-1](./pathsum3-1-tree.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8 +Output: 3 +Explanation: The paths that sum to 8 are shown. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Path Sum III -```go ``` - +Input: root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 +Output: 3 +``` ## 结语 diff --git a/leetcode/401-500/0437.Path-Sum-III/Solution.go b/leetcode/401-500/0437.Path-Sum-III/Solution.go index d115ccf5e..3b53303d0 100644 --- a/leetcode/401-500/0437.Path-Sum-III/Solution.go +++ b/leetcode/401-500/0437.Path-Sum-III/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(root *TreeNode, target int) int { + subSum := make(map[int]int) + ans := 0 + down2top(root, target, &ans, subSum) + return ans +} + +func Solution2(root *TreeNode, target int) int { + subSum := make(map[int]int) + ans := 0 + subSum[0] = 1 // target = target + top2down(root, target, 0, &ans, subSum) + return ans +} + +func down2top(root *TreeNode, target int, ans *int, subTreeSum map[int]int) { + if root == nil { + return + } + + if root.Left == nil && root.Right == nil { + subTreeSum[root.Val]++ + if root.Val == target { + *ans++ + } + return + } + + expectSum := make(map[int]int) + down2top(root.Left, target, ans, expectSum) + down2top(root.Right, target, ans, expectSum) + subTreeSum[root.Val]++ + if root.Val == target { + *ans++ + } + for k, v := range expectSum { + subTreeSum[k+root.Val] += v + if k+root.Val == target { + *ans += v + } + } +} + +func top2down(root *TreeNode, target, sum int, ans *int, subTreeSum map[int]int) { + if root == nil { + return + } + + sum += root.Val + if count, ok := subTreeSum[sum-target]; ok { + *ans += count + } + subTreeSum[sum]++ + + top2down(root.Left, target, sum, ans, subTreeSum) + top2down(root.Right, target, sum, ans, subTreeSum) + subTreeSum[sum]-- } diff --git a/leetcode/401-500/0437.Path-Sum-III/Solution_test.go b/leetcode/401-500/0437.Path-Sum-III/Solution_test.go index 14ff50eb4..aaf9c7843 100644 --- a/leetcode/401-500/0437.Path-Sum-III/Solution_test.go +++ b/leetcode/401-500/0437.Path-Sum-III/Solution_test.go @@ -10,21 +10,58 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + tree *TreeNode + target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 2}, + Right: &TreeNode{Val: 2}, + }, + Right: &TreeNode{ + Val: -1, + Right: &TreeNode{Val: 1}, + }, + }, 5, 4}, + {"TestCase2", &TreeNode{Val: 1}, 1, 1}, + {"TestCase3", &TreeNode{ + Val: 10, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: -2}, + }, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 1}, + }, + }, + Right: &TreeNode{ + Val: -3, + Right: &TreeNode{Val: 11}, + }, + }, 8, 3}, + {"TestCase4", &TreeNode{Val: 1}, 0, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.tree, 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, target: %v", + c.expect, got, c.tree, c.target) + } + + got = Solution2(c.tree, c.target) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v, target: %v", + c.expect, got, c.tree, c.target) } }) } diff --git a/leetcode/401-500/0437.Path-Sum-III/pathsum3-1-tree.jpg b/leetcode/401-500/0437.Path-Sum-III/pathsum3-1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9c7fcc4cf689d512c4b506b6b1c6ccfd01854a2b GIT binary patch literal 42148 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 literal 0 HcmV?d00001 diff --git a/leetcode/401-500/0437.Path-Sum-III/type.go b/leetcode/401-500/0437.Path-Sum-III/type.go new file mode 100644 index 000000000..e5cbbb34f --- /dev/null +++ b/leetcode/401-500/0437.Path-Sum-III/type.go @@ -0,0 +1,7 @@ +package Solution + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} From 5d0c39a561c2c90b93fa7261f6727b6e37117d31 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 28 May 2022 21:24:31 +0800 Subject: [PATCH 0028/1057] Add solution and test-cases for problem 1342 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 16 +++++++- .../Solution_test.go | 12 +++--- 3 files changed, 48 insertions(+), 20 deletions(-) diff --git a/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/README.md b/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/README.md index eb17d6ede..59b7a4632 100644 --- a/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/README.md +++ b/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/README.md @@ -1,28 +1,42 @@ # [1342.Number of Steps to Reduce a Number to Zero][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `num`, return the number of steps to reduce it to zero. + +In one step, if the current number is even, you have to divide it by `2`, otherwise, you have to subtract `1` from it. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 14 +Output: 6 +Explanation: +Step 1) 14 is even; divide by 2 and obtain 7. +Step 2) 7 is odd; subtract 1 and obtain 6. +Step 3) 6 is even; divide by 2 and obtain 3. +Step 4) 3 is odd; subtract 1 and obtain 2. +Step 5) 2 is even; divide by 2 and obtain 1. +Step 6) 1 is odd; subtract 1 and obtain 0. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Steps to Reduce a Number to Zero -```go +``` +Input: num = 8 +Output: 4 +Explanation: +Step 1) 8 is even; divide by 2 and obtain 4. +Step 2) 4 is even; divide by 2 and obtain 2. +Step 3) 2 is even; divide by 2 and obtain 1. +Step 4) 1 is odd; subtract 1 and obtain 0. ``` +**Example 3:** + +``` +Input: num = 123 +Output: 12 +``` ## 结语 diff --git a/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution.go b/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution.go index d115ccf5e..71d3ad2de 100644 --- a/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution.go +++ b/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int) int { + if num == 0 { + return 0 + } + if num == 1 { + return 1 + } + + ans := Solution(num/2) + 1 + if num&1 == 1 { + ans++ + } + + return ans } diff --git a/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution_test.go b/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution_test.go index 14ff50eb4..e798224f2 100644 --- a/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/Solution_test.go +++ b/leetcode/1301-1400/1342.Number-of-Steps-to-Reduce-a-Number-to-Zero/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, 1}, + {"TestCase2", 2, 2}, + {"TestCase3", 14, 6}, + {"TestCase4", 8, 4}, + {"TestCase5", 123, 12}, } // 开始测试 From a98d9d0cb31f583bdcd726a65ef0661d4492a731 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 29 May 2022 00:26:43 +0800 Subject: [PATCH 0029/1057] Add solution and test-cases for problem 474 --- .../401-500/0474.Ones-and-Zeroes/README.md | 29 ++++++++-------- .../401-500/0474.Ones-and-Zeroes/Solution.go | 34 +++++++++++++++++-- .../0474.Ones-and-Zeroes/Solution_test.go | 25 +++++++++----- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/leetcode/401-500/0474.Ones-and-Zeroes/README.md b/leetcode/401-500/0474.Ones-and-Zeroes/README.md index 660ac5292..3e184e1ef 100644 --- a/leetcode/401-500/0474.Ones-and-Zeroes/README.md +++ b/leetcode/401-500/0474.Ones-and-Zeroes/README.md @@ -1,28 +1,29 @@ # [474.Ones and Zeroes][title] -> [!WARNING|style:flat] -> 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 binary strings `strs` and two integers `m` and `n`. + +Return the size of the largest subset of `strs` such that there are **at most** `m 0'`s and `n 1'`s in the subset. + +A set `x` is a **subset** of a set `y` if all elements of `x` are also elements of `y`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: strs = ["10","0001","111001","1","0"], m = 5, n = 3 +Output: 4 +Explanation: The largest subset with at most 5 0's and 3 1's is {"10", "0001", "1", "0"}, so the answer is 4. +Other valid but smaller subsets include {"0001", "1"} and {"10", "1", "0"}. +{"111001"} is an invalid subset because it contains 4 1's, greater than the maximum of 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Ones and Zeroes -```go ``` - +Input: strs = ["10","0","1"], m = 1, n = 1 +Output: 2 +Explanation: The largest subset is {"0", "1"}, so the answer is 2. +``` ## 结语 diff --git a/leetcode/401-500/0474.Ones-and-Zeroes/Solution.go b/leetcode/401-500/0474.Ones-and-Zeroes/Solution.go index d115ccf5e..77b623d48 100644 --- a/leetcode/401-500/0474.Ones-and-Zeroes/Solution.go +++ b/leetcode/401-500/0474.Ones-and-Zeroes/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(strs []string, m, n int) int { + store := make([][2]int, len(strs)) + dp := make([][][]int, len(strs)+1) + for x := 0; x < len(strs)+1; x++ { + dp[x] = make([][]int, m+1) + for y := 0; y < m+1; y++ { + dp[x][y] = make([]int, n+1) + } + if x < len(strs) { + for _, b := range []byte(strs[x]) { + store[x][b-'0']++ + } + } + } + + max := 0 + for idx := 1; idx <= len(strs); idx++ { + for zero := 0; zero <= m; zero++ { + for one := 0; one <= n; one++ { + dp[idx][zero][one] = dp[idx-1][zero][one] + zeros, ones := store[idx-1][0], store[idx-1][1] + + if zero >= zeros && one >= ones && dp[idx-1][zero-zeros][one-ones]+1 > dp[idx][zero][one] { + dp[idx][zero][one] = dp[idx-1][zero-zeros][one-ones] + 1 + } + if dp[idx][zero][one] > max { + max = dp[idx][zero][one] + } + } + } + } + return max } diff --git a/leetcode/401-500/0474.Ones-and-Zeroes/Solution_test.go b/leetcode/401-500/0474.Ones-and-Zeroes/Solution_test.go index 14ff50eb4..cf2c95e8b 100644 --- a/leetcode/401-500/0474.Ones-and-Zeroes/Solution_test.go +++ b/leetcode/401-500/0474.Ones-and-Zeroes/Solution_test.go @@ -9,22 +9,29 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + strs []string + zeros, ones int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"10", "0001", "111001", "1", "0"}, 5, 3, 4}, + {"TestCase2", []string{"10", "0", "1"}, 1, 1, 2}, + {"TestCase3", []string{"001", "110", "0000", "0000"}, 9, 2, 3}, + {"TestCase4", []string{"10", "0001", "111001", "1", "0"}, 4, 3, 3}, + {"TestCase5", []string{"10", "1", "1", "0"}, 2, 2, 3}, + {"TestCase6", []string{"00", "000"}, 1, 10, 0}, + {"TestCase7", []string{"11", "111"}, 10, 1, 0}, + {"TestCase8", []string{"0", "0", "1", "1"}, 2, 2, 4}, + {"TestCase9", []string{"00101011"}, 36, 39, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.strs, c.zeros, c.ones) 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, zeros: %v, ones: %v", + c.expect, got, c.strs, c.zeros, c.ones) } }) } From 93bf4520cc14cf703dbf0a6c9d2bee16daad4244 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 31 May 2022 23:05:12 +0800 Subject: [PATCH 0030/1057] Add solution and test-cases for problem 1461 --- .../README.md | 36 ++++++++++++++++ .../Solution.go | 34 +++++++++++++++ .../Solution_test.go | 41 +++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/README.md create mode 100644 leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution.go create mode 100644 leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution_test.go diff --git a/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/README.md b/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/README.md new file mode 100644 index 000000000..0403f527d --- /dev/null +++ b/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/README.md @@ -0,0 +1,36 @@ +# [1461.Check If a String Contains All Binary Codes of Size K][title] + +## Description + +Given a binary string `s` and an integer `k`, return `true` if every binary code of length `k` is a substring of `s`. Otherwise, return `false`. + +**Example 1:** + +``` +Input: s = "00110110", k = 2 +Output: true +Explanation: The binary codes of length 2 are "00", "01", "10" and "11". They can be all found as substrings at indices 0, 1, 3 and 2 respectively. +``` + +**Example 2:** + +``` +Input: s = "0110", k = 1 +Output: true +Explanation: The binary codes of length 1 are "0" and "1", it is clear that both exist as a substring. +``` + +**Example 3:** + +``` +Input: s = "0110", k = 2 +Output: false +Explanation: The binary code "00" is of length 2 and does not exist in the array. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-a-string-contains-all-binary-codes-of-size-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution.go b/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution.go new file mode 100644 index 000000000..c929e93e3 --- /dev/null +++ b/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution.go @@ -0,0 +1,34 @@ +package Solution + +func Solution(s string, k int) bool { + sl := len(s) + expect := pow2(k) + if sl < k || int32(sl-k+1) < expect { + return false + } + + ans := make(map[int32]struct{}) + base := int32(0) + m := int32(1) + for idx := sl - 1; idx > sl-k-1; idx-- { + base += int32(s[idx]-'0') * m + m *= 2 + } + m /= 2 + ans[base] = struct{}{} + + for idx := sl - 2; idx >= k-1; idx-- { + base >>= 1 + base += m * int32(s[idx+1-k]-'0') + ans[base] = struct{}{} + } + return int32(len(ans)) == expect +} + +func pow2(k int) int32 { + base := int32(1) // 2^0 + for i := 0; i < k; i++ { + base *= 2 + } + return base +} diff --git a/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution_test.go b/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution_test.go new file mode 100644 index 000000000..38a248d24 --- /dev/null +++ b/leetcode/1401-1500/1461.Check-If-a-String-Contains-All-Binary-Codes-of-Size-K/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + input string + k int + expect bool + }{ + {"TestCase", "00110110", 2, true}, + {"TestCase", "0110", 1, true}, + {"TestCase", "0110", 2, false}, + {"TestCase", "00110", 2, true}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.input, c.k) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.input, c.k) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 08acc0c40f8209c039f5b8d651793dd67472fb72 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 1 Jun 2022 09:36:57 +0800 Subject: [PATCH 0031/1057] Add solution and test-cases for problem 1480 --- .../1480.Running-Sum-of-1d-Array/README.md | 36 +++++++++++++++++ .../1480.Running-Sum-of-1d-Array/Solution.go | 8 ++++ .../Solution_test.go | 39 +++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 leetcode/1401-1500/1480.Running-Sum-of-1d-Array/README.md create mode 100644 leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution.go create mode 100644 leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution_test.go diff --git a/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/README.md b/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/README.md new file mode 100644 index 000000000..2cf719e70 --- /dev/null +++ b/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/README.md @@ -0,0 +1,36 @@ +# [1480.Running Sum of 1d Array][title] + +## Description +Given an array `nums`. We define a running sum of an array as `runningSum[i] = sum(nums[0]…nums[i])`. + +Return the running sum of `nums`. + +**Example 1:** + +``` +Input: nums = [1,2,3,4] +Output: [1,3,6,10] +Explanation: Running sum is obtained as follows: [1, 1+2, 1+2+3, 1+2+3+4]. +``` + +**Example 2:** + +``` +Input: nums = [1,1,1,1,1] +Output: [1,2,3,4,5] +Explanation: Running sum is obtained as follows: [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1]. +``` + +**Example 3:** + +``` +Input: nums = [3,1,2,10,1] +Output: [3,4,6,16,17] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/running-sum-of-1d-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution.go b/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution.go new file mode 100644 index 000000000..9bb47582b --- /dev/null +++ b/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution.go @@ -0,0 +1,8 @@ +package Solution + +func Solution(nums []int) []int { + for idx := 1; idx < len(nums); idx++ { + nums[idx] += nums[idx-1] + } + return nums +} diff --git a/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution_test.go b/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/Solution_test.go new file mode 100644 index 000000000..e40eb4fe1 --- /dev/null +++ b/leetcode/1401-1500/1480.Running-Sum-of-1d-Array/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 + }{ + {"TestCase", []int{1, 2, 3, 4}, []int{1, 3, 6, 10}}, + {"TestCase", []int{1, 1, 1, 1, 1}, []int{1, 2, 3, 4, 5}}, + {"TestCase", []int{3, 1, 2, 10, 1}, []int{3, 4, 6, 16, 17}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, 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 142d82dc199d64a5975f45cd76b99982fc00d045 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 1 Jun 2022 21:36:59 +0800 Subject: [PATCH 0032/1057] Add solution and test-cases for problem 318 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 20 +++++++++++-- .../Solution_test.go | 10 +++---- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/README.md b/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/README.md index 6469d0a03..9cbf09240 100644 --- a/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/README.md +++ b/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/README.md @@ -1,28 +1,31 @@ # [318.Maximum Product of Word Lengths][title] -> [!WARNING|style:flat] -> 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 array `words`, return the maximum value of `length(word[i]) * length(word[j])` where the two words do not share common letters. If no such two words exist, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["abcw","baz","foo","bar","xtfn","abcdef"] +Output: 16 +Explanation: The two words can be "abcw", "xtfn". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Product of Word Lengths -```go +``` +Input: words = ["a","ab","abc","d","cd","bcd","abcd"] +Output: 4 +Explanation: The two words can be "ab", "cd". ``` +**Example 3:** + +``` +Input: words = ["a","aa","aaa","aaaa"] +Output: 0 +Explanation: No such pair of words. +``` ## 结语 diff --git a/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution.go b/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution.go index d115ccf5e..facc2a5af 100644 --- a/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution.go +++ b/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string) int { + ans := 0 + for idx := 0; idx < len(words)-1; idx++ { + for next := idx + 1; next < len(words); next++ { + vec := [2]int{0, 0} + lidx, lnext := len(words[idx]), len(words[next]) + for b := 0; b < lidx; b++ { + vec[0] |= 1 << int(words[idx][b]-'a') + } + for b := 0; b < lnext; b++ { + vec[1] |= 1 << int(words[next][b]-'a') + } + if vec[0]&vec[1] == 0 && lidx*lnext > ans { + ans = lidx * lnext + } + } + } + return ans } diff --git a/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution_test.go b/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution_test.go index 14ff50eb4..449a037b1 100644 --- a/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/Solution_test.go +++ b/leetcode/301-400/0318.Maximum-Product-of-Word-Lengths/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{"abcw", "baz", "foo", "bar", "xtfn", "abcdef"}, 16}, + {"TestCase2", []string{"a", "ab", "abc", "d", "cd", "bcd", "abcd"}, 4}, + {"TestCase3", []string{"a", "aa", "aaa", "aaaa", "aaaaa"}, 0}, } // 开始测试 From a9f249024e30a6ebe96c2f97dc34e5b4f21990b7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 2 Jun 2022 22:37:26 +0800 Subject: [PATCH 0033/1057] Add solution and test-cases and README for problem 119 --- .../PascalTriangleAnimated2.gif | Bin 0 -> 28827 bytes .../0119.Pascals-Triangle-II/README.md | 37 ++++++++++++++++++ .../0119.Pascals-Triangle-II/Solution.go | 11 ++++++ .../0119.Pascals-Triangle-II/Solution_test.go | 12 ++++-- 4 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 leetcode/101-200/0119.Pascals-Triangle-II/PascalTriangleAnimated2.gif create mode 100644 leetcode/101-200/0119.Pascals-Triangle-II/README.md diff --git a/leetcode/101-200/0119.Pascals-Triangle-II/PascalTriangleAnimated2.gif b/leetcode/101-200/0119.Pascals-Triangle-II/PascalTriangleAnimated2.gif new file mode 100644 index 0000000000000000000000000000000000000000..c002af436c3938e76b409c7cf9bc5bc6aa554db5 GIT binary patch literal 28827 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 literal 0 HcmV?d00001 diff --git a/leetcode/101-200/0119.Pascals-Triangle-II/README.md b/leetcode/101-200/0119.Pascals-Triangle-II/README.md new file mode 100644 index 000000000..2921b8419 --- /dev/null +++ b/leetcode/101-200/0119.Pascals-Triangle-II/README.md @@ -0,0 +1,37 @@ +# [119.Pascal's Triangle II][title] + +## Description + +Given an integer `rowIndex`, return the rowIndexth (**0-indexed**) row of the **Pascal's triangle**. + +In **Pascal's triangle**, each number is the sum of the two numbers directly above it as shown: + +![triangle](./PascalTriangleAnimated2.gif) + +**Example 1:** + +``` +Input: rowIndex = 3 +Output: [1,3,3,1] +``` + +**Example 2:** + +``` +Input: rowIndex = 0 +Output: [1] +``` + +**Example 3:** + +``` +Input: rowIndex = 1 +Output: [1,1] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/pascals-triangle-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0119.Pascals-Triangle-II/Solution.go b/leetcode/101-200/0119.Pascals-Triangle-II/Solution.go index 85894d545..0e68e56d5 100644 --- a/leetcode/101-200/0119.Pascals-Triangle-II/Solution.go +++ b/leetcode/101-200/0119.Pascals-Triangle-II/Solution.go @@ -16,3 +16,14 @@ func Solution(rowIndex int) []int { } return pt } + +func Solution2(rowIndex int) []int { + ans := make([]int, rowIndex+1) + ans[0] = 1 + for idx := 1; idx <= rowIndex; idx++ { + for in := idx; in >= 1; in-- { + ans[in] += ans[in-1] + } + } + return ans +} diff --git a/leetcode/101-200/0119.Pascals-Triangle-II/Solution_test.go b/leetcode/101-200/0119.Pascals-Triangle-II/Solution_test.go index a1daac028..a2ae92d00 100644 --- a/leetcode/101-200/0119.Pascals-Triangle-II/Solution_test.go +++ b/leetcode/101-200/0119.Pascals-Triangle-II/Solution_test.go @@ -13,9 +13,10 @@ func TestSolution(t *testing.T) { inputs int expect []int }{ - {"TestCase", 0, []int{1}}, - {"TestCase", 3, []int{1, 3, 3, 1}}, - {"TestCase", 5, []int{1, 5, 10, 10, 5, 1}}, + {"TestCase1", 0, []int{1}}, + {"TestCase2", 3, []int{1, 3, 3, 1}}, + {"TestCase3", 5, []int{1, 5, 10, 10, 5, 1}}, + {"TestCase4", 20, []int{1, 20, 190, 1140, 4845, 15504, 38760, 77520, 125970, 167960, 184756, 167960, 125970, 77520, 38760, 15504, 4845, 1140, 190, 20, 1}}, } // 开始测试 @@ -26,6 +27,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } From 6803881f37ef43eb48caeda51da3c297e8eb58b1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 3 Jun 2022 23:46:29 +0800 Subject: [PATCH 0034/1057] Add solution and test-cases for problem 304 --- .../README.md | 36 ++++++++++-------- .../Solution.go | 35 ++++++++++++++++- .../Solution_test.go | 36 +++++++++++++----- .../sum-grid.jpg | Bin 0 -> 28244 bytes 4 files changed, 80 insertions(+), 27 deletions(-) create mode 100644 leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/sum-grid.jpg diff --git a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/README.md b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/README.md index 8f7011cd1..acece3a58 100644 --- a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/README.md +++ b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/README.md @@ -1,28 +1,32 @@ # [304.Range Sum Query 2D - Immutable][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a 2D matrix `matrix`, handle multiple queries of the following type: -**Example 1:** +- Calculate the **sum** of the elements of `matrix` inside the rectangle defined by its **upper left corner** `(row1, col1)` and **lower right corner** `(row2, col2)`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the NumMatrix class: -## 题意 -> ... +- `NumMatrix(int[][] matrix)` Initializes the object with the integer matrix `matrix`. +- `int sumRegion(int row1, int col1, int row2, int col2)` Returns the **sum** of the elements of `matrix` inside the rectangle defined by its **upper left corner** `(row1, col1)` and **lower right corner** `(row2, col2)`. -## 题解 -### 思路1 -> ... -Range Sum Query 2D - Immutable -```go -``` +**Example 1:** +![sum-grid](./sum-grid.jpg) +``` +Input +["NumMatrix", "sumRegion", "sumRegion", "sumRegion"] +[[[[3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5]]], [2, 1, 4, 3], [1, 1, 2, 2], [1, 2, 2, 4]] +Output +[null, 8, 11, 12] + +Explanation +NumMatrix numMatrix = new NumMatrix([[3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0, 3, 0, 5]]); +numMatrix.sumRegion(2, 1, 4, 3); // return 8 (i.e sum of the red rectangle) +numMatrix.sumRegion(1, 1, 2, 2); // return 11 (i.e sum of the green rectangle) +numMatrix.sumRegion(1, 2, 2, 4); // return 12 (i.e sum of the blue rectangle) +``` ## 结语 diff --git a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution.go b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution.go index d115ccf5e..49649a9f8 100644 --- a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution.go +++ b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +type NumMatrix struct { + matrix [][]int +} + +func Constructor(matrix [][]int) NumMatrix { + for row := 0; row < len(matrix); row++ { + for col := 1; col < len(matrix[row]); col++ { + matrix[row][col] += matrix[row][col-1] + } + } + + return NumMatrix{matrix: matrix} +} + +func (this *NumMatrix) SumRegion(row1 int, col1 int, row2 int, col2 int) int { + ans := 0 + for row := row1; row <= row2; row++ { + ans += this.matrix[row][col2] + if col1 > 0 { + ans -= this.matrix[row][col1-1] + } + } + return ans +} + +func Solution(matrix [][]int, coordinates [][4]int) []int { + o := Constructor(matrix) + ans := make([]int, 0) + for _, coordinate := range coordinates { + ans = append(ans, o.SumRegion(coordinate[0], coordinate[1], coordinate[2], coordinate[3])) + } + + return ans } diff --git a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution_test.go b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution_test.go index 14ff50eb4..c2bdf5d1f 100644 --- a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution_test.go +++ b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/Solution_test.go @@ -9,22 +9,40 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + matrix [][]int + coordinates [][4]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {3, 0, 1, 4, 2}, + {5, 6, 3, 2, 1}, + {1, 2, 0, 1, 5}, + {4, 1, 0, 1, 7}, + {1, 0, 3, 0, 5}, + }, [][4]int{ + {2, 1, 4, 3}, + {1, 1, 2, 2}, + {1, 2, 2, 4}, + {0, 0, 0, 0}, + {4, 4, 4, 4}, + }, []int{8, 11, 12, 3, 5}}, + {"TestCase2", [][]int{ + {-4, -5}, + }, [][4]int{ + {0, 0, 0, 0}, + {0, 0, 0, 1}, + {0, 1, 0, 1}, + }, []int{-4, -9, -5}}, } // 开始测试 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.coordinates) 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.coordinates) } }) } diff --git a/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/sum-grid.jpg b/leetcode/301-400/0304.Range-Sum-Query-2D--Immutable/sum-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05020d44a894bbf596509aa49b78b88ff9f5d06c GIT binary patch literal 28244 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 E0J~8JdjJ3c literal 0 HcmV?d00001 From d2a7c22949c7fa3bb3b38d07d9c6a844b296fd22 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Jun 2022 11:15:57 +0800 Subject: [PATCH 0035/1057] Add solution and test-cases for problem 892 --- .../0892.Surface-Area-of-3D-Shapes/README.md | 37 ++++++++++++------ .../Solution.go | 37 +++++++++++++++++- .../Solution_test.go | 12 +++--- .../tmp-grid2.jpg | Bin 0 -> 3766 bytes .../tmp-grid4.jpg | Bin 0 -> 6372 bytes .../tmp-grid5.jpg | Bin 0 -> 7833 bytes 6 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid2.jpg create mode 100644 leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid4.jpg create mode 100644 leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid5.jpg diff --git a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/README.md b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/README.md index ed5ffe079..89f727b34 100644 --- a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/README.md +++ b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/README.md @@ -1,28 +1,39 @@ # [892.Surface Area of 3D Shapes][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `n x n` grid where you have placed some `1 x 1 x 1` cubes. Each value `v = grid[i][j]` represents a tower of `v` cubes placed on top of cell `(i, j)`. + +After placing these cubes, you have decided to glue any directly adjacent cubes to each other, forming several irregular 3D shapes. + +Return the total surface area of the resulting shapes. -**Example 1:** +**Note**: The bottom face of each shape counts toward its surface area. + +**Example 1:** +![tmp-grid2](./tmp-grid2.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,2],[3,4]] +Output: 34 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![tmp-grid4](./tmp-grid4.jpg) -### 思路1 -> ... -Surface Area of 3D Shapes -```go +``` +Input: grid = [[1,1,1],[1,0,1],[1,1,1]] +Output: 32 ``` +**Example 3:** + +![tmp-grid5](./tmp-grid5.jpg) + +``` +Input: grid = [[2,2,2],[2,1,2],[2,2,2]] +Output: 46 +``` ## 结语 diff --git a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution.go b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution.go index d115ccf5e..fb85bd285 100644 --- a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution.go +++ b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + length := len(grid) + surfaces := make([][]int, len(grid)) + for row := 0; row < length; row++ { + surfaces[row] = make([]int, length) + for col := 0; col < length; col++ { + if grid[row][col] != 0 { + surfaces[row][col] = 4*grid[row][col] + 2 + } + } + } + + dirs := [4][2]int{ + {-1, 0}, + {0, -1}, + {1, 0}, + {0, 1}, + } + ans := 0 + for row := 0; row < length; row++ { + for col := 0; col < length; col++ { + for _, dir := range dirs { + nextRow, nextCol := row+dir[0], col+dir[1] + if nextRow >= 0 && nextRow < length && nextCol >= 0 && nextCol < length && grid[nextRow][nextCol] != 0 { + diff := grid[row][col] + if grid[nextRow][nextCol] < diff { + diff = grid[nextRow][nextCol] + } + surfaces[row][col] -= diff + } + } + ans += surfaces[row][col] + } + } + return ans } diff --git a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution_test.go b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution_test.go index 14ff50eb4..fa6829e01 100644 --- a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/Solution_test.go +++ b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/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{{1, 2}, {3, 4}}, 34}, + {"TestCase2", [][]int{{1, 1, 1}, {1, 0, 1}, {1, 1, 1}}, 32}, + {"TestCase3", [][]int{{2, 2, 2}, {2, 1, 2}, {2, 2, 2}}, 46}, + {"TestCase4", [][]int{{1}}, 6}, + {"TestCase5", [][]int{{2}}, 10}, } // 开始测试 diff --git a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid2.jpg b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cfcd5475e3ddf70cbb2b56ddbcb3905c59b5f750 GIT binary patch literal 3766 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 F{uj%(RQdn_ literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid5.jpg b/leetcode/801-900/0892.Surface-Area-of-3D-Shapes/tmp-grid5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f42ff0639f06b96ffe2e8cda5d77652259e6c08a GIT binary patch literal 7833 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 AlmGw# literal 0 HcmV?d00001 From 6300f2555c1102d832948ac00587c281212fc8b4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 8 Jun 2022 21:17:52 +0800 Subject: [PATCH 0036/1057] Add solution and test-cases for problem 1332 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 9 ++++- .../Solution_test.go | 12 +++--- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/README.md b/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/README.md index a5a9dd0fd..2872bd9a6 100644 --- a/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/README.md +++ b/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/README.md @@ -1,28 +1,39 @@ # [1332.Remove 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 +You are given a string s consisting **only** of letters `'a'` and `'b'`. In a single step you can remove one **palindromic subsequence** from `s`. + +Return the **minimum** number of steps to make the given string empty. + +A string is a **subsequence** of a given string if it is generated by deleting some characters of a given string without changing its order. Note that a subsequence does **not** necessarily need to be contiguous. + +A string is called **palindrome** if is one that reads the same backward as well as forward. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ababa" +Output: 1 +Explanation: s is already a palindrome, so its entirety can be removed in a single step. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Remove Palindromic Subsequences -```go ``` +Input: s = "abb" +Output: 2 +Explanation: "abb" -> "bb" -> "". +Remove palindromic subsequence "a" then "bb". +``` + +**Example 3:** +``` +Input: s = "baabb" +Output: 2 +Explanation: "baabb" -> "b" -> "". +Remove palindromic subsequence "baab" then "b". +``` ## 结语 diff --git a/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution.go b/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution.go index d115ccf5e..bd6bb2c68 100644 --- a/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution.go +++ b/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution.go @@ -1,5 +1,10 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + for s1, e := 0, len(s)-1; s1 < e; s1, e = s1+1, e-1 { + if s[s1] != s[e] { + return 2 + } + } + return 1 } diff --git a/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution_test.go b/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution_test.go index 14ff50eb4..5ae1692ee 100644 --- a/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution_test.go +++ b/leetcode/1301-1400/1332.Remove-Palindromic-Subsequences/Solution_test.go @@ -10,12 +10,14 @@ 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", "ababa", 1}, + {"TestCase2", "ababbaba", 1}, + {"TestCase3", "a", 1}, + {"TestCase4", "abb", 2}, + {"TestCase5", "baabb", 2}, } // 开始测试 From 7a156ccb9ec77fb813aac9f00e95c9b122a2c837 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Jun 2022 19:15:59 +0800 Subject: [PATCH 0037/1057] Add solution and test-cases for problem 209 --- .../0209.Minimum-Size-Subarray-Sum/README.md | 29 ++++++++++--------- .../Solution.go | 19 ++++++++++-- .../Solution_test.go | 17 ++++++----- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/README.md b/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/README.md index 5039912a3..7f4338690 100644 --- a/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/README.md +++ b/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/README.md @@ -1,28 +1,31 @@ # [209.Minimum Size Subarray Sum][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array of positive integers `nums` and a positive integer $target a_b$, +return the minimal length of a **contiguous subarray** __[numsl, numsl+1, ..., numsr-1, numsr]__ of which the +sum is greater than or equal to `target`. If there is no such subarray, return `0` instead. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: target = 7, nums = [2,3,1,2,4,3] +Output: 2 +Explanation: The subarray [4,3] has the minimal length under the problem constraint. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Size Subarray Sum -```go +``` +Input: target = 4, nums = [1,4,4] +Output: 1 ``` +**Example 3:** + +``` +Input: target = 11, nums = [1,1,1,1,1,1,1,1] +Output: 0 +``` ## 结语 diff --git a/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution.go b/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution.go index d115ccf5e..806392252 100644 --- a/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution.go +++ b/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(target int, nums []int) int { + ans := 0 + start, end, sum := 0, 0, 0 + for end < len(nums) { + if sum < target { + sum += nums[end] + end++ + } + for sum >= target { + if ans == 0 || ans > end-start { + ans = end - start + } + sum -= nums[start] + start++ + } + } + return ans } diff --git a/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution_test.go b/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution_test.go index 14ff50eb4..7c0b5226c 100644 --- a/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution_test.go +++ b/leetcode/201-300/0209.Minimum-Size-Subarray-Sum/Solution_test.go @@ -10,21 +10,22 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + target int + nums []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 7, []int{2, 3, 1, 2, 4, 3}, 2}, + {"TestCase2", 4, []int{1, 4, 4}, 1}, + {"TestCase3", 11, []int{1, 1, 1, 1, 1, 1, 1, 1}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.target, c.nums) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.target, c.nums) } }) } From 903ffdd22005ae3522c6379e36ab274ea8e39512 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 12 Jun 2022 12:51:10 +0800 Subject: [PATCH 0038/1057] fix panic and add new problems --- cmd/leetcode/makedir.go | 32 +++++++++++++++ cmd/leetcode/problem-readme.go | 9 ++++- cmd/leetcode/problem.go | 3 +- cmd/main.go | 8 +++- .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1501-1600/1507.Reformat-Date/README.md | 32 +++++++++++++++ .../1501-1600/1507.Reformat-Date/Solution.go | 5 +++ .../1507.Reformat-Date/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1501-1600/1510.Stone-Game-IV/README.md | 32 +++++++++++++++ .../1501-1600/1510.Stone-Game-IV/Solution.go | 5 +++ .../1510.Stone-Game-IV/Solution_test.go | 39 +++++++++++++++++++ .../1512.Number-of-Good-Pairs/README.md | 32 +++++++++++++++ .../1512.Number-of-Good-Pairs/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1501-1600/1518.Water-Bottles/README.md | 32 +++++++++++++++ .../1501-1600/1518.Water-Bottles/Solution.go | 5 +++ .../1518.Water-Bottles/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 +++++++++++++++++++ .../1501-1600/1528.Shuffle-String/README.md | 32 +++++++++++++++ .../1501-1600/1528.Shuffle-String/Solution.go | 5 +++ .../1528.Shuffle-String/Solution_test.go | 39 +++++++++++++++++++ .../1529.Minimum-Suffix-Flips/README.md | 32 +++++++++++++++ .../1529.Minimum-Suffix-Flips/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1531.String-Compression-II/README.md | 32 +++++++++++++++ .../1531.String-Compression-II/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1534.Count-Good-Triplets/README.md | 32 +++++++++++++++ .../1534.Count-Good-Triplets/Solution.go | 5 +++ .../1534.Count-Good-Triplets/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1537.Get-the-Maximum-Score/README.md | 32 +++++++++++++++ .../1537.Get-the-Maximum-Score/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1544.Make-The-String-Great/README.md | 32 +++++++++++++++ .../1544.Make-The-String-Great/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1550.Three-Consecutive-Odds/README.md | 32 +++++++++++++++ .../1550.Three-Consecutive-Odds/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1556.Thousand-Separator/README.md | 32 +++++++++++++++ .../1556.Thousand-Separator/Solution.go | 5 +++ .../1556.Thousand-Separator/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1559.Detect-Cycles-in-2D-Grid/README.md | 32 +++++++++++++++ .../1559.Detect-Cycles-in-2D-Grid/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1501-1600/1563.Stone-Game-V/README.md | 32 +++++++++++++++ .../1501-1600/1563.Stone-Game-V/Solution.go | 5 +++ .../1563.Stone-Game-V/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 +++++++++++++++++++ .../1572.Matrix-Diagonal-Sum/README.md | 32 +++++++++++++++ .../1572.Matrix-Diagonal-Sum/Solution.go | 5 +++ .../1572.Matrix-Diagonal-Sum/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1575.Count-All-Possible-Routes/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1583.Count-Unhappy-Friends/README.md | 32 +++++++++++++++ .../1583.Count-Unhappy-Friends/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1590.Make-Sum-Divisible-by-P/README.md | 32 +++++++++++++++ .../1590.Make-Sum-Divisible-by-P/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1591.Strange-Printer-II/README.md | 32 +++++++++++++++ .../1591.Strange-Printer-II/Solution.go | 5 +++ .../1591.Strange-Printer-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 +++++++++++++++++++ .../1598.Crawler-Log-Folder/README.md | 32 +++++++++++++++ .../1598.Crawler-Log-Folder/Solution.go | 5 +++ .../1598.Crawler-Log-Folder/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1600.Throne-Inheritance/README.md | 32 +++++++++++++++ .../1600.Throne-Inheritance/Solution.go | 5 +++ .../1600.Throne-Inheritance/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1603.Design-Parking-System/README.md | 32 +++++++++++++++ .../1603.Design-Parking-System/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1601-1700/1609.Even-Odd-Tree/README.md | 32 +++++++++++++++ .../1601-1700/1609.Even-Odd-Tree/Solution.go | 5 +++ .../1609.Even-Odd-Tree/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 +++++++++++++++++++ .../1615.Maximal-Network-Rank/README.md | 32 +++++++++++++++ .../1615.Maximal-Network-Rank/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1601-1700/1622.Fancy-Sequence/README.md | 32 +++++++++++++++ .../1601-1700/1622.Fancy-Sequence/Solution.go | 5 +++ .../1622.Fancy-Sequence/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 +++++++++++++++++++ leetcode/1601-1700/1629.Slowest-Key/README.md | 32 +++++++++++++++ .../1601-1700/1629.Slowest-Key/Solution.go | 5 +++ .../1629.Slowest-Key/Solution_test.go | 39 +++++++++++++++++++ .../1630.Arithmetic-Subarrays/README.md | 32 +++++++++++++++ .../1630.Arithmetic-Subarrays/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1631.Path-With-Minimum-Effort/README.md | 32 +++++++++++++++ .../1631.Path-With-Minimum-Effort/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1632.Rank-Transform-of-a-Matrix/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1641.Count-Sorted-Vowel-Strings/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1643.Kth-Smallest-Instructions/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1601-1700/1652.Defuse-the-Bomb/README.md | 32 +++++++++++++++ .../1652.Defuse-the-Bomb/Solution.go | 5 +++ .../1652.Defuse-the-Bomb/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 +++++++++++++++++++ .../1656.Design-an-Ordered-Stream/README.md | 32 +++++++++++++++ .../1656.Design-an-Ordered-Stream/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1659.Maximize-Grid-Happiness/README.md | 32 +++++++++++++++ .../1659.Maximize-Grid-Happiness/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1664.Ways-to-Make-a-Fair-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 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1672.Richest-Customer-Wealth/README.md | 32 +++++++++++++++ .../1672.Richest-Customer-Wealth/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1678.Goal-Parser-Interpretation/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1679.Max-Number-of-K-Sum-Pairs/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1681.Minimum-Incompatibility/README.md | 32 +++++++++++++++ .../1681.Minimum-Incompatibility/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1601-1700/1686.Stone-Game-VI/README.md | 32 +++++++++++++++ .../1601-1700/1686.Stone-Game-VI/Solution.go | 5 +++ .../1686.Stone-Game-VI/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 +++++++++++++++++++ .../1601-1700/1690.Stone-Game-VII/README.md | 32 +++++++++++++++ .../1601-1700/1690.Stone-Game-VII/Solution.go | 5 +++ .../1690.Stone-Game-VII/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1694.Reformat-Phone-Number/README.md | 32 +++++++++++++++ .../1694.Reformat-Phone-Number/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1695.Maximum-Erasure-Value/README.md | 32 +++++++++++++++ .../1695.Maximum-Erasure-Value/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1601-1700/1696.Jump-Game-VI/README.md | 32 +++++++++++++++ .../1601-1700/1696.Jump-Game-VI/Solution.go | 5 +++ .../1696.Jump-Game-VI/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1701.Average-Waiting-Time/README.md | 32 +++++++++++++++ .../1701.Average-Waiting-Time/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1706.Where-Will-the-Ball-Fall/README.md | 32 +++++++++++++++ .../1706.Where-Will-the-Ball-Fall/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1710.Maximum-Units-on-a-Truck/README.md | 32 +++++++++++++++ .../1710.Maximum-Units-on-a-Truck/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1701-1800/1711.Count-Good-Meals/README.md | 32 +++++++++++++++ .../1711.Count-Good-Meals/Solution.go | 5 +++ .../1711.Count-Good-Meals/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 +++++++++++++++++++ .../1720.Decode-XORed-Array/README.md | 32 +++++++++++++++ .../1720.Decode-XORed-Array/Solution.go | 5 +++ .../1720.Decode-XORed-Array/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1726.Tuple-with-Same-Product/README.md | 32 +++++++++++++++ .../1726.Tuple-with-Same-Product/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1701-1800/1728.Cat-and-Mouse-II/README.md | 32 +++++++++++++++ .../1728.Cat-and-Mouse-II/Solution.go | 5 +++ .../1728.Cat-and-Mouse-II/Solution_test.go | 39 +++++++++++++++++++ .../1732.Find-the-Highest-Altitude/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1734.Decode-XORed-Permutation/README.md | 32 +++++++++++++++ .../1734.Decode-XORed-Permutation/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1701-1800/1739.Building-Boxes/README.md | 32 +++++++++++++++ .../1701-1800/1739.Building-Boxes/Solution.go | 5 +++ .../1739.Building-Boxes/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 +++++++++++++++++++ .../1745.Palindrome-Partitioning-IV/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1748.Sum-of-Unique-Elements/README.md | 32 +++++++++++++++ .../1748.Sum-of-Unique-Elements/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1755.Closest-Subsequence-Sum/README.md | 32 +++++++++++++++ .../1755.Closest-Subsequence-Sum/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1763.Longest-Nice-Substring/README.md | 32 +++++++++++++++ .../1763.Longest-Nice-Substring/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1765.Map-of-Highest-Peak/README.md | 32 +++++++++++++++ .../1765.Map-of-Highest-Peak/Solution.go | 5 +++ .../1765.Map-of-Highest-Peak/Solution_test.go | 39 +++++++++++++++++++ .../1701-1800/1766.Tree-of-Coprimes/README.md | 32 +++++++++++++++ .../1766.Tree-of-Coprimes/Solution.go | 5 +++ .../1766.Tree-of-Coprimes/Solution_test.go | 39 +++++++++++++++++++ .../1768.Merge-Strings-Alternately/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1774.Closest-Dessert-Cost/README.md | 32 +++++++++++++++ .../1774.Closest-Dessert-Cost/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1701-1800/1776.Car-Fleet-II/README.md | 32 +++++++++++++++ .../1701-1800/1776.Car-Fleet-II/Solution.go | 5 +++ .../1776.Car-Fleet-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 +++++++++++++++++++ .../1782.Count-Pairs-Of-Nodes/README.md | 32 +++++++++++++++ .../1782.Count-Pairs-Of-Nodes/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1791.Find-Center-of-Star-Graph/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1792.Maximum-Average-Pass-Ratio/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1901.Find-a-Peak-Element-II/README.md | 32 +++++++++++++++ .../1901.Find-a-Peak-Element-II/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1905.Count-Sub-Islands/README.md | 32 +++++++++++++++ .../1905.Count-Sub-Islands/Solution.go | 5 +++ .../1905.Count-Sub-Islands/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 +++++++++++++++++++ .../1912.Design-Movie-Rental-System/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1914.Cyclically-Rotating-a-Grid/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1922.Count-Good-Numbers/README.md | 32 +++++++++++++++ .../1922.Count-Good-Numbers/Solution.go | 5 +++ .../1922.Count-Good-Numbers/Solution_test.go | 39 +++++++++++++++++++ .../1923.Longest-Common-Subpath/README.md | 32 +++++++++++++++ .../1923.Longest-Common-Subpath/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1925.Count-Square-Sum-Triples/README.md | 32 +++++++++++++++ .../1925.Count-Square-Sum-Triples/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ leetcode/1901-2000/1927.Sum-Game/README.md | 32 +++++++++++++++ leetcode/1901-2000/1927.Sum-Game/Solution.go | 5 +++ .../1901-2000/1927.Sum-Game/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1929.Concatenation-of-Array/README.md | 32 +++++++++++++++ .../1929.Concatenation-of-Array/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1943.Describe-the-Painting/README.md | 32 +++++++++++++++ .../1943.Describe-the-Painting/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1901-2000/1952.Three-Divisors/README.md | 32 +++++++++++++++ .../1901-2000/1952.Three-Divisors/Solution.go | 5 +++ .../1952.Three-Divisors/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 +++++++++++++++++++ .../1958.Check-if-Move-is-Legal/README.md | 32 +++++++++++++++ .../1958.Check-if-Move-is-Legal/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../1975.Maximum-Matrix-Sum/README.md | 32 +++++++++++++++ .../1975.Maximum-Matrix-Sum/Solution.go | 5 +++ .../1975.Maximum-Matrix-Sum/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1980.Find-Unique-Binary-String/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1993.Operations-on-Tree/README.md | 32 +++++++++++++++ .../1993.Operations-on-Tree/Solution.go | 5 +++ .../1993.Operations-on-Tree/Solution_test.go | 39 +++++++++++++++++++ .../1994.The-Number-of-Good-Subsets/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1995.Count-Special-Quadruplets/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../1998.GCD-Sort-of-an-Array/README.md | 32 +++++++++++++++ .../1998.GCD-Sort-of-an-Array/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2000.Reverse-Prefix-of-Word/README.md | 32 +++++++++++++++ .../2000.Reverse-Prefix-of-Word/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2008.Maximum-Earnings-From-Taxi/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2012.Sum-of-Beauty-in-the-Array/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2001-2100/2013.Detect-Squares/README.md | 32 +++++++++++++++ .../2001-2100/2013.Detect-Squares/Solution.go | 5 +++ .../2013.Detect-Squares/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ leetcode/2001-2100/2017.Grid-Game/README.md | 32 +++++++++++++++ leetcode/2001-2100/2017.Grid-Game/Solution.go | 5 +++ .../2001-2100/2017.Grid-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 +++++++++++++++++++ .../2028.Find-Missing-Observations/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2001-2100/2029.Stone-Game-IX/README.md | 32 +++++++++++++++ .../2001-2100/2029.Stone-Game-IX/Solution.go | 5 +++ .../2029.Stone-Game-IX/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2001-2100/2032.Two-Out-of-Three/README.md | 32 +++++++++++++++ .../2032.Two-Out-of-Three/Solution.go | 5 +++ .../2032.Two-Out-of-Three/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2034.Stock-Price-Fluctuation-/README.md | 32 +++++++++++++++ .../2034.Stock-Price-Fluctuation-/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2043.Simple-Bank-System/README.md | 32 +++++++++++++++ .../2043.Simple-Bank-System/Solution.go | 5 +++ .../2043.Simple-Bank-System/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 +++++++++++++++++++ .../2050.Parallel-Courses-III/README.md | 32 +++++++++++++++ .../2050.Parallel-Courses-III/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2055.Plates-Between-Candles/README.md | 32 +++++++++++++++ .../2055.Plates-Between-Candles/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2063.Vowels-of-All-Substrings/README.md | 32 +++++++++++++++ .../2063.Vowels-of-All-Substrings/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2073.Time-Needed-to-Buy-Tickets/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2001-2100/2079.Watering-Plants/README.md | 32 +++++++++++++++ .../2079.Watering-Plants/Solution.go | 5 +++ .../2079.Watering-Plants/Solution_test.go | 39 +++++++++++++++++++ .../2080.Range-Frequency-Queries/README.md | 32 +++++++++++++++ .../2080.Range-Frequency-Queries/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2081.Sum-of-k-Mirror-Numbers/README.md | 32 +++++++++++++++ .../2081.Sum-of-k-Mirror-Numbers/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2090.K-Radius-Subarray-Averages/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2097.Valid-Arrangement-of-Pairs/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2101.Detonate-the-Maximum-Bombs/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2101-2200/2103.Rings-and-Rods/README.md | 32 +++++++++++++++ .../2101-2200/2103.Rings-and-Rods/Solution.go | 5 +++ .../2103.Rings-and-Rods/Solution_test.go | 39 +++++++++++++++++++ .../2104.Sum-of-Subarray-Ranges/README.md | 32 +++++++++++++++ .../2104.Sum-of-Subarray-Ranges/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2105.Watering-Plants-II/README.md | 32 +++++++++++++++ .../2105.Watering-Plants-II/Solution.go | 5 +++ .../2105.Watering-Plants-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 +++++++++++++++++++ .../2109.Adding-Spaces-to-a-String/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2122.Recover-the-Original-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 +++++++++++++++++++ .../2126.Destroying-Asteroids/README.md | 32 +++++++++++++++ .../2126.Destroying-Asteroids/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2129.Capitalize-the-Title/README.md | 32 +++++++++++++++ .../2129.Capitalize-the-Title/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2132.Stamping-the-Grid/README.md | 32 +++++++++++++++ .../2132.Stamping-the-Grid/Solution.go | 5 +++ .../2132.Stamping-the-Grid/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2145.Count-the-Hidden-Sequences/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2157.Groups-of-Strings/README.md | 32 +++++++++++++++ .../2157.Groups-of-Strings/Solution.go | 5 +++ .../2157.Groups-of-Strings/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 +++++++++++++++++++ .../2101-2200/2166.Design-Bitset/README.md | 32 +++++++++++++++ .../2101-2200/2166.Design-Bitset/Solution.go | 5 +++ .../2166.Design-Bitset/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 +++++++++++++++++++ .../2172.Maximum-AND-Sum-of-Array/README.md | 32 +++++++++++++++ .../2172.Maximum-AND-Sum-of-Array/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2191.Sort-the-Jumbled-Numbers/README.md | 32 +++++++++++++++ .../2191.Sort-the-Jumbled-Numbers/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2211.Count-Collisions-on-a-Road/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2201-2300/2235.Add-Two-Integers/README.md | 32 +++++++++++++++ .../2235.Add-Two-Integers/Solution.go | 5 +++ .../2235.Add-Two-Integers/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 +++++++++++++++++++ .../2241.Design-an-ATM-Machine/README.md | 32 +++++++++++++++ .../2241.Design-an-ATM-Machine/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2256.Minimum-Average-Difference/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2258.Escape-the-Spreading-Fire/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2262.Total-Appeal-of-A-String/README.md | 32 +++++++++++++++ .../2262.Total-Appeal-of-A-String/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2266.Count-Number-of-Texts/README.md | 32 +++++++++++++++ .../2266.Count-Number-of-Texts/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2288.Apply-Discount-to-Prices/README.md | 32 +++++++++++++++ .../2288.Apply-Discount-to-Prices/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2201-2300/2293.Min-Max-Game/README.md | 32 +++++++++++++++ .../2201-2300/2293.Min-Max-Game/Solution.go | 5 +++ .../2293.Min-Max-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 +++++++++++++++++++ .../2296.Design-a-Text-Editor/README.md | 32 +++++++++++++++ .../2296.Design-a-Text-Editor/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2299.Strong-Password-Checker-II/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ 1609 files changed, 40709 insertions(+), 3 deletions(-) create mode 100755 leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md create mode 100644 leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go create mode 100644 leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go create mode 100755 leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/README.md create mode 100644 leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution.go create mode 100644 leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution_test.go create mode 100755 leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md create mode 100644 leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go create mode 100644 leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go create mode 100755 leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/README.md create mode 100644 leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution.go create mode 100644 leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution_test.go create mode 100755 leetcode/1501-1600/1507.Reformat-Date/README.md create mode 100644 leetcode/1501-1600/1507.Reformat-Date/Solution.go create mode 100644 leetcode/1501-1600/1507.Reformat-Date/Solution_test.go create mode 100755 leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md create mode 100644 leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go create mode 100644 leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go create mode 100755 leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md create mode 100644 leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go create mode 100644 leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go create mode 100755 leetcode/1501-1600/1510.Stone-Game-IV/README.md create mode 100644 leetcode/1501-1600/1510.Stone-Game-IV/Solution.go create mode 100644 leetcode/1501-1600/1510.Stone-Game-IV/Solution_test.go create mode 100755 leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md create mode 100644 leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go create mode 100644 leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go create mode 100755 leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md create mode 100644 leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go create mode 100644 leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go create mode 100755 leetcode/1501-1600/1514.Path-with-Maximum-Probability/README.md create mode 100644 leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go create mode 100644 leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go create mode 100755 leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/README.md create mode 100644 leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution.go create mode 100644 leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution_test.go create mode 100755 leetcode/1501-1600/1518.Water-Bottles/README.md create mode 100644 leetcode/1501-1600/1518.Water-Bottles/Solution.go create mode 100644 leetcode/1501-1600/1518.Water-Bottles/Solution_test.go create mode 100755 leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md create mode 100644 leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go create mode 100644 leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go create mode 100755 leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/README.md create mode 100644 leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution.go create mode 100644 leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution_test.go create mode 100755 leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/README.md create mode 100644 leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution.go create mode 100644 leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution_test.go create mode 100755 leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md create mode 100644 leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go create mode 100644 leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go create mode 100755 leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/README.md create mode 100644 leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution.go create mode 100644 leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution_test.go create mode 100755 leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/README.md create mode 100644 leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution.go create mode 100644 leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution_test.go create mode 100755 leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md create mode 100644 leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go create mode 100644 leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go create mode 100755 leetcode/1501-1600/1528.Shuffle-String/README.md create mode 100644 leetcode/1501-1600/1528.Shuffle-String/Solution.go create mode 100644 leetcode/1501-1600/1528.Shuffle-String/Solution_test.go create mode 100755 leetcode/1501-1600/1529.Minimum-Suffix-Flips/README.md create mode 100644 leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution.go create mode 100644 leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution_test.go create mode 100755 leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md create mode 100644 leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go create mode 100644 leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go create mode 100755 leetcode/1501-1600/1531.String-Compression-II/README.md create mode 100644 leetcode/1501-1600/1531.String-Compression-II/Solution.go create mode 100644 leetcode/1501-1600/1531.String-Compression-II/Solution_test.go create mode 100755 leetcode/1501-1600/1534.Count-Good-Triplets/README.md create mode 100644 leetcode/1501-1600/1534.Count-Good-Triplets/Solution.go create mode 100644 leetcode/1501-1600/1534.Count-Good-Triplets/Solution_test.go create mode 100755 leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/README.md create mode 100644 leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution.go create mode 100644 leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution_test.go create mode 100755 leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/README.md create mode 100644 leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution.go create mode 100644 leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution_test.go create mode 100755 leetcode/1501-1600/1537.Get-the-Maximum-Score/README.md create mode 100644 leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution.go create mode 100644 leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution_test.go create mode 100755 leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md create mode 100644 leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go create mode 100644 leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go create mode 100755 leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/README.md create mode 100644 leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution.go create mode 100644 leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution_test.go create mode 100755 leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/README.md create mode 100644 leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution.go create mode 100644 leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution_test.go create mode 100755 leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/README.md create mode 100644 leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution.go create mode 100644 leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution_test.go create mode 100755 leetcode/1501-1600/1544.Make-The-String-Great/README.md create mode 100644 leetcode/1501-1600/1544.Make-The-String-Great/Solution.go create mode 100644 leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go create mode 100755 leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md create mode 100644 leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go create mode 100644 leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go create mode 100755 leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/README.md create mode 100644 leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution.go create mode 100644 leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution_test.go create mode 100755 leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md create mode 100644 leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go create mode 100644 leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go create mode 100755 leetcode/1501-1600/1550.Three-Consecutive-Odds/README.md create mode 100644 leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution.go create mode 100644 leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution_test.go create mode 100755 leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md create mode 100644 leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go create mode 100644 leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go create mode 100755 leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/README.md create mode 100644 leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution.go create mode 100644 leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution_test.go create mode 100755 leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/README.md create mode 100644 leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution.go create mode 100644 leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution_test.go create mode 100755 leetcode/1501-1600/1556.Thousand-Separator/README.md create mode 100644 leetcode/1501-1600/1556.Thousand-Separator/Solution.go create mode 100644 leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go create mode 100755 leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md create mode 100644 leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go create mode 100644 leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go create mode 100755 leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/README.md create mode 100644 leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution.go create mode 100644 leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution_test.go create mode 100755 leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/README.md create mode 100644 leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution.go create mode 100644 leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution_test.go create mode 100755 leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/README.md create mode 100644 leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution.go create mode 100644 leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution_test.go create mode 100755 leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md create mode 100644 leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go create mode 100644 leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go create mode 100755 leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/README.md create mode 100644 leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution.go create mode 100644 leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution_test.go create mode 100755 leetcode/1501-1600/1563.Stone-Game-V/README.md create mode 100644 leetcode/1501-1600/1563.Stone-Game-V/Solution.go create mode 100644 leetcode/1501-1600/1563.Stone-Game-V/Solution_test.go create mode 100755 leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/README.md create mode 100644 leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution.go create mode 100644 leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution_test.go create mode 100755 leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/README.md create mode 100644 leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution.go create mode 100644 leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution_test.go create mode 100755 leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/README.md create mode 100644 leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go create mode 100644 leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go create mode 100755 leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/README.md create mode 100644 leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution.go create mode 100644 leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution_test.go create mode 100755 leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md create mode 100644 leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go create mode 100644 leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution_test.go create mode 100755 leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/README.md create mode 100644 leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution.go create mode 100644 leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution_test.go create mode 100755 leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md create mode 100644 leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go create mode 100644 leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go create mode 100755 leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md create mode 100644 leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go create mode 100644 leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go create mode 100755 leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/README.md create mode 100644 leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution.go create mode 100644 leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution_test.go create mode 100755 leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/README.md create mode 100644 leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution.go create mode 100644 leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution_test.go create mode 100755 leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md create mode 100644 leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution.go create mode 100644 leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution_test.go create mode 100755 leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/README.md create mode 100644 leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution.go create mode 100644 leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution_test.go create mode 100755 leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md create mode 100644 leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go create mode 100644 leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution_test.go create mode 100755 leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md create mode 100644 leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go create mode 100644 leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go create mode 100755 leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md create mode 100644 leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go create mode 100644 leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go create mode 100755 leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/README.md create mode 100644 leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution.go create mode 100644 leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution_test.go create mode 100755 leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/README.md create mode 100644 leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution.go create mode 100644 leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution_test.go create mode 100755 leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/README.md create mode 100644 leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution.go create mode 100644 leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution_test.go create mode 100755 leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md create mode 100644 leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go create mode 100644 leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go create mode 100755 leetcode/1501-1600/1591.Strange-Printer-II/README.md create mode 100644 leetcode/1501-1600/1591.Strange-Printer-II/Solution.go create mode 100644 leetcode/1501-1600/1591.Strange-Printer-II/Solution_test.go create mode 100755 leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/README.md create mode 100644 leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution.go create mode 100644 leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution_test.go create mode 100755 leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md create mode 100644 leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go create mode 100644 leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go create mode 100755 leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/README.md create mode 100644 leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution.go create mode 100644 leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution_test.go create mode 100755 leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/README.md create mode 100644 leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution.go create mode 100644 leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution_test.go create mode 100755 leetcode/1501-1600/1598.Crawler-Log-Folder/README.md create mode 100644 leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go create mode 100644 leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go create mode 100755 leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/README.md create mode 100644 leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution.go create mode 100644 leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution_test.go create mode 100755 leetcode/1501-1600/1600.Throne-Inheritance/README.md create mode 100644 leetcode/1501-1600/1600.Throne-Inheritance/Solution.go create mode 100644 leetcode/1501-1600/1600.Throne-Inheritance/Solution_test.go create mode 100755 leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md create mode 100644 leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go create mode 100644 leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go create mode 100755 leetcode/1601-1700/1603.Design-Parking-System/README.md create mode 100644 leetcode/1601-1700/1603.Design-Parking-System/Solution.go create mode 100644 leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go create mode 100755 leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/README.md create mode 100644 leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution.go create mode 100644 leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution_test.go create mode 100755 leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md create mode 100644 leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go create mode 100644 leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go create mode 100755 leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/README.md create mode 100644 leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution.go create mode 100644 leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution_test.go create mode 100755 leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md create mode 100644 leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go create mode 100644 leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go create mode 100755 leetcode/1601-1700/1609.Even-Odd-Tree/README.md create mode 100644 leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go create mode 100644 leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go create mode 100755 leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/README.md create mode 100644 leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution.go create mode 100644 leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution_test.go create mode 100755 leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/README.md create mode 100644 leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution.go create mode 100644 leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution_test.go create mode 100755 leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/README.md create mode 100644 leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution.go create mode 100644 leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution_test.go create mode 100755 leetcode/1601-1700/1615.Maximal-Network-Rank/README.md create mode 100644 leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go create mode 100644 leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go create mode 100755 leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/README.md create mode 100644 leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution.go create mode 100644 leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution_test.go create mode 100755 leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/README.md create mode 100644 leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution.go create mode 100644 leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution_test.go create mode 100755 leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/README.md create mode 100644 leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution.go create mode 100644 leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution_test.go create mode 100755 leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/README.md create mode 100644 leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution.go create mode 100644 leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution_test.go create mode 100755 leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/README.md create mode 100644 leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution.go create mode 100644 leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution_test.go create mode 100755 leetcode/1601-1700/1622.Fancy-Sequence/README.md create mode 100644 leetcode/1601-1700/1622.Fancy-Sequence/Solution.go create mode 100644 leetcode/1601-1700/1622.Fancy-Sequence/Solution_test.go create mode 100755 leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md create mode 100644 leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution.go create mode 100644 leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution_test.go create mode 100755 leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md create mode 100644 leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go create mode 100644 leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go create mode 100755 leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md create mode 100644 leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go create mode 100644 leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go create mode 100755 leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/README.md create mode 100644 leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution.go create mode 100644 leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution_test.go create mode 100755 leetcode/1601-1700/1629.Slowest-Key/README.md create mode 100644 leetcode/1601-1700/1629.Slowest-Key/Solution.go create mode 100644 leetcode/1601-1700/1629.Slowest-Key/Solution_test.go create mode 100755 leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md create mode 100644 leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go create mode 100644 leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go create mode 100755 leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md create mode 100644 leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go create mode 100644 leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go create mode 100755 leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/README.md create mode 100644 leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution.go create mode 100644 leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution_test.go create mode 100755 leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md create mode 100644 leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go create mode 100644 leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go create mode 100755 leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/README.md create mode 100644 leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution.go create mode 100644 leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution_test.go create mode 100755 leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/README.md create mode 100644 leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution.go create mode 100644 leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution_test.go create mode 100755 leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md create mode 100644 leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go create mode 100644 leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go create mode 100755 leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/README.md create mode 100644 leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution.go create mode 100644 leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution_test.go create mode 100755 leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/README.md create mode 100644 leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution.go create mode 100644 leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution_test.go create mode 100755 leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md create mode 100644 leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution.go create mode 100644 leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution_test.go create mode 100755 leetcode/1601-1700/1643.Kth-Smallest-Instructions/README.md create mode 100644 leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution.go create mode 100644 leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution_test.go create mode 100755 leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/README.md create mode 100644 leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution.go create mode 100644 leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution_test.go create mode 100755 leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md create mode 100644 leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go create mode 100644 leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go create mode 100755 leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/README.md create mode 100644 leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution.go create mode 100644 leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution_test.go create mode 100755 leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/README.md create mode 100644 leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution.go create mode 100644 leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution_test.go create mode 100755 leetcode/1601-1700/1652.Defuse-the-Bomb/README.md create mode 100644 leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go create mode 100644 leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go create mode 100755 leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md create mode 100644 leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go create mode 100644 leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go create mode 100755 leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/README.md create mode 100644 leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution.go create mode 100644 leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution_test.go create mode 100755 leetcode/1601-1700/1655.Distribute-Repeating-Integers/README.md create mode 100644 leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution.go create mode 100644 leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution_test.go create mode 100755 leetcode/1601-1700/1656.Design-an-Ordered-Stream/README.md create mode 100644 leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution.go create mode 100644 leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution_test.go create mode 100755 leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md create mode 100644 leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go create mode 100644 leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go create mode 100755 leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/README.md create mode 100644 leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution.go create mode 100644 leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution_test.go create mode 100755 leetcode/1601-1700/1659.Maximize-Grid-Happiness/README.md create mode 100644 leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution.go create mode 100644 leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution_test.go create mode 100755 leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md create mode 100644 leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go create mode 100644 leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go create mode 100755 leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/README.md create mode 100644 leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution.go create mode 100644 leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution_test.go create mode 100755 leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md create mode 100644 leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go create mode 100644 leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go create mode 100755 leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/README.md create mode 100644 leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution.go create mode 100644 leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution_test.go create mode 100755 leetcode/1601-1700/1668.Maximum-Repeating-Substring/README.md create mode 100644 leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution.go create mode 100644 leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution_test.go create mode 100755 leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/README.md create mode 100644 leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution.go create mode 100644 leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution_test.go create mode 100755 leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/README.md create mode 100644 leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution.go create mode 100644 leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution_test.go create mode 100755 leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md create mode 100644 leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go create mode 100644 leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution_test.go create mode 100755 leetcode/1601-1700/1672.Richest-Customer-Wealth/README.md create mode 100644 leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution.go create mode 100644 leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution_test.go create mode 100755 leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/README.md create mode 100644 leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution.go create mode 100644 leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution_test.go create mode 100755 leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/README.md create mode 100644 leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution.go create mode 100644 leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution_test.go create mode 100755 leetcode/1601-1700/1675.Minimize-Deviation-in-Array/README.md create mode 100644 leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution.go create mode 100644 leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution_test.go create mode 100755 leetcode/1601-1700/1678.Goal-Parser-Interpretation/README.md create mode 100644 leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution.go create mode 100644 leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution_test.go create mode 100755 leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md create mode 100644 leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go create mode 100644 leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go create mode 100755 leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/README.md create mode 100644 leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution.go create mode 100644 leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution_test.go create mode 100755 leetcode/1601-1700/1681.Minimum-Incompatibility/README.md create mode 100644 leetcode/1601-1700/1681.Minimum-Incompatibility/Solution.go create mode 100644 leetcode/1601-1700/1681.Minimum-Incompatibility/Solution_test.go create mode 100755 leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md create mode 100644 leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go create mode 100644 leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go create mode 100755 leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/README.md create mode 100644 leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution.go create mode 100644 leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution_test.go create mode 100755 leetcode/1601-1700/1686.Stone-Game-VI/README.md create mode 100644 leetcode/1601-1700/1686.Stone-Game-VI/Solution.go create mode 100644 leetcode/1601-1700/1686.Stone-Game-VI/Solution_test.go create mode 100755 leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/README.md create mode 100644 leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution.go create mode 100644 leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution_test.go create mode 100755 leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/README.md create mode 100644 leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution.go create mode 100644 leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution_test.go create mode 100755 leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md create mode 100644 leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go create mode 100644 leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go create mode 100755 leetcode/1601-1700/1690.Stone-Game-VII/README.md create mode 100644 leetcode/1601-1700/1690.Stone-Game-VII/Solution.go create mode 100644 leetcode/1601-1700/1690.Stone-Game-VII/Solution_test.go create mode 100755 leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/README.md create mode 100644 leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution.go create mode 100644 leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution_test.go create mode 100755 leetcode/1601-1700/1694.Reformat-Phone-Number/README.md create mode 100644 leetcode/1601-1700/1694.Reformat-Phone-Number/Solution.go create mode 100644 leetcode/1601-1700/1694.Reformat-Phone-Number/Solution_test.go create mode 100755 leetcode/1601-1700/1695.Maximum-Erasure-Value/README.md create mode 100644 leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution.go create mode 100644 leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution_test.go create mode 100755 leetcode/1601-1700/1696.Jump-Game-VI/README.md create mode 100644 leetcode/1601-1700/1696.Jump-Game-VI/Solution.go create mode 100644 leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go create mode 100755 leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/README.md create mode 100644 leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution.go create mode 100644 leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution_test.go create mode 100755 leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/README.md create mode 100644 leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution.go create mode 100644 leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution_test.go create mode 100755 leetcode/1701-1800/1701.Average-Waiting-Time/README.md create mode 100644 leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go create mode 100644 leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go create mode 100755 leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/README.md create mode 100644 leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution.go create mode 100644 leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution_test.go create mode 100755 leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/README.md create mode 100644 leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution.go create mode 100644 leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution_test.go create mode 100755 leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md create mode 100644 leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go create mode 100644 leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go create mode 100755 leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/README.md create mode 100644 leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution.go create mode 100644 leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution_test.go create mode 100755 leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md create mode 100644 leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go create mode 100644 leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go create mode 100755 leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/README.md create mode 100644 leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution.go create mode 100644 leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution_test.go create mode 100755 leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/README.md create mode 100644 leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution.go create mode 100644 leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution_test.go create mode 100755 leetcode/1701-1800/1711.Count-Good-Meals/README.md create mode 100644 leetcode/1701-1800/1711.Count-Good-Meals/Solution.go create mode 100644 leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go create mode 100755 leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/README.md create mode 100644 leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution.go create mode 100644 leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution_test.go create mode 100755 leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/README.md create mode 100644 leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution.go create mode 100644 leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution_test.go create mode 100755 leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md create mode 100644 leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution.go create mode 100644 leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution_test.go create mode 100755 leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/README.md create mode 100644 leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution.go create mode 100644 leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution_test.go create mode 100755 leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md create mode 100644 leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go create mode 100644 leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go create mode 100755 leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/README.md create mode 100644 leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution.go create mode 100644 leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution_test.go create mode 100755 leetcode/1701-1800/1720.Decode-XORed-Array/README.md create mode 100644 leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go create mode 100644 leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go create mode 100755 leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md create mode 100644 leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go create mode 100644 leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go create mode 100755 leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/README.md create mode 100644 leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution.go create mode 100644 leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution_test.go create mode 100755 leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/README.md create mode 100644 leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution.go create mode 100644 leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution_test.go create mode 100755 leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/README.md create mode 100644 leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution.go create mode 100644 leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution_test.go create mode 100755 leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md create mode 100644 leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go create mode 100644 leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution_test.go create mode 100755 leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md create mode 100644 leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go create mode 100644 leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go create mode 100755 leetcode/1701-1800/1728.Cat-and-Mouse-II/README.md create mode 100644 leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution.go create mode 100644 leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution_test.go create mode 100755 leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md create mode 100644 leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go create mode 100644 leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go create mode 100755 leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md create mode 100644 leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go create mode 100644 leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go create mode 100755 leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md create mode 100644 leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go create mode 100644 leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go create mode 100755 leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/README.md create mode 100644 leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution.go create mode 100644 leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution_test.go create mode 100755 leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md create mode 100644 leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go create mode 100644 leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go create mode 100755 leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/README.md create mode 100644 leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution.go create mode 100644 leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution_test.go create mode 100755 leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md create mode 100644 leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution.go create mode 100644 leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution_test.go create mode 100755 leetcode/1701-1800/1739.Building-Boxes/README.md create mode 100644 leetcode/1701-1800/1739.Building-Boxes/Solution.go create mode 100644 leetcode/1701-1800/1739.Building-Boxes/Solution_test.go create mode 100755 leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/README.md create mode 100644 leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution.go create mode 100644 leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution_test.go create mode 100755 leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/README.md create mode 100644 leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution.go create mode 100644 leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution_test.go create mode 100755 leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/README.md create mode 100644 leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution.go create mode 100644 leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution_test.go create mode 100755 leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md create mode 100644 leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go create mode 100644 leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go create mode 100755 leetcode/1701-1800/1748.Sum-of-Unique-Elements/README.md create mode 100644 leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution.go create mode 100644 leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution_test.go create mode 100755 leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md create mode 100644 leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go create mode 100644 leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go create mode 100755 leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/README.md create mode 100644 leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution.go create mode 100644 leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution_test.go create mode 100755 leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md create mode 100644 leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go create mode 100644 leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go create mode 100755 leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md create mode 100644 leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go create mode 100644 leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go create mode 100755 leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/README.md create mode 100644 leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution.go create mode 100644 leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution_test.go create mode 100755 leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/README.md create mode 100644 leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution.go create mode 100644 leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution_test.go create mode 100755 leetcode/1701-1800/1755.Closest-Subsequence-Sum/README.md create mode 100644 leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution.go create mode 100644 leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution_test.go create mode 100755 leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md create mode 100644 leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go create mode 100644 leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go create mode 100755 leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md create mode 100644 leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution.go create mode 100644 leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution_test.go create mode 100755 leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md create mode 100644 leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go create mode 100644 leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go create mode 100755 leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/README.md create mode 100644 leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution.go create mode 100644 leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution_test.go create mode 100755 leetcode/1701-1800/1763.Longest-Nice-Substring/README.md create mode 100644 leetcode/1701-1800/1763.Longest-Nice-Substring/Solution.go create mode 100644 leetcode/1701-1800/1763.Longest-Nice-Substring/Solution_test.go create mode 100755 leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/README.md create mode 100644 leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution.go create mode 100644 leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution_test.go create mode 100755 leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md create mode 100644 leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go create mode 100644 leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go create mode 100755 leetcode/1701-1800/1766.Tree-of-Coprimes/README.md create mode 100644 leetcode/1701-1800/1766.Tree-of-Coprimes/Solution.go create mode 100644 leetcode/1701-1800/1766.Tree-of-Coprimes/Solution_test.go create mode 100755 leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md create mode 100644 leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go create mode 100644 leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go create mode 100755 leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/README.md create mode 100644 leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution.go create mode 100644 leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution_test.go create mode 100755 leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/README.md create mode 100644 leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution.go create mode 100644 leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution_test.go create mode 100755 leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/README.md create mode 100644 leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution.go create mode 100644 leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution_test.go create mode 100755 leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/README.md create mode 100644 leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution.go create mode 100644 leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution_test.go create mode 100755 leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md create mode 100644 leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go create mode 100644 leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go create mode 100755 leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/README.md create mode 100644 leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution.go create mode 100644 leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution_test.go create mode 100755 leetcode/1701-1800/1776.Car-Fleet-II/README.md create mode 100644 leetcode/1701-1800/1776.Car-Fleet-II/Solution.go create mode 100644 leetcode/1701-1800/1776.Car-Fleet-II/Solution_test.go create mode 100755 leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/README.md create mode 100644 leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution.go create mode 100644 leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution_test.go create mode 100755 leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md create mode 100644 leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go create mode 100644 leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go create mode 100755 leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/README.md create mode 100644 leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution.go create mode 100644 leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution_test.go create mode 100755 leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/README.md create mode 100644 leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution.go create mode 100644 leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution_test.go create mode 100755 leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/README.md create mode 100644 leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution.go create mode 100644 leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution_test.go create mode 100755 leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/README.md create mode 100644 leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution.go create mode 100644 leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution_test.go create mode 100755 leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/README.md create mode 100644 leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution.go create mode 100644 leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution_test.go create mode 100755 leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/README.md create mode 100644 leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution.go create mode 100644 leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution_test.go create mode 100755 leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md create mode 100644 leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go create mode 100644 leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go create mode 100755 leetcode/1701-1800/1791.Find-Center-of-Star-Graph/README.md create mode 100644 leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution.go create mode 100644 leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution_test.go create mode 100755 leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md create mode 100644 leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go create mode 100644 leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go create mode 100755 leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/README.md create mode 100644 leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution.go create mode 100644 leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution_test.go create mode 100755 leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/README.md create mode 100644 leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution.go create mode 100644 leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution_test.go create mode 100755 leetcode/1701-1800/1797.Design-Authentication-Manager/README.md create mode 100644 leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go create mode 100644 leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go create mode 100755 leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/README.md create mode 100644 leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution.go create mode 100644 leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution_test.go create mode 100755 leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md create mode 100644 leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go create mode 100644 leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution_test.go create mode 100755 leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md create mode 100644 leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go create mode 100644 leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go create mode 100755 leetcode/1901-2000/1901.Find-a-Peak-Element-II/README.md create mode 100644 leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution.go create mode 100644 leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution_test.go create mode 100755 leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md create mode 100644 leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution.go create mode 100644 leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution_test.go create mode 100755 leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/README.md create mode 100644 leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution.go create mode 100644 leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution_test.go create mode 100755 leetcode/1901-2000/1905.Count-Sub-Islands/README.md create mode 100644 leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go create mode 100644 leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go create mode 100755 leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/README.md create mode 100644 leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution.go create mode 100644 leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution_test.go create mode 100755 leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/README.md create mode 100644 leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution.go create mode 100644 leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution_test.go create mode 100755 leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md create mode 100644 leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go create mode 100644 leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go create mode 100755 leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/README.md create mode 100644 leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution.go create mode 100644 leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution_test.go create mode 100755 leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md create mode 100644 leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go create mode 100644 leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go create mode 100755 leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/README.md create mode 100644 leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution.go create mode 100644 leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution_test.go create mode 100755 leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/README.md create mode 100644 leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution.go create mode 100644 leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution_test.go create mode 100755 leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/README.md create mode 100644 leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution.go create mode 100644 leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution_test.go create mode 100755 leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/README.md create mode 100644 leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution.go create mode 100644 leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution_test.go create mode 100755 leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md create mode 100644 leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go create mode 100644 leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go create mode 100755 leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md create mode 100644 leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution.go create mode 100644 leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution_test.go create mode 100755 leetcode/1901-2000/1922.Count-Good-Numbers/README.md create mode 100644 leetcode/1901-2000/1922.Count-Good-Numbers/Solution.go create mode 100644 leetcode/1901-2000/1922.Count-Good-Numbers/Solution_test.go create mode 100755 leetcode/1901-2000/1923.Longest-Common-Subpath/README.md create mode 100644 leetcode/1901-2000/1923.Longest-Common-Subpath/Solution.go create mode 100644 leetcode/1901-2000/1923.Longest-Common-Subpath/Solution_test.go create mode 100755 leetcode/1901-2000/1925.Count-Square-Sum-Triples/README.md create mode 100644 leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution.go create mode 100644 leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution_test.go create mode 100755 leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md create mode 100644 leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go create mode 100644 leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go create mode 100755 leetcode/1901-2000/1927.Sum-Game/README.md create mode 100644 leetcode/1901-2000/1927.Sum-Game/Solution.go create mode 100644 leetcode/1901-2000/1927.Sum-Game/Solution_test.go create mode 100755 leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/README.md create mode 100644 leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution.go create mode 100644 leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution_test.go create mode 100755 leetcode/1901-2000/1929.Concatenation-of-Array/README.md create mode 100644 leetcode/1901-2000/1929.Concatenation-of-Array/Solution.go create mode 100644 leetcode/1901-2000/1929.Concatenation-of-Array/Solution_test.go create mode 100755 leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md create mode 100644 leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution.go create mode 100644 leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution_test.go create mode 100755 leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md create mode 100644 leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go create mode 100644 leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go create mode 100755 leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/README.md create mode 100644 leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution.go create mode 100644 leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution_test.go create mode 100755 leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md create mode 100644 leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go create mode 100644 leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go create mode 100755 leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/README.md create mode 100644 leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution.go create mode 100644 leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution_test.go create mode 100755 leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md create mode 100644 leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go create mode 100644 leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go create mode 100755 leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/README.md create mode 100644 leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution.go create mode 100644 leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution_test.go create mode 100755 leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/README.md create mode 100644 leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution.go create mode 100644 leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution_test.go create mode 100755 leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md create mode 100644 leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go create mode 100644 leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go create mode 100755 leetcode/1901-2000/1943.Describe-the-Painting/README.md create mode 100644 leetcode/1901-2000/1943.Describe-the-Painting/Solution.go create mode 100644 leetcode/1901-2000/1943.Describe-the-Painting/Solution_test.go create mode 100755 leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md create mode 100644 leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go create mode 100644 leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go create mode 100755 leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md create mode 100644 leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go create mode 100644 leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go create mode 100755 leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/README.md create mode 100644 leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution.go create mode 100644 leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution_test.go create mode 100755 leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md create mode 100644 leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go create mode 100644 leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go create mode 100755 leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/README.md create mode 100644 leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go create mode 100644 leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go create mode 100755 leetcode/1901-2000/1952.Three-Divisors/README.md create mode 100644 leetcode/1901-2000/1952.Three-Divisors/Solution.go create mode 100644 leetcode/1901-2000/1952.Three-Divisors/Solution_test.go create mode 100755 leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/README.md create mode 100644 leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution.go create mode 100644 leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution_test.go create mode 100755 leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/README.md create mode 100644 leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution.go create mode 100644 leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution_test.go create mode 100755 leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/README.md create mode 100644 leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution.go create mode 100644 leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution_test.go create mode 100755 leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md create mode 100644 leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go create mode 100644 leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go create mode 100755 leetcode/1901-2000/1958.Check-if-Move-is-Legal/README.md create mode 100644 leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution.go create mode 100644 leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution_test.go create mode 100755 leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/README.md create mode 100644 leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution.go create mode 100644 leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution_test.go create mode 100755 leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/README.md create mode 100644 leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution.go create mode 100644 leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution_test.go create mode 100755 leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/README.md create mode 100644 leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution.go create mode 100644 leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution_test.go create mode 100755 leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md create mode 100644 leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go create mode 100644 leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go create mode 100755 leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md create mode 100644 leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go create mode 100644 leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go create mode 100755 leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/README.md create mode 100644 leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution.go create mode 100644 leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution_test.go create mode 100755 leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/README.md create mode 100644 leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution.go create mode 100644 leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution_test.go create mode 100755 leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/README.md create mode 100644 leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution.go create mode 100644 leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution_test.go create mode 100755 leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/README.md create mode 100644 leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution.go create mode 100644 leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution_test.go create mode 100755 leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/README.md create mode 100644 leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go create mode 100644 leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go create mode 100755 leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md create mode 100644 leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go create mode 100644 leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go create mode 100755 leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/README.md create mode 100644 leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution.go create mode 100644 leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution_test.go create mode 100755 leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md create mode 100644 leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go create mode 100644 leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go create mode 100755 leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/README.md create mode 100644 leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution.go create mode 100644 leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution_test.go create mode 100755 leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/README.md create mode 100644 leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution.go create mode 100644 leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution_test.go create mode 100755 leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md create mode 100644 leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go create mode 100644 leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go create mode 100755 leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md create mode 100644 leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go create mode 100644 leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution_test.go create mode 100755 leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/README.md create mode 100644 leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution.go create mode 100644 leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution_test.go create mode 100755 leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/README.md create mode 100644 leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution.go create mode 100644 leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution_test.go create mode 100755 leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/README.md create mode 100644 leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution.go create mode 100644 leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution_test.go create mode 100755 leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/README.md create mode 100644 leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution.go create mode 100644 leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution_test.go create mode 100755 leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/README.md create mode 100644 leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution.go create mode 100644 leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution_test.go create mode 100755 leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/README.md create mode 100644 leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution.go create mode 100644 leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution_test.go create mode 100755 leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/README.md create mode 100644 leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution.go create mode 100644 leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution_test.go create mode 100755 leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md create mode 100644 leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go create mode 100644 leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go create mode 100755 leetcode/1901-2000/1993.Operations-on-Tree/README.md create mode 100644 leetcode/1901-2000/1993.Operations-on-Tree/Solution.go create mode 100644 leetcode/1901-2000/1993.Operations-on-Tree/Solution_test.go create mode 100755 leetcode/1901-2000/1994.The-Number-of-Good-Subsets/README.md create mode 100644 leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution.go create mode 100644 leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution_test.go create mode 100755 leetcode/1901-2000/1995.Count-Special-Quadruplets/README.md create mode 100644 leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution.go create mode 100644 leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution_test.go create mode 100755 leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/README.md create mode 100644 leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution.go create mode 100644 leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution_test.go create mode 100755 leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/README.md create mode 100644 leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution.go create mode 100644 leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution_test.go create mode 100755 leetcode/1901-2000/1998.GCD-Sort-of-an-Array/README.md create mode 100644 leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution.go create mode 100644 leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution_test.go create mode 100755 leetcode/1901-2000/2000.Reverse-Prefix-of-Word/README.md create mode 100644 leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution.go create mode 100644 leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution_test.go create mode 100755 leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/README.md create mode 100644 leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution.go create mode 100644 leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution_test.go create mode 100755 leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/README.md create mode 100644 leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution.go create mode 100644 leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution_test.go create mode 100755 leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/README.md create mode 100644 leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution.go create mode 100644 leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution_test.go create mode 100755 leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/README.md create mode 100644 leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution.go create mode 100644 leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution_test.go create mode 100755 leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/README.md create mode 100644 leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution.go create mode 100644 leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/README.md create mode 100644 leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution.go create mode 100644 leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution_test.go create mode 100755 leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/README.md create mode 100644 leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution.go create mode 100644 leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution_test.go create mode 100755 leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md create mode 100644 leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go create mode 100644 leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution_test.go create mode 100755 leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md create mode 100644 leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go create mode 100644 leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2013.Detect-Squares/README.md create mode 100644 leetcode/2001-2100/2013.Detect-Squares/Solution.go create mode 100644 leetcode/2001-2100/2013.Detect-Squares/Solution_test.go create mode 100755 leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md create mode 100644 leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go create mode 100644 leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go create mode 100755 leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md create mode 100644 leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go create mode 100644 leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go create mode 100755 leetcode/2001-2100/2017.Grid-Game/README.md create mode 100644 leetcode/2001-2100/2017.Grid-Game/Solution.go create mode 100644 leetcode/2001-2100/2017.Grid-Game/Solution_test.go create mode 100755 leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/README.md create mode 100644 leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution.go create mode 100644 leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution_test.go create mode 100755 leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/README.md create mode 100644 leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution.go create mode 100644 leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution_test.go create mode 100755 leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/README.md create mode 100644 leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution.go create mode 100644 leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/README.md create mode 100644 leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution.go create mode 100644 leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution_test.go create mode 100755 leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md create mode 100644 leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go create mode 100644 leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go create mode 100755 leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/README.md create mode 100644 leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution.go create mode 100644 leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/README.md create mode 100644 leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution.go create mode 100644 leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution_test.go create mode 100755 leetcode/2001-2100/2028.Find-Missing-Observations/README.md create mode 100644 leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go create mode 100644 leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go create mode 100755 leetcode/2001-2100/2029.Stone-Game-IX/README.md create mode 100644 leetcode/2001-2100/2029.Stone-Game-IX/Solution.go create mode 100644 leetcode/2001-2100/2029.Stone-Game-IX/Solution_test.go create mode 100755 leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/README.md create mode 100644 leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution.go create mode 100644 leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution_test.go create mode 100755 leetcode/2001-2100/2032.Two-Out-of-Three/README.md create mode 100644 leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go create mode 100644 leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go create mode 100755 leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md create mode 100644 leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go create mode 100644 leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go create mode 100755 leetcode/2001-2100/2034.Stock-Price-Fluctuation-/README.md create mode 100644 leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution.go create mode 100644 leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution_test.go create mode 100755 leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/README.md create mode 100644 leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution.go create mode 100644 leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution_test.go create mode 100755 leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/README.md create mode 100644 leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution.go create mode 100644 leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution_test.go create mode 100755 leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/README.md create mode 100644 leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution.go create mode 100644 leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution_test.go create mode 100755 leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/README.md create mode 100644 leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution.go create mode 100644 leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution_test.go create mode 100755 leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md create mode 100644 leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go create mode 100644 leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go create mode 100755 leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/README.md create mode 100644 leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution.go create mode 100644 leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution_test.go create mode 100755 leetcode/2001-2100/2043.Simple-Bank-System/README.md create mode 100644 leetcode/2001-2100/2043.Simple-Bank-System/Solution.go create mode 100644 leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go create mode 100755 leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/README.md create mode 100644 leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution.go create mode 100644 leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution_test.go create mode 100755 leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/README.md create mode 100644 leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution.go create mode 100644 leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution_test.go create mode 100755 leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/README.md create mode 100644 leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution.go create mode 100644 leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution_test.go create mode 100755 leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md create mode 100644 leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go create mode 100644 leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go create mode 100755 leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/README.md create mode 100644 leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go create mode 100644 leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution_test.go create mode 100755 leetcode/2001-2100/2050.Parallel-Courses-III/README.md create mode 100644 leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go create mode 100644 leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go create mode 100755 leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md create mode 100644 leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go create mode 100644 leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/README.md create mode 100644 leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go create mode 100644 leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go create mode 100755 leetcode/2001-2100/2055.Plates-Between-Candles/README.md create mode 100644 leetcode/2001-2100/2055.Plates-Between-Candles/Solution.go create mode 100644 leetcode/2001-2100/2055.Plates-Between-Candles/Solution_test.go create mode 100755 leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/README.md create mode 100644 leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution.go create mode 100644 leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution_test.go create mode 100755 leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/README.md create mode 100644 leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution.go create mode 100644 leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution_test.go create mode 100755 leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/README.md create mode 100644 leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution.go create mode 100644 leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution_test.go create mode 100755 leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/README.md create mode 100644 leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution.go create mode 100644 leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution_test.go create mode 100755 leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/README.md create mode 100644 leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution.go create mode 100644 leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution_test.go create mode 100755 leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/README.md create mode 100644 leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution.go create mode 100644 leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution_test.go create mode 100755 leetcode/2001-2100/2063.Vowels-of-All-Substrings/README.md create mode 100644 leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution.go create mode 100644 leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution_test.go create mode 100755 leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md create mode 100644 leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go create mode 100644 leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go create mode 100755 leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/README.md create mode 100644 leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution.go create mode 100644 leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution_test.go create mode 100755 leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/README.md create mode 100644 leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution.go create mode 100644 leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution_test.go create mode 100755 leetcode/2001-2100/2069.Walking-Robot-Simulation-II/README.md create mode 100644 leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution.go create mode 100644 leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution_test.go create mode 100755 leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md create mode 100644 leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go create mode 100644 leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go create mode 100755 leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/README.md create mode 100644 leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution.go create mode 100644 leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution_test.go create mode 100755 leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/README.md create mode 100644 leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution.go create mode 100644 leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution_test.go create mode 100755 leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/README.md create mode 100644 leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution.go create mode 100644 leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution_test.go create mode 100755 leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/README.md create mode 100644 leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution.go create mode 100644 leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution_test.go create mode 100755 leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/README.md create mode 100644 leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution.go create mode 100644 leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution_test.go create mode 100755 leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/README.md create mode 100644 leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution.go create mode 100644 leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution_test.go create mode 100755 leetcode/2001-2100/2079.Watering-Plants/README.md create mode 100644 leetcode/2001-2100/2079.Watering-Plants/Solution.go create mode 100644 leetcode/2001-2100/2079.Watering-Plants/Solution_test.go create mode 100755 leetcode/2001-2100/2080.Range-Frequency-Queries/README.md create mode 100644 leetcode/2001-2100/2080.Range-Frequency-Queries/Solution.go create mode 100644 leetcode/2001-2100/2080.Range-Frequency-Queries/Solution_test.go create mode 100755 leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md create mode 100644 leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go create mode 100644 leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go create mode 100755 leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/README.md create mode 100644 leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution.go create mode 100644 leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution_test.go create mode 100755 leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/README.md create mode 100644 leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution.go create mode 100644 leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution_test.go create mode 100755 leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/README.md create mode 100644 leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution.go create mode 100644 leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution_test.go create mode 100755 leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/README.md create mode 100644 leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution.go create mode 100644 leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution_test.go create mode 100755 leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/README.md create mode 100644 leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution.go create mode 100644 leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md create mode 100644 leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go create mode 100644 leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go create mode 100755 leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/README.md create mode 100644 leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution.go create mode 100644 leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution_test.go create mode 100755 leetcode/2001-2100/2092.Find-All-People-With-Secret/README.md create mode 100644 leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution.go create mode 100644 leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution_test.go create mode 100755 leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md create mode 100644 leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go create mode 100644 leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go create mode 100755 leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/README.md create mode 100644 leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution.go create mode 100644 leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution_test.go create mode 100755 leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/README.md create mode 100644 leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution.go create mode 100644 leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution_test.go create mode 100755 leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/README.md create mode 100644 leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution.go create mode 100644 leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution_test.go create mode 100755 leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md create mode 100644 leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go create mode 100644 leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go create mode 100755 leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/README.md create mode 100644 leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution.go create mode 100644 leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution_test.go create mode 100755 leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md create mode 100644 leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go create mode 100644 leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go create mode 100755 leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/README.md create mode 100644 leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution.go create mode 100644 leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution_test.go create mode 100755 leetcode/2101-2200/2103.Rings-and-Rods/README.md create mode 100644 leetcode/2101-2200/2103.Rings-and-Rods/Solution.go create mode 100644 leetcode/2101-2200/2103.Rings-and-Rods/Solution_test.go create mode 100755 leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md create mode 100644 leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go create mode 100644 leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go create mode 100755 leetcode/2101-2200/2105.Watering-Plants-II/README.md create mode 100644 leetcode/2101-2200/2105.Watering-Plants-II/Solution.go create mode 100644 leetcode/2101-2200/2105.Watering-Plants-II/Solution_test.go create mode 100755 leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md create mode 100644 leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go create mode 100644 leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go create mode 100755 leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/README.md create mode 100644 leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution.go create mode 100644 leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md create mode 100644 leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go create mode 100644 leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go create mode 100755 leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md create mode 100644 leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go create mode 100644 leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go create mode 100755 leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/README.md create mode 100644 leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution.go create mode 100644 leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution_test.go create mode 100755 leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/README.md create mode 100644 leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution.go create mode 100644 leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution_test.go create mode 100755 leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md create mode 100644 leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go create mode 100644 leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go create mode 100755 leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md create mode 100644 leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go create mode 100644 leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go create mode 100755 leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/README.md create mode 100644 leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution.go create mode 100644 leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution_test.go create mode 100755 leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/README.md create mode 100644 leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution.go create mode 100644 leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution_test.go create mode 100755 leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/README.md create mode 100644 leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution.go create mode 100644 leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution_test.go create mode 100755 leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/README.md create mode 100644 leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution.go create mode 100644 leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution_test.go create mode 100755 leetcode/2101-2200/2122.Recover-the-Original-Array/README.md create mode 100644 leetcode/2101-2200/2122.Recover-the-Original-Array/Solution.go create mode 100644 leetcode/2101-2200/2122.Recover-the-Original-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/README.md create mode 100644 leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution.go create mode 100644 leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution_test.go create mode 100755 leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/README.md create mode 100644 leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution.go create mode 100644 leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution_test.go create mode 100755 leetcode/2101-2200/2126.Destroying-Asteroids/README.md create mode 100644 leetcode/2101-2200/2126.Destroying-Asteroids/Solution.go create mode 100644 leetcode/2101-2200/2126.Destroying-Asteroids/Solution_test.go create mode 100755 leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/README.md create mode 100644 leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution.go create mode 100644 leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution_test.go create mode 100755 leetcode/2101-2200/2129.Capitalize-the-Title/README.md create mode 100644 leetcode/2101-2200/2129.Capitalize-the-Title/Solution.go create mode 100644 leetcode/2101-2200/2129.Capitalize-the-Title/Solution_test.go create mode 100755 leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md create mode 100644 leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go create mode 100644 leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go create mode 100755 leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md create mode 100644 leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go create mode 100644 leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go create mode 100755 leetcode/2101-2200/2132.Stamping-the-Grid/README.md create mode 100644 leetcode/2101-2200/2132.Stamping-the-Grid/Solution.go create mode 100644 leetcode/2101-2200/2132.Stamping-the-Grid/Solution_test.go create mode 100755 leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/README.md create mode 100644 leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution.go create mode 100644 leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution_test.go create mode 100755 leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md create mode 100644 leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go create mode 100644 leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go create mode 100755 leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/README.md create mode 100644 leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution.go create mode 100644 leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution_test.go create mode 100755 leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/README.md create mode 100644 leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution.go create mode 100644 leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution_test.go create mode 100755 leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md create mode 100644 leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go create mode 100644 leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go create mode 100755 leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/README.md create mode 100644 leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution.go create mode 100644 leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution_test.go create mode 100755 leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/README.md create mode 100644 leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution.go create mode 100644 leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution_test.go create mode 100755 leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/README.md create mode 100644 leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution.go create mode 100644 leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution_test.go create mode 100755 leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/README.md create mode 100644 leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution.go create mode 100644 leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution_test.go create mode 100755 leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md create mode 100644 leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go create mode 100644 leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go create mode 100755 leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/README.md create mode 100644 leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution.go create mode 100644 leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution_test.go create mode 100755 leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/README.md create mode 100644 leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution.go create mode 100644 leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution_test.go create mode 100755 leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md create mode 100644 leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go create mode 100644 leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go create mode 100755 leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md create mode 100644 leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go create mode 100644 leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go create mode 100755 leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md create mode 100644 leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go create mode 100644 leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/README.md create mode 100644 leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution.go create mode 100644 leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution_test.go create mode 100755 leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/README.md create mode 100644 leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution.go create mode 100644 leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution_test.go create mode 100755 leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/README.md create mode 100644 leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution.go create mode 100644 leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/README.md create mode 100644 leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution.go create mode 100644 leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution_test.go create mode 100755 leetcode/2101-2200/2157.Groups-of-Strings/README.md create mode 100644 leetcode/2101-2200/2157.Groups-of-Strings/Solution.go create mode 100644 leetcode/2101-2200/2157.Groups-of-Strings/Solution_test.go create mode 100755 leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/README.md create mode 100644 leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution.go create mode 100644 leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution_test.go create mode 100755 leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md create mode 100644 leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go create mode 100644 leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go create mode 100755 leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/README.md create mode 100644 leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution.go create mode 100644 leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution_test.go create mode 100755 leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md create mode 100644 leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go create mode 100644 leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go create mode 100755 leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/README.md create mode 100644 leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution.go create mode 100644 leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution_test.go create mode 100755 leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/README.md create mode 100644 leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution.go create mode 100644 leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution_test.go create mode 100755 leetcode/2101-2200/2166.Design-Bitset/README.md create mode 100644 leetcode/2101-2200/2166.Design-Bitset/Solution.go create mode 100644 leetcode/2101-2200/2166.Design-Bitset/Solution_test.go create mode 100755 leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/README.md create mode 100644 leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution.go create mode 100644 leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution_test.go create mode 100755 leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md create mode 100644 leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go create mode 100644 leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go create mode 100755 leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/README.md create mode 100644 leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution.go create mode 100644 leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution_test.go create mode 100755 leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/README.md create mode 100644 leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution.go create mode 100644 leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution_test.go create mode 100755 leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/README.md create mode 100644 leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution.go create mode 100644 leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md create mode 100644 leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go create mode 100644 leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md create mode 100644 leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go create mode 100644 leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go create mode 100755 leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/README.md create mode 100644 leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution.go create mode 100644 leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution_test.go create mode 100755 leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/README.md create mode 100644 leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution.go create mode 100644 leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/README.md create mode 100644 leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution.go create mode 100644 leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution_test.go create mode 100755 leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md create mode 100644 leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go create mode 100644 leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution_test.go create mode 100755 leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md create mode 100644 leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go create mode 100644 leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go create mode 100755 leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/README.md create mode 100644 leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution.go create mode 100644 leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution_test.go create mode 100755 leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md create mode 100644 leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go create mode 100644 leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go create mode 100755 leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/README.md create mode 100644 leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution.go create mode 100644 leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution_test.go create mode 100755 leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md create mode 100644 leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go create mode 100644 leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go create mode 100755 leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/README.md create mode 100644 leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution.go create mode 100644 leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution_test.go create mode 100755 leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/README.md create mode 100644 leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution.go create mode 100644 leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md create mode 100644 leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go create mode 100644 leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go create mode 100755 leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/README.md create mode 100644 leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution.go create mode 100644 leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution_test.go create mode 100755 leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/README.md create mode 100644 leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution.go create mode 100644 leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution_test.go create mode 100755 leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/README.md create mode 100644 leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution.go create mode 100644 leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution_test.go create mode 100755 leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/README.md create mode 100644 leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution.go create mode 100644 leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution_test.go create mode 100755 leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md create mode 100644 leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution.go create mode 100644 leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution_test.go create mode 100755 leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md create mode 100644 leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go create mode 100644 leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go create mode 100755 leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md create mode 100644 leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go create mode 100644 leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go create mode 100755 leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/README.md create mode 100644 leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution.go create mode 100644 leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution_test.go create mode 100755 leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/README.md create mode 100644 leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution.go create mode 100644 leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution_test.go create mode 100755 leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/README.md create mode 100644 leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution.go create mode 100644 leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution_test.go create mode 100755 leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md create mode 100644 leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go create mode 100644 leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go create mode 100755 leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/README.md create mode 100644 leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution.go create mode 100644 leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution_test.go create mode 100755 leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/README.md create mode 100644 leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution.go create mode 100644 leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution_test.go create mode 100755 leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/README.md create mode 100644 leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution.go create mode 100644 leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution_test.go create mode 100755 leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md create mode 100644 leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go create mode 100644 leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go create mode 100755 leetcode/2201-2300/2211.Count-Collisions-on-a-Road/README.md create mode 100644 leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution.go create mode 100644 leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution_test.go create mode 100755 leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/README.md create mode 100644 leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution.go create mode 100644 leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution_test.go create mode 100755 leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/README.md create mode 100644 leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution.go create mode 100644 leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution_test.go create mode 100755 leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md create mode 100644 leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go create mode 100644 leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go create mode 100755 leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/README.md create mode 100644 leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution.go create mode 100644 leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution_test.go create mode 100755 leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/README.md create mode 100644 leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution.go create mode 100644 leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution_test.go create mode 100755 leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md create mode 100644 leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go create mode 100644 leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go create mode 100755 leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md create mode 100644 leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go create mode 100644 leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go create mode 100755 leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/README.md create mode 100644 leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution.go create mode 100644 leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution_test.go create mode 100755 leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/README.md create mode 100644 leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution.go create mode 100644 leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution_test.go create mode 100755 leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/README.md create mode 100644 leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution.go create mode 100644 leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution_test.go create mode 100755 leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/README.md create mode 100644 leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution.go create mode 100644 leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution_test.go create mode 100755 leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md create mode 100644 leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go create mode 100644 leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go create mode 100755 leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md create mode 100644 leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go create mode 100644 leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go create mode 100755 leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md create mode 100644 leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go create mode 100644 leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go create mode 100755 leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md create mode 100644 leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go create mode 100644 leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go create mode 100755 leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/README.md create mode 100644 leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution.go create mode 100644 leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution_test.go create mode 100755 leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/README.md create mode 100644 leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution.go create mode 100644 leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution_test.go create mode 100755 leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/README.md create mode 100644 leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution.go create mode 100644 leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution_test.go create mode 100755 leetcode/2201-2300/2235.Add-Two-Integers/README.md create mode 100644 leetcode/2201-2300/2235.Add-Two-Integers/Solution.go create mode 100644 leetcode/2201-2300/2235.Add-Two-Integers/Solution_test.go create mode 100755 leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md create mode 100644 leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go create mode 100644 leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go create mode 100755 leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md create mode 100644 leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go create mode 100644 leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go create mode 100755 leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md create mode 100644 leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go create mode 100644 leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go create mode 100755 leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md create mode 100644 leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go create mode 100644 leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go create mode 100755 leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/README.md create mode 100644 leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution.go create mode 100644 leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution_test.go create mode 100755 leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/README.md create mode 100644 leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution.go create mode 100644 leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution_test.go create mode 100755 leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md create mode 100644 leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go create mode 100644 leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go create mode 100755 leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/README.md create mode 100644 leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution.go create mode 100644 leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution_test.go create mode 100755 leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md create mode 100644 leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go create mode 100644 leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go create mode 100755 leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/README.md create mode 100644 leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution.go create mode 100644 leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution_test.go create mode 100755 leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/README.md create mode 100644 leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution.go create mode 100644 leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution_test.go create mode 100755 leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/README.md create mode 100644 leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution.go create mode 100644 leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution_test.go create mode 100755 leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/README.md create mode 100644 leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution.go create mode 100644 leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution_test.go create mode 100755 leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/README.md create mode 100644 leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution.go create mode 100644 leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution_test.go create mode 100755 leetcode/2201-2300/2256.Minimum-Average-Difference/README.md create mode 100644 leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go create mode 100644 leetcode/2201-2300/2256.Minimum-Average-Difference/Solution_test.go create mode 100755 leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md create mode 100644 leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go create mode 100644 leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go create mode 100755 leetcode/2201-2300/2258.Escape-the-Spreading-Fire/README.md create mode 100644 leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution.go create mode 100644 leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution_test.go create mode 100755 leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/README.md create mode 100644 leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution.go create mode 100644 leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution_test.go create mode 100755 leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/README.md create mode 100644 leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution.go create mode 100644 leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution_test.go create mode 100755 leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md create mode 100644 leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go create mode 100644 leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution_test.go create mode 100755 leetcode/2201-2300/2262.Total-Appeal-of-A-String/README.md create mode 100644 leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution.go create mode 100644 leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution_test.go create mode 100755 leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/README.md create mode 100644 leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution.go create mode 100644 leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution_test.go create mode 100755 leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md create mode 100644 leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go create mode 100644 leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go create mode 100755 leetcode/2201-2300/2266.Count-Number-of-Texts/README.md create mode 100644 leetcode/2201-2300/2266.Count-Number-of-Texts/Solution.go create mode 100644 leetcode/2201-2300/2266.Count-Number-of-Texts/Solution_test.go create mode 100755 leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/README.md create mode 100644 leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution.go create mode 100644 leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution_test.go create mode 100755 leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/README.md create mode 100644 leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution.go create mode 100644 leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution_test.go create mode 100755 leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md create mode 100644 leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go create mode 100644 leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution_test.go create mode 100755 leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/README.md create mode 100644 leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution.go create mode 100644 leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution_test.go create mode 100755 leetcode/2201-2300/2272.Substring-With-Largest-Variance/README.md create mode 100644 leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution.go create mode 100644 leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution_test.go create mode 100755 leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md create mode 100644 leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go create mode 100644 leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go create mode 100755 leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/README.md create mode 100644 leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution.go create mode 100644 leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution_test.go create mode 100755 leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md create mode 100644 leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go create mode 100644 leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go create mode 100755 leetcode/2201-2300/2276.Count-Integers-in-Intervals/README.md create mode 100644 leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution.go create mode 100644 leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution_test.go create mode 100755 leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md create mode 100644 leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go create mode 100644 leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go create mode 100755 leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md create mode 100644 leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go create mode 100644 leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go create mode 100755 leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/README.md create mode 100644 leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution.go create mode 100644 leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution_test.go create mode 100755 leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/README.md create mode 100644 leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution.go create mode 100644 leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution_test.go create mode 100755 leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/README.md create mode 100644 leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution.go create mode 100644 leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution_test.go create mode 100755 leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/README.md create mode 100644 leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution.go create mode 100644 leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution_test.go create mode 100755 leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/README.md create mode 100644 leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution.go create mode 100644 leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution_test.go create mode 100755 leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/README.md create mode 100644 leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution.go create mode 100644 leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution_test.go create mode 100755 leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/README.md create mode 100644 leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution.go create mode 100644 leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution_test.go create mode 100755 leetcode/2201-2300/2288.Apply-Discount-to-Prices/README.md create mode 100644 leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution.go create mode 100644 leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution_test.go create mode 100755 leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/README.md create mode 100644 leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution.go create mode 100644 leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution_test.go create mode 100755 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md create mode 100644 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go create mode 100644 leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go create mode 100755 leetcode/2201-2300/2293.Min-Max-Game/README.md create mode 100644 leetcode/2201-2300/2293.Min-Max-Game/Solution.go create mode 100644 leetcode/2201-2300/2293.Min-Max-Game/Solution_test.go create mode 100755 leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md create mode 100644 leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go create mode 100644 leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go create mode 100755 leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md create mode 100644 leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go create mode 100644 leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go create mode 100755 leetcode/2201-2300/2296.Design-a-Text-Editor/README.md create mode 100644 leetcode/2201-2300/2296.Design-a-Text-Editor/Solution.go create mode 100644 leetcode/2201-2300/2296.Design-a-Text-Editor/Solution_test.go create mode 100755 leetcode/2201-2300/2299.Strong-Password-Checker-II/README.md create mode 100644 leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution.go create mode 100644 leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution_test.go create mode 100755 leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md create mode 100644 leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go create mode 100644 leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go diff --git a/cmd/leetcode/makedir.go b/cmd/leetcode/makedir.go index 56c249cbb..ea17006b9 100644 --- a/cmd/leetcode/makedir.go +++ b/cmd/leetcode/makedir.go @@ -14,6 +14,38 @@ const ( SOURCE_SOLUTION_README_FILE_PATH = "cmd/template/solution/README.md" ) +func MakeDirFromTo(problems []Problem, from, to int) { + if from%100 != 1 || to-from+1 != 100 { + return + } + baseDir := fmt.Sprintf("%d-%d/", from, to) + for i := 0; i < len(problems); i++ { + if problems[i].Stat.FrontendQuestionID >= from && problems[i].Stat.FrontendQuestionID <= to { + log.Printf("~~ 开始生成第 %d 题的文件夹 ~~", problems[i].Stat.FrontendQuestionID) + + if problems[i].PaidOnly { + log.Printf("%d 号题需要付费。如果已经订阅,请注释掉本代码。", problems[i].Stat.FrontendQuestionID) + continue + } + _path := SOLUTIONS_PATH + baseDir + problems[i].PathName + if is_DirExists, _ := PathExists(_path); is_DirExists { + log.Println("目录已经存在:", _path) + } else { + err := os.MkdirAll(_path, os.ModePerm) + if err != nil { + log.Printf("目录创建失败:%s", err.Error()) + } else { + // 复制文件 + log.Println("开始复制文件:") + copy(SOURCE_SOLUTION_FILE_PATH, _path+"/Solution.go") + copy(SOURCE_SOLUTION_TEST_FILE_PATH, _path+"/Solution_test.go") + GenerateReadme(problems[i], _path) + } + } + } + } +} + // 生成木目录Dir func MakeDir(problems []Problem) { for i := 0; i < len(problems); i++ { diff --git a/cmd/leetcode/problem-readme.go b/cmd/leetcode/problem-readme.go index ff39f7cfb..93556a400 100644 --- a/cmd/leetcode/problem-readme.go +++ b/cmd/leetcode/problem-readme.go @@ -7,6 +7,7 @@ import ( "io/ioutil" "log" "os" + "strings" ) func GetReadmeTemplateBuffer() string { @@ -18,7 +19,7 @@ func GetReadmeTemplateBuffer() string { return string(data) } -func GenerateReadme(problem Problem) { +func GenerateReadme(problem Problem, basePath ...string) { log.Println("开始生成 README") file, err := os.OpenFile(SOURCE_SOLUTION_README_FILE_PATH, os.O_RDONLY, 0o600) defer file.Close() @@ -35,5 +36,11 @@ func GenerateReadme(problem Problem) { tmpl, err := template.New("README: ").Parse(string(buffer)) err = tmpl.Execute(&tmpRes, problem) + if len(basePath) > 0 { + dir := strings.Join(basePath, "/") + dir = strings.TrimSuffix(dir, "/") + write(dir+"/README.md", string(tmpRes.Bytes())) + return + } write(SOLUTIONS_PATH+problem.PathName+"/README.md", string(tmpRes.Bytes())) } diff --git a/cmd/leetcode/problem.go b/cmd/leetcode/problem.go index 16a4415a4..fdf074e85 100644 --- a/cmd/leetcode/problem.go +++ b/cmd/leetcode/problem.go @@ -151,7 +151,8 @@ func formatId(id int) string { func formatName(name string) string { str := "" for i, v := range name { - if v == ' ' && name[i-1] != '-' { + // 2267 panic + if v == ' ' && i > 0 && name[i-1] != '-' { str = str + "-" continue } diff --git a/cmd/main.go b/cmd/main.go index c1b406d3c..7612b170a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -23,7 +23,13 @@ func main() { //} // 生成Problem 目录 - + //leetcode.MakeDirFromTo(problems, 1501, 1600) + //leetcode.MakeDirFromTo(problems, 1601, 1700) + //leetcode.MakeDirFromTo(problems, 1701, 1800) + //leetcode.MakeDirFromTo(problems, 1901, 2000) + //leetcode.MakeDirFromTo(problems, 2001, 2100) + //leetcode.MakeDirFromTo(problems, 2101, 2200) + //leetcode.MakeDirFromTo(problems, 2201, 2300) // leetcode.MakeDir(problems) // leetcode.GetReadmeTemplateBuffer() diff --git a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md new file mode 100755 index 000000000..b72529362 --- /dev/null +++ b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md @@ -0,0 +1,32 @@ +# [1502.Can Make Arithmetic Progression From Sequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Can Make Arithmetic Progression From Sequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/can-make-arithmetic-progression-from-sequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..18fe5b963 --- /dev/null +++ b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Last Moment Before All Ants Fall Out of a Plank +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/last-moment-before-all-ants-fall-out-of-a-plank/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1503.Last-Moment-Before-All-Ants-Fall-Out-of-a-Plank/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md new file mode 100755 index 000000000..854741e64 --- /dev/null +++ b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/README.md @@ -0,0 +1,32 @@ +# [1504.Count Submatrices With All Ones][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Submatrices With All Ones +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-submatrices-with-all-ones/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1504.Count-Submatrices-With-All-Ones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/README.md b/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/README.md new file mode 100755 index 000000000..d4ef1804a --- /dev/null +++ b/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/README.md @@ -0,0 +1,32 @@ +# [1505.Minimum Possible Integer After at Most K Adjacent Swaps On Digits][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Possible Integer After at Most K Adjacent Swaps On Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-possible-integer-after-at-most-k-adjacent-swaps-on-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution.go b/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution_test.go b/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1505.Minimum-Possible-Integer-After-at-Most-K-Adjacent-Swaps-On-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1507.Reformat-Date/README.md b/leetcode/1501-1600/1507.Reformat-Date/README.md new file mode 100755 index 000000000..916a50438 --- /dev/null +++ b/leetcode/1501-1600/1507.Reformat-Date/README.md @@ -0,0 +1,32 @@ +# [1507.Reformat Date][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reformat Date +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reformat-date/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1507.Reformat-Date/Solution.go b/leetcode/1501-1600/1507.Reformat-Date/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1507.Reformat-Date/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1507.Reformat-Date/Solution_test.go b/leetcode/1501-1600/1507.Reformat-Date/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1507.Reformat-Date/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md new file mode 100755 index 000000000..8c51fb80f --- /dev/null +++ b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md @@ -0,0 +1,32 @@ +# [1508.Range Sum of Sorted Subarray Sums][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Range Sum of Sorted Subarray Sums +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/range-sum-of-sorted-subarray-sums/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md new file mode 100755 index 000000000..f11b69b0a --- /dev/null +++ b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/README.md @@ -0,0 +1,32 @@ +# [1509.Minimum Difference Between Largest and Smallest Value in Three Moves][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Difference Between Largest and Smallest Value in Three Moves +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-difference-between-largest-and-smallest-value-in-three-moves/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1509.Minimum-Difference-Between-Largest-and-Smallest-Value-in-Three-Moves/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1510.Stone-Game-IV/README.md b/leetcode/1501-1600/1510.Stone-Game-IV/README.md new file mode 100755 index 000000000..b1f836291 --- /dev/null +++ b/leetcode/1501-1600/1510.Stone-Game-IV/README.md @@ -0,0 +1,32 @@ +# [1510.Stone Game IV][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Game IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-game-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1510.Stone-Game-IV/Solution.go b/leetcode/1501-1600/1510.Stone-Game-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1510.Stone-Game-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1510.Stone-Game-IV/Solution_test.go b/leetcode/1501-1600/1510.Stone-Game-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1510.Stone-Game-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md b/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md new file mode 100755 index 000000000..9ec3b2a0d --- /dev/null +++ b/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md @@ -0,0 +1,32 @@ +# [1512.Number of Good Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Good Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-good-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md new file mode 100755 index 000000000..56280fa2f --- /dev/null +++ b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/README.md @@ -0,0 +1,32 @@ +# [1513.Number of Substrings With Only 1s][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Substrings With Only 1s +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-substrings-with-only-1s/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1513.Number-of-Substrings-With-Only-1s/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/README.md b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/README.md new file mode 100755 index 000000000..b9be8ab60 --- /dev/null +++ b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/README.md @@ -0,0 +1,32 @@ +# [1514.Path with Maximum Probability][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Path with Maximum Probability +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/path-with-maximum-probability/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/README.md b/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/README.md new file mode 100755 index 000000000..f8487477e --- /dev/null +++ b/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/README.md @@ -0,0 +1,32 @@ +# [1515.Best Position for a Service Centre][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Best Position for a Service Centre +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/best-position-for-a-service-centre/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution.go b/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution_test.go b/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1515.Best-Position-for-a-Service-Centre/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1518.Water-Bottles/README.md b/leetcode/1501-1600/1518.Water-Bottles/README.md new file mode 100755 index 000000000..fa6acc0a7 --- /dev/null +++ b/leetcode/1501-1600/1518.Water-Bottles/README.md @@ -0,0 +1,32 @@ +# [1518.Water Bottles][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Water Bottles +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/water-bottles/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1518.Water-Bottles/Solution.go b/leetcode/1501-1600/1518.Water-Bottles/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1518.Water-Bottles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go b/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md new file mode 100755 index 000000000..5d2e6883d --- /dev/null +++ b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md @@ -0,0 +1,32 @@ +# [1519.Number of Nodes in the Sub-Tree With the Same Label][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Nodes in the Sub-Tree With the Same Label +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-nodes-in-the-sub-tree-with-the-same-label/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/README.md b/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/README.md new file mode 100755 index 000000000..6c2b7df99 --- /dev/null +++ b/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/README.md @@ -0,0 +1,32 @@ +# [1520.Maximum Number of Non-Overlapping 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 +> ... +Maximum Number of Non-Overlapping Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-non-overlapping-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution.go b/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution_test.go b/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1520.Maximum-Number-of-Non-Overlapping-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/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/README.md b/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/README.md new file mode 100755 index 000000000..213cdf9e7 --- /dev/null +++ b/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/README.md @@ -0,0 +1,32 @@ +# [1521.Find a Value of a Mysterious Function Closest 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 +> ... +Find a Value of a Mysterious Function Closest to Target +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-a-value-of-a-mysterious-function-closest-to-target/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution.go b/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution_test.go b/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-to-Target/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1521.Find-a-Value-of-a-Mysterious-Function-Closest-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/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md new file mode 100755 index 000000000..98a4b13d0 --- /dev/null +++ b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md @@ -0,0 +1,32 @@ +# [1523.Count Odd Numbers in an Interval Range][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Odd Numbers in an Interval Range +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-odd-numbers-in-an-interval-range/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..8b3200054 --- /dev/null +++ b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Sub-arrays With Odd Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-sub-arrays-with-odd-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1524.Number-of-Sub-arrays-With-Odd-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/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/README.md b/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/README.md new file mode 100755 index 000000000..b1ab9a50e --- /dev/null +++ b/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/README.md @@ -0,0 +1,32 @@ +# [1525.Number of Good Ways to Split a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Good Ways to Split a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-good-ways-to-split-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution.go b/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution_test.go b/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1525.Number-of-Good-Ways-to-Split-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md new file mode 100755 index 000000000..05c1a0ab9 --- /dev/null +++ b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/README.md @@ -0,0 +1,32 @@ +# [1526.Minimum Number of Increments on Subarrays to Form a Target Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Increments on Subarrays to Form a Target Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-increments-on-subarrays-to-form-a-target-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1526.Minimum-Number-of-Increments-on-Subarrays-to-Form-a-Target-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/1501-1600/1528.Shuffle-String/README.md b/leetcode/1501-1600/1528.Shuffle-String/README.md new file mode 100755 index 000000000..e0a55e0cd --- /dev/null +++ b/leetcode/1501-1600/1528.Shuffle-String/README.md @@ -0,0 +1,32 @@ +# [1528.Shuffle 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 +> ... +Shuffle String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shuffle-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1528.Shuffle-String/Solution.go b/leetcode/1501-1600/1528.Shuffle-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1528.Shuffle-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1528.Shuffle-String/Solution_test.go b/leetcode/1501-1600/1528.Shuffle-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1528.Shuffle-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/1501-1600/1529.Minimum-Suffix-Flips/README.md b/leetcode/1501-1600/1529.Minimum-Suffix-Flips/README.md new file mode 100755 index 000000000..b45e57006 --- /dev/null +++ b/leetcode/1501-1600/1529.Minimum-Suffix-Flips/README.md @@ -0,0 +1,32 @@ +# [1529.Minimum Suffix Flips][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Suffix Flips +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-suffix-flips/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution.go b/leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution_test.go b/leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1529.Minimum-Suffix-Flips/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md new file mode 100755 index 000000000..cda81e8fc --- /dev/null +++ b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md @@ -0,0 +1,32 @@ +# [1530.Number of Good Leaf Nodes Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Good Leaf Nodes Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1531.String-Compression-II/README.md b/leetcode/1501-1600/1531.String-Compression-II/README.md new file mode 100755 index 000000000..a77d39cbf --- /dev/null +++ b/leetcode/1501-1600/1531.String-Compression-II/README.md @@ -0,0 +1,32 @@ +# [1531.String Compression 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 +> ... +String Compression II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/string-compression-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1531.String-Compression-II/Solution.go b/leetcode/1501-1600/1531.String-Compression-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1531.String-Compression-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1531.String-Compression-II/Solution_test.go b/leetcode/1501-1600/1531.String-Compression-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1531.String-Compression-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/1501-1600/1534.Count-Good-Triplets/README.md b/leetcode/1501-1600/1534.Count-Good-Triplets/README.md new file mode 100755 index 000000000..ce0e079e1 --- /dev/null +++ b/leetcode/1501-1600/1534.Count-Good-Triplets/README.md @@ -0,0 +1,32 @@ +# [1534.Count Good Triplets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Good Triplets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-good-triplets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1534.Count-Good-Triplets/Solution.go b/leetcode/1501-1600/1534.Count-Good-Triplets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1534.Count-Good-Triplets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1534.Count-Good-Triplets/Solution_test.go b/leetcode/1501-1600/1534.Count-Good-Triplets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1534.Count-Good-Triplets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..0da8e75ec --- /dev/null +++ b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Winner of an Array Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-winner-of-an-array-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1535.Find-the-Winner-of-an-Array-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/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/README.md b/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/README.md new file mode 100755 index 000000000..0e9bda530 --- /dev/null +++ b/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/README.md @@ -0,0 +1,32 @@ +# [1536.Minimum Swaps to Arrange a Binary 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 +> ... +Minimum Swaps to Arrange a Binary Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-swaps-to-arrange-a-binary-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution.go b/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution_test.go b/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1536.Minimum-Swaps-to-Arrange-a-Binary-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/1501-1600/1537.Get-the-Maximum-Score/README.md b/leetcode/1501-1600/1537.Get-the-Maximum-Score/README.md new file mode 100755 index 000000000..eaf4fe41c --- /dev/null +++ b/leetcode/1501-1600/1537.Get-the-Maximum-Score/README.md @@ -0,0 +1,32 @@ +# [1537.Get the Maximum Score][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Get the Maximum Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/get-the-maximum-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution.go b/leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution_test.go b/leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1537.Get-the-Maximum-Score/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md new file mode 100755 index 000000000..26341bc8c --- /dev/null +++ b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md @@ -0,0 +1,32 @@ +# [1539.Kth Missing Positive 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Kth Missing Positive Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-missing-positive-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/README.md b/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/README.md new file mode 100755 index 000000000..3eae4b358 --- /dev/null +++ b/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/README.md @@ -0,0 +1,32 @@ +# [1540.Can Convert String in K Moves][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Can Convert String in K Moves +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/can-convert-string-in-k-moves/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution.go b/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution_test.go b/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1540.Can-Convert-String-in-K-Moves/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/README.md b/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/README.md new file mode 100755 index 000000000..4e43bf6b1 --- /dev/null +++ b/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/README.md @@ -0,0 +1,32 @@ +# [1541.Minimum Insertions to Balance a Parentheses 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 +> ... +Minimum Insertions to Balance a Parentheses String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-insertions-to-balance-a-parentheses-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution.go b/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution_test.go b/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1541.Minimum-Insertions-to-Balance-a-Parentheses-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/1501-1600/1542.Find-Longest-Awesome-Substring/README.md b/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/README.md new file mode 100755 index 000000000..71ad2a780 --- /dev/null +++ b/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/README.md @@ -0,0 +1,32 @@ +# [1542.Find Longest Awesome Substring][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Longest Awesome Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-longest-awesome-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution.go b/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution_test.go b/leetcode/1501-1600/1542.Find-Longest-Awesome-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1542.Find-Longest-Awesome-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/1501-1600/1544.Make-The-String-Great/README.md b/leetcode/1501-1600/1544.Make-The-String-Great/README.md new file mode 100755 index 000000000..a501a3839 --- /dev/null +++ b/leetcode/1501-1600/1544.Make-The-String-Great/README.md @@ -0,0 +1,32 @@ +# [1544.Make The String Great][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 The String Great +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-the-string-great/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go b/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go b/leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md new file mode 100755 index 000000000..5bd2ac3a7 --- /dev/null +++ b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/README.md @@ -0,0 +1,32 @@ +# [1545.Find Kth Bit in Nth Binary String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Kth Bit in Nth Binary String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-kth-bit-in-nth-binary-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1545.Find-Kth-Bit-in-Nth-Binary-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/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/README.md b/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/README.md new file mode 100755 index 000000000..e0494f4f2 --- /dev/null +++ b/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/README.md @@ -0,0 +1,32 @@ +# [1546.Maximum Number of Non-Overlapping Subarrays With Sum Equals 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 +> ... +Maximum Number of Non-Overlapping Subarrays With Sum Equals Target +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-non-overlapping-subarrays-with-sum-equals-target/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution.go b/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution_test.go b/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-Target/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1546.Maximum-Number-of-Non-Overlapping-Subarrays-With-Sum-Equals-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/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md new file mode 100755 index 000000000..87ff3d768 --- /dev/null +++ b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md @@ -0,0 +1,32 @@ +# [1547.Minimum Cost to Cut a Stick][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Cut a Stick +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-cut-a-stick/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1550.Three-Consecutive-Odds/README.md b/leetcode/1501-1600/1550.Three-Consecutive-Odds/README.md new file mode 100755 index 000000000..2ec667b98 --- /dev/null +++ b/leetcode/1501-1600/1550.Three-Consecutive-Odds/README.md @@ -0,0 +1,32 @@ +# [1550.Three Consecutive Odds][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Three Consecutive Odds +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/three-consecutive-odds/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution.go b/leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution_test.go b/leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1550.Three-Consecutive-Odds/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md new file mode 100755 index 000000000..f27cca8d5 --- /dev/null +++ b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md @@ -0,0 +1,32 @@ +# [1551.Minimum Operations to Make Array Equal][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make Array Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-array-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-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/1501-1600/1552.Magnetic-Force-Between-Two-Balls/README.md b/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/README.md new file mode 100755 index 000000000..4484f3063 --- /dev/null +++ b/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/README.md @@ -0,0 +1,32 @@ +# [1552.Magnetic Force Between Two 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 +> ... +Magnetic Force Between Two Balls +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/magnetic-force-between-two-balls/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution.go b/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution_test.go b/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-Balls/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1552.Magnetic-Force-Between-Two-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/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/README.md b/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/README.md new file mode 100755 index 000000000..f4c3c1b0d --- /dev/null +++ b/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/README.md @@ -0,0 +1,32 @@ +# [1553.Minimum Number of Days to Eat N Oranges][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Days to Eat N Oranges +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-days-to-eat-n-oranges/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution.go b/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution_test.go b/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1553.Minimum-Number-of-Days-to-Eat-N-Oranges/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1556.Thousand-Separator/README.md b/leetcode/1501-1600/1556.Thousand-Separator/README.md new file mode 100755 index 000000000..e47a73324 --- /dev/null +++ b/leetcode/1501-1600/1556.Thousand-Separator/README.md @@ -0,0 +1,32 @@ +# [1556.Thousand Separator][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Thousand Separator +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/thousand-separator/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1556.Thousand-Separator/Solution.go b/leetcode/1501-1600/1556.Thousand-Separator/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1556.Thousand-Separator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go b/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md new file mode 100755 index 000000000..e344285be --- /dev/null +++ b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md @@ -0,0 +1,32 @@ +# [1557.Minimum Number of Vertices to Reach 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 +> ... +Minimum Number of Vertices to Reach All Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-vertices-to-reach-all-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-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/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/README.md b/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/README.md new file mode 100755 index 000000000..2b0ca8959 --- /dev/null +++ b/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/README.md @@ -0,0 +1,32 @@ +# [1558.Minimum Numbers of Function Calls to Make Target Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Numbers of Function Calls to Make Target Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-numbers-of-function-calls-to-make-target-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution.go b/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution_test.go b/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1558.Minimum-Numbers-of-Function-Calls-to-Make-Target-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/1501-1600/1559.Detect-Cycles-in-2D-Grid/README.md b/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/README.md new file mode 100755 index 000000000..72222c32e --- /dev/null +++ b/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/README.md @@ -0,0 +1,32 @@ +# [1559.Detect Cycles in 2D 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 +> ... +Detect Cycles in 2D Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/detect-cycles-in-2d-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution.go b/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution_test.go b/leetcode/1501-1600/1559.Detect-Cycles-in-2D-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1559.Detect-Cycles-in-2D-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/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/README.md b/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/README.md new file mode 100755 index 000000000..d31ee536f --- /dev/null +++ b/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/README.md @@ -0,0 +1,32 @@ +# [1560.Most Visited Sector in a Circular Track][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Most Visited Sector in a Circular Track +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/most-visited-sector-in-a-circular-track/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution.go b/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution_test.go b/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1560.Most-Visited-Sector-in--a-Circular-Track/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md new file mode 100755 index 000000000..341d45d91 --- /dev/null +++ b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md @@ -0,0 +1,32 @@ +# [1561.Maximum Number of Coins You Can Get][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Coins You Can Get +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-coins-you-can-get/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/README.md b/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/README.md new file mode 100755 index 000000000..9627c2f1e --- /dev/null +++ b/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/README.md @@ -0,0 +1,32 @@ +# [1562.Find Latest Group of Size M][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Latest Group of Size M +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-latest-group-of-size-m/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution.go b/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution_test.go b/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1562.Find-Latest-Group-of-Size-M/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1563.Stone-Game-V/README.md b/leetcode/1501-1600/1563.Stone-Game-V/README.md new file mode 100755 index 000000000..aff948b64 --- /dev/null +++ b/leetcode/1501-1600/1563.Stone-Game-V/README.md @@ -0,0 +1,32 @@ +# [1563.Stone Game V][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Game V +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-game-v/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1563.Stone-Game-V/Solution.go b/leetcode/1501-1600/1563.Stone-Game-V/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1563.Stone-Game-V/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1563.Stone-Game-V/Solution_test.go b/leetcode/1501-1600/1563.Stone-Game-V/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1563.Stone-Game-V/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/README.md b/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/README.md new file mode 100755 index 000000000..a8af71337 --- /dev/null +++ b/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/README.md @@ -0,0 +1,32 @@ +# [1566.Detect Pattern of Length M Repeated K or More 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 +> ... +Detect Pattern of Length M Repeated K or More Times +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/detect-pattern-of-length-m-repeated-k-or-more-times/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution.go b/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution_test.go b/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-Times/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1566.Detect-Pattern-of-Length-M-Repeated-K-or-More-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/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/README.md b/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/README.md new file mode 100755 index 000000000..b10fec3f6 --- /dev/null +++ b/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/README.md @@ -0,0 +1,32 @@ +# [1567.Maximum Length of Subarray With Positive 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 Length of Subarray With Positive Product +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-length-of-subarray-with-positive-product/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution.go b/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution_test.go b/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-Product/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1567.Maximum-Length-of-Subarray-With-Positive-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/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/README.md b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/README.md new file mode 100755 index 000000000..16ab5ac67 --- /dev/null +++ b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/README.md @@ -0,0 +1,32 @@ +# [1568.Minimum Number of Days to Disconnect Island][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Days to Disconnect Island +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-days-to-disconnect-island/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1568.Minimum-Number-of-Days-to-Disconnect-Island/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/README.md b/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/README.md new file mode 100755 index 000000000..5167b6f46 --- /dev/null +++ b/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/README.md @@ -0,0 +1,32 @@ +# [1569.Number of Ways to Reorder Array to Get Same BST][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Reorder Array to Get Same BST +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-reorder-array-to-get-same-bst/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution.go b/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution_test.go b/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1569.Number-of-Ways-to-Reorder-Array-to-Get-Same-BST/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md new file mode 100755 index 000000000..a6f2f4ee6 --- /dev/null +++ b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md @@ -0,0 +1,32 @@ +# [1572.Matrix Diagonal 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 +> ... +Matrix Diagonal Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/matrix-diagonal-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution_test.go b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1572.Matrix-Diagonal-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/1501-1600/1573.Number-of-Ways-to-Split-a-String/README.md b/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/README.md new file mode 100755 index 000000000..c11c25bdd --- /dev/null +++ b/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/README.md @@ -0,0 +1,32 @@ +# [1573.Number of Ways to Split a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Split a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-split-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution.go b/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution_test.go b/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1573.Number-of-Ways-to-Split-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md new file mode 100755 index 000000000..55c7d35d9 --- /dev/null +++ b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/README.md @@ -0,0 +1,32 @@ +# [1574.Shortest Subarray to be Removed to Make Array Sorted][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shortest Subarray to be Removed to Make Array Sorted +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-subarray-to-be-removed-to-make-array-sorted/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1574.Shortest-Subarray-to-be-Removed-to-Make-Array-Sorted/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md b/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md new file mode 100755 index 000000000..3c8f649e8 --- /dev/null +++ b/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md @@ -0,0 +1,32 @@ +# [1575.Count All Possible 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count All Possible Routes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-all-possible-routes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/README.md b/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/README.md new file mode 100755 index 000000000..964fd7231 --- /dev/null +++ b/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/README.md @@ -0,0 +1,32 @@ +# [1576.Replace All ?'s to Avoid Consecutive 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Replace All ?'s to Avoid Consecutive Repeating Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/replace-all-s-to-avoid-consecutive-repeating-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution.go b/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution_test.go b/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1576.Replace-All-s-to-Avoid-Consecutive-Repeating-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/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/README.md b/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/README.md new file mode 100755 index 000000000..0f5de5666 --- /dev/null +++ b/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/README.md @@ -0,0 +1,32 @@ +# [1577.Number of Ways Where Square of Number Is Equal to Product of Two Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways Where Square of Number Is Equal to Product of Two Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-where-square-of-number-is-equal-to-product-of-two-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution.go b/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution_test.go b/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1577.Number-of-Ways-Where-Square-of-Number-Is-Equal-to-Product-of-Two-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md new file mode 100755 index 000000000..712223668 --- /dev/null +++ b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Make Rope Colorful +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-make-rope-colorful/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1578.Minimum-Time-to-Make-Rope-Colorful/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/README.md b/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/README.md new file mode 100755 index 000000000..2b4f041a1 --- /dev/null +++ b/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/README.md @@ -0,0 +1,32 @@ +# [1579.Remove Max Number of Edges to Keep Graph Fully Traversable][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Max Number of Edges to Keep Graph Fully Traversable +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-max-number-of-edges-to-keep-graph-fully-traversable/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution.go b/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution_test.go b/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1579.Remove-Max-Number-of-Edges-to-Keep-Graph-Fully-Traversable/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md new file mode 100755 index 000000000..adb76fbf2 --- /dev/null +++ b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md @@ -0,0 +1,32 @@ +# [1582.Special Positions in a Binary Matrix][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Special Positions in a Binary Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/special-positions-in-a-binary-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution_test.go b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-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/1501-1600/1583.Count-Unhappy-Friends/README.md b/leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md new file mode 100755 index 000000000..49fdd8431 --- /dev/null +++ b/leetcode/1501-1600/1583.Count-Unhappy-Friends/README.md @@ -0,0 +1,32 @@ +# [1583.Count Unhappy Friends][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Unhappy Friends +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-unhappy-friends/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1583.Count-Unhappy-Friends/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md new file mode 100755 index 000000000..d70268876 --- /dev/null +++ b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md @@ -0,0 +1,32 @@ +# [1584.Min Cost to Connect All Points][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Min Cost to Connect All Points +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/min-cost-to-connect-all-points/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/README.md b/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/README.md new file mode 100755 index 000000000..abc72f380 --- /dev/null +++ b/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/README.md @@ -0,0 +1,32 @@ +# [1585.Check If String Is Transformable With Substring Sort 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 +> ... +Check If String Is Transformable With Substring Sort Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-string-is-transformable-with-substring-sort-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution.go b/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution_test.go b/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1585.Check-If-String-Is-Transformable-With-Substring-Sort-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/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/README.md b/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/README.md new file mode 100755 index 000000000..d63a14d3d --- /dev/null +++ b/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/README.md @@ -0,0 +1,32 @@ +# [1588.Sum of All Odd Length Subarrays][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of All Odd Length Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-all-odd-length-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution.go b/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution_test.go b/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1588.Sum-of-All-Odd-Length-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/README.md b/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/README.md new file mode 100755 index 000000000..f8d63f6ec --- /dev/null +++ b/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/README.md @@ -0,0 +1,32 @@ +# [1589.Maximum Sum Obtained of Any Permutation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Sum Obtained of Any Permutation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-sum-obtained-of-any-permutation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution.go b/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution_test.go b/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1589.Maximum-Sum-Obtained-of-Any-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md new file mode 100755 index 000000000..0aab8efee --- /dev/null +++ b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/README.md @@ -0,0 +1,32 @@ +# [1590.Make Sum Divisible by P][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make Sum Divisible by P +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-sum-divisible-by-p/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1590.Make-Sum-Divisible-by-P/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1591.Strange-Printer-II/README.md b/leetcode/1501-1600/1591.Strange-Printer-II/README.md new file mode 100755 index 000000000..0ff0c506e --- /dev/null +++ b/leetcode/1501-1600/1591.Strange-Printer-II/README.md @@ -0,0 +1,32 @@ +# [1591.Strange Printer 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 +> ... +Strange Printer II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/strange-printer-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1591.Strange-Printer-II/Solution.go b/leetcode/1501-1600/1591.Strange-Printer-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1591.Strange-Printer-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1591.Strange-Printer-II/Solution_test.go b/leetcode/1501-1600/1591.Strange-Printer-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1591.Strange-Printer-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/1501-1600/1592.Rearrange-Spaces-Between-Words/README.md b/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/README.md new file mode 100755 index 000000000..f1dd5f3f9 --- /dev/null +++ b/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/README.md @@ -0,0 +1,32 @@ +# [1592.Rearrange Spaces Between 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Rearrange Spaces Between Words +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rearrange-spaces-between-words/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution.go b/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution_test.go b/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1592.Rearrange-Spaces-Between-Words/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md new file mode 100755 index 000000000..f81157e5a --- /dev/null +++ b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/README.md @@ -0,0 +1,32 @@ +# [1593.Split a String Into the Max Number of Unique Substrings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Split a String Into the Max Number of Unique Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/split-a-string-into-the-max-number-of-unique-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1593.Split-a-String-Into-the-Max-Number-of-Unique-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/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/README.md b/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/README.md new file mode 100755 index 000000000..9adb90934 --- /dev/null +++ b/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/README.md @@ -0,0 +1,32 @@ +# [1594.Maximum Non Negative Product in a 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 +> ... +Maximum Non Negative Product in a Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-non-negative-product-in-a-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution.go b/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution_test.go b/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1594.Maximum-Non-Negative-Product-in-a-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/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/README.md b/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/README.md new file mode 100755 index 000000000..c5a29d044 --- /dev/null +++ b/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/README.md @@ -0,0 +1,32 @@ +# [1595.Minimum Cost to Connect Two Groups of Points][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Connect Two Groups of Points +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-connect-two-groups-of-points/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution.go b/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution_test.go b/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1595.Minimum-Cost-to-Connect-Two-Groups-of-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md b/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md new file mode 100755 index 000000000..991c31dc1 --- /dev/null +++ b/leetcode/1501-1600/1598.Crawler-Log-Folder/README.md @@ -0,0 +1,32 @@ +# [1598.Crawler Log Folder][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Crawler Log Folder +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/crawler-log-folder/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1598.Crawler-Log-Folder/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/README.md b/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/README.md new file mode 100755 index 000000000..762062a1b --- /dev/null +++ b/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/README.md @@ -0,0 +1,32 @@ +# [1599.Maximum Profit of Operating a Centennial Wheel][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Profit of Operating a Centennial Wheel +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-profit-of-operating-a-centennial-wheel/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution.go b/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution_test.go b/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1599.Maximum-Profit-of-Operating-a-Centennial-Wheel/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1600.Throne-Inheritance/README.md b/leetcode/1501-1600/1600.Throne-Inheritance/README.md new file mode 100755 index 000000000..adb911217 --- /dev/null +++ b/leetcode/1501-1600/1600.Throne-Inheritance/README.md @@ -0,0 +1,32 @@ +# [1600.Throne Inheritance][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Throne Inheritance +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/throne-inheritance/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1501-1600/1600.Throne-Inheritance/Solution.go b/leetcode/1501-1600/1600.Throne-Inheritance/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1600.Throne-Inheritance/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1600.Throne-Inheritance/Solution_test.go b/leetcode/1501-1600/1600.Throne-Inheritance/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1600.Throne-Inheritance/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md new file mode 100755 index 000000000..3e3a2942e --- /dev/null +++ b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md @@ -0,0 +1,32 @@ +# [1601.Maximum Number of Achievable Transfer Requests][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Achievable Transfer Requests +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-achievable-transfer-requests/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1603.Design-Parking-System/README.md b/leetcode/1601-1700/1603.Design-Parking-System/README.md new file mode 100755 index 000000000..8ac8c5bd9 --- /dev/null +++ b/leetcode/1601-1700/1603.Design-Parking-System/README.md @@ -0,0 +1,32 @@ +# [1603.Design Parking 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Parking System +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-parking-system/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1603.Design-Parking-System/Solution.go b/leetcode/1601-1700/1603.Design-Parking-System/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1603.Design-Parking-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go b/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/README.md b/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/README.md new file mode 100755 index 000000000..8831b699f --- /dev/null +++ b/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/README.md @@ -0,0 +1,32 @@ +# [1604.Alert Using Same Key-Card Three or More Times in a One Hour Period][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Alert Using Same Key-Card Three or More Times in a One Hour Period +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/alert-using-same-key-card-three-or-more-times-in-a-one-hour-period/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution.go b/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution_test.go b/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1604.Alert-Using-Same-Key-Card-Three-or-More-Times-in-a-One-Hour-Period/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md new file mode 100755 index 000000000..3065060dd --- /dev/null +++ b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/README.md @@ -0,0 +1,32 @@ +# [1605.Find Valid Matrix Given Row and Column Sums][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Valid Matrix Given Row and Column Sums +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-valid-matrix-given-row-and-column-sums/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1605.Find-Valid-Matrix-Given-Row-and-Column-Sums/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/README.md b/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/README.md new file mode 100755 index 000000000..f683568fa --- /dev/null +++ b/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/README.md @@ -0,0 +1,32 @@ +# [1606.Find Servers That Handled Most Number of Requests][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Servers That Handled Most Number of Requests +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-servers-that-handled-most-number-of-requests/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution.go b/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution_test.go b/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1606.Find-Servers-That-Handled-Most-Number-of-Requests/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md new file mode 100755 index 000000000..15e8cf409 --- /dev/null +++ b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md @@ -0,0 +1,32 @@ +# [1608.Special Array With X Elements Greater Than or Equal X][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Special Array With X Elements Greater Than or Equal X +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/special-array-with-x-elements-greater-than-or-equal-x/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/README.md b/leetcode/1601-1700/1609.Even-Odd-Tree/README.md new file mode 100755 index 000000000..f4db288ec --- /dev/null +++ b/leetcode/1601-1700/1609.Even-Odd-Tree/README.md @@ -0,0 +1,32 @@ +# [1609.Even Odd 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 +> ... +Even Odd Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/even-odd-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1609.Even-Odd-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/1601-1700/1610.Maximum-Number-of-Visible-Points/README.md b/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/README.md new file mode 100755 index 000000000..9276536b5 --- /dev/null +++ b/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/README.md @@ -0,0 +1,32 @@ +# [1610.Maximum Number of Visible Points][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Visible Points +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-visible-points/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution.go b/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution_test.go b/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1610.Maximum-Number-of-Visible-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/README.md b/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/README.md new file mode 100755 index 000000000..3c993cc0a --- /dev/null +++ b/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/README.md @@ -0,0 +1,32 @@ +# [1611.Minimum One Bit Operations to Make Integers Zero][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum One Bit Operations to Make Integers Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-one-bit-operations-to-make-integers-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution.go b/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution_test.go b/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1611.Minimum-One-Bit-Operations-to-Make-Integers-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/README.md b/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/README.md new file mode 100755 index 000000000..5c49f1d57 --- /dev/null +++ b/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/README.md @@ -0,0 +1,32 @@ +# [1614.Maximum Nesting Depth of the 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Nesting Depth of the Parentheses +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-nesting-depth-of-the-parentheses/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution.go b/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution_test.go b/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1614.Maximum-Nesting-Depth-of-the-Parentheses/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md b/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md new file mode 100755 index 000000000..32cd80329 --- /dev/null +++ b/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md @@ -0,0 +1,32 @@ +# [1615.Maximal Network Rank][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximal Network Rank +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximal-network-rank/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/README.md b/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/README.md new file mode 100755 index 000000000..eb7cdfeea --- /dev/null +++ b/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/README.md @@ -0,0 +1,32 @@ +# [1616.Split Two Strings to Make Palindrome][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Split Two Strings to Make Palindrome +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/split-two-strings-to-make-palindrome/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution.go b/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution_test.go b/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1616.Split-Two-Strings-to-Make-Palindrome/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/README.md b/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/README.md new file mode 100755 index 000000000..412148a66 --- /dev/null +++ b/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/README.md @@ -0,0 +1,32 @@ +# [1617.Count Subtrees With Max Distance Between Cities][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Subtrees With Max Distance Between Cities +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-subtrees-with-max-distance-between-cities/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution.go b/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution_test.go b/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1617.Count-Subtrees-With-Max-Distance-Between-Cities/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/README.md b/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/README.md new file mode 100755 index 000000000..be67046ae --- /dev/null +++ b/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/README.md @@ -0,0 +1,32 @@ +# [1619.Mean of Array After Removing Some 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 +> ... +Mean of Array After Removing Some Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/mean-of-array-after-removing-some-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution.go b/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution_test.go b/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1619.Mean-of-Array-After-Removing-Some-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/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/README.md b/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/README.md new file mode 100755 index 000000000..8a8774318 --- /dev/null +++ b/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/README.md @@ -0,0 +1,32 @@ +# [1620.Coordinate With Maximum Network Quality][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Coordinate With Maximum Network Quality +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/coordinate-with-maximum-network-quality/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution.go b/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution_test.go b/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1620.Coordinate-With-Maximum-Network-Quality/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/README.md b/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/README.md new file mode 100755 index 000000000..b273ee940 --- /dev/null +++ b/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/README.md @@ -0,0 +1,32 @@ +# [1621.Number of Sets of K Non-Overlapping Line Segments][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Sets of K Non-Overlapping Line Segments +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-sets-of-k-non-overlapping-line-segments/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution.go b/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution_test.go b/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1621.Number-of-Sets-of-K-Non-Overlapping-Line-Segments/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1622.Fancy-Sequence/README.md b/leetcode/1601-1700/1622.Fancy-Sequence/README.md new file mode 100755 index 000000000..27ebceca4 --- /dev/null +++ b/leetcode/1601-1700/1622.Fancy-Sequence/README.md @@ -0,0 +1,32 @@ +# [1622.Fancy Sequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Fancy Sequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/fancy-sequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1622.Fancy-Sequence/Solution.go b/leetcode/1601-1700/1622.Fancy-Sequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1622.Fancy-Sequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1622.Fancy-Sequence/Solution_test.go b/leetcode/1601-1700/1622.Fancy-Sequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1622.Fancy-Sequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md new file mode 100755 index 000000000..890beed81 --- /dev/null +++ b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Substring Between Two Equal Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-substring-between-two-equal-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-Equal-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1624.Largest-Substring-Between-Two-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/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md new file mode 100755 index 000000000..39d786f4a --- /dev/null +++ b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/README.md @@ -0,0 +1,32 @@ +# [1625.Lexicographically Smallest String After Applying Operations][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Lexicographically Smallest String After Applying Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-smallest-string-after-applying-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1625.Lexicographically-Smallest-String-After-Applying-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/1601-1700/1626.Best-Team-With-No-Conflicts/README.md b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md new file mode 100755 index 000000000..7eaa4fa6f --- /dev/null +++ b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md @@ -0,0 +1,32 @@ +# [1626.Best Team With No Conflicts][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Best Team With No Conflicts +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/best-team-with-no-conflicts/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/README.md b/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/README.md new file mode 100755 index 000000000..2dbe552bc --- /dev/null +++ b/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/README.md @@ -0,0 +1,32 @@ +# [1627.Graph Connectivity With 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Graph Connectivity With Threshold +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/graph-connectivity-with-threshold/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution.go b/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution_test.go b/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1627.Graph-Connectivity-With-Threshold/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1629.Slowest-Key/README.md b/leetcode/1601-1700/1629.Slowest-Key/README.md new file mode 100755 index 000000000..ab1e8299a --- /dev/null +++ b/leetcode/1601-1700/1629.Slowest-Key/README.md @@ -0,0 +1,32 @@ +# [1629.Slowest Key][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Slowest Key +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/slowest-key/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1629.Slowest-Key/Solution.go b/leetcode/1601-1700/1629.Slowest-Key/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1629.Slowest-Key/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1629.Slowest-Key/Solution_test.go b/leetcode/1601-1700/1629.Slowest-Key/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1629.Slowest-Key/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md b/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md new file mode 100755 index 000000000..732fb0f08 --- /dev/null +++ b/leetcode/1601-1700/1630.Arithmetic-Subarrays/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Arithmetic Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/arithmetic-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1630.Arithmetic-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md new file mode 100755 index 000000000..23e649586 --- /dev/null +++ b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md @@ -0,0 +1,32 @@ +# [1631.Path With Minimum Effort][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Path With Minimum Effort +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/path-with-minimum-effort/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/README.md b/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/README.md new file mode 100755 index 000000000..61e2be0d9 --- /dev/null +++ b/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/README.md @@ -0,0 +1,32 @@ +# [1632.Rank Transform of a 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 +> ... +Rank Transform of a Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rank-transform-of-a-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution.go b/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution_test.go b/leetcode/1601-1700/1632.Rank-Transform-of-a-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1632.Rank-Transform-of-a-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/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md new file mode 100755 index 000000000..1b74444fd --- /dev/null +++ b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/README.md @@ -0,0 +1,32 @@ +# [1636.Sort Array by Increasing Frequency][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sort Array by Increasing Frequency +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-array-by-increasing-frequency/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-Frequency/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1636.Sort-Array-by-Increasing-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/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/README.md b/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/README.md new file mode 100755 index 000000000..7d377babd --- /dev/null +++ b/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/README.md @@ -0,0 +1,32 @@ +# [1637.Widest Vertical Area Between Two Points Containing No Points][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Widest Vertical Area Between Two Points Containing No Points +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/widest-vertical-area-between-two-points-containing-no-points/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution.go b/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution_test.go b/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1637.Widest-Vertical-Area-Between-Two-Points-Containing-No-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/README.md b/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/README.md new file mode 100755 index 000000000..43038e3fa --- /dev/null +++ b/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/README.md @@ -0,0 +1,32 @@ +# [1638.Count Substrings That Differ by One 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 +> ... +Count Substrings That Differ by One Character +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-substrings-that-differ-by-one-character/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution.go b/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution_test.go b/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-Character/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1638.Count-Substrings-That-Differ-by-One-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/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md new file mode 100755 index 000000000..75f9ed4c5 --- /dev/null +++ b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md @@ -0,0 +1,32 @@ +# [1639.Number of Ways to Form a Target String Given a Dictionary][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Form a Target String Given a Dictionary +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-form-a-target-string-given-a-dictionary/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/README.md b/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/README.md new file mode 100755 index 000000000..f39e82665 --- /dev/null +++ b/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/README.md @@ -0,0 +1,32 @@ +# [1640.Check Array Formation Through Concatenation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check Array Formation Through Concatenation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-array-formation-through-concatenation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution.go b/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution_test.go b/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1640.Check-Array-Formation-Through-Concatenation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/README.md b/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/README.md new file mode 100755 index 000000000..290925c89 --- /dev/null +++ b/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/README.md @@ -0,0 +1,32 @@ +# [1641.Count Sorted Vowel Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Sorted Vowel Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-sorted-vowel-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution.go b/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution_test.go b/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1641.Count-Sorted-Vowel-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md new file mode 100755 index 000000000..6e8daa77f --- /dev/null +++ b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Furthest Building You Can Reach +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/furthest-building-you-can-reach/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1642.Furthest-Building-You-Can-Reach/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1643.Kth-Smallest-Instructions/README.md b/leetcode/1601-1700/1643.Kth-Smallest-Instructions/README.md new file mode 100755 index 000000000..ca6ad4243 --- /dev/null +++ b/leetcode/1601-1700/1643.Kth-Smallest-Instructions/README.md @@ -0,0 +1,32 @@ +# [1643.Kth Smallest Instructions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Kth Smallest Instructions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-smallest-instructions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution.go b/leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution_test.go b/leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1643.Kth-Smallest-Instructions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/README.md b/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/README.md new file mode 100755 index 000000000..20f0b7ab5 --- /dev/null +++ b/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/README.md @@ -0,0 +1,32 @@ +# [1646.Get Maximum in Generated 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 +> ... +Get Maximum in Generated Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/get-maximum-in-generated-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution.go b/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution_test.go b/leetcode/1601-1700/1646.Get-Maximum-in-Generated-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1646.Get-Maximum-in-Generated-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/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md new file mode 100755 index 000000000..b7230577c --- /dev/null +++ b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md @@ -0,0 +1,32 @@ +# [1647.Minimum Deletions to Make Character Frequencies 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Deletions to Make Character Frequencies Unique +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-deletions-to-make-character-frequencies-unique/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/README.md b/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/README.md new file mode 100755 index 000000000..6707bc768 --- /dev/null +++ b/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/README.md @@ -0,0 +1,32 @@ +# [1648.Sell Diminishing-Valued Colored 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 +> ... +Sell Diminishing-Valued Colored Balls +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sell-diminishing-valued-colored-balls/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution.go b/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution_test.go b/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-Balls/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1648.Sell-Diminishing-Valued-Colored-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/1601-1700/1649.Create-Sorted-Array-through-Instructions/README.md b/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/README.md new file mode 100755 index 000000000..56e3b272d --- /dev/null +++ b/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/README.md @@ -0,0 +1,32 @@ +# [1649.Create Sorted Array through Instructions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Create Sorted Array through Instructions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/create-sorted-array-through-instructions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution.go b/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution_test.go b/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1649.Create-Sorted-Array-through-Instructions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md b/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md new file mode 100755 index 000000000..1e868c0bc --- /dev/null +++ b/leetcode/1601-1700/1652.Defuse-the-Bomb/README.md @@ -0,0 +1,32 @@ +# [1652.Defuse the Bomb][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Defuse the Bomb +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/defuse-the-bomb/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1652.Defuse-the-Bomb/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md new file mode 100755 index 000000000..eeafab258 --- /dev/null +++ b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/README.md @@ -0,0 +1,32 @@ +# [1653.Minimum Deletions to Make String Balanced][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Deletions to Make String Balanced +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-deletions-to-make-string-balanced/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1653.Minimum-Deletions-to-Make-String-Balanced/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/README.md b/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/README.md new file mode 100755 index 000000000..2bc7f9667 --- /dev/null +++ b/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/README.md @@ -0,0 +1,32 @@ +# [1654.Minimum Jumps to Reach Home][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Jumps to Reach Home +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-jumps-to-reach-home/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution.go b/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution_test.go b/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1654.Minimum-Jumps-to-Reach-Home/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1655.Distribute-Repeating-Integers/README.md b/leetcode/1601-1700/1655.Distribute-Repeating-Integers/README.md new file mode 100755 index 000000000..6e9fd3de9 --- /dev/null +++ b/leetcode/1601-1700/1655.Distribute-Repeating-Integers/README.md @@ -0,0 +1,32 @@ +# [1655.Distribute Repeating 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 +> ... +Distribute Repeating Integers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/distribute-repeating-integers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution.go b/leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution_test.go b/leetcode/1601-1700/1655.Distribute-Repeating-Integers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1655.Distribute-Repeating-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/1601-1700/1656.Design-an-Ordered-Stream/README.md b/leetcode/1601-1700/1656.Design-an-Ordered-Stream/README.md new file mode 100755 index 000000000..2d9e8638d --- /dev/null +++ b/leetcode/1601-1700/1656.Design-an-Ordered-Stream/README.md @@ -0,0 +1,32 @@ +# [1656.Design an Ordered Stream][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design an Ordered Stream +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-an-ordered-stream/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution.go b/leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution_test.go b/leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1656.Design-an-Ordered-Stream/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md new file mode 100755 index 000000000..20ab507b5 --- /dev/null +++ b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md @@ -0,0 +1,32 @@ +# [1657.Determine if Two Strings Are Close][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Determine if Two Strings Are Close +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/determine-if-two-strings-are-close/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/README.md b/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/README.md new file mode 100755 index 000000000..b5d91f281 --- /dev/null +++ b/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/README.md @@ -0,0 +1,32 @@ +# [1658.Minimum Operations to Reduce X to Zero][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Reduce X to Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-reduce-x-to-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution.go b/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution_test.go b/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1658.Minimum-Operations-to-Reduce-X-to-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1659.Maximize-Grid-Happiness/README.md b/leetcode/1601-1700/1659.Maximize-Grid-Happiness/README.md new file mode 100755 index 000000000..7224ab58f --- /dev/null +++ b/leetcode/1601-1700/1659.Maximize-Grid-Happiness/README.md @@ -0,0 +1,32 @@ +# [1659.Maximize Grid Happiness][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Grid Happiness +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-grid-happiness/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution.go b/leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution_test.go b/leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1659.Maximize-Grid-Happiness/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md new file mode 100755 index 000000000..706f8e459 --- /dev/null +++ b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md @@ -0,0 +1,32 @@ +# [1662.Check If Two String Arrays are Equivalent][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check If Two String Arrays are Equivalent +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-two-string-arrays-are-equivalent/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/README.md b/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/README.md new file mode 100755 index 000000000..5509407da --- /dev/null +++ b/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/README.md @@ -0,0 +1,32 @@ +# [1663.Smallest String With A Given Numeric Value][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest String With A Given Numeric Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-string-with-a-given-numeric-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution.go b/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution_test.go b/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1663.Smallest-String-With-A-Given-Numeric-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md new file mode 100755 index 000000000..06a8715f3 --- /dev/null +++ b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/README.md @@ -0,0 +1,32 @@ +# [1664.Ways to Make a Fair Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Ways to Make a Fair Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/ways-to-make-a-fair-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1664.Ways-to-Make-a-Fair-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/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/README.md b/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/README.md new file mode 100755 index 000000000..49e18a90e --- /dev/null +++ b/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/README.md @@ -0,0 +1,32 @@ +# [1665.Minimum Initial Energy to Finish Tasks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Initial Energy to Finish Tasks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-initial-energy-to-finish-tasks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution.go b/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution_test.go b/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1665.Minimum-Initial-Energy-to-Finish-Tasks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1668.Maximum-Repeating-Substring/README.md b/leetcode/1601-1700/1668.Maximum-Repeating-Substring/README.md new file mode 100755 index 000000000..9157aeffa --- /dev/null +++ b/leetcode/1601-1700/1668.Maximum-Repeating-Substring/README.md @@ -0,0 +1,32 @@ +# [1668.Maximum Repeating 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 +> ... +Maximum Repeating Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-repeating-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution.go b/leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution_test.go b/leetcode/1601-1700/1668.Maximum-Repeating-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1668.Maximum-Repeating-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/1601-1700/1669.Merge-In-Between-Linked-Lists/README.md b/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/README.md new file mode 100755 index 000000000..e584398ce --- /dev/null +++ b/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/README.md @@ -0,0 +1,32 @@ +# [1669.Merge In Between Linked Lists][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Merge In Between Linked Lists +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-in-between-linked-lists/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution.go b/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution_test.go b/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1669.Merge-In-Between-Linked-Lists/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/README.md b/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/README.md new file mode 100755 index 000000000..d861bd07d --- /dev/null +++ b/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/README.md @@ -0,0 +1,32 @@ +# [1670.Design Front Middle Back Queue][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Front Middle Back Queue +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-front-middle-back-queue/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution.go b/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution_test.go b/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1670.Design-Front-Middle-Back-Queue/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md new file mode 100755 index 000000000..24e6f92bb --- /dev/null +++ b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/README.md @@ -0,0 +1,32 @@ +# [1671.Minimum Number of Removals to Make Mountain Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Removals to Make Mountain Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-removals-to-make-mountain-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution_test.go b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1671.Minimum-Number-of-Removals-to-Make-Mountain-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/1601-1700/1672.Richest-Customer-Wealth/README.md b/leetcode/1601-1700/1672.Richest-Customer-Wealth/README.md new file mode 100755 index 000000000..b09ae5b7b --- /dev/null +++ b/leetcode/1601-1700/1672.Richest-Customer-Wealth/README.md @@ -0,0 +1,32 @@ +# [1672.Richest Customer Wealth][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Richest Customer Wealth +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/richest-customer-wealth/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution.go b/leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution_test.go b/leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1672.Richest-Customer-Wealth/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/README.md b/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/README.md new file mode 100755 index 000000000..39bcc2c07 --- /dev/null +++ b/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/README.md @@ -0,0 +1,32 @@ +# [1673.Find the Most Competitive Subsequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Most Competitive Subsequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-most-competitive-subsequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution.go b/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution_test.go b/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1673.Find-the-Most-Competitive-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/README.md b/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/README.md new file mode 100755 index 000000000..2d01296fa --- /dev/null +++ b/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/README.md @@ -0,0 +1,32 @@ +# [1674.Minimum Moves to Make Array Complementary][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Moves to Make Array Complementary +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-moves-to-make-array-complementary/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution.go b/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution_test.go b/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1674.Minimum-Moves-to-Make-Array-Complementary/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/README.md b/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/README.md new file mode 100755 index 000000000..e04b70401 --- /dev/null +++ b/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/README.md @@ -0,0 +1,32 @@ +# [1675.Minimize Deviation in Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize Deviation in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-deviation-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution.go b/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution_test.go b/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1675.Minimize-Deviation-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1678.Goal-Parser-Interpretation/README.md b/leetcode/1601-1700/1678.Goal-Parser-Interpretation/README.md new file mode 100755 index 000000000..f6d7d27ec --- /dev/null +++ b/leetcode/1601-1700/1678.Goal-Parser-Interpretation/README.md @@ -0,0 +1,32 @@ +# [1678.Goal Parser Interpretation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Goal Parser Interpretation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/goal-parser-interpretation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution.go b/leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution_test.go b/leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1678.Goal-Parser-Interpretation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md new file mode 100755 index 000000000..fe89109e8 --- /dev/null +++ b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/README.md @@ -0,0 +1,32 @@ +# [1679.Max Number of K-Sum Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Max Number of K-Sum Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/max-number-of-k-sum-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1679.Max-Number-of-K-Sum-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/README.md b/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/README.md new file mode 100755 index 000000000..00af5bb5b --- /dev/null +++ b/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/README.md @@ -0,0 +1,32 @@ +# [1680.Concatenation of Consecutive Binary Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Concatenation of Consecutive Binary Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/concatenation-of-consecutive-binary-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution.go b/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution_test.go b/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1680.Concatenation-of-Consecutive-Binary-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1681.Minimum-Incompatibility/README.md b/leetcode/1601-1700/1681.Minimum-Incompatibility/README.md new file mode 100755 index 000000000..81f5513e6 --- /dev/null +++ b/leetcode/1601-1700/1681.Minimum-Incompatibility/README.md @@ -0,0 +1,32 @@ +# [1681.Minimum Incompatibility][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Incompatibility +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-incompatibility/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1681.Minimum-Incompatibility/Solution.go b/leetcode/1601-1700/1681.Minimum-Incompatibility/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1681.Minimum-Incompatibility/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1681.Minimum-Incompatibility/Solution_test.go b/leetcode/1601-1700/1681.Minimum-Incompatibility/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1681.Minimum-Incompatibility/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md new file mode 100755 index 000000000..b7cc389df --- /dev/null +++ b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/README.md @@ -0,0 +1,32 @@ +# [1684.Count the Number of Consistent Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Consistent Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-consistent-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1684.Count-the-Number-of-Consistent-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..957a1d66f --- /dev/null +++ b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Absolute Differences in a Sorted Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-absolute-differences-in-a-sorted-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1685.Sum-of-Absolute-Differences-in-a-Sorted-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/1601-1700/1686.Stone-Game-VI/README.md b/leetcode/1601-1700/1686.Stone-Game-VI/README.md new file mode 100755 index 000000000..14688c59a --- /dev/null +++ b/leetcode/1601-1700/1686.Stone-Game-VI/README.md @@ -0,0 +1,32 @@ +# [1686.Stone Game VI][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Game VI +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-game-vi/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1686.Stone-Game-VI/Solution.go b/leetcode/1601-1700/1686.Stone-Game-VI/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1686.Stone-Game-VI/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1686.Stone-Game-VI/Solution_test.go b/leetcode/1601-1700/1686.Stone-Game-VI/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1686.Stone-Game-VI/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/README.md b/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/README.md new file mode 100755 index 000000000..5c1a99cff --- /dev/null +++ b/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/README.md @@ -0,0 +1,32 @@ +# [1687.Delivering Boxes from Storage to Ports][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Delivering Boxes from Storage to Ports +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/delivering-boxes-from-storage-to-ports/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution.go b/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution_test.go b/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1687.Delivering-Boxes-from-Storage-to-Ports/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..6445b200e --- /dev/null +++ b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count of Matches in Tournament +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-of-matches-in-tournament/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1688.Count-of-Matches-in-Tournament/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md new file mode 100755 index 000000000..1482eaa98 --- /dev/null +++ b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md @@ -0,0 +1,32 @@ +# [1689.Partitioning Into Minimum Number Of Deci-Binary Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partitioning Into Minimum Number Of Deci-Binary Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partitioning-into-minimum-number-of-deci-binary-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1690.Stone-Game-VII/README.md b/leetcode/1601-1700/1690.Stone-Game-VII/README.md new file mode 100755 index 000000000..3d792b714 --- /dev/null +++ b/leetcode/1601-1700/1690.Stone-Game-VII/README.md @@ -0,0 +1,32 @@ +# [1690.Stone Game VII][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Game VII +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-game-vii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1690.Stone-Game-VII/Solution.go b/leetcode/1601-1700/1690.Stone-Game-VII/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1690.Stone-Game-VII/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1690.Stone-Game-VII/Solution_test.go b/leetcode/1601-1700/1690.Stone-Game-VII/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1690.Stone-Game-VII/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/README.md b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/README.md new file mode 100755 index 000000000..0ffcce2f1 --- /dev/null +++ b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/README.md @@ -0,0 +1,32 @@ +# [1691.Maximum Height by Stacking Cuboids ][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Height by Stacking Cuboids +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-height-by-stacking-cuboids/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution.go b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution_test.go b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids-/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1694.Reformat-Phone-Number/README.md b/leetcode/1601-1700/1694.Reformat-Phone-Number/README.md new file mode 100755 index 000000000..07e7092fc --- /dev/null +++ b/leetcode/1601-1700/1694.Reformat-Phone-Number/README.md @@ -0,0 +1,32 @@ +# [1694.Reformat Phone 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reformat Phone Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reformat-phone-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1694.Reformat-Phone-Number/Solution.go b/leetcode/1601-1700/1694.Reformat-Phone-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1694.Reformat-Phone-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1694.Reformat-Phone-Number/Solution_test.go b/leetcode/1601-1700/1694.Reformat-Phone-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1694.Reformat-Phone-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1695.Maximum-Erasure-Value/README.md b/leetcode/1601-1700/1695.Maximum-Erasure-Value/README.md new file mode 100755 index 000000000..591800bee --- /dev/null +++ b/leetcode/1601-1700/1695.Maximum-Erasure-Value/README.md @@ -0,0 +1,32 @@ +# [1695.Maximum Erasure Value][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Erasure Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-erasure-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution.go b/leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution_test.go b/leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1695.Maximum-Erasure-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1696.Jump-Game-VI/README.md b/leetcode/1601-1700/1696.Jump-Game-VI/README.md new file mode 100755 index 000000000..2c8bf2f30 --- /dev/null +++ b/leetcode/1601-1700/1696.Jump-Game-VI/README.md @@ -0,0 +1,32 @@ +# [1696.Jump Game VI][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Jump Game VI +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/jump-game-vi/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go b/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go b/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/README.md b/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/README.md new file mode 100755 index 000000000..c015447ba --- /dev/null +++ b/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/README.md @@ -0,0 +1,32 @@ +# [1697.Checking Existence of Edge Length Limited Paths][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Checking Existence of Edge Length Limited Paths +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/checking-existence-of-edge-length-limited-paths/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution.go b/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution_test.go b/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1697.Checking-Existence-of-Edge-Length-Limited-Paths/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/README.md b/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/README.md new file mode 100755 index 000000000..167ffe8de --- /dev/null +++ b/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/README.md @@ -0,0 +1,32 @@ +# [1700.Number of Students Unable to Eat Lunch][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Students Unable to Eat Lunch +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-students-unable-to-eat-lunch/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution.go b/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution_test.go b/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1700.Number-of-Students-Unable-to-Eat-Lunch/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1701.Average-Waiting-Time/README.md b/leetcode/1701-1800/1701.Average-Waiting-Time/README.md new file mode 100755 index 000000000..5d4bbb1c9 --- /dev/null +++ b/leetcode/1701-1800/1701.Average-Waiting-Time/README.md @@ -0,0 +1,32 @@ +# [1701.Average Waiting Time][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Average Waiting Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/average-waiting-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1701.Average-Waiting-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/README.md b/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/README.md new file mode 100755 index 000000000..9202de878 --- /dev/null +++ b/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/README.md @@ -0,0 +1,32 @@ +# [1702.Maximum Binary String After Change][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Binary String After Change +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-binary-string-after-change/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution.go b/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution_test.go b/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1702.Maximum-Binary-String-After-Change/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/README.md b/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/README.md new file mode 100755 index 000000000..b2f703f7b --- /dev/null +++ b/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/README.md @@ -0,0 +1,32 @@ +# [1703.Minimum Adjacent Swaps for K Consecutive Ones][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Adjacent Swaps for K Consecutive Ones +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-adjacent-swaps-for-k-consecutive-ones/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution.go b/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution_test.go b/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1703.Minimum-Adjacent-Swaps-for-K-Consecutive-Ones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md new file mode 100755 index 000000000..4afc11082 --- /dev/null +++ b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md @@ -0,0 +1,32 @@ +# [1704.Determine if String Halves Are Alike][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Determine if String Halves Are Alike +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/determine-if-string-halves-are-alike/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/README.md b/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/README.md new file mode 100755 index 000000000..9cdca9de9 --- /dev/null +++ b/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/README.md @@ -0,0 +1,32 @@ +# [1705.Maximum Number of Eaten Apples][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Eaten Apples +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-eaten-apples/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution.go b/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution_test.go b/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1705.Maximum-Number-of-Eaten-Apples/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md new file mode 100755 index 000000000..5006da3b2 --- /dev/null +++ b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md @@ -0,0 +1,32 @@ +# [1706.Where Will the Ball Fall][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Where Will the Ball Fall +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/where-will-the-ball-fall/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/README.md b/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/README.md new file mode 100755 index 000000000..48eb109e9 --- /dev/null +++ b/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/README.md @@ -0,0 +1,32 @@ +# [1707.Maximum XOR With an Element From Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum XOR With an Element From Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-xor-with-an-element-from-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution.go b/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution_test.go b/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1707.Maximum-XOR-With-an-Element-From-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/1701-1800/1710.Maximum-Units-on-a-Truck/README.md b/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/README.md new file mode 100755 index 000000000..3a88260cd --- /dev/null +++ b/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/README.md @@ -0,0 +1,32 @@ +# [1710.Maximum Units on a Truck][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Units on a Truck +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-units-on-a-truck/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution.go b/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution_test.go b/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1710.Maximum-Units-on-a-Truck/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1711.Count-Good-Meals/README.md b/leetcode/1701-1800/1711.Count-Good-Meals/README.md new file mode 100755 index 000000000..751c4edb0 --- /dev/null +++ b/leetcode/1701-1800/1711.Count-Good-Meals/README.md @@ -0,0 +1,32 @@ +# [1711.Count Good Meals][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Good Meals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-good-meals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go b/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1711.Count-Good-Meals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go b/leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1711.Count-Good-Meals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/README.md b/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/README.md new file mode 100755 index 000000000..3a7c06f92 --- /dev/null +++ b/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/README.md @@ -0,0 +1,32 @@ +# [1712.Ways to Split Array Into Three Subarrays][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Ways to Split Array Into Three Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/ways-to-split-array-into-three-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution.go b/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution_test.go b/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1712.Ways-to-Split-Array-Into-Three-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/README.md b/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/README.md new file mode 100755 index 000000000..8e8d2d999 --- /dev/null +++ b/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/README.md @@ -0,0 +1,32 @@ +# [1713.Minimum Operations to Make a Subsequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make a Subsequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-a-subsequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution.go b/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution_test.go b/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1713.Minimum-Operations-to-Make-a-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md new file mode 100755 index 000000000..e709d2fb2 --- /dev/null +++ b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Calculate Money in Leetcode Bank +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/calculate-money-in-leetcode-bank/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1716.Calculate-Money-in-Leetcode-Bank/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/README.md b/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/README.md new file mode 100755 index 000000000..acf6b6cdd --- /dev/null +++ b/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/README.md @@ -0,0 +1,32 @@ +# [1717.Maximum Score From Removing 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 +> ... +Maximum Score From Removing Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-from-removing-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution.go b/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution_test.go b/leetcode/1701-1800/1717.Maximum-Score-From-Removing-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1717.Maximum-Score-From-Removing-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/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md new file mode 100755 index 000000000..69fd3ea90 --- /dev/null +++ b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/README.md @@ -0,0 +1,32 @@ +# [1718.Construct the Lexicographically Largest Valid Sequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct the Lexicographically Largest Valid Sequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-the-lexicographically-largest-valid-sequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1718.Construct-the-Lexicographically-Largest-Valid-Sequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/README.md b/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/README.md new file mode 100755 index 000000000..299822bc7 --- /dev/null +++ b/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/README.md @@ -0,0 +1,32 @@ +# [1719.Number Of Ways To Reconstruct 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 +> ... +Number Of Ways To Reconstruct A Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-reconstruct-a-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution.go b/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution_test.go b/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-A-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1719.Number-Of-Ways-To-Reconstruct-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/1701-1800/1720.Decode-XORed-Array/README.md b/leetcode/1701-1800/1720.Decode-XORed-Array/README.md new file mode 100755 index 000000000..28d5cf1a8 --- /dev/null +++ b/leetcode/1701-1800/1720.Decode-XORed-Array/README.md @@ -0,0 +1,32 @@ +# [1720.Decode XORed 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 +> ... +Decode XORed Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/decode-xored-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1720.Decode-XORed-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/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md new file mode 100755 index 000000000..0b75e49ad --- /dev/null +++ b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md @@ -0,0 +1,32 @@ +# [1721.Swapping Nodes in 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Swapping Nodes in a Linked List +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/swapping-nodes-in-a-linked-list/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/README.md b/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/README.md new file mode 100755 index 000000000..0bb5b9164 --- /dev/null +++ b/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/README.md @@ -0,0 +1,32 @@ +# [1722.Minimize Hamming Distance After Swap 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 +> ... +Minimize Hamming Distance After Swap Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-hamming-distance-after-swap-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution.go b/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution_test.go b/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1722.Minimize-Hamming-Distance-After-Swap-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/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/README.md b/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/README.md new file mode 100755 index 000000000..cac0a8fbb --- /dev/null +++ b/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/README.md @@ -0,0 +1,32 @@ +# [1723.Find Minimum Time to Finish All Jobs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Minimum Time to Finish All Jobs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-minimum-time-to-finish-all-jobs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution.go b/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution_test.go b/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1723.Find-Minimum-Time-to-Finish-All-Jobs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/README.md b/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/README.md new file mode 100755 index 000000000..ded9aee4b --- /dev/null +++ b/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/README.md @@ -0,0 +1,32 @@ +# [1725.Number Of Rectangles That Can Form The Largest Square][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number Of Rectangles That Can Form The Largest Square +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-rectangles-that-can-form-the-largest-square/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution.go b/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution_test.go b/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1725.Number-Of-Rectangles-That-Can-Form-The-Largest-Square/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md b/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md new file mode 100755 index 000000000..3d4fcee94 --- /dev/null +++ b/leetcode/1701-1800/1726.Tuple-with-Same-Product/README.md @@ -0,0 +1,32 @@ +# [1726.Tuple with Same Product][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Tuple with Same Product +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/tuple-with-same-product/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go b/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution_test.go b/leetcode/1701-1800/1726.Tuple-with-Same-Product/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1726.Tuple-with-Same-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/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md new file mode 100755 index 000000000..0d3486a43 --- /dev/null +++ b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md @@ -0,0 +1,32 @@ +# [1727.Largest Submatrix With Rearrangements][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Submatrix With Rearrangements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-submatrix-with-rearrangements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1728.Cat-and-Mouse-II/README.md b/leetcode/1701-1800/1728.Cat-and-Mouse-II/README.md new file mode 100755 index 000000000..6679a4f52 --- /dev/null +++ b/leetcode/1701-1800/1728.Cat-and-Mouse-II/README.md @@ -0,0 +1,32 @@ +# [1728.Cat and Mouse 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 +> ... +Cat and Mouse II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/cat-and-mouse-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution.go b/leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution_test.go b/leetcode/1701-1800/1728.Cat-and-Mouse-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1728.Cat-and-Mouse-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/1701-1800/1732.Find-the-Highest-Altitude/README.md b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md new file mode 100755 index 000000000..b78c7f804 --- /dev/null +++ b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md @@ -0,0 +1,32 @@ +# [1732.Find the Highest Altitude][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Highest Altitude +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-highest-altitude/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md new file mode 100755 index 000000000..18fada36e --- /dev/null +++ b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/README.md @@ -0,0 +1,32 @@ +# [1733.Minimum Number of People to Teach][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of People to Teach +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-people-to-teach/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1733.Minimum-Number-of-People-to-Teach/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md b/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md new file mode 100755 index 000000000..6084de918 --- /dev/null +++ b/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md @@ -0,0 +1,32 @@ +# [1734.Decode XORed Permutation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Decode XORed Permutation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/decode-xored-permutation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/README.md b/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/README.md new file mode 100755 index 000000000..8a1a685f9 --- /dev/null +++ b/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/README.md @@ -0,0 +1,32 @@ +# [1735.Count Ways to Make Array With 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 +> ... +Count Ways to Make Array With Product +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-ways-to-make-array-with-product/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution.go b/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution_test.go b/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-Product/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1735.Count-Ways-to-Make-Array-With-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/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md new file mode 100755 index 000000000..0dd7c6010 --- /dev/null +++ b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md @@ -0,0 +1,32 @@ +# [1736.Latest Time by Replacing Hidden Digits][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Latest Time by Replacing Hidden Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/latest-time-by-replacing-hidden-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/README.md b/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/README.md new file mode 100755 index 000000000..8a7d46b0b --- /dev/null +++ b/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/README.md @@ -0,0 +1,32 @@ +# [1737.Change Minimum Characters to Satisfy One of Three Conditions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Change Minimum Characters to Satisfy One of Three Conditions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/change-minimum-characters-to-satisfy-one-of-three-conditions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution.go b/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution_test.go b/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1737.Change-Minimum-Characters-to-Satisfy-One-of-Three-Conditions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md new file mode 100755 index 000000000..fe8b09ef7 --- /dev/null +++ b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Kth Largest XOR Coordinate Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-kth-largest-xor-coordinate-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1738.Find-Kth-Largest-XOR-Coordinate-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1739.Building-Boxes/README.md b/leetcode/1701-1800/1739.Building-Boxes/README.md new file mode 100755 index 000000000..899233836 --- /dev/null +++ b/leetcode/1701-1800/1739.Building-Boxes/README.md @@ -0,0 +1,32 @@ +# [1739.Building Boxes][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Building Boxes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/building-boxes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1739.Building-Boxes/Solution.go b/leetcode/1701-1800/1739.Building-Boxes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1739.Building-Boxes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1739.Building-Boxes/Solution_test.go b/leetcode/1701-1800/1739.Building-Boxes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1739.Building-Boxes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/README.md b/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/README.md new file mode 100755 index 000000000..e049c5338 --- /dev/null +++ b/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/README.md @@ -0,0 +1,32 @@ +# [1742.Maximum Number of Balls in a Box][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Balls in a Box +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-balls-in-a-box/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution.go b/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution_test.go b/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1742.Maximum-Number-of-Balls-in-a-Box/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..d2f9954be --- /dev/null +++ b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Restore the Array From Adjacent Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/restore-the-array-from-adjacent-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1743.Restore-the-Array-From-Adjacent-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/README.md b/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/README.md new file mode 100755 index 000000000..33e75cba6 --- /dev/null +++ b/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/README.md @@ -0,0 +1,32 @@ +# [1744.Can You Eat Your Favorite Candy on Your Favorite Day?][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Can You Eat Your Favorite Candy on Your Favorite Day? +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/can-you-eat-your-favorite-candy-on-your-favorite-day/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution.go b/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution_test.go b/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1744.Can-You-Eat-Your-Favorite-Candy-on-Your-Favorite-Day/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md new file mode 100755 index 000000000..920353b5c --- /dev/null +++ b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/README.md @@ -0,0 +1,32 @@ +# [1745.Palindrome Partitioning IV][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Palindrome Partitioning IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/palindrome-partitioning-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1745.Palindrome-Partitioning-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1748.Sum-of-Unique-Elements/README.md b/leetcode/1701-1800/1748.Sum-of-Unique-Elements/README.md new file mode 100755 index 000000000..9af315249 --- /dev/null +++ b/leetcode/1701-1800/1748.Sum-of-Unique-Elements/README.md @@ -0,0 +1,32 @@ +# [1748.Sum of Unique 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 +> ... +Sum of Unique Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-unique-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution.go b/leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution_test.go b/leetcode/1701-1800/1748.Sum-of-Unique-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1748.Sum-of-Unique-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/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md new file mode 100755 index 000000000..c701fd665 --- /dev/null +++ b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/README.md @@ -0,0 +1,32 @@ +# [1749.Maximum Absolute Sum of Any Subarray][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Absolute Sum of Any Subarray +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-absolute-sum-of-any-subarray/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1749.Maximum-Absolute-Sum-of-Any-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/README.md b/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/README.md new file mode 100755 index 000000000..2f8ad2fe0 --- /dev/null +++ b/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/README.md @@ -0,0 +1,32 @@ +# [1750.Minimum Length of String After Deleting Similar Ends][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Length of String After Deleting Similar Ends +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-length-of-string-after-deleting-similar-ends/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution.go b/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution_test.go b/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1750.Minimum-Length-of-String-After-Deleting-Similar-Ends/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md new file mode 100755 index 000000000..1aa13dd0f --- /dev/null +++ b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md @@ -0,0 +1,32 @@ +# [1751.Maximum Number of Events That Can Be Attended 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 Number of Events That Can Be Attended II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-events-that-can-be-attended-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-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/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md new file mode 100755 index 000000000..3520fcf4b --- /dev/null +++ b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md @@ -0,0 +1,32 @@ +# [1752.Check if Array Is Sorted and Rotated][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Array Is Sorted and Rotated +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-array-is-sorted-and-rotated/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/README.md b/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/README.md new file mode 100755 index 000000000..2f0c16f04 --- /dev/null +++ b/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/README.md @@ -0,0 +1,32 @@ +# [1753.Maximum Score From Removing Stones][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score From Removing Stones +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-from-removing-stones/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution.go b/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution_test.go b/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1753.Maximum-Score-From-Removing-Stones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/README.md b/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/README.md new file mode 100755 index 000000000..74dd14312 --- /dev/null +++ b/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/README.md @@ -0,0 +1,32 @@ +# [1754.Largest Merge Of Two Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Merge Of Two Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-merge-of-two-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution.go b/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution_test.go b/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1754.Largest-Merge-Of-Two-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1755.Closest-Subsequence-Sum/README.md b/leetcode/1701-1800/1755.Closest-Subsequence-Sum/README.md new file mode 100755 index 000000000..f879cc0fc --- /dev/null +++ b/leetcode/1701-1800/1755.Closest-Subsequence-Sum/README.md @@ -0,0 +1,32 @@ +# [1755.Closest 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 +> ... +Closest Subsequence Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-subsequence-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution.go b/leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution_test.go b/leetcode/1701-1800/1755.Closest-Subsequence-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1755.Closest-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/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md new file mode 100755 index 000000000..0063894b6 --- /dev/null +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md @@ -0,0 +1,32 @@ +# [1758.Minimum Changes To Make Alternating 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Changes To Make Alternating Binary String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-changes-to-make-alternating-binary-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-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/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md new file mode 100755 index 000000000..fd29f970f --- /dev/null +++ b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Homogenous Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-homogenous-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1759.Count-Number-of-Homogenous-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/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md new file mode 100755 index 000000000..d556c9005 --- /dev/null +++ b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/README.md @@ -0,0 +1,32 @@ +# [1760.Minimum Limit of Balls in a Bag][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Limit of Balls in a Bag +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-limit-of-balls-in-a-bag/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1760.Minimum-Limit-of-Balls-in-a-Bag/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/README.md b/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/README.md new file mode 100755 index 000000000..6b521c3e8 --- /dev/null +++ b/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/README.md @@ -0,0 +1,32 @@ +# [1761.Minimum Degree of a Connected Trio in a Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Degree of a Connected Trio in a Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-degree-of-a-connected-trio-in-a-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution.go b/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution_test.go b/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1761.Minimum-Degree-of-a-Connected-Trio-in-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1763.Longest-Nice-Substring/README.md b/leetcode/1701-1800/1763.Longest-Nice-Substring/README.md new file mode 100755 index 000000000..c80cb4d96 --- /dev/null +++ b/leetcode/1701-1800/1763.Longest-Nice-Substring/README.md @@ -0,0 +1,32 @@ +# [1763.Longest Nice 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 +> ... +Longest Nice Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-nice-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1763.Longest-Nice-Substring/Solution.go b/leetcode/1701-1800/1763.Longest-Nice-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1763.Longest-Nice-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1763.Longest-Nice-Substring/Solution_test.go b/leetcode/1701-1800/1763.Longest-Nice-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1763.Longest-Nice-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/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/README.md b/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/README.md new file mode 100755 index 000000000..1d765f042 --- /dev/null +++ b/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/README.md @@ -0,0 +1,32 @@ +# [1764.Form Array by Concatenating Subarrays of Another 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 +> ... +Form Array by Concatenating Subarrays of Another Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/form-array-by-concatenating-subarrays-of-another-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution.go b/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution_test.go b/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1764.Form-Array-by-Concatenating-Subarrays-of-Another-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/1701-1800/1765.Map-of-Highest-Peak/README.md b/leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md new file mode 100755 index 000000000..c7e656ff1 --- /dev/null +++ b/leetcode/1701-1800/1765.Map-of-Highest-Peak/README.md @@ -0,0 +1,32 @@ +# [1765.Map of Highest Peak][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Map of Highest Peak +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/map-of-highest-peak/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1765.Map-of-Highest-Peak/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1766.Tree-of-Coprimes/README.md b/leetcode/1701-1800/1766.Tree-of-Coprimes/README.md new file mode 100755 index 000000000..95685e9d7 --- /dev/null +++ b/leetcode/1701-1800/1766.Tree-of-Coprimes/README.md @@ -0,0 +1,32 @@ +# [1766.Tree of Coprimes][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Tree of Coprimes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/tree-of-coprimes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1766.Tree-of-Coprimes/Solution.go b/leetcode/1701-1800/1766.Tree-of-Coprimes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1766.Tree-of-Coprimes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1766.Tree-of-Coprimes/Solution_test.go b/leetcode/1701-1800/1766.Tree-of-Coprimes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1766.Tree-of-Coprimes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md b/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md new file mode 100755 index 000000000..121be8f0e --- /dev/null +++ b/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md @@ -0,0 +1,32 @@ +# [1768.Merge Strings Alternately][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Merge Strings Alternately +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-strings-alternately/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/README.md b/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/README.md new file mode 100755 index 000000000..198104544 --- /dev/null +++ b/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/README.md @@ -0,0 +1,32 @@ +# [1769.Minimum Number of Operations to Move All Balls to Each Box][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Move All Balls to Each Box +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-move-all-balls-to-each-box/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution.go b/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution_test.go b/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1769.Minimum-Number-of-Operations-to-Move-All-Balls-to-Each-Box/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/README.md b/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/README.md new file mode 100755 index 000000000..0324f5657 --- /dev/null +++ b/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/README.md @@ -0,0 +1,32 @@ +# [1770.Maximum Score from Performing Multiplication Operations][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score from Performing Multiplication Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-from-performing-multiplication-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution.go b/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution_test.go b/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1770.Maximum-Score-from-Performing-Multiplication-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/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/README.md b/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/README.md new file mode 100755 index 000000000..f08ad4f3f --- /dev/null +++ b/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/README.md @@ -0,0 +1,32 @@ +# [1771.Maximize Palindrome Length From Subsequences][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Palindrome Length From Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-palindrome-length-from-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution.go b/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution_test.go b/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1771.Maximize-Palindrome-Length-From-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/README.md b/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/README.md new file mode 100755 index 000000000..8ce5de9eb --- /dev/null +++ b/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/README.md @@ -0,0 +1,32 @@ +# [1773.Count Items Matching a Rule][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Items Matching a Rule +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-items-matching-a-rule/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution.go b/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution_test.go b/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1773.Count-Items-Matching-a-Rule/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md b/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md new file mode 100755 index 000000000..dd6afea1c --- /dev/null +++ b/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md @@ -0,0 +1,32 @@ +# [1774.Closest Dessert Cost][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Closest Dessert Cost +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-dessert-cost/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/README.md b/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/README.md new file mode 100755 index 000000000..897954566 --- /dev/null +++ b/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/README.md @@ -0,0 +1,32 @@ +# [1775.Equal Sum Arrays With Minimum Number of 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 +> ... +Equal Sum Arrays With Minimum Number of Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/equal-sum-arrays-with-minimum-number-of-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution.go b/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution_test.go b/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1775.Equal-Sum-Arrays-With-Minimum-Number-of-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/1701-1800/1776.Car-Fleet-II/README.md b/leetcode/1701-1800/1776.Car-Fleet-II/README.md new file mode 100755 index 000000000..bee8a9b98 --- /dev/null +++ b/leetcode/1701-1800/1776.Car-Fleet-II/README.md @@ -0,0 +1,32 @@ +# [1776.Car Fleet 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 +> ... +Car Fleet II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/car-fleet-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1776.Car-Fleet-II/Solution.go b/leetcode/1701-1800/1776.Car-Fleet-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1776.Car-Fleet-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1776.Car-Fleet-II/Solution_test.go b/leetcode/1701-1800/1776.Car-Fleet-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1776.Car-Fleet-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/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/README.md b/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/README.md new file mode 100755 index 000000000..06c4c021f --- /dev/null +++ b/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/README.md @@ -0,0 +1,32 @@ +# [1779.Find Nearest Point That Has the Same X or Y Coordinate][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Nearest Point That Has the Same X or Y Coordinate +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-nearest-point-that-has-the-same-x-or-y-coordinate/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution.go b/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution_test.go b/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1779.Find-Nearest-Point-That-Has-the-Same-X-or-Y-Coordinate/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md new file mode 100755 index 000000000..44bb7cce3 --- /dev/null +++ b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/README.md @@ -0,0 +1,32 @@ +# [1780.Check if Number is a Sum of Powers of Three][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Number is a Sum of Powers of Three +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-number-is-a-sum-of-powers-of-three/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1780.Check-if-Number-is-a-Sum-of-Powers-of-Three/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/README.md b/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/README.md new file mode 100755 index 000000000..c5210b665 --- /dev/null +++ b/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/README.md @@ -0,0 +1,32 @@ +# [1781.Sum of Beauty of All Substrings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Beauty of All Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-beauty-of-all-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution.go b/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution_test.go b/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1781.Sum-of-Beauty-of-All-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/1701-1800/1782.Count-Pairs-Of-Nodes/README.md b/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/README.md new file mode 100755 index 000000000..2758bd1cb --- /dev/null +++ b/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/README.md @@ -0,0 +1,32 @@ +# [1782.Count Pairs Of Nodes][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Pairs Of Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-pairs-of-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution.go b/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution_test.go b/leetcode/1701-1800/1782.Count-Pairs-Of-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1782.Count-Pairs-Of-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/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/README.md b/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/README.md new file mode 100755 index 000000000..72ac67a58 --- /dev/null +++ b/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/README.md @@ -0,0 +1,32 @@ +# [1784.Check if Binary String Has at Most One Segment of Ones][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Binary String Has at Most One Segment of Ones +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-binary-string-has-at-most-one-segment-of-ones/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution.go b/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution_test.go b/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1784.Check-if-Binary-String-Has-at-Most-One-Segment-of-Ones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..6305cc84f --- /dev/null +++ b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Elements to Add to Form a Given Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-elements-to-add-to-form-a-given-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1785.Minimum-Elements-to-Add-to-Form-a-Given-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/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/README.md b/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/README.md new file mode 100755 index 000000000..f24812866 --- /dev/null +++ b/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/README.md @@ -0,0 +1,32 @@ +# [1786.Number of Restricted Paths From First to Last Node][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Restricted Paths From First to Last Node +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-restricted-paths-from-first-to-last-node/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution.go b/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution_test.go b/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1786.Number-of-Restricted-Paths-From-First-to-Last-Node/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/README.md b/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/README.md new file mode 100755 index 000000000..60663561d --- /dev/null +++ b/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/README.md @@ -0,0 +1,32 @@ +# [1787.Make the XOR of All Segments Equal to Zero][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Make the XOR of All Segments Equal to Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-the-xor-of-all-segments-equal-to-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution.go b/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution_test.go b/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1787.Make-the-XOR-of-All-Segments-Equal-to-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md new file mode 100755 index 000000000..7d148099a --- /dev/null +++ b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/README.md @@ -0,0 +1,32 @@ +# [1790.Check if One String Swap Can Make Strings Equal][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if One String Swap Can Make Strings Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-one-string-swap-can-make-strings-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-Strings-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1790.Check-if-One-String-Swap-Can-Make-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/1701-1800/1791.Find-Center-of-Star-Graph/README.md b/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/README.md new file mode 100755 index 000000000..746e0fb06 --- /dev/null +++ b/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/README.md @@ -0,0 +1,32 @@ +# [1791.Find Center of Star Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Center of Star Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-center-of-star-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution.go b/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution_test.go b/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1791.Find-Center-of-Star-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md new file mode 100755 index 000000000..a43abd617 --- /dev/null +++ b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/README.md @@ -0,0 +1,32 @@ +# [1792.Maximum Average Pass Ratio][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Average Pass Ratio +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-average-pass-ratio/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1792.Maximum-Average-Pass-Ratio/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..54fca1c71 --- /dev/null +++ b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score of a Good Subarray +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-of-a-good-subarray/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1793.Maximum-Score-of-a-Good-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/README.md b/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/README.md new file mode 100755 index 000000000..7054473d0 --- /dev/null +++ b/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/README.md @@ -0,0 +1,32 @@ +# [1796.Second Largest Digit in a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Second Largest Digit in a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/second-largest-digit-in-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution.go b/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution_test.go b/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1796.Second-Largest-Digit-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md b/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md new file mode 100755 index 000000000..6da0de40a --- /dev/null +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md @@ -0,0 +1,32 @@ +# [1797.Design Authentication Manager][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Authentication Manager +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-authentication-manager/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/README.md b/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/README.md new file mode 100755 index 000000000..e3ee08574 --- /dev/null +++ b/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/README.md @@ -0,0 +1,32 @@ +# [1798.Maximum Number of Consecutive Values You Can Make][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Consecutive Values You Can Make +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-consecutive-values-you-can-make/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution.go b/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution_test.go b/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1798.Maximum-Number-of-Consecutive-Values-You-Can-Make/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md new file mode 100755 index 000000000..b30508b97 --- /dev/null +++ b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md @@ -0,0 +1,32 @@ +# [1799.Maximize Score After N 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 +> ... +Maximize Score After N Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-score-after-n-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution_test.go b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1799.Maximize-Score-After-N-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/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md new file mode 100755 index 000000000..af577631c --- /dev/null +++ b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/README.md @@ -0,0 +1,32 @@ +# [1800.Maximum Ascending Subarray Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Ascending Subarray Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-ascending-subarray-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1800.Maximum-Ascending-Subarray-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/1901-2000/1901.Find-a-Peak-Element-II/README.md b/leetcode/1901-2000/1901.Find-a-Peak-Element-II/README.md new file mode 100755 index 000000000..35394f624 --- /dev/null +++ b/leetcode/1901-2000/1901.Find-a-Peak-Element-II/README.md @@ -0,0 +1,32 @@ +# [1901.Find a Peak 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find a Peak Element II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-a-peak-element-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution.go b/leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution_test.go b/leetcode/1901-2000/1901.Find-a-Peak-Element-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1901.Find-a-Peak-Element-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/1901-2000/1903.Largest-Odd-Number-in-String/README.md b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md new file mode 100755 index 000000000..1483534c4 --- /dev/null +++ b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Odd Number in String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-odd-number-in-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1903.Largest-Odd-Number-in-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/README.md b/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/README.md new file mode 100755 index 000000000..691bfaa9f --- /dev/null +++ b/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/README.md @@ -0,0 +1,32 @@ +# [1904.The Number of Full Rounds You Have Played][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Number of Full Rounds You Have Played +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-number-of-full-rounds-you-have-played/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution.go b/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution_test.go b/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1904.The-Number-of-Full-Rounds-You-Have-Played/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/README.md b/leetcode/1901-2000/1905.Count-Sub-Islands/README.md new file mode 100755 index 000000000..e8843782e --- /dev/null +++ b/leetcode/1901-2000/1905.Count-Sub-Islands/README.md @@ -0,0 +1,32 @@ +# [1905.Count Sub Islands][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Sub Islands +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-sub-islands/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1905.Count-Sub-Islands/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/README.md b/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/README.md new file mode 100755 index 000000000..0eafcfa8f --- /dev/null +++ b/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/README.md @@ -0,0 +1,32 @@ +# [1906.Minimum Absolute Difference 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 +> ... +Minimum Absolute Difference Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-absolute-difference-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution.go b/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution_test.go b/leetcode/1901-2000/1906.Minimum-Absolute-Difference-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1906.Minimum-Absolute-Difference-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/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/README.md b/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/README.md new file mode 100755 index 000000000..16e5c0689 --- /dev/null +++ b/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/README.md @@ -0,0 +1,32 @@ +# [1909.Remove One Element to Make the Array Strictly Increasing][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Remove One Element to Make the Array Strictly Increasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-one-element-to-make-the-array-strictly-increasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution.go b/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution_test.go b/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1909.Remove-One-Element-to-Make-the-Array-Strictly-Increasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md new file mode 100755 index 000000000..a1ecd794f --- /dev/null +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/README.md @@ -0,0 +1,32 @@ +# [1910.Remove All Occurrences of a Substring][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Remove All Occurrences of a Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-all-occurrences-of-a-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1910.Remove-All-Occurrences-of-a-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/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/README.md b/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/README.md new file mode 100755 index 000000000..911446e22 --- /dev/null +++ b/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/README.md @@ -0,0 +1,32 @@ +# [1911.Maximum Alternating 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 Alternating Subsequence Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-alternating-subsequence-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution.go b/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution_test.go b/leetcode/1901-2000/1911.Maximum-Alternating-Subsequence-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1911.Maximum-Alternating-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/1901-2000/1912.Design-Movie-Rental-System/README.md b/leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md new file mode 100755 index 000000000..6716dc1e5 --- /dev/null +++ b/leetcode/1901-2000/1912.Design-Movie-Rental-System/README.md @@ -0,0 +1,32 @@ +# [1912.Design Movie Rental System][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Movie Rental System +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-movie-rental-system/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1912.Design-Movie-Rental-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..97b201785 --- /dev/null +++ b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Product Difference Between Two Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-difference-between-two-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1913.Maximum-Product-Difference-Between-Two-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/README.md b/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/README.md new file mode 100755 index 000000000..cc779985a --- /dev/null +++ b/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/README.md @@ -0,0 +1,32 @@ +# [1914.Cyclically Rotating a Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Cyclically Rotating a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/cyclically-rotating-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution.go b/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution_test.go b/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1914.Cyclically-Rotating-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/README.md b/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/README.md new file mode 100755 index 000000000..dc8fe1771 --- /dev/null +++ b/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/README.md @@ -0,0 +1,32 @@ +# [1915.Number of Wonderful 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 +> ... +Number of Wonderful Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-wonderful-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution.go b/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution_test.go b/leetcode/1901-2000/1915.Number-of-Wonderful-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1915.Number-of-Wonderful-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/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/README.md b/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/README.md new file mode 100755 index 000000000..57347775f --- /dev/null +++ b/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/README.md @@ -0,0 +1,32 @@ +# [1916.Count Ways to Build Rooms in an Ant Colony][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Ways to Build Rooms in an Ant Colony +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-ways-to-build-rooms-in-an-ant-colony/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution.go b/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution_test.go b/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1916.Count-Ways-to-Build-Rooms-in-an-Ant-Colony/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md b/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md new file mode 100755 index 000000000..211c57b9a --- /dev/null +++ b/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md @@ -0,0 +1,32 @@ +# [1920.Build Array from Permutation][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Build Array from Permutation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/build-array-from-permutation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md new file mode 100755 index 000000000..37fcb97eb --- /dev/null +++ b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Eliminate Maximum Number of Monsters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/eliminate-maximum-number-of-monsters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1921.Eliminate-Maximum-Number-of-Monsters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1922.Count-Good-Numbers/README.md b/leetcode/1901-2000/1922.Count-Good-Numbers/README.md new file mode 100755 index 000000000..74e5970c0 --- /dev/null +++ b/leetcode/1901-2000/1922.Count-Good-Numbers/README.md @@ -0,0 +1,32 @@ +# [1922.Count Good Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Good Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-good-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1922.Count-Good-Numbers/Solution.go b/leetcode/1901-2000/1922.Count-Good-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1922.Count-Good-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1922.Count-Good-Numbers/Solution_test.go b/leetcode/1901-2000/1922.Count-Good-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1922.Count-Good-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1923.Longest-Common-Subpath/README.md b/leetcode/1901-2000/1923.Longest-Common-Subpath/README.md new file mode 100755 index 000000000..964a64654 --- /dev/null +++ b/leetcode/1901-2000/1923.Longest-Common-Subpath/README.md @@ -0,0 +1,32 @@ +# [1923.Longest Common Subpath][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Common Subpath +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-common-subpath/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1923.Longest-Common-Subpath/Solution.go b/leetcode/1901-2000/1923.Longest-Common-Subpath/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1923.Longest-Common-Subpath/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1923.Longest-Common-Subpath/Solution_test.go b/leetcode/1901-2000/1923.Longest-Common-Subpath/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1923.Longest-Common-Subpath/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1925.Count-Square-Sum-Triples/README.md b/leetcode/1901-2000/1925.Count-Square-Sum-Triples/README.md new file mode 100755 index 000000000..a997cf5cf --- /dev/null +++ b/leetcode/1901-2000/1925.Count-Square-Sum-Triples/README.md @@ -0,0 +1,32 @@ +# [1925.Count Square Sum Triples][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Square Sum Triples +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-square-sum-triples/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution.go b/leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution_test.go b/leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1925.Count-Square-Sum-Triples/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md new file mode 100755 index 000000000..e20ec7dd1 --- /dev/null +++ b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md @@ -0,0 +1,32 @@ +# [1926.Nearest Exit from Entrance in Maze][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Nearest Exit from Entrance in Maze +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/nearest-exit-from-entrance-in-maze/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1927.Sum-Game/README.md b/leetcode/1901-2000/1927.Sum-Game/README.md new file mode 100755 index 000000000..25a6a0bcf --- /dev/null +++ b/leetcode/1901-2000/1927.Sum-Game/README.md @@ -0,0 +1,32 @@ +# [1927.Sum 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 +> ... +Sum Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1927.Sum-Game/Solution.go b/leetcode/1901-2000/1927.Sum-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1927.Sum-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1927.Sum-Game/Solution_test.go b/leetcode/1901-2000/1927.Sum-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1927.Sum-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/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/README.md b/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/README.md new file mode 100755 index 000000000..218d9334d --- /dev/null +++ b/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/README.md @@ -0,0 +1,32 @@ +# [1928.Minimum Cost to Reach Destination in Time][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Reach Destination in Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-reach-destination-in-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution.go b/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution_test.go b/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1928.Minimum-Cost-to-Reach-Destination-in-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1929.Concatenation-of-Array/README.md b/leetcode/1901-2000/1929.Concatenation-of-Array/README.md new file mode 100755 index 000000000..908ff27ae --- /dev/null +++ b/leetcode/1901-2000/1929.Concatenation-of-Array/README.md @@ -0,0 +1,32 @@ +# [1929.Concatenation of Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Concatenation of Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/concatenation-of-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1929.Concatenation-of-Array/Solution.go b/leetcode/1901-2000/1929.Concatenation-of-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1929.Concatenation-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1929.Concatenation-of-Array/Solution_test.go b/leetcode/1901-2000/1929.Concatenation-of-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1929.Concatenation-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md new file mode 100755 index 000000000..33fbb78c7 --- /dev/null +++ b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Unique Length-3 Palindromic Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/unique-length-3-palindromic-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1930.Unique-Length-3-Palindromic-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md new file mode 100755 index 000000000..eed26876d --- /dev/null +++ b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/README.md @@ -0,0 +1,32 @@ +# [1931.Painting a Grid With Three Different Colors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Painting a Grid With Three Different Colors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/painting-a-grid-with-three-different-colors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1931.Painting-a-Grid-With-Three-Different-Colors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/README.md b/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/README.md new file mode 100755 index 000000000..826928410 --- /dev/null +++ b/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/README.md @@ -0,0 +1,32 @@ +# [1932.Merge BSTs to Create Single BST][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Merge BSTs to Create Single BST +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-bsts-to-create-single-bst/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution.go b/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution_test.go b/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1932.Merge-BSTs-to-Create-Single-BST/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md new file mode 100755 index 000000000..d2d12e7dd --- /dev/null +++ b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/README.md @@ -0,0 +1,32 @@ +# [1935.Maximum Number of Words You Can Type][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Words You Can Type +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-words-you-can-type/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1935.Maximum-Number-of-Words-You-Can-Type/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/README.md b/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/README.md new file mode 100755 index 000000000..91cf449f8 --- /dev/null +++ b/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/README.md @@ -0,0 +1,32 @@ +# [1936.Add Minimum Number of Rungs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Add Minimum Number of Rungs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/add-minimum-number-of-rungs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution.go b/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution_test.go b/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1936.Add-Minimum-Number-of-Rungs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md new file mode 100755 index 000000000..ddf5c648e --- /dev/null +++ b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/README.md @@ -0,0 +1,32 @@ +# [1937.Maximum Number of Points with Cost][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Points with Cost +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-points-with-cost/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1937.Maximum-Number-of-Points-with-Cost/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/README.md b/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/README.md new file mode 100755 index 000000000..e8e108231 --- /dev/null +++ b/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/README.md @@ -0,0 +1,32 @@ +# [1938.Maximum Genetic Difference 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Genetic Difference Query +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-genetic-difference-query/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution.go b/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution_test.go b/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1938.Maximum-Genetic-Difference-Query/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/README.md b/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/README.md new file mode 100755 index 000000000..46457ede9 --- /dev/null +++ b/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/README.md @@ -0,0 +1,32 @@ +# [1941.Check if All Characters Have Equal Number of Occurrences][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 All Characters Have Equal Number of Occurrences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-all-characters-have-equal-number-of-occurrences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution.go b/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution_test.go b/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1941.Check-if-All-Characters-Have-Equal-Number-of-Occurrences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md new file mode 100755 index 000000000..c7da7ae43 --- /dev/null +++ b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/README.md @@ -0,0 +1,32 @@ +# [1942.The Number of the Smallest Unoccupied Chair][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Number of the Smallest Unoccupied Chair +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-number-of-the-smallest-unoccupied-chair/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1942.The-Number-of-the-Smallest-Unoccupied-Chair/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1943.Describe-the-Painting/README.md b/leetcode/1901-2000/1943.Describe-the-Painting/README.md new file mode 100755 index 000000000..7e8ff1bb9 --- /dev/null +++ b/leetcode/1901-2000/1943.Describe-the-Painting/README.md @@ -0,0 +1,32 @@ +# [1943.Describe the Painting][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Describe the Painting +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/describe-the-painting/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1943.Describe-the-Painting/Solution.go b/leetcode/1901-2000/1943.Describe-the-Painting/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1943.Describe-the-Painting/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1943.Describe-the-Painting/Solution_test.go b/leetcode/1901-2000/1943.Describe-the-Painting/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1943.Describe-the-Painting/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md new file mode 100755 index 000000000..9901cb42c --- /dev/null +++ b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md @@ -0,0 +1,32 @@ +# [1944.Number of Visible People in a Queue][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Visible People in a Queue +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-visible-people-in-a-queue/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md new file mode 100755 index 000000000..c775ed4fa --- /dev/null +++ b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/README.md @@ -0,0 +1,32 @@ +# [1945.Sum of Digits of String After Convert][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Digits of String After Convert +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-digits-of-string-after-convert/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1945.Sum-of-Digits-of-String-After-Convert/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/README.md b/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/README.md new file mode 100755 index 000000000..434f65371 --- /dev/null +++ b/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/README.md @@ -0,0 +1,32 @@ +# [1946.Largest Number After Mutating 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 +> ... +Largest Number After Mutating Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-number-after-mutating-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution.go b/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution_test.go b/leetcode/1901-2000/1946.Largest-Number-After-Mutating-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1946.Largest-Number-After-Mutating-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/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md new file mode 100755 index 000000000..a34423a70 --- /dev/null +++ b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/README.md @@ -0,0 +1,32 @@ +# [1947.Maximum Compatibility Score Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Compatibility Score Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-compatibility-score-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1947.Maximum-Compatibility-Score-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/1901-2000/1948.Delete-Duplicate-Folders-in-System/README.md b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/README.md new file mode 100755 index 000000000..53b559b66 --- /dev/null +++ b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/README.md @@ -0,0 +1,32 @@ +# [1948.Delete Duplicate Folders in 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Delete Duplicate Folders in System +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/delete-duplicate-folders-in-system/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1948.Delete-Duplicate-Folders-in-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1952.Three-Divisors/README.md b/leetcode/1901-2000/1952.Three-Divisors/README.md new file mode 100755 index 000000000..b2fe7eac9 --- /dev/null +++ b/leetcode/1901-2000/1952.Three-Divisors/README.md @@ -0,0 +1,32 @@ +# [1952.Three Divisors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Three Divisors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/three-divisors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1952.Three-Divisors/Solution.go b/leetcode/1901-2000/1952.Three-Divisors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1952.Three-Divisors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go b/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1952.Three-Divisors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/README.md b/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/README.md new file mode 100755 index 000000000..8a4a42075 --- /dev/null +++ b/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/README.md @@ -0,0 +1,32 @@ +# [1953.Maximum Number of Weeks for Which You Can Work][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Weeks for Which You Can Work +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-weeks-for-which-you-can-work/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution.go b/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution_test.go b/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1953.Maximum-Number-of-Weeks-for-Which-You-Can-Work/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/README.md b/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/README.md new file mode 100755 index 000000000..c7b3a0cab --- /dev/null +++ b/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/README.md @@ -0,0 +1,32 @@ +# [1954.Minimum Garden Perimeter to Collect Enough Apples][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Garden Perimeter to Collect Enough Apples +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-garden-perimeter-to-collect-enough-apples/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution.go b/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution_test.go b/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1954.Minimum-Garden-Perimeter-to-Collect-Enough-Apples/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/README.md b/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/README.md new file mode 100755 index 000000000..a55d135d3 --- /dev/null +++ b/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/README.md @@ -0,0 +1,32 @@ +# [1955.Count Number of Special Subsequences][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Special Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-special-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution.go b/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution_test.go b/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1955.Count-Number-of-Special-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md new file mode 100755 index 000000000..b3775cbbf --- /dev/null +++ b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md @@ -0,0 +1,32 @@ +# [1957.Delete Characters to Make Fancy 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 +> ... +Delete Characters to Make Fancy String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/delete-characters-to-make-fancy-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-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/1901-2000/1958.Check-if-Move-is-Legal/README.md b/leetcode/1901-2000/1958.Check-if-Move-is-Legal/README.md new file mode 100755 index 000000000..a7f0b00a2 --- /dev/null +++ b/leetcode/1901-2000/1958.Check-if-Move-is-Legal/README.md @@ -0,0 +1,32 @@ +# [1958.Check if Move is Legal][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Move is Legal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-move-is-legal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution.go b/leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution_test.go b/leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1958.Check-if-Move-is-Legal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/README.md b/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/README.md new file mode 100755 index 000000000..94ef3cf21 --- /dev/null +++ b/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/README.md @@ -0,0 +1,32 @@ +# [1959.Minimum Total Space Wasted With K Resizing Operations][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Total Space Wasted With K Resizing Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-total-space-wasted-with-k-resizing-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution.go b/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution_test.go b/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1959.Minimum-Total-Space-Wasted-With-K-Resizing-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/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/README.md b/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/README.md new file mode 100755 index 000000000..ba74f65c9 --- /dev/null +++ b/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/README.md @@ -0,0 +1,32 @@ +# [1960.Maximum Product of the Length of Two Palindromic 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 +> ... +Maximum Product of the Length of Two Palindromic Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-the-length-of-two-palindromic-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution.go b/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution_test.go b/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1960.Maximum-Product-of-the-Length-of-Two-Palindromic-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/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/README.md b/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/README.md new file mode 100755 index 000000000..6cb068dcc --- /dev/null +++ b/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/README.md @@ -0,0 +1,32 @@ +# [1961.Check If String Is a Prefix of Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check If String Is a Prefix of Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-string-is-a-prefix-of-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution.go b/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution_test.go b/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1961.Check-If-String-Is-a-Prefix-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md new file mode 100755 index 000000000..1803eabb2 --- /dev/null +++ b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md @@ -0,0 +1,32 @@ +# [1962.Remove Stones to Minimize the Total][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Stones to Minimize the Total +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-stones-to-minimize-the-total/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md new file mode 100755 index 000000000..1e36461fe --- /dev/null +++ b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/README.md @@ -0,0 +1,32 @@ +# [1963.Minimum Number of Swaps to Make the String Balanced][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Swaps to Make the String Balanced +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-swaps-to-make-the-string-balanced/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1963.Minimum-Number-of-Swaps-to-Make-the-String-Balanced/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/README.md b/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/README.md new file mode 100755 index 000000000..5ad496727 --- /dev/null +++ b/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/README.md @@ -0,0 +1,32 @@ +# [1964.Find the Longest Valid Obstacle Course at Each Position][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Longest Valid Obstacle Course at Each Position +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-longest-valid-obstacle-course-at-each-position/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution.go b/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution_test.go b/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1964.Find-the-Longest-Valid-Obstacle-Course-at-Each-Position/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/README.md b/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/README.md new file mode 100755 index 000000000..6017deb40 --- /dev/null +++ b/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/README.md @@ -0,0 +1,32 @@ +# [1967.Number of Strings That Appear as Substrings in Word][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Strings That Appear as Substrings in Word +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-strings-that-appear-as-substrings-in-word/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution.go b/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution_test.go b/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1967.Number-of-Strings-That-Appear-as-Substrings-in-Word/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/README.md b/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/README.md new file mode 100755 index 000000000..a392d5a3f --- /dev/null +++ b/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/README.md @@ -0,0 +1,32 @@ +# [1968.Array With Elements Not Equal to Average of Neighbors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Array With Elements Not Equal to Average of Neighbors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/array-with-elements-not-equal-to-average-of-neighbors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution.go b/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution_test.go b/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1968.Array-With-Elements-Not-Equal-to-Average-of-Neighbors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/README.md b/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/README.md new file mode 100755 index 000000000..5232a4323 --- /dev/null +++ b/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/README.md @@ -0,0 +1,32 @@ +# [1969.Minimum Non-Zero Product of the Array Elements][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Non-Zero Product of the Array Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-non-zero-product-of-the-array-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution.go b/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution_test.go b/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1969.Minimum-Non-Zero-Product-of-the-Array-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/README.md b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/README.md new file mode 100755 index 000000000..16760373d --- /dev/null +++ b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/README.md @@ -0,0 +1,32 @@ +# [1970.Last Day Where You Can Still Cross][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Last Day Where You Can Still Cross +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/last-day-where-you-can-still-cross/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md new file mode 100755 index 000000000..c87b94d64 --- /dev/null +++ b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md @@ -0,0 +1,32 @@ +# [1971.Find if Path Exists in Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find if Path Exists in Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-if-path-exists-in-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/README.md b/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/README.md new file mode 100755 index 000000000..2ce0d6972 --- /dev/null +++ b/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/README.md @@ -0,0 +1,32 @@ +# [1974.Minimum Time to Type Word Using Special Typewriter][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Type Word Using Special Typewriter +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-type-word-using-special-typewriter/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution.go b/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution_test.go b/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1974.Minimum-Time-to-Type-Word-Using-Special-Typewriter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md new file mode 100755 index 000000000..81bdefe9c --- /dev/null +++ b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/README.md @@ -0,0 +1,32 @@ +# [1975.Maximum Matrix Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Matrix Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-matrix-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go b/leetcode/1901-2000/1975.Maximum-Matrix-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1975.Maximum-Matrix-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/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/README.md b/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/README.md new file mode 100755 index 000000000..76dbeeada --- /dev/null +++ b/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/README.md @@ -0,0 +1,32 @@ +# [1976.Number of Ways to Arrive at Destination][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Arrive at Destination +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-arrive-at-destination/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution.go b/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution_test.go b/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1976.Number-of-Ways-to-Arrive-at-Destination/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/README.md b/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/README.md new file mode 100755 index 000000000..262627b3a --- /dev/null +++ b/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/README.md @@ -0,0 +1,32 @@ +# [1977.Number of Ways to Separate Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Separate Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-separate-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution.go b/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution_test.go b/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1977.Number-of-Ways-to-Separate-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md new file mode 100755 index 000000000..201f18db6 --- /dev/null +++ b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md @@ -0,0 +1,32 @@ +# [1979.Find Greatest Common Divisor of Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Greatest Common Divisor of Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-greatest-common-divisor-of-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md b/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md new file mode 100755 index 000000000..5a85af8cb --- /dev/null +++ b/leetcode/1901-2000/1980.Find-Unique-Binary-String/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Unique Binary String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-unique-binary-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go b/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution_test.go b/leetcode/1901-2000/1980.Find-Unique-Binary-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1980.Find-Unique-Binary-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/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/README.md b/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/README.md new file mode 100755 index 000000000..538f5fef0 --- /dev/null +++ b/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/README.md @@ -0,0 +1,32 @@ +# [1981.Minimize the Difference Between Target and Chosen 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 +> ... +Minimize the Difference Between Target and Chosen Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-the-difference-between-target-and-chosen-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution.go b/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution_test.go b/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1981.Minimize-the-Difference-Between-Target-and-Chosen-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/1901-2000/1982.Find-Array-Given-Subset-Sums/README.md b/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/README.md new file mode 100755 index 000000000..00915a0c1 --- /dev/null +++ b/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/README.md @@ -0,0 +1,32 @@ +# [1982.Find Array Given Subset Sums][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Array Given Subset Sums +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-array-given-subset-sums/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution.go b/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution_test.go b/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1982.Find-Array-Given-Subset-Sums/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/README.md b/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/README.md new file mode 100755 index 000000000..9963a106d --- /dev/null +++ b/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/README.md @@ -0,0 +1,32 @@ +# [1984.Minimum Difference Between Highest and Lowest of K Scores][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Difference Between Highest and Lowest of K Scores +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-difference-between-highest-and-lowest-of-k-scores/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution.go b/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution_test.go b/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1984.Minimum-Difference-Between-Highest-and-Lowest-of-K-Scores/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/README.md b/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/README.md new file mode 100755 index 000000000..a425db3a1 --- /dev/null +++ b/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/README.md @@ -0,0 +1,32 @@ +# [1985.Find the Kth Largest Integer 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Kth Largest Integer in the Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-kth-largest-integer-in-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution.go b/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution_test.go b/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1985.Find-the-Kth-Largest-Integer-in-the-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/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/README.md b/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/README.md new file mode 100755 index 000000000..dd62cb8c1 --- /dev/null +++ b/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/README.md @@ -0,0 +1,32 @@ +# [1986.Minimum Number of Work Sessions to Finish the Tasks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Work Sessions to Finish the Tasks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-work-sessions-to-finish-the-tasks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution.go b/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution_test.go b/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1986.Minimum-Number-of-Work-Sessions-to-Finish-the-Tasks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/README.md b/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/README.md new file mode 100755 index 000000000..ae2ad7427 --- /dev/null +++ b/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/README.md @@ -0,0 +1,32 @@ +# [1987.Number of Unique Good Subsequences][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Unique Good Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-unique-good-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution.go b/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution_test.go b/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1987.Number-of-Unique-Good-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/README.md b/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/README.md new file mode 100755 index 000000000..5c2dd707b --- /dev/null +++ b/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/README.md @@ -0,0 +1,32 @@ +# [1991.Find the Middle Index in Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Middle Index in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-middle-index-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution.go b/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution_test.go b/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1991.Find-the-Middle-Index-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md new file mode 100755 index 000000000..0eee2f903 --- /dev/null +++ b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md @@ -0,0 +1,32 @@ +# [1992.Find All Groups of Farmland][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All Groups of Farmland +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-groups-of-farmland/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1993.Operations-on-Tree/README.md b/leetcode/1901-2000/1993.Operations-on-Tree/README.md new file mode 100755 index 000000000..94d4edbde --- /dev/null +++ b/leetcode/1901-2000/1993.Operations-on-Tree/README.md @@ -0,0 +1,32 @@ +# [1993.Operations on 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 +> ... +Operations on Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/operations-on-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1993.Operations-on-Tree/Solution.go b/leetcode/1901-2000/1993.Operations-on-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1993.Operations-on-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1993.Operations-on-Tree/Solution_test.go b/leetcode/1901-2000/1993.Operations-on-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1993.Operations-on-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/1901-2000/1994.The-Number-of-Good-Subsets/README.md b/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/README.md new file mode 100755 index 000000000..5fa16fb7e --- /dev/null +++ b/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/README.md @@ -0,0 +1,32 @@ +# [1994.The Number of Good Subsets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Number of Good Subsets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-number-of-good-subsets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution.go b/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution_test.go b/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1994.The-Number-of-Good-Subsets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1995.Count-Special-Quadruplets/README.md b/leetcode/1901-2000/1995.Count-Special-Quadruplets/README.md new file mode 100755 index 000000000..29660630c --- /dev/null +++ b/leetcode/1901-2000/1995.Count-Special-Quadruplets/README.md @@ -0,0 +1,32 @@ +# [1995.Count Special Quadruplets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Special Quadruplets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-special-quadruplets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution.go b/leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution_test.go b/leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1995.Count-Special-Quadruplets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/README.md b/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/README.md new file mode 100755 index 000000000..114a5582a --- /dev/null +++ b/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/README.md @@ -0,0 +1,32 @@ +# [1996.The Number of Weak Characters in the 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 +> ... +The Number of Weak Characters in the Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-number-of-weak-characters-in-the-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution.go b/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution_test.go b/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1996.The-Number-of-Weak-Characters-in-the-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/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/README.md b/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/README.md new file mode 100755 index 000000000..982c908e5 --- /dev/null +++ b/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/README.md @@ -0,0 +1,32 @@ +# [1997.First Day Where You Have Been in All the Rooms][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +First Day Where You Have Been in All the Rooms +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/first-day-where-you-have-been-in-all-the-rooms/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution.go b/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution_test.go b/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1997.First-Day-Where-You-Have-Been-in-All-the-Rooms/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/README.md b/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/README.md new file mode 100755 index 000000000..63ee2b3cb --- /dev/null +++ b/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/README.md @@ -0,0 +1,32 @@ +# [1998.GCD Sort 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 +> ... +GCD Sort of an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/gcd-sort-of-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution.go b/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution_test.go b/leetcode/1901-2000/1998.GCD-Sort-of-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1998.GCD-Sort-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/1901-2000/2000.Reverse-Prefix-of-Word/README.md b/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/README.md new file mode 100755 index 000000000..def4cab17 --- /dev/null +++ b/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/README.md @@ -0,0 +1,32 @@ +# [2000.Reverse Prefix of Word][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reverse Prefix of Word +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reverse-prefix-of-word/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution.go b/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution_test.go b/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/2000.Reverse-Prefix-of-Word/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/README.md b/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/README.md new file mode 100755 index 000000000..5ed8bd2d9 --- /dev/null +++ b/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/README.md @@ -0,0 +1,32 @@ +# [2001.Number of Pairs of Interchangeable Rectangles][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Pairs of Interchangeable Rectangles +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-pairs-of-interchangeable-rectangles/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution.go b/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution_test.go b/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2001.Number-of-Pairs-of-Interchangeable-Rectangles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/README.md b/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/README.md new file mode 100755 index 000000000..e32567f17 --- /dev/null +++ b/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/README.md @@ -0,0 +1,32 @@ +# [2002.Maximum Product of the Length of Two 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Product of the Length of Two Palindromic Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-the-length-of-two-palindromic-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution.go b/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution_test.go b/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2002.Maximum-Product-of-the-Length-of-Two-Palindromic-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/README.md b/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/README.md new file mode 100755 index 000000000..fb49eacb6 --- /dev/null +++ b/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/README.md @@ -0,0 +1,32 @@ +# [2003.Smallest Missing Genetic Value in Each Subtree][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Genetic Value in Each Subtree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-missing-genetic-value-in-each-subtree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution.go b/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution_test.go b/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2003.Smallest-Missing-Genetic-Value-in-Each-Subtree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/README.md b/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/README.md new file mode 100755 index 000000000..7f126405f --- /dev/null +++ b/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/README.md @@ -0,0 +1,32 @@ +# [2006.Count Number of Pairs With Absolute Difference K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Pairs With Absolute Difference K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-pairs-with-absolute-difference-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution.go b/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution_test.go b/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2006.Count-Number-of-Pairs-With-Absolute-Difference-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/2001-2100/2007.Find-Original-Array-From-Doubled-Array/README.md b/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/README.md new file mode 100755 index 000000000..5cf914add --- /dev/null +++ b/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/README.md @@ -0,0 +1,32 @@ +# [2007.Find Original Array From Doubled 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 Original Array From Doubled Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-original-array-from-doubled-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution.go b/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution_test.go b/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2007.Find-Original-Array-From-Doubled-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/2001-2100/2008.Maximum-Earnings-From-Taxi/README.md b/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/README.md new file mode 100755 index 000000000..c057dcd6d --- /dev/null +++ b/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/README.md @@ -0,0 +1,32 @@ +# [2008.Maximum Earnings From Taxi][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Earnings From Taxi +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-earnings-from-taxi/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution.go b/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution_test.go b/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2008.Maximum-Earnings-From-Taxi/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/README.md b/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/README.md new file mode 100755 index 000000000..21b8498dc --- /dev/null +++ b/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/README.md @@ -0,0 +1,32 @@ +# [2009.Minimum Number of Operations to Make Array Continuous][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Continuous +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-array-continuous/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution.go b/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution_test.go b/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2009.Minimum-Number-of-Operations-to-Make-Array-Continuous/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md new file mode 100755 index 000000000..20b09b2ec --- /dev/null +++ b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md @@ -0,0 +1,32 @@ +# [2011.Final Value of Variable After Performing 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 +> ... +Final Value of Variable After Performing Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/final-value-of-variable-after-performing-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution_test.go b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-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/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md new file mode 100755 index 000000000..962866445 --- /dev/null +++ b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/README.md @@ -0,0 +1,32 @@ +# [2012.Sum of Beauty in the Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Beauty in the Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-beauty-in-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2012.Sum-of-Beauty-in-the-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/2001-2100/2013.Detect-Squares/README.md b/leetcode/2001-2100/2013.Detect-Squares/README.md new file mode 100755 index 000000000..1e228a0ff --- /dev/null +++ b/leetcode/2001-2100/2013.Detect-Squares/README.md @@ -0,0 +1,32 @@ +# [2013.Detect Squares][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Detect Squares +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/detect-squares/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2013.Detect-Squares/Solution.go b/leetcode/2001-2100/2013.Detect-Squares/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2013.Detect-Squares/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2013.Detect-Squares/Solution_test.go b/leetcode/2001-2100/2013.Detect-Squares/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2013.Detect-Squares/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md new file mode 100755 index 000000000..8a2489525 --- /dev/null +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md @@ -0,0 +1,32 @@ +# [2014.Longest Subsequence Repeated k Times][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Subsequence Repeated k Times +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-subsequence-repeated-k-times/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-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/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md new file mode 100755 index 000000000..262931a91 --- /dev/null +++ b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/README.md @@ -0,0 +1,32 @@ +# [2016.Maximum Difference Between Increasing Elements][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Difference Between Increasing Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-difference-between-increasing-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2016.Maximum-Difference-Between-Increasing-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/2001-2100/2017.Grid-Game/README.md b/leetcode/2001-2100/2017.Grid-Game/README.md new file mode 100755 index 000000000..fd6b9c131 --- /dev/null +++ b/leetcode/2001-2100/2017.Grid-Game/README.md @@ -0,0 +1,32 @@ +# [2017.Grid 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 +> ... +Grid Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/grid-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2017.Grid-Game/Solution.go b/leetcode/2001-2100/2017.Grid-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2017.Grid-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2017.Grid-Game/Solution_test.go b/leetcode/2001-2100/2017.Grid-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2017.Grid-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/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/README.md b/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/README.md new file mode 100755 index 000000000..d79b4e4d7 --- /dev/null +++ b/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/README.md @@ -0,0 +1,32 @@ +# [2018.Check if Word Can Be Placed In Crossword][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Word Can Be Placed In Crossword +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-word-can-be-placed-in-crossword/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution.go b/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution_test.go b/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2018.Check-if-Word-Can-Be-Placed-In-Crossword/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/README.md b/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/README.md new file mode 100755 index 000000000..1db66c28a --- /dev/null +++ b/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/README.md @@ -0,0 +1,32 @@ +# [2019.The Score of Students Solving Math Expression][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Score of Students Solving Math Expression +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-score-of-students-solving-math-expression/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution.go b/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution_test.go b/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2019.The-Score-of-Students-Solving-Math-Expression/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/README.md b/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/README.md new file mode 100755 index 000000000..76c1bbda0 --- /dev/null +++ b/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/README.md @@ -0,0 +1,32 @@ +# [2022.Convert 1D Array Into 2D 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 +> ... +Convert 1D Array Into 2D Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/convert-1d-array-into-2d-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution.go b/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution_test.go b/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2022.Convert-1D-Array-Into-2D-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/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 new file mode 100755 index 000000000..f9ac380d8 --- /dev/null +++ b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Pairs of Strings With Concatenation Equal to Target +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-pairs-of-strings-with-concatenation-equal-to-target/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2023.Number-of-Pairs-of-Strings-With-Concatenation-Equal-to-Target/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md new file mode 100755 index 000000000..bf33ba746 --- /dev/null +++ b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md @@ -0,0 +1,32 @@ +# [2024.Maximize the Confusion of an Exam][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Confusion of an Exam +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-confusion-of-an-exam/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/README.md b/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/README.md new file mode 100755 index 000000000..2ea4f7cc0 --- /dev/null +++ b/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/README.md @@ -0,0 +1,32 @@ +# [2025.Maximum Number of Ways to Partition 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 +> ... +Maximum Number of Ways to Partition an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-ways-to-partition-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution.go b/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution_test.go b/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2025.Maximum-Number-of-Ways-to-Partition-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/2001-2100/2027.Minimum-Moves-to-Convert-String/README.md b/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/README.md new file mode 100755 index 000000000..e79cc5bd3 --- /dev/null +++ b/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/README.md @@ -0,0 +1,32 @@ +# [2027.Minimum Moves to Convert 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 +> ... +Minimum Moves to Convert String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-moves-to-convert-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution.go b/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution_test.go b/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2027.Minimum-Moves-to-Convert-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/2001-2100/2028.Find-Missing-Observations/README.md b/leetcode/2001-2100/2028.Find-Missing-Observations/README.md new file mode 100755 index 000000000..b853c7969 --- /dev/null +++ b/leetcode/2001-2100/2028.Find-Missing-Observations/README.md @@ -0,0 +1,32 @@ +# [2028.Find Missing Observations][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Missing Observations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-missing-observations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2028.Find-Missing-Observations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2029.Stone-Game-IX/README.md b/leetcode/2001-2100/2029.Stone-Game-IX/README.md new file mode 100755 index 000000000..c771eb205 --- /dev/null +++ b/leetcode/2001-2100/2029.Stone-Game-IX/README.md @@ -0,0 +1,32 @@ +# [2029.Stone Game IX][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stone Game IX +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stone-game-ix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2029.Stone-Game-IX/Solution.go b/leetcode/2001-2100/2029.Stone-Game-IX/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2029.Stone-Game-IX/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2029.Stone-Game-IX/Solution_test.go b/leetcode/2001-2100/2029.Stone-Game-IX/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2029.Stone-Game-IX/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/README.md b/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/README.md new file mode 100755 index 000000000..e25662080 --- /dev/null +++ b/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/README.md @@ -0,0 +1,32 @@ +# [2030.Smallest K-Length Subsequence With Occurrences of a Letter][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 K-Length Subsequence With Occurrences of a Letter +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-k-length-subsequence-with-occurrences-of-a-letter/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution.go b/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution_test.go b/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2030.Smallest-K-Length-Subsequence-With-Occurrences-of-a-Letter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2032.Two-Out-of-Three/README.md b/leetcode/2001-2100/2032.Two-Out-of-Three/README.md new file mode 100755 index 000000000..a977394d6 --- /dev/null +++ b/leetcode/2001-2100/2032.Two-Out-of-Three/README.md @@ -0,0 +1,32 @@ +# [2032.Two Out of Three][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Two Out of Three +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/two-out-of-three/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md new file mode 100755 index 000000000..92d48a887 --- /dev/null +++ b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/README.md @@ -0,0 +1,32 @@ +# [2033.Minimum Operations to Make a Uni-Value Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make a Uni-Value Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-a-uni-value-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2033.Minimum-Operations-to-Make-a-Uni-Value-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/2001-2100/2034.Stock-Price-Fluctuation-/README.md b/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/README.md new file mode 100755 index 000000000..d8eb337d7 --- /dev/null +++ b/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/README.md @@ -0,0 +1,32 @@ +# [2034.Stock Price Fluctuation ][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stock Price Fluctuation +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stock-price-fluctuation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution.go b/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution_test.go b/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2034.Stock-Price-Fluctuation-/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/README.md b/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/README.md new file mode 100755 index 000000000..f8ceefd60 --- /dev/null +++ b/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/README.md @@ -0,0 +1,32 @@ +# [2035.Partition Array Into Two Arrays to Minimize Sum Difference][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partition Array Into Two Arrays to Minimize Sum Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partition-array-into-two-arrays-to-minimize-sum-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution.go b/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution_test.go b/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2035.Partition-Array-Into-Two-Arrays-to-Minimize-Sum-Difference/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/README.md b/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/README.md new file mode 100755 index 000000000..ab1af5610 --- /dev/null +++ b/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/README.md @@ -0,0 +1,32 @@ +# [2037.Minimum Number of Moves to Seat Everyone][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Moves to Seat Everyone +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-moves-to-seat-everyone/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution.go b/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution_test.go b/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2037.Minimum-Number-of-Moves-to-Seat-Everyone/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..2f52c94c6 --- /dev/null +++ b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Remove Colored Pieces if Both Neighbors are the Same Color +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-colored-pieces-if-both-neighbors-are-the-same-color/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2038.Remove-Colored-Pieces-if-Both-Neighbors-are-the-Same-Color/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/README.md b/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/README.md new file mode 100755 index 000000000..6046fb869 --- /dev/null +++ b/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/README.md @@ -0,0 +1,32 @@ +# [2039.The Time When the Network Becomes Idle][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Time When the Network Becomes Idle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-time-when-the-network-becomes-idle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution.go b/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution_test.go b/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2039.The-Time-When-the-Network-Becomes-Idle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md new file mode 100755 index 000000000..08c6a8fb2 --- /dev/null +++ b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/README.md @@ -0,0 +1,32 @@ +# [2040.Kth Smallest Product of Two Sorted Arrays][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Kth Smallest Product of Two Sorted Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-smallest-product-of-two-sorted-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2040.Kth-Smallest-Product-of-Two-Sorted-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/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/README.md b/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/README.md new file mode 100755 index 000000000..77d52a1a3 --- /dev/null +++ b/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/README.md @@ -0,0 +1,32 @@ +# [2042.Check if Numbers Are Ascending in a Sentence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Numbers Are Ascending in a Sentence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-numbers-are-ascending-in-a-sentence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution.go b/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution_test.go b/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2042.Check-if-Numbers-Are-Ascending-in-a-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2043.Simple-Bank-System/README.md b/leetcode/2001-2100/2043.Simple-Bank-System/README.md new file mode 100755 index 000000000..c44fe7784 --- /dev/null +++ b/leetcode/2001-2100/2043.Simple-Bank-System/README.md @@ -0,0 +1,32 @@ +# [2043.Simple Bank System][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Simple Bank System +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/simple-bank-system/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go b/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2043.Simple-Bank-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go b/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2043.Simple-Bank-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..818342f91 --- /dev/null +++ b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Maximum Bitwise-OR Subsets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-maximum-bitwise-or-subsets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2044.Count-Number-of-Maximum-Bitwise-OR-Subsets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/README.md b/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/README.md new file mode 100755 index 000000000..c0a4050b2 --- /dev/null +++ b/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/README.md @@ -0,0 +1,32 @@ +# [2045.Second Minimum Time to Reach Destination][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Second Minimum Time to Reach Destination +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/second-minimum-time-to-reach-destination/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution.go b/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution_test.go b/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2045.Second-Minimum-Time-to-Reach-Destination/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/README.md b/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/README.md new file mode 100755 index 000000000..dd787a9a2 --- /dev/null +++ b/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/README.md @@ -0,0 +1,32 @@ +# [2047.Number of Valid Words in a Sentence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Valid Words in a Sentence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-valid-words-in-a-sentence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution.go b/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution_test.go b/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2047.Number-of-Valid-Words-in-a-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md new file mode 100755 index 000000000..8f136a949 --- /dev/null +++ b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/README.md @@ -0,0 +1,32 @@ +# [2048.Next Greater Numerically Balanced Number][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Next Greater Numerically Balanced Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/next-greater-numerically-balanced-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2048.Next-Greater-Numerically-Balanced-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/README.md b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/README.md new file mode 100755 index 000000000..8550b108f --- /dev/null +++ b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/README.md @@ -0,0 +1,32 @@ +# [2049.Count Nodes With the Highest 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 +> ... +Count Nodes With the Highest Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-nodes-with-the-highest-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution_test.go b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2049.Count-Nodes-With-the-Highest-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/2001-2100/2050.Parallel-Courses-III/README.md b/leetcode/2001-2100/2050.Parallel-Courses-III/README.md new file mode 100755 index 000000000..7bcddc210 --- /dev/null +++ b/leetcode/2001-2100/2050.Parallel-Courses-III/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Parallel Courses III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/parallel-courses-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2050.Parallel-Courses-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md new file mode 100755 index 000000000..4676e1ea8 --- /dev/null +++ b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2053.Kth Distinct String in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Kth Distinct String in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-distinct-string-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2053.Kth-Distinct-String-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/README.md b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/README.md new file mode 100755 index 000000000..9df242b73 --- /dev/null +++ b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/README.md @@ -0,0 +1,32 @@ +# [2054.Two Best Non-Overlapping Events][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Two Best Non-Overlapping Events +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/two-best-non-overlapping-events/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2054.Two-Best-Non-Overlapping-Events/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2055.Plates-Between-Candles/README.md b/leetcode/2001-2100/2055.Plates-Between-Candles/README.md new file mode 100755 index 000000000..78be27961 --- /dev/null +++ b/leetcode/2001-2100/2055.Plates-Between-Candles/README.md @@ -0,0 +1,32 @@ +# [2055.Plates Between Candles][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Plates Between Candles +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/plates-between-candles/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2055.Plates-Between-Candles/Solution.go b/leetcode/2001-2100/2055.Plates-Between-Candles/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2055.Plates-Between-Candles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2055.Plates-Between-Candles/Solution_test.go b/leetcode/2001-2100/2055.Plates-Between-Candles/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2055.Plates-Between-Candles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/README.md b/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/README.md new file mode 100755 index 000000000..d25476d0f --- /dev/null +++ b/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/README.md @@ -0,0 +1,32 @@ +# [2056.Number of Valid Move Combinations On Chessboard][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Valid Move Combinations On Chessboard +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-valid-move-combinations-on-chessboard/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution.go b/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution_test.go b/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2056.Number-of-Valid-Move-Combinations-On-Chessboard/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/README.md b/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/README.md new file mode 100755 index 000000000..ffea0ca2d --- /dev/null +++ b/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/README.md @@ -0,0 +1,32 @@ +# [2057.Smallest Index With Equal Value][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Index With Equal Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-index-with-equal-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution.go b/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution_test.go b/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2057.Smallest-Index-With-Equal-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..b80209ef6 --- /dev/null +++ b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Minimum and Maximum Number of Nodes Between Critical Points +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-minimum-and-maximum-number-of-nodes-between-critical-points/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2058.Find-the-Minimum-and-Maximum-Number-of-Nodes-Between-Critical-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/README.md b/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/README.md new file mode 100755 index 000000000..03fd7bc88 --- /dev/null +++ b/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/README.md @@ -0,0 +1,32 @@ +# [2059.Minimum Operations to Convert Number][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Convert Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-convert-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution.go b/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution_test.go b/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2059.Minimum-Operations-to-Convert-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/README.md b/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/README.md new file mode 100755 index 000000000..968dd92be --- /dev/null +++ b/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/README.md @@ -0,0 +1,32 @@ +# [2060.Check if an Original String Exists Given Two Encoded Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if an Original String Exists Given Two Encoded Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-an-original-string-exists-given-two-encoded-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution.go b/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution_test.go b/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2060.Check-if-an-Original-String-Exists-Given-Two-Encoded-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/README.md b/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/README.md new file mode 100755 index 000000000..e51533d42 --- /dev/null +++ b/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/README.md @@ -0,0 +1,32 @@ +# [2062.Count Vowel Substrings of a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Vowel Substrings of a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-vowel-substrings-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution.go b/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution_test.go b/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2062.Count-Vowel-Substrings-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2063.Vowels-of-All-Substrings/README.md b/leetcode/2001-2100/2063.Vowels-of-All-Substrings/README.md new file mode 100755 index 000000000..e1685b871 --- /dev/null +++ b/leetcode/2001-2100/2063.Vowels-of-All-Substrings/README.md @@ -0,0 +1,32 @@ +# [2063.Vowels of All 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 +> ... +Vowels of All Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/vowels-of-all-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution.go b/leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution_test.go b/leetcode/2001-2100/2063.Vowels-of-All-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2063.Vowels-of-All-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/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md new file mode 100755 index 000000000..161871ba1 --- /dev/null +++ b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/README.md @@ -0,0 +1,32 @@ +# [2064.Minimized Maximum of Products Distributed to Any Store][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimized Maximum of Products Distributed to Any Store +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimized-maximum-of-products-distributed-to-any-store/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2064.Minimized-Maximum-of-Products-Distributed-to-Any-Store/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/README.md b/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/README.md new file mode 100755 index 000000000..563741e13 --- /dev/null +++ b/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/README.md @@ -0,0 +1,32 @@ +# [2065.Maximum Path Quality of a Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Path Quality of a Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-path-quality-of-a-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution.go b/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution_test.go b/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2065.Maximum-Path-Quality-of-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/README.md b/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/README.md new file mode 100755 index 000000000..008c850ee --- /dev/null +++ b/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/README.md @@ -0,0 +1,32 @@ +# [2068.Check Whether Two Strings are Almost Equivalent][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Whether Two Strings are Almost Equivalent +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-whether-two-strings-are-almost-equivalent/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution.go b/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution_test.go b/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2068.Check-Whether-Two-Strings-are-Almost-Equivalent/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/README.md b/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/README.md new file mode 100755 index 000000000..fb95664a1 --- /dev/null +++ b/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/README.md @@ -0,0 +1,32 @@ +# [2069.Walking Robot Simulation 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 +> ... +Walking Robot Simulation II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/walking-robot-simulation-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution.go b/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution_test.go b/leetcode/2001-2100/2069.Walking-Robot-Simulation-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2069.Walking-Robot-Simulation-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/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md new file mode 100755 index 000000000..bd2a3ef12 --- /dev/null +++ b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/README.md @@ -0,0 +1,32 @@ +# [2070.Most Beautiful Item for Each Query][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Most Beautiful Item for Each Query +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/most-beautiful-item-for-each-query/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2070.Most-Beautiful-Item-for-Each-Query/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/README.md b/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/README.md new file mode 100755 index 000000000..83432c063 --- /dev/null +++ b/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/README.md @@ -0,0 +1,32 @@ +# [2071.Maximum Number of Tasks You Can Assign][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Tasks You Can Assign +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-tasks-you-can-assign/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution.go b/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution_test.go b/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2071.Maximum-Number-of-Tasks-You-Can-Assign/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/README.md b/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/README.md new file mode 100755 index 000000000..d7463157d --- /dev/null +++ b/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/README.md @@ -0,0 +1,32 @@ +# [2073.Time Needed to Buy Tickets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Time Needed to Buy Tickets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/time-needed-to-buy-tickets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution.go b/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution_test.go b/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2073.Time-Needed-to-Buy-Tickets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..d341550e9 --- /dev/null +++ b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reverse Nodes in Even Length Groups +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reverse-nodes-in-even-length-groups/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2074.Reverse-Nodes-in-Even-Length-Groups/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/README.md b/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/README.md new file mode 100755 index 000000000..db21d1b3b --- /dev/null +++ b/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/README.md @@ -0,0 +1,32 @@ +# [2075.Decode the Slanted Ciphertext][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Decode the Slanted Ciphertext +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/decode-the-slanted-ciphertext/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution.go b/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution_test.go b/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2075.Decode-the-Slanted-Ciphertext/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/README.md b/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/README.md new file mode 100755 index 000000000..413c6a704 --- /dev/null +++ b/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/README.md @@ -0,0 +1,32 @@ +# [2076.Process Restricted Friend Requests][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Process Restricted Friend Requests +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/process-restricted-friend-requests/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution.go b/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution_test.go b/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2076.Process-Restricted-Friend-Requests/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/README.md b/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/README.md new file mode 100755 index 000000000..dab6b95b1 --- /dev/null +++ b/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/README.md @@ -0,0 +1,32 @@ +# [2078.Two Furthest Houses With Different Colors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Two Furthest Houses With Different Colors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/two-furthest-houses-with-different-colors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution.go b/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution_test.go b/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2078.Two-Furthest-Houses-With-Different-Colors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2079.Watering-Plants/README.md b/leetcode/2001-2100/2079.Watering-Plants/README.md new file mode 100755 index 000000000..484b63234 --- /dev/null +++ b/leetcode/2001-2100/2079.Watering-Plants/README.md @@ -0,0 +1,32 @@ +# [2079.Watering Plants][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Watering Plants +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/watering-plants/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2079.Watering-Plants/Solution.go b/leetcode/2001-2100/2079.Watering-Plants/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2079.Watering-Plants/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go b/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2080.Range-Frequency-Queries/README.md b/leetcode/2001-2100/2080.Range-Frequency-Queries/README.md new file mode 100755 index 000000000..83d05d3f3 --- /dev/null +++ b/leetcode/2001-2100/2080.Range-Frequency-Queries/README.md @@ -0,0 +1,32 @@ +# [2080.Range Frequency 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 +> ... +Range Frequency Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/range-frequency-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2080.Range-Frequency-Queries/Solution.go b/leetcode/2001-2100/2080.Range-Frequency-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2080.Range-Frequency-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2080.Range-Frequency-Queries/Solution_test.go b/leetcode/2001-2100/2080.Range-Frequency-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2080.Range-Frequency-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/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md new file mode 100755 index 000000000..c3079388b --- /dev/null +++ b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/README.md @@ -0,0 +1,32 @@ +# [2081.Sum of k-Mirror Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of k-Mirror Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-k-mirror-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2081.Sum-of-k-Mirror-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/README.md b/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/README.md new file mode 100755 index 000000000..36297e0ae --- /dev/null +++ b/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/README.md @@ -0,0 +1,32 @@ +# [2085.Count Common Words With One Occurrence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Common Words With One Occurrence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-common-words-with-one-occurrence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution.go b/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution_test.go b/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2085.Count-Common-Words-With-One-Occurrence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/README.md b/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/README.md new file mode 100755 index 000000000..7d286e522 --- /dev/null +++ b/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/README.md @@ -0,0 +1,32 @@ +# [2086.Minimum Number of Buckets Required to Collect Rainwater from Houses][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Buckets Required to Collect Rainwater from Houses +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-buckets-required-to-collect-rainwater-from-houses/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution.go b/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution_test.go b/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2086.Minimum-Number-of-Buckets-Required-to-Collect-Rainwater-from-Houses/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/README.md b/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/README.md new file mode 100755 index 000000000..48c4b0ca0 --- /dev/null +++ b/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/README.md @@ -0,0 +1,32 @@ +# [2087.Minimum Cost Homecoming of a Robot in a Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost Homecoming of a Robot in a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-homecoming-of-a-robot-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution.go b/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution_test.go b/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2087.Minimum-Cost-Homecoming-of-a-Robot-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/README.md b/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/README.md new file mode 100755 index 000000000..27cbb4558 --- /dev/null +++ b/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/README.md @@ -0,0 +1,32 @@ +# [2088.Count Fertile Pyramids in a Land][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Fertile Pyramids in a Land +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-fertile-pyramids-in-a-land/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution.go b/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution_test.go b/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2088.Count-Fertile-Pyramids-in-a-Land/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/README.md b/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/README.md new file mode 100755 index 000000000..9632da691 --- /dev/null +++ b/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/README.md @@ -0,0 +1,32 @@ +# [2089.Find Target Indices After Sorting 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 Target Indices After Sorting Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-target-indices-after-sorting-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution.go b/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution_test.go b/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2089.Find-Target-Indices-After-Sorting-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/2001-2100/2090.K-Radius-Subarray-Averages/README.md b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md new file mode 100755 index 000000000..f9dae9650 --- /dev/null +++ b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md @@ -0,0 +1,32 @@ +# [2090.K Radius Subarray Averages][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +K Radius Subarray Averages +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/k-radius-subarray-averages/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/README.md b/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/README.md new file mode 100755 index 000000000..e06ffd056 --- /dev/null +++ b/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/README.md @@ -0,0 +1,32 @@ +# [2091.Removing Minimum and Maximum From 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 +> ... +Removing Minimum and Maximum From Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/removing-minimum-and-maximum-from-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution.go b/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution_test.go b/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2091.Removing-Minimum-and-Maximum-From-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/2001-2100/2092.Find-All-People-With-Secret/README.md b/leetcode/2001-2100/2092.Find-All-People-With-Secret/README.md new file mode 100755 index 000000000..7913d5be0 --- /dev/null +++ b/leetcode/2001-2100/2092.Find-All-People-With-Secret/README.md @@ -0,0 +1,32 @@ +# [2092.Find All People With Secret][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All People With Secret +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-people-with-secret/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution.go b/leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution_test.go b/leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2092.Find-All-People-With-Secret/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md new file mode 100755 index 000000000..1af75ad50 --- /dev/null +++ b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md @@ -0,0 +1,32 @@ +# [2094.Finding 3-Digit Even Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Finding 3-Digit Even Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/finding-3-digit-even-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..afc937b27 --- /dev/null +++ b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Delete the Middle Node of a Linked List +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/delete-the-middle-node-of-a-linked-list/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2095.Delete-the-Middle-Node-of-a-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/README.md b/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/README.md new file mode 100755 index 000000000..74b9241fe --- /dev/null +++ b/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/README.md @@ -0,0 +1,32 @@ +# [2096.Step-By-Step Directions From a Binary Tree Node to Another][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Step-By-Step Directions From a Binary Tree Node to Another +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/step-by-step-directions-from-a-binary-tree-node-to-another/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution.go b/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution_test.go b/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2096.Step-By-Step-Directions-From-a-Binary-Tree-Node-to-Another/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/README.md b/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/README.md new file mode 100755 index 000000000..001c7abdf --- /dev/null +++ b/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/README.md @@ -0,0 +1,32 @@ +# [2097.Valid Arrangement of Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Valid Arrangement of Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/valid-arrangement-of-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution.go b/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution_test.go b/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2097.Valid-Arrangement-of-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md new file mode 100755 index 000000000..2a353b7cf --- /dev/null +++ b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/README.md @@ -0,0 +1,32 @@ +# [2099.Find Subsequence of Length K With the Largest Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Subsequence of Length K With the Largest Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-subsequence-of-length-k-with-the-largest-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2099.Find-Subsequence-of-Length-K-With-the-Largest-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/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/README.md b/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/README.md new file mode 100755 index 000000000..13fd3c423 --- /dev/null +++ b/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/README.md @@ -0,0 +1,32 @@ +# [2100.Find Good Days to Rob the 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Good Days to Rob the Bank +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-good-days-to-rob-the-bank/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution.go b/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution_test.go b/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2100.Find-Good-Days-to-Rob-the-Bank/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md new file mode 100755 index 000000000..0647c8d65 --- /dev/null +++ b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md @@ -0,0 +1,32 @@ +# [2101.Detonate the Maximum Bombs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Detonate the Maximum Bombs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/detonate-the-maximum-bombs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/README.md b/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/README.md new file mode 100755 index 000000000..58341a34e --- /dev/null +++ b/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/README.md @@ -0,0 +1,32 @@ +# [2102.Sequentially Ordinal Rank Tracker][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sequentially Ordinal Rank Tracker +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sequentially-ordinal-rank-tracker/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution.go b/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution_test.go b/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2102.Sequentially-Ordinal-Rank-Tracker/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2103.Rings-and-Rods/README.md b/leetcode/2101-2200/2103.Rings-and-Rods/README.md new file mode 100755 index 000000000..578958146 --- /dev/null +++ b/leetcode/2101-2200/2103.Rings-and-Rods/README.md @@ -0,0 +1,32 @@ +# [2103.Rings and Rods][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Rings and Rods +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rings-and-rods/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2103.Rings-and-Rods/Solution.go b/leetcode/2101-2200/2103.Rings-and-Rods/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2103.Rings-and-Rods/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2103.Rings-and-Rods/Solution_test.go b/leetcode/2101-2200/2103.Rings-and-Rods/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2103.Rings-and-Rods/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md new file mode 100755 index 000000000..274c485d3 --- /dev/null +++ b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md @@ -0,0 +1,32 @@ +# [2104.Sum of Subarray Ranges][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Subarray Ranges +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-subarray-ranges/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2105.Watering-Plants-II/README.md b/leetcode/2101-2200/2105.Watering-Plants-II/README.md new file mode 100755 index 000000000..d5c96d05e --- /dev/null +++ b/leetcode/2101-2200/2105.Watering-Plants-II/README.md @@ -0,0 +1,32 @@ +# [2105.Watering Plants 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 +> ... +Watering Plants II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/watering-plants-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2105.Watering-Plants-II/Solution.go b/leetcode/2101-2200/2105.Watering-Plants-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2105.Watering-Plants-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2105.Watering-Plants-II/Solution_test.go b/leetcode/2101-2200/2105.Watering-Plants-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2105.Watering-Plants-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/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md new file mode 100755 index 000000000..97b6c47b1 --- /dev/null +++ b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/README.md @@ -0,0 +1,32 @@ +# [2106.Maximum Fruits Harvested After at Most K Steps][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Fruits Harvested After at Most K Steps +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-fruits-harvested-after-at-most-k-steps/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2106.Maximum-Fruits-Harvested-After-at-Most-K-Steps/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..f7e85a4fd --- /dev/null +++ b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find First Palindromic String in the Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-first-palindromic-string-in-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2108.Find-First-Palindromic-String-in-the-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/2101-2200/2109.Adding-Spaces-to-a-String/README.md b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md new file mode 100755 index 000000000..003865456 --- /dev/null +++ b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md @@ -0,0 +1,32 @@ +# [2109.Adding Spaces to a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Adding Spaces to a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/adding-spaces-to-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md new file mode 100755 index 000000000..21aeaafaa --- /dev/null +++ b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/README.md @@ -0,0 +1,32 @@ +# [2110.Number of Smooth Descent Periods of a Stock][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Smooth Descent Periods of a Stock +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-smooth-descent-periods-of-a-stock/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2110.Number-of-Smooth-Descent-Periods-of-a-Stock/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/README.md b/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/README.md new file mode 100755 index 000000000..8be26879e --- /dev/null +++ b/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/README.md @@ -0,0 +1,32 @@ +# [2111.Minimum Operations to Make the Array K-Increasing][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make the Array K-Increasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-the-array-k-increasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution.go b/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution_test.go b/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2111.Minimum-Operations-to-Make-the-Array-K-Increasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/README.md b/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/README.md new file mode 100755 index 000000000..afbaa3231 --- /dev/null +++ b/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/README.md @@ -0,0 +1,32 @@ +# [2114.Maximum Number of Words Found in Sentences][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Words Found in Sentences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-words-found-in-sentences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution.go b/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution_test.go b/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2114.Maximum-Number-of-Words-Found-in-Sentences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md new file mode 100755 index 000000000..dc1770289 --- /dev/null +++ b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/README.md @@ -0,0 +1,32 @@ +# [2115.Find All Possible Recipes from Given Supplies][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All Possible Recipes from Given Supplies +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-possible-recipes-from-given-supplies/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2115.Find-All-Possible-Recipes-from-Given-Supplies/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md new file mode 100755 index 000000000..9448f27aa --- /dev/null +++ b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/README.md @@ -0,0 +1,32 @@ +# [2116.Check if a Parentheses String Can Be Valid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if a Parentheses String Can Be Valid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-a-parentheses-string-can-be-valid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2116.Check-if-a-Parentheses-String-Can-Be-Valid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/README.md b/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/README.md new file mode 100755 index 000000000..6b79de911 --- /dev/null +++ b/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/README.md @@ -0,0 +1,32 @@ +# [2117.Abbreviating the Product of a Range][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Abbreviating the Product of a Range +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/abbreviating-the-product-of-a-range/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution.go b/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution_test.go b/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2117.Abbreviating-the-Product-of-a-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/README.md b/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/README.md new file mode 100755 index 000000000..4a20e1df3 --- /dev/null +++ b/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/README.md @@ -0,0 +1,32 @@ +# [2119.A Number After a Double Reversal][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +A Number After a Double Reversal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/a-number-after-a-double-reversal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution.go b/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution_test.go b/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2119.A-Number-After-a-Double-Reversal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/README.md b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/README.md new file mode 100755 index 000000000..d2e9c088a --- /dev/null +++ b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/README.md @@ -0,0 +1,32 @@ +# [2120.Execution of All Suffix Instructions Staying in a Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Execution of All Suffix Instructions Staying in a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2120.Execution-of-All-Suffix-Instructions-Staying-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/README.md b/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/README.md new file mode 100755 index 000000000..378044278 --- /dev/null +++ b/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/README.md @@ -0,0 +1,32 @@ +# [2121.Intervals Between Identical 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 +> ... +Intervals Between Identical Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/intervals-between-identical-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution.go b/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution_test.go b/leetcode/2101-2200/2121.Intervals-Between-Identical-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2121.Intervals-Between-Identical-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/2101-2200/2122.Recover-the-Original-Array/README.md b/leetcode/2101-2200/2122.Recover-the-Original-Array/README.md new file mode 100755 index 000000000..7b59e69be --- /dev/null +++ b/leetcode/2101-2200/2122.Recover-the-Original-Array/README.md @@ -0,0 +1,32 @@ +# [2122.Recover the Original 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 +> ... +Recover the Original Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/recover-the-original-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2122.Recover-the-Original-Array/Solution.go b/leetcode/2101-2200/2122.Recover-the-Original-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2122.Recover-the-Original-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2122.Recover-the-Original-Array/Solution_test.go b/leetcode/2101-2200/2122.Recover-the-Original-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2122.Recover-the-Original-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/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/README.md b/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/README.md new file mode 100755 index 000000000..f5429f1e0 --- /dev/null +++ b/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/README.md @@ -0,0 +1,32 @@ +# [2124.Check if All A's Appears Before All B's][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 All A's Appears Before All B's +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-all-as-appears-before-all-bs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution.go b/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution_test.go b/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2124.Check-if-All-As-Appears-Before-All-Bs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..43ad51916 --- /dev/null +++ b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Laser Beams in a Bank +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-laser-beams-in-a-bank/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2125.Number-of-Laser-Beams-in-a-Bank/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2126.Destroying-Asteroids/README.md b/leetcode/2101-2200/2126.Destroying-Asteroids/README.md new file mode 100755 index 000000000..391e439ef --- /dev/null +++ b/leetcode/2101-2200/2126.Destroying-Asteroids/README.md @@ -0,0 +1,32 @@ +# [2126.Destroying Asteroids][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Destroying Asteroids +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/destroying-asteroids/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2126.Destroying-Asteroids/Solution.go b/leetcode/2101-2200/2126.Destroying-Asteroids/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2126.Destroying-Asteroids/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2126.Destroying-Asteroids/Solution_test.go b/leetcode/2101-2200/2126.Destroying-Asteroids/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2126.Destroying-Asteroids/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/README.md b/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/README.md new file mode 100755 index 000000000..a0c0d42fe --- /dev/null +++ b/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/README.md @@ -0,0 +1,32 @@ +# [2127.Maximum Employees to Be Invited to a Meeting][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Employees to Be Invited to a Meeting +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-employees-to-be-invited-to-a-meeting/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution.go b/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution_test.go b/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2127.Maximum-Employees-to-Be-Invited-to-a-Meeting/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2129.Capitalize-the-Title/README.md b/leetcode/2101-2200/2129.Capitalize-the-Title/README.md new file mode 100755 index 000000000..0427712da --- /dev/null +++ b/leetcode/2101-2200/2129.Capitalize-the-Title/README.md @@ -0,0 +1,32 @@ +# [2129.Capitalize the Title][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Capitalize the Title +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/capitalize-the-title/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2129.Capitalize-the-Title/Solution.go b/leetcode/2101-2200/2129.Capitalize-the-Title/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2129.Capitalize-the-Title/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2129.Capitalize-the-Title/Solution_test.go b/leetcode/2101-2200/2129.Capitalize-the-Title/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2129.Capitalize-the-Title/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md new file mode 100755 index 000000000..2128e3d1d --- /dev/null +++ b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md @@ -0,0 +1,32 @@ +# [2130.Maximum Twin Sum 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Twin Sum of a Linked List +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-twin-sum-of-a-linked-list/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md new file mode 100755 index 000000000..5c8b6f31d --- /dev/null +++ b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md @@ -0,0 +1,32 @@ +# [2131.Longest Palindrome by Concatenating Two Letter 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Palindrome by Concatenating Two Letter Words +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-palindrome-by-concatenating-two-letter-words/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2132.Stamping-the-Grid/README.md b/leetcode/2101-2200/2132.Stamping-the-Grid/README.md new file mode 100755 index 000000000..2573ef0cc --- /dev/null +++ b/leetcode/2101-2200/2132.Stamping-the-Grid/README.md @@ -0,0 +1,32 @@ +# [2132.Stamping the Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Stamping the Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/stamping-the-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2132.Stamping-the-Grid/Solution.go b/leetcode/2101-2200/2132.Stamping-the-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2132.Stamping-the-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2132.Stamping-the-Grid/Solution_test.go b/leetcode/2101-2200/2132.Stamping-the-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2132.Stamping-the-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/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/README.md b/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/README.md new file mode 100755 index 000000000..755dba9e9 --- /dev/null +++ b/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/README.md @@ -0,0 +1,32 @@ +# [2133.Check if Every Row and Column Contains All Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Every Row and Column Contains All Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-every-row-and-column-contains-all-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution.go b/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution_test.go b/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2133.Check-if-Every-Row-and-Column-Contains-All-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md new file mode 100755 index 000000000..91f579e13 --- /dev/null +++ b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/README.md @@ -0,0 +1,32 @@ +# [2134.Minimum Swaps to Group All 1's Together II][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Swaps to Group All 1's Together II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-swaps-to-group-all-1s-together-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2134.Minimum-Swaps-to-Group-All-1s-Together-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/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/README.md b/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/README.md new file mode 100755 index 000000000..21bd530d6 --- /dev/null +++ b/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/README.md @@ -0,0 +1,32 @@ +# [2135.Count Words Obtained After Adding a Letter][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Words Obtained After Adding a Letter +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-words-obtained-after-adding-a-letter/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution.go b/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution_test.go b/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2135.Count-Words-Obtained-After-Adding-a-Letter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/README.md b/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/README.md new file mode 100755 index 000000000..08d95e999 --- /dev/null +++ b/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/README.md @@ -0,0 +1,32 @@ +# [2136.Earliest Possible Day of Full Bloom][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Earliest Possible Day of Full Bloom +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/earliest-possible-day-of-full-bloom/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution.go b/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution_test.go b/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2136.Earliest-Possible-Day-of-Full-Bloom/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md new file mode 100755 index 000000000..0a96d5acb --- /dev/null +++ b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/README.md @@ -0,0 +1,32 @@ +# [2138.Divide a String Into Groups of Size k][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Divide a String Into Groups of Size k +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divide-a-string-into-groups-of-size-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-k/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2138.Divide-a-String-Into-Groups-of-Size-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/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/README.md b/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/README.md new file mode 100755 index 000000000..1014a87f4 --- /dev/null +++ b/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/README.md @@ -0,0 +1,32 @@ +# [2139.Minimum Moves to Reach Target 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 +> ... +Minimum Moves to Reach Target Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-moves-to-reach-target-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution.go b/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution_test.go b/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2139.Minimum-Moves-to-Reach-Target-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/2101-2200/2140.Solving-Questions-With-Brainpower/README.md b/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/README.md new file mode 100755 index 000000000..6d67e56ca --- /dev/null +++ b/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/README.md @@ -0,0 +1,32 @@ +# [2140.Solving Questions With Brainpower][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Solving Questions With Brainpower +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/solving-questions-with-brainpower/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution.go b/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution_test.go b/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2140.Solving-Questions-With-Brainpower/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/README.md b/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/README.md new file mode 100755 index 000000000..d0db5366f --- /dev/null +++ b/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/README.md @@ -0,0 +1,32 @@ +# [2141.Maximum Running Time of N Computers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Running Time of N Computers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-running-time-of-n-computers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution.go b/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution_test.go b/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2141.Maximum-Running-Time-of-N-Computers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/README.md b/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/README.md new file mode 100755 index 000000000..a8756bc7f --- /dev/null +++ b/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/README.md @@ -0,0 +1,32 @@ +# [2144.Minimum Cost of Buying Candies With Discount][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 of Buying Candies With Discount +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-of-buying-candies-with-discount/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution.go b/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution_test.go b/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2144.Minimum-Cost-of-Buying-Candies-With-Discount/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md new file mode 100755 index 000000000..eaa01e830 --- /dev/null +++ b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/README.md @@ -0,0 +1,32 @@ +# [2145.Count the Hidden Sequences][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Hidden Sequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-hidden-sequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go b/leetcode/2101-2200/2145.Count-the-Hidden-Sequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2145.Count-the-Hidden-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/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/README.md b/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/README.md new file mode 100755 index 000000000..e452db8a3 --- /dev/null +++ b/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/README.md @@ -0,0 +1,32 @@ +# [2146.K Highest Ranked Items Within a Price Range][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +K Highest Ranked Items Within a Price Range +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/k-highest-ranked-items-within-a-price-range/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution.go b/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution_test.go b/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2146.K-Highest-Ranked-Items-Within-a-Price-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/README.md b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/README.md new file mode 100755 index 000000000..bbdced781 --- /dev/null +++ b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/README.md @@ -0,0 +1,32 @@ +# [2147.Number of Ways to Divide a Long Corridor][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Divide a Long Corridor +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-divide-a-long-corridor/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2147.Number-of-Ways-to-Divide-a-Long-Corridor/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md new file mode 100755 index 000000000..06f107fad --- /dev/null +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md @@ -0,0 +1,32 @@ +# [2148.Count Elements With Strictly Smaller and Greater Elements ][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Elements With Strictly Smaller and Greater Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-elements-with-strictly-smaller-and-greater-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-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/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md new file mode 100755 index 000000000..e1275e674 --- /dev/null +++ b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md @@ -0,0 +1,32 @@ +# [2149.Rearrange Array Elements by Sign][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Rearrange Array Elements by Sign +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rearrange-array-elements-by-sign/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md new file mode 100755 index 000000000..9c97bca05 --- /dev/null +++ b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/README.md @@ -0,0 +1,32 @@ +# [2150.Find All Lonely Numbers in the Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All Lonely Numbers in the Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-lonely-numbers-in-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution_test.go b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2150.Find-All-Lonely-Numbers-in-the-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/2101-2200/2151.Maximum-Good-People-Based-on-Statements/README.md b/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/README.md new file mode 100755 index 000000000..a0b4bfce4 --- /dev/null +++ b/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/README.md @@ -0,0 +1,32 @@ +# [2151.Maximum Good People Based on Statements][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Good People Based on Statements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-good-people-based-on-statements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution.go b/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution_test.go b/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2151.Maximum-Good-People-Based-on-Statements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/README.md b/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/README.md new file mode 100755 index 000000000..e747d1563 --- /dev/null +++ b/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/README.md @@ -0,0 +1,32 @@ +# [2154.Keep Multiplying Found Values by Two][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Keep Multiplying Found Values by Two +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/keep-multiplying-found-values-by-two/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution.go b/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution_test.go b/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2154.Keep-Multiplying-Found-Values-by-Two/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/README.md b/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/README.md new file mode 100755 index 000000000..ed6f2031c --- /dev/null +++ b/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/README.md @@ -0,0 +1,32 @@ +# [2155.All Divisions With the Highest Score of a Binary 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 +> ... +All Divisions With the Highest Score of a Binary Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/all-divisions-with-the-highest-score-of-a-binary-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution.go b/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution_test.go b/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2155.All-Divisions-With-the-Highest-Score-of-a-Binary-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/2101-2200/2156.Find-Substring-With-Given-Hash-Value/README.md b/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/README.md new file mode 100755 index 000000000..a29949477 --- /dev/null +++ b/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/README.md @@ -0,0 +1,32 @@ +# [2156.Find Substring With Given Hash Value][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Substring With Given Hash Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-substring-with-given-hash-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution.go b/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution_test.go b/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2156.Find-Substring-With-Given-Hash-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2157.Groups-of-Strings/README.md b/leetcode/2101-2200/2157.Groups-of-Strings/README.md new file mode 100755 index 000000000..8709ebf57 --- /dev/null +++ b/leetcode/2101-2200/2157.Groups-of-Strings/README.md @@ -0,0 +1,32 @@ +# [2157.Groups of Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Groups of Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/groups-of-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2157.Groups-of-Strings/Solution.go b/leetcode/2101-2200/2157.Groups-of-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2157.Groups-of-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2157.Groups-of-Strings/Solution_test.go b/leetcode/2101-2200/2157.Groups-of-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2157.Groups-of-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/README.md b/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/README.md new file mode 100755 index 000000000..015b6114d --- /dev/null +++ b/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/README.md @@ -0,0 +1,32 @@ +# [2160.Minimum Sum of Four Digit Number After Splitting Digits][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Sum of Four Digit Number After Splitting Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-sum-of-four-digit-number-after-splitting-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution.go b/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution_test.go b/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2160.Minimum-Sum-of-Four-Digit-Number-After-Splitting-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md new file mode 100755 index 000000000..2cbad6e7a --- /dev/null +++ b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/README.md @@ -0,0 +1,32 @@ +# [2161.Partition Array According to Given Pivot][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partition Array According to Given Pivot +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partition-array-according-to-given-pivot/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2161.Partition-Array-According-to-Given-Pivot/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/README.md b/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/README.md new file mode 100755 index 000000000..668137167 --- /dev/null +++ b/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/README.md @@ -0,0 +1,32 @@ +# [2162.Minimum Cost to Set Cooking Time][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cost to Set Cooking Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-set-cooking-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution.go b/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution_test.go b/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2162.Minimum-Cost-to-Set-Cooking-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md new file mode 100755 index 000000000..2493b3f9f --- /dev/null +++ b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/README.md @@ -0,0 +1,32 @@ +# [2163.Minimum Difference in Sums After Removal of Elements][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Difference in Sums After Removal of Elements +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-difference-in-sums-after-removal-of-elements/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-Elements/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2163.Minimum-Difference-in-Sums-After-Removal-of-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/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/README.md b/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/README.md new file mode 100755 index 000000000..fc31806c5 --- /dev/null +++ b/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/README.md @@ -0,0 +1,32 @@ +# [2164.Sort Even and Odd Indices Independently][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sort Even and Odd Indices Independently +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-even-and-odd-indices-independently/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution.go b/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution_test.go b/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2164.Sort-Even-and-Odd-Indices-Independently/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/README.md b/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/README.md new file mode 100755 index 000000000..5f9db9bf5 --- /dev/null +++ b/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/README.md @@ -0,0 +1,32 @@ +# [2165.Smallest Value of the Rearranged 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Value of the Rearranged Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-value-of-the-rearranged-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution.go b/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution_test.go b/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2165.Smallest-Value-of-the-Rearranged-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2166.Design-Bitset/README.md b/leetcode/2101-2200/2166.Design-Bitset/README.md new file mode 100755 index 000000000..8eb7adb4f --- /dev/null +++ b/leetcode/2101-2200/2166.Design-Bitset/README.md @@ -0,0 +1,32 @@ +# [2166.Design Bitset][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design Bitset +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-bitset/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2166.Design-Bitset/Solution.go b/leetcode/2101-2200/2166.Design-Bitset/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2166.Design-Bitset/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2166.Design-Bitset/Solution_test.go b/leetcode/2101-2200/2166.Design-Bitset/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2166.Design-Bitset/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/README.md b/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/README.md new file mode 100755 index 000000000..15908ae5e --- /dev/null +++ b/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/README.md @@ -0,0 +1,32 @@ +# [2167.Minimum Time to Remove All Cars Containing Illegal Goods][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Remove All Cars Containing Illegal Goods +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-remove-all-cars-containing-illegal-goods/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution.go b/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution_test.go b/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2167.Minimum-Time-to-Remove-All-Cars-Containing-Illegal-Goods/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md new file mode 100755 index 000000000..97a834432 --- /dev/null +++ b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/README.md @@ -0,0 +1,32 @@ +# [2169.Count Operations to Obtain Zero][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Operations to Obtain Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-operations-to-obtain-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2169.Count-Operations-to-Obtain-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/README.md b/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/README.md new file mode 100755 index 000000000..4bda99a24 --- /dev/null +++ b/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/README.md @@ -0,0 +1,32 @@ +# [2170.Minimum Operations to Make the Array Alternating][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Make the Array Alternating +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-make-the-array-alternating/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution.go b/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution_test.go b/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2170.Minimum-Operations-to-Make-the-Array-Alternating/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/README.md b/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/README.md new file mode 100755 index 000000000..12c739a06 --- /dev/null +++ b/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/README.md @@ -0,0 +1,32 @@ +# [2171.Removing Minimum Number of Magic Beans][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Removing Minimum Number of Magic Beans +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/removing-minimum-number-of-magic-beans/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution.go b/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution_test.go b/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2171.Removing-Minimum-Number-of-Magic-Beans/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/README.md b/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/README.md new file mode 100755 index 000000000..4a3d677fc --- /dev/null +++ b/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/README.md @@ -0,0 +1,32 @@ +# [2172.Maximum AND Sum of Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum AND Sum of Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-and-sum-of-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution.go b/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution_test.go b/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2172.Maximum-AND-Sum-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md new file mode 100755 index 000000000..915bbc7cf --- /dev/null +++ b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2176.Count Equal and Divisible Pairs in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Equal and Divisible Pairs in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-equal-and-divisible-pairs-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2176.Count-Equal-and-Divisible-Pairs-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md new file mode 100755 index 000000000..71b2fe39c --- /dev/null +++ b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/README.md @@ -0,0 +1,32 @@ +# [2177.Find Three Consecutive Integers That Sum to a Given Number][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Three Consecutive Integers That Sum to a Given Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-three-consecutive-integers-that-sum-to-a-given-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2177.Find-Three-Consecutive-Integers-That-Sum-to-a-Given-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/README.md b/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/README.md new file mode 100755 index 000000000..ceb443ac2 --- /dev/null +++ b/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/README.md @@ -0,0 +1,32 @@ +# [2178.Maximum Split of Positive Even 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 +> ... +Maximum Split of Positive Even Integers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-split-of-positive-even-integers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution.go b/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution_test.go b/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-Integers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2178.Maximum-Split-of-Positive-Even-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/2101-2200/2179.Count-Good-Triplets-in-an-Array/README.md b/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/README.md new file mode 100755 index 000000000..2f23b48ad --- /dev/null +++ b/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2179.Count Good Triplets in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Good Triplets in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-good-triplets-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution.go b/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution_test.go b/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2179.Count-Good-Triplets-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/README.md b/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/README.md new file mode 100755 index 000000000..86bbbf1b5 --- /dev/null +++ b/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/README.md @@ -0,0 +1,32 @@ +# [2180.Count Integers With Even Digit Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Integers With Even Digit Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-integers-with-even-digit-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution.go b/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution_test.go b/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2180.Count-Integers-With-Even-Digit-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md new file mode 100755 index 000000000..92c5165f7 --- /dev/null +++ b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md @@ -0,0 +1,32 @@ +# [2181.Merge Nodes in Between 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 +> ... +Merge Nodes in Between Zeros +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-nodes-in-between-zeros/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution_test.go b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-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/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md new file mode 100755 index 000000000..41990ec30 --- /dev/null +++ b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/README.md @@ -0,0 +1,32 @@ +# [2182.Construct String With Repeat Limit][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct String With Repeat Limit +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-string-with-repeat-limit/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2182.Construct-String-With-Repeat-Limit/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/README.md b/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/README.md new file mode 100755 index 000000000..8f1f0dcfc --- /dev/null +++ b/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/README.md @@ -0,0 +1,32 @@ +# [2183.Count Array Pairs Divisible by K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Array Pairs Divisible by K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-array-pairs-divisible-by-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution.go b/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution_test.go b/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2183.Count-Array-Pairs-Divisible-by-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md new file mode 100755 index 000000000..60b610eec --- /dev/null +++ b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/README.md @@ -0,0 +1,32 @@ +# [2185.Counting Words With a Given Prefix][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Counting Words With a Given Prefix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/counting-words-with-a-given-prefix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2185.Counting-Words-With-a-Given-Prefix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/README.md b/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/README.md new file mode 100755 index 000000000..897c52192 --- /dev/null +++ b/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/README.md @@ -0,0 +1,32 @@ +# [2186.Minimum Number of Steps to Make Two Strings Anagram II][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Steps to Make Two Strings Anagram II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution.go b/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution_test.go b/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2186.Minimum-Number-of-Steps-to-Make-Two-Strings-Anagram-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/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md new file mode 100755 index 000000000..59c9c3f32 --- /dev/null +++ b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md @@ -0,0 +1,32 @@ +# [2187.Minimum Time to Complete Trips][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Complete Trips +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-complete-trips/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/README.md b/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/README.md new file mode 100755 index 000000000..7c3d4fcb0 --- /dev/null +++ b/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/README.md @@ -0,0 +1,32 @@ +# [2188.Minimum Time to Finish the Race][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Time to Finish the Race +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-finish-the-race/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution.go b/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution_test.go b/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2188.Minimum-Time-to-Finish-the-Race/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/README.md b/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/README.md new file mode 100755 index 000000000..c8c4008fa --- /dev/null +++ b/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/README.md @@ -0,0 +1,32 @@ +# [2190.Most Frequent Number Following Key In an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Most Frequent Number Following Key In an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/most-frequent-number-following-key-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution.go b/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution_test.go b/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2190.Most-Frequent-Number-Following-Key-In-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md new file mode 100755 index 000000000..d8b2b492c --- /dev/null +++ b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/README.md @@ -0,0 +1,32 @@ +# [2191.Sort the Jumbled Numbers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sort the Jumbled Numbers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-the-jumbled-numbers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2191.Sort-the-Jumbled-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/README.md b/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/README.md new file mode 100755 index 000000000..8b4f7397b --- /dev/null +++ b/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/README.md @@ -0,0 +1,32 @@ +# [2192.All Ancestors of a Node in a Directed Acyclic Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +All Ancestors of a Node in a Directed Acyclic Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/all-ancestors-of-a-node-in-a-directed-acyclic-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution.go b/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution_test.go b/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2192.All-Ancestors-of-a-Node-in-a-Directed-Acyclic-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/README.md b/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/README.md new file mode 100755 index 000000000..c31d371a2 --- /dev/null +++ b/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/README.md @@ -0,0 +1,32 @@ +# [2193.Minimum Number of Moves to Make Palindrome][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Moves to Make Palindrome +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-moves-to-make-palindrome/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution.go b/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution_test.go b/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2193.Minimum-Number-of-Moves-to-Make-Palindrome/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/README.md b/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/README.md new file mode 100755 index 000000000..aae0b9b95 --- /dev/null +++ b/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/README.md @@ -0,0 +1,32 @@ +# [2194.Cells in a Range on an Excel Sheet][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Cells in a Range on an Excel Sheet +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/cells-in-a-range-on-an-excel-sheet/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution.go b/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution_test.go b/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2194.Cells-in-a-Range-on-an-Excel-Sheet/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/README.md b/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/README.md new file mode 100755 index 000000000..bea59a9d0 --- /dev/null +++ b/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/README.md @@ -0,0 +1,32 @@ +# [2195.Append K Integers With Minimal 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 +> ... +Append K Integers With Minimal Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/append-k-integers-with-minimal-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution.go b/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution_test.go b/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2195.Append-K-Integers-With-Minimal-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/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md new file mode 100755 index 000000000..205d98382 --- /dev/null +++ b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Create Binary Tree From Descriptions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/create-binary-tree-from-descriptions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2196.Create-Binary-Tree-From-Descriptions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md new file mode 100755 index 000000000..63ee94526 --- /dev/null +++ b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/README.md @@ -0,0 +1,32 @@ +# [2197.Replace Non-Coprime Numbers in Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Replace Non-Coprime Numbers in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/replace-non-coprime-numbers-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2197.Replace-Non-Coprime-Numbers-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md new file mode 100755 index 000000000..145b4c2ad --- /dev/null +++ b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2200.Find All K-Distant Indices in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All K-Distant Indices in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-k-distant-indices-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2200.Find-All-K-Distant-Indices-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/README.md b/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/README.md new file mode 100755 index 000000000..efd9b9d94 --- /dev/null +++ b/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/README.md @@ -0,0 +1,32 @@ +# [2201.Count Artifacts That Can Be Extracted][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Artifacts That Can Be Extracted +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-artifacts-that-can-be-extracted/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution.go b/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution_test.go b/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2201.Count-Artifacts-That-Can-Be-Extracted/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/README.md b/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/README.md new file mode 100755 index 000000000..2ef06895b --- /dev/null +++ b/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/README.md @@ -0,0 +1,32 @@ +# [2202.Maximize the Topmost Element After K Moves][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize the Topmost Element After K Moves +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-the-topmost-element-after-k-moves/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution.go b/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution_test.go b/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2202.Maximize-the-Topmost-Element-After-K-Moves/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/README.md b/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/README.md new file mode 100755 index 000000000..e2f848e0a --- /dev/null +++ b/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/README.md @@ -0,0 +1,32 @@ +# [2203.Minimum Weighted Subgraph With the Required Paths][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Weighted Subgraph With the Required Paths +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-weighted-subgraph-with-the-required-paths/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution.go b/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution_test.go b/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2203.Minimum-Weighted-Subgraph-With-the-Required-Paths/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md new file mode 100755 index 000000000..5c5ec8785 --- /dev/null +++ b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md @@ -0,0 +1,32 @@ +# [2206.Divide Array Into Equal Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Divide Array Into Equal Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divide-array-into-equal-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/README.md b/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/README.md new file mode 100755 index 000000000..737f0685f --- /dev/null +++ b/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/README.md @@ -0,0 +1,32 @@ +# [2207.Maximize Number of Subsequences in a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximize Number of Subsequences in a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximize-number-of-subsequences-in-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution.go b/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution_test.go b/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2207.Maximize-Number-of-Subsequences-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/README.md b/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/README.md new file mode 100755 index 000000000..a64d8c172 --- /dev/null +++ b/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/README.md @@ -0,0 +1,32 @@ +# [2208.Minimum Operations to Halve Array Sum][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Operations to Halve Array Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-operations-to-halve-array-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution.go b/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution_test.go b/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2208.Minimum-Operations-to-Halve-Array-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/README.md b/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/README.md new file mode 100755 index 000000000..414ae805d --- /dev/null +++ b/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/README.md @@ -0,0 +1,32 @@ +# [2209.Minimum White Tiles After Covering With Carpets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 White Tiles After Covering With Carpets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-white-tiles-after-covering-with-carpets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution.go b/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution_test.go b/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2209.Minimum-White-Tiles-After-Covering-With-Carpets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md new file mode 100755 index 000000000..691039168 --- /dev/null +++ b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2210.Count Hills and Valleys in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Hills and Valleys in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-hills-and-valleys-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/README.md b/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/README.md new file mode 100755 index 000000000..2095a11f0 --- /dev/null +++ b/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/README.md @@ -0,0 +1,32 @@ +# [2211.Count Collisions on a Road][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Collisions on a Road +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-collisions-on-a-road/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution.go b/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution_test.go b/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2211.Count-Collisions-on-a-Road/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/README.md b/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/README.md new file mode 100755 index 000000000..83e16fcbf --- /dev/null +++ b/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/README.md @@ -0,0 +1,32 @@ +# [2212.Maximum Points in an Archery Competition][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 in an Archery Competition +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-points-in-an-archery-competition/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution.go b/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution_test.go b/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2212.Maximum-Points-in-an-Archery-Competition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/README.md b/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/README.md new file mode 100755 index 000000000..80cc315af --- /dev/null +++ b/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/README.md @@ -0,0 +1,32 @@ +# [2213.Longest Substring of One Repeating 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 +> ... +Longest Substring of One Repeating Character +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-substring-of-one-repeating-character/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution.go b/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution_test.go b/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-Character/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2213.Longest-Substring-of-One-Repeating-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/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md new file mode 100755 index 000000000..e1d74b91d --- /dev/null +++ b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md @@ -0,0 +1,32 @@ +# [2215.Find the Difference of 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 the Difference of Two Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-difference-of-two-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2215.Find-the-Difference-of-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/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/README.md b/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/README.md new file mode 100755 index 000000000..0bb576efb --- /dev/null +++ b/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/README.md @@ -0,0 +1,32 @@ +# [2216.Minimum Deletions 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 Deletions to Make Array Beautiful +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-deletions-to-make-array-beautiful/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution.go b/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution_test.go b/leetcode/2201-2300/2216.Minimum-Deletions-to-Make-Array-Beautiful/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2216.Minimum-Deletions-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/2201-2300/2217.Find-Palindrome-With-Fixed-Length/README.md b/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/README.md new file mode 100755 index 000000000..011ecf96e --- /dev/null +++ b/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/README.md @@ -0,0 +1,32 @@ +# [2217.Find Palindrome With Fixed 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 Palindrome With Fixed Length +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-palindrome-with-fixed-length/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution.go b/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution_test.go b/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-Length/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2217.Find-Palindrome-With-Fixed-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/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md new file mode 100755 index 000000000..88c66864e --- /dev/null +++ b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md @@ -0,0 +1,32 @@ +# [2218.Maximum Value of K Coins From Piles][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Value of K Coins From Piles +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-of-k-coins-from-piles/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md new file mode 100755 index 000000000..15571a84a --- /dev/null +++ b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/README.md @@ -0,0 +1,32 @@ +# [2220.Minimum Bit Flips to Convert Number][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Bit Flips to Convert Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-bit-flips-to-convert-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2220.Minimum-Bit-Flips-to-Convert-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/README.md b/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/README.md new file mode 100755 index 000000000..a672615a8 --- /dev/null +++ b/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/README.md @@ -0,0 +1,32 @@ +# [2221.Find Triangular Sum 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 Triangular Sum of an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-triangular-sum-of-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution.go b/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution_test.go b/leetcode/2201-2300/2221.Find-Triangular-Sum-of-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2221.Find-Triangular-Sum-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/2201-2300/2222.Number-of-Ways-to-Select-Buildings/README.md b/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/README.md new file mode 100755 index 000000000..36a4e538a --- /dev/null +++ b/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/README.md @@ -0,0 +1,32 @@ +# [2222.Number of Ways to Select Buildings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Select Buildings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-select-buildings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution.go b/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution_test.go b/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2222.Number-of-Ways-to-Select-Buildings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/README.md b/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/README.md new file mode 100755 index 000000000..d5448b74d --- /dev/null +++ b/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/README.md @@ -0,0 +1,32 @@ +# [2223.Sum of Scores of Built Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Scores of Built Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-scores-of-built-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution.go b/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution_test.go b/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2223.Sum-of-Scores-of-Built-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/README.md b/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/README.md new file mode 100755 index 000000000..c4ad976a3 --- /dev/null +++ b/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/README.md @@ -0,0 +1,32 @@ +# [2224.Minimum Number of Operations to Convert Time][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Number of Operations to Convert Time +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-convert-time/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution.go b/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution_test.go b/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2224.Minimum-Number-of-Operations-to-Convert-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md new file mode 100755 index 000000000..097de9452 --- /dev/null +++ b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md @@ -0,0 +1,32 @@ +# [2225.Find Players With Zero or One Losses][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Players With Zero or One Losses +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-players-with-zero-or-one-losses/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md new file mode 100755 index 000000000..ccb82f6c1 --- /dev/null +++ b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/README.md @@ -0,0 +1,32 @@ +# [2226.Maximum Candies Allocated to K Children][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Candies Allocated to K Children +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-candies-allocated-to-k-children/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2226.Maximum-Candies-Allocated-to-K-Children/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md new file mode 100755 index 000000000..2f1a5fb18 --- /dev/null +++ b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/README.md @@ -0,0 +1,32 @@ +# [2227.Encrypt and Decrypt Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Encrypt and Decrypt Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/encrypt-and-decrypt-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2227.Encrypt-and-Decrypt-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md new file mode 100755 index 000000000..48e38bb72 --- /dev/null +++ b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md @@ -0,0 +1,32 @@ +# [2231.Largest Number After Digit Swaps by Parity][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Number After Digit Swaps by Parity +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-number-after-digit-swaps-by-parity/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/README.md b/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/README.md new file mode 100755 index 000000000..6c1f895a7 --- /dev/null +++ b/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/README.md @@ -0,0 +1,32 @@ +# [2232.Minimize Result by Adding Parentheses to Expression][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize Result by Adding Parentheses to Expression +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-result-by-adding-parentheses-to-expression/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution.go b/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution_test.go b/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2232.Minimize-Result-by-Adding-Parentheses-to-Expression/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/README.md b/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/README.md new file mode 100755 index 000000000..e1b8e73e2 --- /dev/null +++ b/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/README.md @@ -0,0 +1,32 @@ +# [2233.Maximum Product After K Increments][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Product After K Increments +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-after-k-increments/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution.go b/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution_test.go b/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2233.Maximum-Product-After-K-Increments/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/README.md b/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/README.md new file mode 100755 index 000000000..98754be2a --- /dev/null +++ b/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/README.md @@ -0,0 +1,32 @@ +# [2234.Maximum Total Beauty of the Gardens][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Total Beauty of the Gardens +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-total-beauty-of-the-gardens/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution.go b/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution_test.go b/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2234.Maximum-Total-Beauty-of-the-Gardens/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2235.Add-Two-Integers/README.md b/leetcode/2201-2300/2235.Add-Two-Integers/README.md new file mode 100755 index 000000000..f4e95cb45 --- /dev/null +++ b/leetcode/2201-2300/2235.Add-Two-Integers/README.md @@ -0,0 +1,32 @@ +# [2235.Add Two 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 +> ... +Add Two Integers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/add-two-integers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2235.Add-Two-Integers/Solution.go b/leetcode/2201-2300/2235.Add-Two-Integers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2235.Add-Two-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2235.Add-Two-Integers/Solution_test.go b/leetcode/2201-2300/2235.Add-Two-Integers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2235.Add-Two-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/2201-2300/2236.Root-Equals-Sum-of-Children/README.md b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md new file mode 100755 index 000000000..75d8466d5 --- /dev/null +++ b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md @@ -0,0 +1,32 @@ +# [2236.Root Equals Sum of Children][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Root Equals Sum of Children +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/root-equals-sum-of-children/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md new file mode 100755 index 000000000..736ba785e --- /dev/null +++ b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md @@ -0,0 +1,32 @@ +# [2239.Find Closest Number to Zero][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Closest Number to Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-closest-number-to-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md new file mode 100755 index 000000000..90aa539aa --- /dev/null +++ b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/README.md @@ -0,0 +1,32 @@ +# [2240.Number of Ways to Buy Pens and Pencils][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Buy Pens and Pencils +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-buy-pens-and-pencils/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2240.Number-of-Ways-to-Buy-Pens-and-Pencils/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md b/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md new file mode 100755 index 000000000..d7bcfe292 --- /dev/null +++ b/leetcode/2201-2300/2241.Design-an-ATM-Machine/README.md @@ -0,0 +1,32 @@ +# [2241.Design an ATM Machine][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design an ATM Machine +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-an-atm-machine/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2241.Design-an-ATM-Machine/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/README.md b/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/README.md new file mode 100755 index 000000000..f0c836d8f --- /dev/null +++ b/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/README.md @@ -0,0 +1,32 @@ +# [2242.Maximum Score of a Node Sequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score of a Node Sequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-of-a-node-sequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution.go b/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution_test.go b/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2242.Maximum-Score-of-a-Node-Sequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/README.md b/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/README.md new file mode 100755 index 000000000..7763d3366 --- /dev/null +++ b/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/README.md @@ -0,0 +1,32 @@ +# [2243.Calculate Digit Sum of a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Calculate Digit Sum of a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/calculate-digit-sum-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution.go b/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution_test.go b/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2243.Calculate-Digit-Sum-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md new file mode 100755 index 000000000..347c0b479 --- /dev/null +++ b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md @@ -0,0 +1,32 @@ +# [2244.Minimum Rounds to Complete All Tasks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Rounds to Complete All Tasks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-rounds-to-complete-all-tasks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/README.md b/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/README.md new file mode 100755 index 000000000..0e5a0d9d7 --- /dev/null +++ b/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/README.md @@ -0,0 +1,32 @@ +# [2245.Maximum Trailing Zeros in a Cornered Path][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Trailing Zeros in a Cornered Path +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-trailing-zeros-in-a-cornered-path/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution.go b/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution_test.go b/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2245.Maximum-Trailing-Zeros-in-a-Cornered-Path/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md new file mode 100755 index 000000000..ec1c8c4d9 --- /dev/null +++ b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md @@ -0,0 +1,32 @@ +# [2246.Longest Path With Different Adjacent 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 +> ... +Longest Path With Different Adjacent Characters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-path-with-different-adjacent-characters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-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/2201-2300/2248.Intersection-of-Multiple-Arrays/README.md b/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/README.md new file mode 100755 index 000000000..78ad5a012 --- /dev/null +++ b/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/README.md @@ -0,0 +1,32 @@ +# [2248.Intersection of Multiple 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 +> ... +Intersection of Multiple Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/intersection-of-multiple-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution.go b/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution_test.go b/leetcode/2201-2300/2248.Intersection-of-Multiple-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2248.Intersection-of-Multiple-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/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/README.md b/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/README.md new file mode 100755 index 000000000..0878b7714 --- /dev/null +++ b/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/README.md @@ -0,0 +1,32 @@ +# [2249.Count Lattice Points Inside a Circle][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Lattice Points Inside a Circle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-lattice-points-inside-a-circle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution.go b/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution_test.go b/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2249.Count-Lattice-Points-Inside-a-Circle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/README.md b/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/README.md new file mode 100755 index 000000000..aa234b2f5 --- /dev/null +++ b/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/README.md @@ -0,0 +1,32 @@ +# [2250.Count Number of Rectangles Containing Each Point][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Rectangles Containing Each Point +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-rectangles-containing-each-point/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution.go b/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution_test.go b/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2250.Count-Number-of-Rectangles-Containing-Each-Point/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/README.md b/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/README.md new file mode 100755 index 000000000..277094f51 --- /dev/null +++ b/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/README.md @@ -0,0 +1,32 @@ +# [2251.Number of Flowers in Full Bloom][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Flowers in Full Bloom +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-flowers-in-full-bloom/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution.go b/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution_test.go b/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2251.Number-of-Flowers-in-Full-Bloom/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/README.md b/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/README.md new file mode 100755 index 000000000..bf13e7afa --- /dev/null +++ b/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/README.md @@ -0,0 +1,32 @@ +# [2255.Count Prefixes of a Given 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 +> ... +Count Prefixes of a Given String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-prefixes-of-a-given-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution.go b/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution_test.go b/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2255.Count-Prefixes-of-a-Given-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/2201-2300/2256.Minimum-Average-Difference/README.md b/leetcode/2201-2300/2256.Minimum-Average-Difference/README.md new file mode 100755 index 000000000..1b9375db0 --- /dev/null +++ b/leetcode/2201-2300/2256.Minimum-Average-Difference/README.md @@ -0,0 +1,32 @@ +# [2256.Minimum Average 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 +> ... +Minimum Average Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-average-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go b/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution_test.go b/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2256.Minimum-Average-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/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md new file mode 100755 index 000000000..0b9064584 --- /dev/null +++ b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/README.md @@ -0,0 +1,32 @@ +# [2257.Count Unguarded Cells in the Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Unguarded Cells in the Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-unguarded-cells-in-the-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2257.Count-Unguarded-Cells-in-the-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/2201-2300/2258.Escape-the-Spreading-Fire/README.md b/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/README.md new file mode 100755 index 000000000..c67110cb1 --- /dev/null +++ b/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/README.md @@ -0,0 +1,32 @@ +# [2258.Escape the Spreading Fire][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Escape the Spreading Fire +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/escape-the-spreading-fire/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution.go b/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution_test.go b/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2258.Escape-the-Spreading-Fire/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/README.md b/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/README.md new file mode 100755 index 000000000..e2fbd1891 --- /dev/null +++ b/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/README.md @@ -0,0 +1,32 @@ +# [2259.Remove Digit From Number to Maximize Result][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Digit From Number to Maximize Result +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-digit-from-number-to-maximize-result/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution.go b/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution_test.go b/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2259.Remove-Digit-From-Number-to-Maximize-Result/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/README.md b/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/README.md new file mode 100755 index 000000000..68d64b187 --- /dev/null +++ b/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/README.md @@ -0,0 +1,32 @@ +# [2260.Minimum Consecutive Cards to Pick Up][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Consecutive Cards to Pick Up +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-consecutive-cards-to-pick-up/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution.go b/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution_test.go b/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2260.Minimum-Consecutive-Cards-to-Pick-Up/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md new file mode 100755 index 000000000..d9f7c71ea --- /dev/null +++ b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +K Divisible Elements Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/k-divisible-elements-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2261.K-Divisible-Elements-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2262.Total-Appeal-of-A-String/README.md b/leetcode/2201-2300/2262.Total-Appeal-of-A-String/README.md new file mode 100755 index 000000000..b9abfe5d3 --- /dev/null +++ b/leetcode/2201-2300/2262.Total-Appeal-of-A-String/README.md @@ -0,0 +1,32 @@ +# [2262.Total Appeal of A String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Total Appeal of A String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/total-appeal-of-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution.go b/leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution_test.go b/leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2262.Total-Appeal-of-A-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..98f38fee5 --- /dev/null +++ b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest 3-Same-Digit Number in String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-3-same-digit-number-in-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2264.Largest-3-Same-Digit-Number-in-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md new file mode 100755 index 000000000..6cd26ce10 --- /dev/null +++ b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md @@ -0,0 +1,32 @@ +# [2265.Count Nodes Equal to Average of Subtree][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Nodes Equal to Average of Subtree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-nodes-equal-to-average-of-subtree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2266.Count-Number-of-Texts/README.md b/leetcode/2201-2300/2266.Count-Number-of-Texts/README.md new file mode 100755 index 000000000..7ddb076f0 --- /dev/null +++ b/leetcode/2201-2300/2266.Count-Number-of-Texts/README.md @@ -0,0 +1,32 @@ +# [2266.Count Number of Texts][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Texts +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-texts/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2266.Count-Number-of-Texts/Solution.go b/leetcode/2201-2300/2266.Count-Number-of-Texts/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2266.Count-Number-of-Texts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2266.Count-Number-of-Texts/Solution_test.go b/leetcode/2201-2300/2266.Count-Number-of-Texts/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2266.Count-Number-of-Texts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/README.md b/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/README.md new file mode 100755 index 000000000..8ac0fa576 --- /dev/null +++ b/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/README.md @@ -0,0 +1,32 @@ +# [2267. Check if There Is a Valid Parentheses String Path][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... + Check if There Is a Valid Parentheses String Path +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-there-is-a-valid-parentheses-string-path/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution.go b/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution_test.go b/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2267.Check-if-There-Is-a-Valid-Parentheses-String-Path/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/README.md b/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/README.md new file mode 100755 index 000000000..ad8bb0544 --- /dev/null +++ b/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/README.md @@ -0,0 +1,32 @@ +# [2269.Find the K-Beauty of 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the K-Beauty of a Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-k-beauty-of-a-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution.go b/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution_test.go b/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2269.Find-the-K-Beauty-of-a-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md new file mode 100755 index 000000000..c85001572 --- /dev/null +++ b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/README.md @@ -0,0 +1,32 @@ +# [2270.Number of Ways to Split Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Split Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-split-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution_test.go b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2270.Number-of-Ways-to-Split-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/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/README.md b/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/README.md new file mode 100755 index 000000000..66d3bf828 --- /dev/null +++ b/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/README.md @@ -0,0 +1,32 @@ +# [2271.Maximum White Tiles Covered by a Carpet][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 White Tiles Covered by a Carpet +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-white-tiles-covered-by-a-carpet/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution.go b/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution_test.go b/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2271.Maximum-White-Tiles-Covered-by-a-Carpet/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2272.Substring-With-Largest-Variance/README.md b/leetcode/2201-2300/2272.Substring-With-Largest-Variance/README.md new file mode 100755 index 000000000..70c789d6a --- /dev/null +++ b/leetcode/2201-2300/2272.Substring-With-Largest-Variance/README.md @@ -0,0 +1,32 @@ +# [2272.Substring With Largest Variance][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Substring With Largest Variance +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/substring-with-largest-variance/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution.go b/leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution_test.go b/leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2272.Substring-With-Largest-Variance/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md new file mode 100755 index 000000000..631acb1f4 --- /dev/null +++ b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/README.md @@ -0,0 +1,32 @@ +# [2273.Find Resultant Array After Removing Anagrams][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find Resultant Array After Removing Anagrams +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-resultant-array-after-removing-anagrams/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2273.Find-Resultant-Array-After-Removing-Anagrams/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/README.md b/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/README.md new file mode 100755 index 000000000..4192b149a --- /dev/null +++ b/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/README.md @@ -0,0 +1,32 @@ +# [2274.Maximum Consecutive Floors Without Special Floors][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Consecutive Floors Without Special Floors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-consecutive-floors-without-special-floors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution.go b/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution_test.go b/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2274.Maximum-Consecutive-Floors-Without-Special-Floors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md new file mode 100755 index 000000000..763b60610 --- /dev/null +++ b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/README.md @@ -0,0 +1,32 @@ +# [2275.Largest Combination With Bitwise AND Greater Than Zero][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Combination With Bitwise AND Greater Than Zero +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-combination-with-bitwise-and-greater-than-zero/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2275.Largest-Combination-With-Bitwise-AND-Greater-Than-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2276.Count-Integers-in-Intervals/README.md b/leetcode/2201-2300/2276.Count-Integers-in-Intervals/README.md new file mode 100755 index 000000000..196e396ed --- /dev/null +++ b/leetcode/2201-2300/2276.Count-Integers-in-Intervals/README.md @@ -0,0 +1,32 @@ +# [2276.Count Integers in Intervals][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Integers in Intervals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-integers-in-intervals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution.go b/leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution_test.go b/leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2276.Count-Integers-in-Intervals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md new file mode 100755 index 000000000..95fc5ac71 --- /dev/null +++ b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md @@ -0,0 +1,32 @@ +# [2278.Percentage of Letter in String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Percentage of Letter in String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/percentage-of-letter-in-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md new file mode 100755 index 000000000..433be3a19 --- /dev/null +++ b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md @@ -0,0 +1,32 @@ +# [2279.Maximum Bags With Full Capacity of Rocks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Bags With Full Capacity of Rocks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-bags-with-full-capacity-of-rocks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/README.md b/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/README.md new file mode 100755 index 000000000..a47f023ac --- /dev/null +++ b/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/README.md @@ -0,0 +1,32 @@ +# [2280.Minimum Lines to Represent a Line Chart][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Lines to Represent a Line Chart +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-lines-to-represent-a-line-chart/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution.go b/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution_test.go b/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2280.Minimum-Lines-to-Represent-a-Line-Chart/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/README.md b/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/README.md new file mode 100755 index 000000000..27fbd33e1 --- /dev/null +++ b/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/README.md @@ -0,0 +1,32 @@ +# [2281.Sum of Total Strength of Wizards][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Total Strength of Wizards +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-total-strength-of-wizards/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution.go b/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution_test.go b/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2281.Sum-of-Total-Strength-of-Wizards/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/README.md b/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/README.md new file mode 100755 index 000000000..23b080798 --- /dev/null +++ b/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/README.md @@ -0,0 +1,32 @@ +# [2283.Check if Number Has Equal Digit Count and Digit Value][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if Number Has Equal Digit Count and Digit Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-number-has-equal-digit-count-and-digit-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution.go b/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution_test.go b/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2283.Check-if-Number-Has-Equal-Digit-Count-and-Digit-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/README.md b/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/README.md new file mode 100755 index 000000000..65ceda893 --- /dev/null +++ b/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/README.md @@ -0,0 +1,32 @@ +# [2284.Sender With Largest Word 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sender With Largest Word Count +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sender-with-largest-word-count/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution.go b/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution_test.go b/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2284.Sender-With-Largest-Word-Count/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/README.md b/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/README.md new file mode 100755 index 000000000..e8b23d050 --- /dev/null +++ b/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/README.md @@ -0,0 +1,32 @@ +# [2285.Maximum Total Importance of Roads][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Total Importance of Roads +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-total-importance-of-roads/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution.go b/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution_test.go b/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2285.Maximum-Total-Importance-of-Roads/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/README.md b/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/README.md new file mode 100755 index 000000000..eb0f3da4b --- /dev/null +++ b/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/README.md @@ -0,0 +1,32 @@ +# [2286.Booking Concert Tickets in 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Booking Concert Tickets in Groups +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/booking-concert-tickets-in-groups/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution.go b/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution_test.go b/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2286.Booking-Concert-Tickets-in-Groups/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/README.md b/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/README.md new file mode 100755 index 000000000..022ff1f9a --- /dev/null +++ b/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/README.md @@ -0,0 +1,32 @@ +# [2287.Rearrange Characters to Make Target String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Rearrange Characters to Make Target String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/rearrange-characters-to-make-target-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution.go b/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution_test.go b/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2287.Rearrange-Characters-to-Make-Target-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2288.Apply-Discount-to-Prices/README.md b/leetcode/2201-2300/2288.Apply-Discount-to-Prices/README.md new file mode 100755 index 000000000..51c2ed26a --- /dev/null +++ b/leetcode/2201-2300/2288.Apply-Discount-to-Prices/README.md @@ -0,0 +1,32 @@ +# [2288.Apply Discount to Prices][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Discount to Prices +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/apply-discount-to-prices/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution.go b/leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution_test.go b/leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2288.Apply-Discount-to-Prices/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/README.md b/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/README.md new file mode 100755 index 000000000..00e88011e --- /dev/null +++ b/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/README.md @@ -0,0 +1,32 @@ +# [2289.Steps to Make Array Non-decreasing][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Steps to Make Array Non-decreasing +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/steps-to-make-array-non-decreasing/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution.go b/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution_test.go b/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2289.Steps-to-Make-Array-Non-decreasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md new file mode 100755 index 000000000..5729751da --- /dev/null +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/README.md @@ -0,0 +1,32 @@ +# [2290.Minimum Obstacle Removal to Reach Corner][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Obstacle Removal to Reach Corner +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-obstacle-removal-to-reach-corner/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2290.Minimum-Obstacle-Removal-to-Reach-Corner/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2293.Min-Max-Game/README.md b/leetcode/2201-2300/2293.Min-Max-Game/README.md new file mode 100755 index 000000000..c7d90f6ca --- /dev/null +++ b/leetcode/2201-2300/2293.Min-Max-Game/README.md @@ -0,0 +1,32 @@ +# [2293.Min Max 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 +> ... +Min Max Game +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/min-max-game/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2293.Min-Max-Game/Solution.go b/leetcode/2201-2300/2293.Min-Max-Game/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2293.Min-Max-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2293.Min-Max-Game/Solution_test.go b/leetcode/2201-2300/2293.Min-Max-Game/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2293.Min-Max-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/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md new file mode 100755 index 000000000..0cc0092be --- /dev/null +++ b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/README.md @@ -0,0 +1,32 @@ +# [2294.Partition Array Such That Maximum Difference Is K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Partition Array Such That Maximum Difference Is K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/partition-array-such-that-maximum-difference-is-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2294.Partition-Array-Such-That-Maximum-Difference-Is-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/2201-2300/2295.Replace-Elements-in-an-Array/README.md b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md new file mode 100755 index 000000000..71052a59c --- /dev/null +++ b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2295.Replace Elements in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Replace Elements in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/replace-elements-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2296.Design-a-Text-Editor/README.md b/leetcode/2201-2300/2296.Design-a-Text-Editor/README.md new file mode 100755 index 000000000..295732b3f --- /dev/null +++ b/leetcode/2201-2300/2296.Design-a-Text-Editor/README.md @@ -0,0 +1,32 @@ +# [2296.Design a Text Editor][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design a Text Editor +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-a-text-editor/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2296.Design-a-Text-Editor/Solution.go b/leetcode/2201-2300/2296.Design-a-Text-Editor/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2296.Design-a-Text-Editor/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2296.Design-a-Text-Editor/Solution_test.go b/leetcode/2201-2300/2296.Design-a-Text-Editor/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2296.Design-a-Text-Editor/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2299.Strong-Password-Checker-II/README.md b/leetcode/2201-2300/2299.Strong-Password-Checker-II/README.md new file mode 100755 index 000000000..fe0a80d12 --- /dev/null +++ b/leetcode/2201-2300/2299.Strong-Password-Checker-II/README.md @@ -0,0 +1,32 @@ +# [2299.Strong Password Checker 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 +> ... +Strong Password Checker II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/strong-password-checker-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution.go b/leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution_test.go b/leetcode/2201-2300/2299.Strong-Password-Checker-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2299.Strong-Password-Checker-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/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md new file mode 100755 index 000000000..e46f5ac2b --- /dev/null +++ b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md @@ -0,0 +1,32 @@ +# [2300.Successful Pairs of Spells and Potions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Successful Pairs of Spells and Potions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/successful-pairs-of-spells-and-potions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From ab52178f3e7a85dfee18798ca66dda1b809cfbf7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 14 Jun 2022 22:40:40 +0800 Subject: [PATCH 0039/1057] Add solution and test-cases for problem 583 --- .../README.md | 24 ++++++-------- .../Solution.go | 32 +++++++++++++++++-- .../Solution_test.go | 20 ++++++------ 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/README.md b/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/README.md index d276e8431..7e9b143a2 100644 --- a/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/README.md +++ b/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/README.md @@ -1,28 +1,24 @@ # [583.Delete Operation for Two Strings][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two strings `word1` and `word2`, return the minimum number of **steps** required to make `word1` and `word2` the same. + +In one **step**, you can delete exactly one character in either string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word1 = "sea", word2 = "eat" +Output: 2 +Explanation: You need one step to make "sea" to "ea" and another step to make "eat" to "ea". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Delete Operation for Two Strings -```go ``` - +Input: word1 = "leetcode", word2 = "etco" +Output: 4 +``` ## 结语 diff --git a/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution.go b/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution.go index d115ccf5e..fba663d8a 100644 --- a/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution.go +++ b/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(word1, word2 string) int { + dp := make([][]int, 2) + for idx := 0; idx < 2; idx++ { + dp[idx] = make([]int, len(word2)+1) + } + for idx := 0; idx < len(word2)+1; idx++ { + dp[0][idx] = idx + } + loop := 1 + for _, _byte := range []byte(word1) { + dp[loop][0] = dp[1-loop][0] + 1 + for col := 1; col <= len(word2); col++ { + leftTop := dp[1-loop][col-1] + left := dp[loop][col-1] + top := dp[1-loop][col] + dp[loop][col] = leftTop + if _byte != word2[col-1] { + dp[loop][col] += 2 + if left+1 < dp[loop][col] { + dp[loop][col] = left + 1 + } + if top+1 < dp[loop][col] { + dp[loop][col] = top + 1 + } + } + } + + loop = 1 - loop + } + return dp[1-loop][len(word2)] } diff --git a/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution_test.go b/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution_test.go index 14ff50eb4..5701e71f6 100644 --- a/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution_test.go +++ b/leetcode/501-600/0583.Delete-Operation-for-Two-Strings/Solution_test.go @@ -9,22 +9,24 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + word1, word2 string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "sea", "eat", 2}, + {"TestCase2", "leetcode", "etco", 4}, + {"TestCase3", "a", "a", 0}, + {"TestCase4", "aaaaaaa", "aaaa", 3}, + {"TestCase4", "a", "b", 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.word1, c.word2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.word1, c.word2) } }) } From 5b401c96804b742372c4c7fd954096c83c600ccf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 15 Jun 2022 22:25:05 +0800 Subject: [PATCH 0040/1057] Add solution and test-cases for problem 1048 --- .../1048.Longest-String-Chain/README.md | 38 +++++++++++------ .../1048.Longest-String-Chain/Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 11 ++--- 3 files changed, 71 insertions(+), 20 deletions(-) diff --git a/leetcode/1001-1100/1048.Longest-String-Chain/README.md b/leetcode/1001-1100/1048.Longest-String-Chain/README.md index fc0cd6449..6615c39ac 100644 --- a/leetcode/1001-1100/1048.Longest-String-Chain/README.md +++ b/leetcode/1001-1100/1048.Longest-String-Chain/README.md @@ -1,28 +1,40 @@ # [1048.Longest String Chain][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +ou are given an array of `words` where each word consists of lowercase English letters. + +**wordA** is a **predecessor** of **wordB** if and only if we can insert **exactly one** letter anywhere in **wordA** **without changing the order of the other characters** to make it equal to **wordB**. + +- For example, `"abc"` is a **predecessor** of `"abac"`, while `"cba"` is not a **predecessor** of `"bcad"`. + +A **word chain** is a sequence of words `[word1, word2, ..., wordk]` with `k >= 1`, where **word1** is a **predecessor** of **word2**, **word2** is a **predecessor** of **word3**, and so on. A single word is trivially a **word chain** with `k == 1`. + +Return the **length** of the **longest possible word chain** with words chosen from the given list of `words`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["a","b","ba","bca","bda","bdca"] +Output: 4 +Explanation: One of the longest word chains is ["a","ba","bda","bdca"]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest String Chain -```go ``` +Input: words = ["xbc","pcxbcf","xb","cxbc","pcxbc"] +Output: 5 +Explanation: All the words can be put in a word chain ["xb", "xbc", "cxbc", "pcxbc", "pcxbcf"]. +``` + +**Example 3:** +``` +Input: words = ["abcd","dbqca"] +Output: 1 +Explanation: The trivial word chain ["abcd"] is one of the longest word chains. +["abcd","dbqca"] is not a valid word chain because the ordering of the letters is changed. +``` ## 结语 diff --git a/leetcode/1001-1100/1048.Longest-String-Chain/Solution.go b/leetcode/1001-1100/1048.Longest-String-Chain/Solution.go index d115ccf5e..db1d7cb1f 100644 --- a/leetcode/1001-1100/1048.Longest-String-Chain/Solution.go +++ b/leetcode/1001-1100/1048.Longest-String-Chain/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func Solution(words []string) int { + length := len(words) + dp := make([]int, length) + for idx := 0; idx < length; idx++ { + dp[idx] = 1 + } + + sort.Slice(words, func(i, j int) bool { + return len(words[i]) < len(words[j]) + }) + ans := 1 + for idx := 1; idx < length; idx++ { + for in := 0; in < idx; in++ { + if isPredecessor(words[in], words[idx]) && dp[in]+1 > dp[idx] { + dp[idx] = dp[in] + 1 + } + } + if dp[idx] > ans { + ans = dp[idx] + } + } + return ans +} + +func isPredecessor(wordA, wordB string) bool { + if len(wordB)-len(wordA) == 1 { + ia, ib := 0, 0 + for ia < len(wordA) && ib < len(wordB) { + if wordA[ia] == wordB[ib] { + ia++ + } + ib++ + } + return ia == len(wordA) + } + return false } diff --git a/leetcode/1001-1100/1048.Longest-String-Chain/Solution_test.go b/leetcode/1001-1100/1048.Longest-String-Chain/Solution_test.go index 14ff50eb4..4b9caef37 100644 --- a/leetcode/1001-1100/1048.Longest-String-Chain/Solution_test.go +++ b/leetcode/1001-1100/1048.Longest-String-Chain/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{"a", "b", "ba", "bca", "bda", "bdca"}, 4}, + {"TestCase2", []string{"xbc", "pcxbcf", "xb", "cxbc", "pcxbc"}, 5}, + {"TestCase3", []string{"abcd", "dbqca"}, 1}, + {"TestCase4", []string{"a"}, 1}, } // 开始测试 From d29dfbf204b70176381e17790e9fefdc7cd16f0c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 23 Jun 2022 23:02:24 +0800 Subject: [PATCH 0041/1057] dd solution and test-cases for problem 606 --- .../README.md | 30 +++++++-------- .../Solution.go | 36 +++++++++++++++++- .../Solution_test.go | 25 +++++++++--- .../cons1-tree.jpg | Bin 0 -> 8930 bytes .../cons2-tree.jpg | Bin 0 -> 8237 bytes 5 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 leetcode/601-700/0606.Construct-String-from-Binary-Tree/cons1-tree.jpg create mode 100644 leetcode/601-700/0606.Construct-String-from-Binary-Tree/cons2-tree.jpg diff --git a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/README.md b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/README.md index 5aa5a1201..eb312c57a 100644 --- a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/README.md +++ b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/README.md @@ -1,28 +1,28 @@ # [606.Construct String from 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 string consisting of parenthesis and integers from a binary tree with the preorder traversal way, and return it. + +Omit all the empty parenthesis pairs that do not affect the one-to-one mapping relationship between the string and the original binary tree. + -**Example 1:** +**Example 1:** +![cons1-tree](./cons1-tree.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,4] +Output: "1(2(4))(3)" +Explanation: Originally, it needs to be "1(2(4)())(3()())", but you need to omit all the unnecessary empty parenthesis pairs. And it will be "1(2(4))(3)" ``` -## 题意 -> ... +**Example 2:** +![cons2-tree](./cons2-tree.jpg) -## 题解 - -### 思路1 -> ... -Construct String from Binary Tree -```go ``` - +Input: root = [1,2,3,null,4] +Output: "1(2()(4))(3)" +Explanation: Almost the same as the first example, except we cannot omit the first parenthesis pair to break the one-to-one mapping relationship between the input and the output. +``` ## 结语 diff --git a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution.go b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution.go index d115ccf5e..9d2bbc2a8 100644 --- a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution.go +++ b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "strings" +) + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode) string { + sb := strings.Builder{} + buildStringFromTree(root, &sb) + return sb.String() +} + +func buildStringFromTree(root *TreeNode, sb *strings.Builder) { + if root == nil { + return + } + sb.WriteString(fmt.Sprintf("%d", root.Val)) + if root.Left == nil && root.Right == nil { + return + } + sb.WriteByte('(') + buildStringFromTree(root.Left, sb) + sb.WriteByte(')') + + if root.Right != nil { + sb.WriteByte('(') + buildStringFromTree(root.Right, sb) + sb.WriteByte(')') + } } diff --git a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution_test.go b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution_test.go index 14ff50eb4..92886185d 100644 --- a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution_test.go +++ b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/Solution_test.go @@ -10,12 +10,27 @@ 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, + Left: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }, "1(2(4))(3)"}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }, "1(2()(4))(3)"}, + {"TestCase3", nil, ""}, + {"TestCase4", &TreeNode{Val: 1}, "1"}, } // 开始测试 diff --git a/leetcode/601-700/0606.Construct-String-from-Binary-Tree/cons1-tree.jpg b/leetcode/601-700/0606.Construct-String-from-Binary-Tree/cons1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff9efd34c38499d806a791d9b83b245199ffb9e1 GIT binary patch literal 8930 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 literal 0 HcmV?d00001 From 742f23f2cf93d0f3f9703a6fd548f504f85b9346 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Jun 2022 10:27:24 +0800 Subject: [PATCH 0042/1057] Add solution and test-cases for problem 1423 --- .../README.md | 38 +++++++++++++++++ .../Solution.go | 19 +++++++++ .../Solution_test.go | 41 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/README.md create mode 100644 leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution.go create mode 100644 leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution_test.go diff --git a/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/README.md b/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/README.md new file mode 100644 index 000000000..f613c0f1b --- /dev/null +++ b/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/README.md @@ -0,0 +1,38 @@ +# [1423.Maximum-Points-You-Can-Obtain-from-Cards][title] + +## Description +There are several cards **arranged in a row**, and each card has an associated number of points. The points are given in the integer array `cardPoints`. + +In one step, you can take one card from the beginning or from the end of the row. You have to take exactly `k` cards. + +Your score is the sum of the points of the cards you have taken. + +Given the integer array `cardPoints` and the integer `k`, return the maximum score you can obtain. + +**Example 1:** +``` +Input: cardPoints = [1,2,3,4,5,6,1], k = 3 +Output: 12 +Explanation: After the first step, your score will always be 1. However, choosing the rightmost card first will maximize your total score. The optimal strategy is to take the three cards on the right, giving a final score of 1 + 6 + 5 = 12. +``` + +**Example 2:** +``` +Input: cardPoints = [2,2,2], k = 2 +Output: 4 +Explanation: Regardless of which two cards you take, your score will always be 4. +``` + +**Example 3:** +``` +Input: cardPoints = [9,7,7,9,7,7,9], k = 7 +Output: 55 +Explanation: You have to take all the cards. Your score is the sum of points of all cards. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-points-you-can-obtain-from-cards/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution.go b/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution.go new file mode 100644 index 000000000..6d760f75c --- /dev/null +++ b/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution.go @@ -0,0 +1,19 @@ +package Solution + +func Solution(cardPoints []int, k int) int { + length := len(cardPoints) + r := 0 + for idx := length - 1; idx >= length-k; idx-- { + r += cardPoints[idx] + } + + ans, l := r, 0 + for idx := 0; idx < k; idx++ { + l += cardPoints[idx] + r -= cardPoints[length-k+idx] + if l+r > ans { + ans = l + r + } + } + return ans +} diff --git a/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution_test.go b/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution_test.go new file mode 100644 index 000000000..a8f83fab3 --- /dev/null +++ b/leetcode/1401-1500/1423.Maximum-Points-You-Can-Obtain-from-Cards/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []int + k int + expect int + }{ + {"TestCase1", []int{1, 2, 3, 4, 5, 6, 1}, 3, 12}, + {"TestCase2", []int{2, 2, 2}, 2, 4}, + {"TestCase3", []int{2, 2, 2}, 3, 6}, + {"TestCase4", []int{9, 7, 7, 9, 7, 7, 9}, 7, 55}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs, c.k) + if !reflect.DeepEqual(got, c.expect) { + 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 2dcf5398ed987d9f7a95f7b1f05cd579f7074d6b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Jun 2022 17:57:44 +0800 Subject: [PATCH 0043/1057] Add solution and test-cases for problem 657 --- .../0657.Robot-Return-to-Origin/README.md | 30 +++++++++---------- .../0657.Robot-Return-to-Origin/Solution.go | 20 +++++++++++-- .../Solution_test.go | 8 ++--- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/leetcode/601-700/0657.Robot-Return-to-Origin/README.md b/leetcode/601-700/0657.Robot-Return-to-Origin/README.md index 32648fdd3..cbd17e3e8 100644 --- a/leetcode/601-700/0657.Robot-Return-to-Origin/README.md +++ b/leetcode/601-700/0657.Robot-Return-to-Origin/README.md @@ -1,28 +1,28 @@ # [657.Robot Return to Origin][title] -> [!WARNING|style:flat] -> 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 robot starting at the position `(0, 0)`, the origin, on a 2D plane. Given a sequence of its moves, judge if this robot **ends up at** `(0, 0)` after it completes its moves. -**Example 1:** +You are given a string `moves` that represents the move sequence of the robot where movesi represents its ith move. Valid moves are `'R'` (right), `'L'` (left), `'U'` (up), and `'D'` (down). -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return `true` if the robot returns to the origin after it finishes all of its moves, or `false` otherwise. -## 题意 -> ... +**Note**: The way that the robot is "facing" is irrelevant. `'R'` will always make the robot move to the right once, `'L'` will always make it move left, etc. Also, assume that the magnitude of the robot's movement is the same for each move. -## 题解 +**Example 1:** -### 思路1 -> ... -Robot Return to Origin -```go +``` +Input: moves = "UD" +Output: true +Explanation: The robot moves up once, and then down once. All moves have the same magnitude, so it ended up at the origin where it started. Therefore, we return true. ``` +**Example 2:** +``` +Input: moves = "LL" +Output: false +Explanation: The robot moves left twice. It ends up two "moves" to the left of the origin. We return false because it is not at the origin at the end of its moves. +``` ## 结语 diff --git a/leetcode/601-700/0657.Robot-Return-to-Origin/Solution.go b/leetcode/601-700/0657.Robot-Return-to-Origin/Solution.go index d115ccf5e..0667e963c 100644 --- a/leetcode/601-700/0657.Robot-Return-to-Origin/Solution.go +++ b/leetcode/601-700/0657.Robot-Return-to-Origin/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(moves string) bool { + x, y := 0, 0 + + for _, b := range []byte(moves) { + switch b { + case 'U': + x-- + case 'D': + x++ + case 'R': + y++ + case 'L': + y-- + default: + return false + } + } + return x == 0 && y == 0 } diff --git a/leetcode/601-700/0657.Robot-Return-to-Origin/Solution_test.go b/leetcode/601-700/0657.Robot-Return-to-Origin/Solution_test.go index 14ff50eb4..72edb30dc 100644 --- a/leetcode/601-700/0657.Robot-Return-to-Origin/Solution_test.go +++ b/leetcode/601-700/0657.Robot-Return-to-Origin/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", "UD", true}, + {"TestCase2", "LL", false}, + {"TestCase3", "ULDR", true}, } // 开始测试 From b44c089809d4db4df9388225655cea284ae52e7a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 27 Jun 2022 22:34:52 +0800 Subject: [PATCH 0044/1057] Add solution and test-cases for problem 1689 --- .../README.md | 30 +++++++++++-------- .../Solution.go | 12 ++++++-- .../Solution_test.go | 10 +++---- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md index 1482eaa98..1bf6f360b 100755 --- a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md +++ b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/README.md @@ -1,28 +1,32 @@ # [1689.Partitioning Into Minimum Number Of Deci-Binary Numbers][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +A decimal number is called **deci-binary** if each of its digits is either `0` or `1` without any leading zeros. For example, `101` and `1100` are **deci-binary**, while `112` and `3001` are not. + +Given a string `n` that represents a positive decimal integer, return the **minimum** number of positive **deci-binary** numbers needed so that they sum up to `n`. + + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = "32" +Output: 3 +Explanation: 10 + 11 + 11 = 32 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Partitioning Into Minimum Number Of Deci-Binary Numbers -```go +``` +Input: n = "82734" +Output: 8 ``` +**Example 3:** +``` +Input: n = "27346209830709182346" +Output: 9 +``` ## 结语 diff --git a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go index d115ccf5e..6bb4b2715 100644 --- a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go +++ b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +// 想要将n清理,就需要把每个位上的数字都变成0,而且这个只能由操作deci-binary数字 +// 所以就是找到哪个位上的数字最大, 就是清零的次数 +func Solution(n string) int { + ans := 0 + for _, b := range []byte(n) { + if int(b-'0') > ans { + ans = int(b - '0') + } + } + return ans } diff --git a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go index 14ff50eb4..5356c0699 100644 --- a/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/Solution_test.go +++ b/leetcode/1601-1700/1689.Partitioning-Into-Minimum-Number-Of-Deci-Binary-Numbers/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", "32", 3}, + {"TestCase2", "87813", 8}, + {"TestCase3", "27346209830709182346", 9}, } // 开始测试 From cb10a7e09f0e746e25f2a7e78de056892b5fd805 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 28 Jun 2022 22:14:39 +0800 Subject: [PATCH 0045/1057] Add solution and test-cases for problem 1647 --- .../README.md | 35 +++++++++++-------- .../Solution.go | 28 +++++++++++++-- .../Solution_test.go | 14 +++++--- 3 files changed, 56 insertions(+), 21 deletions(-) diff --git a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md index b7230577c..e742c1ae5 100755 --- a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md +++ b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/README.md @@ -1,28 +1,35 @@ # [1647.Minimum Deletions to Make Character Frequencies 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 +A string `s` is called **goo**d if there are no two different characters in `s` that have the same **frequency**. + +Given a string `s`, return the **minimum** number of characters you need to delete to make `s` **good**. + +The **frequency** of a character in a string is the number of times it appears in the string. For example, in the string `"aab"`, the **frequency** of `'a'` is `2`, while the **frequency** of `'b'` is `1`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aab" +Output: 0 +Explanation: s is already good. ``` -## 题意 -> ... - -## 题解 - -### 思路1 -> ... -Minimum Deletions to Make Character Frequencies Unique -```go +**Example 2:** +``` +Input: s = "aaabbbcc" +Output: 2 +Explanation: You can delete two 'b's resulting in the good string "aaabcc". +Another way it to delete one 'b' and one 'c' resulting in the good string "aaabbc". ``` +**Example 3:** +``` +Input: s = "ceabaacb" +Output: 2 +Explanation: You can delete both 'c's resulting in the good string "eabaab". +Note that we only care about characters that are still in the string at the end (i.e. frequency of 0 is ignored). +``` ## 结语 diff --git a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go index d115ccf5e..a455b4bdf 100644 --- a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go +++ b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + letters := make([]int, 26) + for _, b := range []byte(s) { + letters[b-'a']++ + } + occurrences := make(map[int]struct{}) + ans := 0 + for idx := 0; idx < 26; idx++ { + if letters[idx] == 0 { + continue + } + r := letters[idx] + if _, ok := occurrences[r]; !ok { + occurrences[r] = struct{}{} + continue + } + for r = r - 1; r >= 0; r-- { + ans++ + if _, ok := occurrences[r]; !ok { + occurrences[r] = struct{}{} + break + } + } + } + + return ans } diff --git a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go index 14ff50eb4..5e81bbebe 100644 --- a/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go +++ b/leetcode/1601-1700/1647.Minimum-Deletions-to-Make-Character-Frequencies-Unique/Solution_test.go @@ -10,12 +10,16 @@ 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", 0}, + {"TestCase2", "aaabbbcc", 2}, + {"TestCase3", "ceabaacb", 2}, + {"TestCase4", "", 0}, + {"TestCase5", "aaaaa", 0}, + {"TestCase6", "aaaaaabbbbbbcccccc", 3}, + {"TestCase7", "abbcccdd", 2}, } // 开始测试 From 1c7c0919ff10b0a553d7ce0a4de8130ff674433a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 28 Jun 2022 23:51:02 +0800 Subject: [PATCH 0046/1057] Add solution and test-cases for problem 1816 --- .../1816.Truncate-Sentence/README.md | 39 ++++++++++++------- .../1816.Truncate-Sentence/Solution.go | 17 +++++++- .../1816.Truncate-Sentence/Solution_test.go | 17 ++++---- 3 files changed, 50 insertions(+), 23 deletions(-) diff --git a/leetcode/1801-1900/1816.Truncate-Sentence/README.md b/leetcode/1801-1900/1816.Truncate-Sentence/README.md index 29cd24ec7..069af0e96 100755 --- a/leetcode/1801-1900/1816.Truncate-Sentence/README.md +++ b/leetcode/1801-1900/1816.Truncate-Sentence/README.md @@ -1,28 +1,41 @@ # [1816.Truncate Sentence][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +A **sentence** is a list of words that are separated by a single space with no leading or trailing spaces. Each of the words consists of **only** uppercase and lowercase English letters (no punctuation). + +- For example, `"Hello World"`, `"HELLO"`, and `"hello world hello world"` are all sentences. + +You are given a sentence `s​`​​​​​ and an integer `k`​​​​​​. You want to **truncate** `s`​​​​​​ such that it contains only the **first** `k`​​​​​​ words. Return `s`​​​​​​ after **truncating** it. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "Hello how are you Contestant", k = 4 +Output: "Hello how are you" +Explanation: +The words in s are ["Hello", "how" "are", "you", "Contestant"]. +The first 4 words are ["Hello", "how", "are", "you"]. +Hence, you should return "Hello how are you". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Truncate Sentence -```go ``` +Input: s = "What is the solution to this problem", k = 4 +Output: "What is the solution" +Explanation: +The words in s are ["What", "is" "the", "solution", "to", "this", "problem"]. +The first 4 words are ["What", "is", "the", "solution"]. +Hence, you should return "What is the solution". +``` + +**Example 3:** +``` +Input: s = "chopper is not a tanuki", k = 5 +Output: "chopper is not a tanuki" +``` ## 结语 diff --git a/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go b/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go index d115ccf5e..1116135f5 100644 --- a/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go +++ b/leetcode/1801-1900/1816.Truncate-Sentence/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string, k int) string { + sb := strings.Builder{} + words := 0 + for idx := 0; idx < len(s); idx++ { + if s[idx] == ' ' { + words++ + if words == k { + break + } + } + sb.WriteByte(s[idx]) + } + return sb.String() } diff --git a/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go b/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go index 14ff50eb4..ba3406e2f 100644 --- a/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go +++ b/leetcode/1801-1900/1816.Truncate-Sentence/Solution_test.go @@ -10,21 +10,22 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "Hello how are you Contestant", 4, "Hello how are you"}, + {"TestCase2", "What is the solution to this problem", 4, "What is the solution"}, + {"TestCase3", "chopper is not a tanuki", 5, "chopper is not a tanuki"}, } // 开始测试 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) } }) } From 4d9674af128fd0eb5197a01f6d7f32897fa03bce Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 30 Jun 2022 22:49:37 +0800 Subject: [PATCH 0047/1057] Add solution and test-cases for problem 462 --- .../README.md | 28 +++++++++---------- .../Solution.go | 12 ++++++-- .../Solution_test.go | 9 +++--- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/README.md b/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/README.md index c409051ed..148827e1e 100644 --- a/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/README.md +++ b/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/README.md @@ -1,28 +1,28 @@ # [462.Minimum Moves to Equal Array Elements II][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums` of size `n`, return the minimum number of moves required to make all array elements equal. + +In one move, you can increment or decrement an element of the array by `1`. + +Test cases are designed so that the answer will fit in a **32-bit** integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3] +Output: 2 +Explanation: +Only two moves are needed (remember each move increments or decrements one element): +[1,2,3] => [2,2,3] => [2,2,2] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Moves to Equal Array Elements II -```go ``` - +Input: nums = [1,10,2,9] +Output: 16 +``` ## 结语 diff --git a/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution.go b/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution.go index d115ccf5e..5054b8edd 100644 --- a/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution.go +++ b/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + length := len(nums) + sort.Ints(nums) + steps := 0 + for idx := 0; idx < length/2; idx++ { + steps += nums[length-idx-1] - nums[idx] + } + return steps } diff --git a/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution_test.go b/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution_test.go index 14ff50eb4..3753e671c 100644 --- a/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution_test.go +++ b/leetcode/401-500/0462.Minimum-Moves-to-Equal-Array-Elements-II/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3}, 2}, + {"TestCase2", []int{1, 2, 10, 9}, 16}, } // 开始测试 From 61af726442ee670560aeebe6043354a957df1a88 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 2 Jul 2022 10:17:28 +0800 Subject: [PATCH 0048/1057] Add solution and test-cases for problem 1752 --- .../README.md | 35 ++++++++++++------- .../Solution.go | 24 +++++++++++-- .../Solution_test.go | 9 ++--- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md index 3520fcf4b..6a3954b72 100755 --- a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md +++ b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/README.md @@ -1,28 +1,37 @@ # [1752.Check if Array Is Sorted and Rotated][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array `nums`, return `true` if the array was originally sorted in non-decreasing order, then rotated **some** number of positions (including zero). Otherwise, return `false`. + +There may be **duplicates** in the original array. + +**Note:** An array `A` rotated by `x` positions results in an array `B` of the same length such that `A[i] == B[(i+x) % A.length]`, where `%` is the modulo operation. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,4,5,1,2] +Output: true +Explanation: [1,2,3,4,5] is the original sorted array. +You can rotate the array by x = 3 positions to begin on the the element of value 3: [3,4,5,1,2]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Check if Array Is Sorted and Rotated -```go ``` +Input: nums = [2,1,3,4] +Output: false +Explanation: There is no sorted array once rotated that can make nums. +``` + +**Example 3:** +``` +Input: nums = [1,2,3] +Output: true +Explanation: [1,2,3] is the original sorted array. +You can rotate the array by x = 0 positions (i.e. no rotation) to make nums. +``` ## 结语 diff --git a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go index d115ccf5e..acdcfcdcd 100644 --- a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go +++ b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) bool { + length := len(nums) + if length == 0 { + return false + } + idx := 1 + for ; idx < length; idx++ { + if nums[idx] < nums[idx-1] { + break + } + } + + for i := idx; i < length; i++ { + if idx == i && nums[i] > nums[0] { + return false + } + if i != idx && !(nums[i] >= nums[i-1] && nums[i] <= nums[0]) { + return false + } + } + + return true } diff --git a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go index 14ff50eb4..9bdd793a7 100644 --- a/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go +++ b/leetcode/1701-1800/1752.Check-if-Array-Is-Sorted-and-Rotated/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 4, 5, 1, 2}, true}, + {"TestCase2", []int{2, 1, 3, 4}, false}, + {"TestCase3", []int{1, 2, 3}, true}, + {"TestCase4", []int{1, 3, 2}, false}, } // 开始测试 From e97fa1efbdbc6e7c6e079c817293237b6c3a6394 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 2 Jul 2022 10:40:02 +0800 Subject: [PATCH 0049/1057] Add solution and test-cases for problem 1979 --- .../README.md | 42 +++++++++++++------ .../Solution.go | 20 ++++++++- .../Solution_test.go | 10 ++--- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md index 201f18db6..5550d9dcd 100755 --- a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md +++ b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/README.md @@ -1,29 +1,45 @@ # [1979.Find Greatest Common Divisor of Array][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums`, return the **greatest common divisor** of the smallest number and largest number in `nums`. + +The **greatest common divisor** of two numbers is the largest positive integer that evenly divides both numbers. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,5,6,9,10] +Output: 2 +Explanation: +The smallest number in nums is 2. +The largest number in nums is 10. +The greatest common divisor of 2 and 10 is 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Greatest Common Divisor of Array -```go +``` +Input: nums = [7,5,6,8,3] +Output: 1 +Explanation: +The smallest number in nums is 3. +The largest number in nums is 8. +The greatest common divisor of 3 and 8 is 1. ``` +**Example 3:** + +``` +Input: nums = [3,3] +Output: 3 +Explanation: +The smallest number in nums is 3. +The largest number in nums is 3. +The greatest common divisor of 3 and 3 is 3. +``` + ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go index d115ccf5e..2c7a13e8b 100644 --- a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go +++ b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func gcd1979(a, b int) int { + if b == 0 { + return a + } + return gcd1979(b, a%b) +} + +func Solution(nums []int) int { + max, min := nums[0], nums[0] + for idx := 1; idx < len(nums); idx++ { + if nums[idx] > max { + max = nums[idx] + } + if nums[idx] < min { + min = nums[idx] + } + } + return gcd1979(max, min) } diff --git a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go index 14ff50eb4..fa6f4e7ce 100644 --- a/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go +++ b/leetcode/1901-2000/1979.Find-Greatest-Common-Divisor-of-Array/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 5, 6, 9, 10}, 2}, + {"TestCase2", []int{7, 5, 6, 8, 3}, 1}, + {"TestCase3", []int{3, 3}, 3}, } // 开始测试 From 87da001dde73c3348e7fa8e8c9719018d5cff7fe Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Jul 2022 10:21:45 +0800 Subject: [PATCH 0050/1057] Add solution for problem 376 --- .../0376.Wiggle-Subsequence/Solution.go | 22 +++++++++++++++++++ .../0376.Wiggle-Subsequence/Solution_test.go | 6 +++++ 2 files changed, 28 insertions(+) diff --git a/leetcode/301-400/0376.Wiggle-Subsequence/Solution.go b/leetcode/301-400/0376.Wiggle-Subsequence/Solution.go index 942548404..4b25390a3 100644 --- a/leetcode/301-400/0376.Wiggle-Subsequence/Solution.go +++ b/leetcode/301-400/0376.Wiggle-Subsequence/Solution.go @@ -34,3 +34,25 @@ func wiggleMaxLength(nums []int) int { } return maxLength } + +func wiggleMaxLength1(nums []int) int { + length := len(nums) + if length == 0 { + return 0 + } + + a, b := 1, 1 + for idx := 1; idx < length; idx++ { + if nums[idx] > nums[idx-1] { + a = b + 1 + } + if nums[idx] < nums[idx-1] { + b = a + 1 + } + + } + if a > b { + return a + } + return b +} diff --git a/leetcode/301-400/0376.Wiggle-Subsequence/Solution_test.go b/leetcode/301-400/0376.Wiggle-Subsequence/Solution_test.go index 0d04c10c8..6a2f7a17b 100644 --- a/leetcode/301-400/0376.Wiggle-Subsequence/Solution_test.go +++ b/leetcode/301-400/0376.Wiggle-Subsequence/Solution_test.go @@ -26,6 +26,12 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = wiggleMaxLength1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) } } From 45b2a2eb6b442c40d9f0c72f293225bea110377c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Jul 2022 22:06:27 +0800 Subject: [PATCH 0051/1057] Add solution and test-cases for problem 1720 --- .../1720.Decode-XORed-Array/README.md | 28 +++++++++---------- .../1720.Decode-XORed-Array/Solution.go | 11 ++++++-- .../1720.Decode-XORed-Array/Solution_test.go | 12 ++++---- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1720.Decode-XORed-Array/README.md b/leetcode/1701-1800/1720.Decode-XORed-Array/README.md index 28d5cf1a8..053c88906 100755 --- a/leetcode/1701-1800/1720.Decode-XORed-Array/README.md +++ b/leetcode/1701-1800/1720.Decode-XORed-Array/README.md @@ -1,28 +1,28 @@ # [1720.Decode XORed 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 +There is a **hidden** integer array `arr` that consists of `n` non-negative integers. + +It was encoded into another integer array `encoded` of length `n - 1`, such that `encoded[i] = arr[i] XOR arr[i + 1]`. For example, if `arr = [1,0,2,1]`, then `encoded = [1,2,3]`. + +You are given the `encoded` array. You are also given an integer `first`, that is the first element of `arr`, i.e. `arr[0]`. + +Return the original array `arr`. It can be proved that the answer exists and is unique. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: encoded = [1,2,3], first = 1 +Output: [1,0,2,1] +Explanation: If arr = [1,0,2,1], then first = 1 and encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Decode XORed Array -```go ``` - +Input: encoded = [6,2,7,3], first = 4 +Output: [4,2,0,7,4] +``` ## 结语 diff --git a/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go index d115ccf5e..77f16595c 100644 --- a/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go +++ b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(encoded []int, first int) []int { + ans := make([]int, len(encoded)+1) + ans[0] = first + // 1, 2, 3 + //1 x + for idx, code := range encoded { + ans[idx+1] = ans[idx] ^ code + } + return ans } diff --git a/leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go index 14ff50eb4..cd1cc1d35 100644 --- a/leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go +++ b/leetcode/1701-1800/1720.Decode-XORed-Array/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + first int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3}, 1, []int{1, 0, 2, 1}}, + {"TestCase2", []int{6, 2, 7, 3}, 4, []int{4, 2, 0, 7, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.first) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) From 12299137a0f6470278919db85bbad64c64d1c9f1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 5 Jul 2022 22:03:07 +0800 Subject: [PATCH 0052/1057] Add solution for problem 128 --- .../Solution.go | 27 +++++++++++++++++++ .../Solution_test.go | 4 +++ 2 files changed, 31 insertions(+) diff --git a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go index ed93b25d3..2198a3d80 100644 --- a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go +++ b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution.go @@ -1,5 +1,7 @@ package Soluation +import "sort" + var ( p map[int]int rank map[int]int @@ -60,3 +62,28 @@ func union(x, y int) { } } } + +func longestConsecutive1(nums []int) int { + if len(nums) == 0 { + return 0 + } + sort.Ints(nums) + ans, tmp := 0, 1 + for idx := 1; idx < len(nums); idx++ { + r := nums[idx] - nums[idx-1] + if r == 1 || r == 0 { + if r == 1 { + tmp++ + } + continue + } + if tmp > ans { + ans = tmp + } + tmp = 1 + } + if tmp > ans { + return tmp + } + return ans +} 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 7fd9ded3d..497d9f61b 100644 --- a/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution_test.go +++ b/leetcode/101-200/0128.Longest-Consecutive-Sequence/Solution_test.go @@ -26,6 +26,10 @@ func TestSolution(t *testing.T) { 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) + } }) } } From 563aa2894ce450c5499a5d50e88ed16fbc08687f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 5 Jul 2022 22:38:54 +0800 Subject: [PATCH 0053/1057] Add solution and test-cases for problem 590 --- .../README.md | 27 +++--- .../Solution.go | 21 ++++- .../Solution_test.go | 87 +++++++++++++++++- .../narytreeexample.png | Bin 0 -> 30744 bytes .../sample_4_964.png | Bin 0 -> 31486 bytes 5 files changed, 113 insertions(+), 22 deletions(-) create mode 100644 leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/narytreeexample.png create mode 100644 leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/sample_4_964.png diff --git a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/README.md b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/README.md index 8afdaefe9..f24d045ca 100644 --- a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/README.md +++ b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/README.md @@ -1,28 +1,25 @@ # [590.N-ary Tree Postorder Traversal][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the `root` of an n-ary tree, return the postorder traversal of its nodes' values. + +Nary-Tree input serialization is represented in their level order traversal. Each group of children is separated by the null value (See examples) -**Example 1:** +**Example 1:** +![example1](./narytreeexample.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,null,3,2,4,null,5,6] +Output: [5,6,3,2,4,1] ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](./sample_4_964.png) -### 思路1 -> ... -N-ary Tree Postorder Traversal -```go ``` - +Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] +Output: [2,6,14,11,7,3,12,8,4,13,9,10,5,1] +``` ## 结语 diff --git a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution.go b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution.go index d115ccf5e..4733d5fa8 100644 --- a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution.go +++ b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +type MultiChildNode struct { + Val int + Children []*MultiChildNode +} + +func Solution(root *MultiChildNode) []int { + ans := make([]int, 0) + postorder590_(root, &ans) + return ans +} + +func postorder590_(root *MultiChildNode, ans *[]int) { + if root == nil { + return + } + for _, cNode := range root.Children { + postorder590_(cNode, ans) + } + *ans = append(*ans, root.Val) } diff --git a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution_test.go b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution_test.go index 14ff50eb4..16143379a 100644 --- a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution_test.go +++ b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/Solution_test.go @@ -10,12 +10,89 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *MultiChildNode + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &MultiChildNode{ + Val: 1, + Children: []*MultiChildNode{ + { + Val: 3, + Children: []*MultiChildNode{ + { + Val: 5, + }, + { + Val: 6, + }, + }, + }, + { + Val: 2, + }, + { + Val: 4, + }, + }, + }, []int{5, 6, 3, 2, 4, 1}}, + {"TestCase2", &MultiChildNode{ + Val: 1, + Children: []*MultiChildNode{ + { + Val: 2, + }, + { + Val: 3, + Children: []*MultiChildNode{ + { + Val: 6, + }, + { + Val: 7, + Children: []*MultiChildNode{ + { + Val: 11, + Children: []*MultiChildNode{ + { + Val: 14, + }, + }, + }, + }, + }, + }, + }, + { + Val: 4, + Children: []*MultiChildNode{ + { + Val: 8, + Children: []*MultiChildNode{ + { + Val: 12, + }, + }, + }, + }, + }, + { + Val: 5, + Children: []*MultiChildNode{ + { + Val: 9, + Children: []*MultiChildNode{ + { + Val: 13, + }, + }, + }, + { + Val: 10, + }, + }, + }, + }, + }, []int{2, 6, 14, 11, 7, 3, 12, 8, 4, 13, 9, 10, 5, 1}}, } // 开始测试 diff --git a/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/narytreeexample.png b/leetcode/501-600/0590.N-ary-Tree-Postorder-Traversal/narytreeexample.png new file mode 100644 index 0000000000000000000000000000000000000000..d28c543c8000bc9d8142ec9b63a4ae2b3810fc39 GIT binary patch literal 30744 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 z

KWy(q^?)V!3@0}a+dLF#}n@vK8$gLwpjcE}wA*r%wY0}jw&@$=A6PA+d0V13(EdY`(W1uH)E!q23^aZ%CP|Q~! zk%0|@>!nN9XpevXlMO7tG$ z0K~&JVjG~jwmN@a)EwT>)ffsLL@g3HIpe0PhYkJEL2I5cGn2CwOH#oH=BOV6FeFB( zay9n!-+~)1C64yXm{hvR4x#r1f}Nz?My`uOs)R3MntW#>_V=?In-X3~EVSgqv5iKi zMuqev0XYprjGt6$&$%~0q$8Gbx~9fP(jn3%BoQ-6(>@ltHVw{tJE5UQ;O+5m-_|Q} zpk?6`Q!_I+)TF=mw#;HD&{{$p^Jd?Z?jrtg&yccuvWYN5dD&*R# zGD3(ga~57lA3r`|&3a^$I;7|Rp|Ys>l8Woh}e~dl@-~Gr0-#l>@hOA14Lz8F&88J z_C_V8cXHpv35zYlnTTVj3<9;Rygan{%lJ(q6H`nTHZK}!7kyr!x{!ZB*vgpNRtDVm z%yI4#q1z!5cus3Py}U30QP;U{6eUxidpT$zePPGXbVf~d!y5ncg%hV0$7!K7I|`P5 zSa_V&E8m;mf4fnetNldETJKL`Z^CB6{?GT$Y`aG^=yc}z&37J9)6Z$TBQLx>aB@gx z-Qv*G11B_=n~%#>Iic2DSEq{xjkgd6$WpF?5Arfa{!tZq$CO;@zZB$x;DJYL9#_dY zZXoj+J(vx|V}3Y~MjS|6yFM0Q26&?FtgzwPTF2_kwhGVahWaXe#d59pPxF&M&N~dSl=VrWq`KkB?whulPrhWS4 zd~(~yvbg{day%-SqZNtoqag?QGbD?`f>Tp7^isjQP-KKAOi+n4dKK28JYwra6HJSp zd#gZ-vV#&Buf>~4g^}c-eJIf@wpXk6+5n8NjHn=nVE-8-il>-W!9hVJ3sG_ z!(Ti@Ssc>U-^tTiE33M`zT(o-)19P|55y7xO*M+llD7;Y8HQEfKTE(@r0{6vS;>C5 zlL;;uId}TlL+g2Q$C+TGSSW(+VjHLR$>O~G>zLn7=T0NUqhGxm-drSr8r; z_Rr$v2{-qUkPy_PIP-=uD50?e{{tU>m&IB)ip&<$Dlm#rC9{n7hc9uoH&DBhrw@Lw zdK(C;0l6GrHN^ba4gyw%#k}@zRD&)l8IS54%C6XJ&i6#zNBB&=sNSkevceePK-$K! z59L7Uhe7+n?}CEk?jXTYx(;nTX9g<*p%sUx+5@3YeNcQ;C>wZq>J}G5K0m-Pkz`qc zrirlj0CZa;mNxg}2Lf5t1f5^&lE$#aJf=)es-Tt3ExhRyM~}{aZr?avNe4$h1lCCA zs?pQ)BP`L}{X;&V#_0sWfC0Yc8}~^+_+Z&IJ4)M`wsa literal 0 HcmV?d00001 From cc978e20270f36d4ce60f1d444bf1cf0fe08d96e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 5 Jul 2022 22:47:09 +0800 Subject: [PATCH 0054/1057] Add solution and test-cases for problem 589 --- .../README.md | 27 +++--- .../Solution.go | 22 ++++- .../Solution_test.go | 87 +++++++++++++++++- .../narytreeexample.png | Bin 0 -> 30744 bytes .../sample_4_964.png | Bin 0 -> 31486 bytes 5 files changed, 114 insertions(+), 22 deletions(-) create mode 100644 leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/narytreeexample.png create mode 100644 leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/sample_4_964.png diff --git a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/README.md b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/README.md index 65c6c8e7c..cf6ac6d01 100644 --- a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/README.md +++ b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/README.md @@ -1,28 +1,25 @@ # [589.N-ary Tree Preorder Traversal][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the `root` of an n-ary tree, return the preorder traversal of its nodes' values. + +Nary-Tree input serialization is represented in their level order traversal. Each group of children is separated by the null value (See examples) -**Example 1:** +**Example 1:** +![example1](./narytreeexample.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,null,3,2,4,null,5,6] +Output: [1,3,5,6,2,4] ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](./sample_4_964.png) -### 思路1 -> ... -N-ary Tree Preorder Traversal -```go ``` - +Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14] +Output: [1,2,3,6,7,11,14,4,8,12,5,9,13,10] +``` ## 结语 diff --git a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution.go b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution.go index d115ccf5e..6a8f27afc 100644 --- a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution.go +++ b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +type MultiChildNode struct { + Val int + Children []*MultiChildNode +} + +func Solution(root *MultiChildNode) []int { + ans := make([]int, 0) + preorder589_(root, &ans) + return ans +} + +func preorder589_(root *MultiChildNode, ans *[]int) { + if root == nil { + return + } + + *ans = append(*ans, root.Val) + for _, cNode := range root.Children { + preorder589_(cNode, ans) + } } diff --git a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution_test.go b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution_test.go index 14ff50eb4..86dde7c23 100644 --- a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution_test.go +++ b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/Solution_test.go @@ -10,12 +10,89 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *MultiChildNode + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &MultiChildNode{ + Val: 1, + Children: []*MultiChildNode{ + { + Val: 3, + Children: []*MultiChildNode{ + { + Val: 5, + }, + { + Val: 6, + }, + }, + }, + { + Val: 2, + }, + { + Val: 4, + }, + }, + }, []int{1, 3, 5, 6, 2, 4}}, + {"TestCase2", &MultiChildNode{ + Val: 1, + Children: []*MultiChildNode{ + { + Val: 2, + }, + { + Val: 3, + Children: []*MultiChildNode{ + { + Val: 6, + }, + { + Val: 7, + Children: []*MultiChildNode{ + { + Val: 11, + Children: []*MultiChildNode{ + { + Val: 14, + }, + }, + }, + }, + }, + }, + }, + { + Val: 4, + Children: []*MultiChildNode{ + { + Val: 8, + Children: []*MultiChildNode{ + { + Val: 12, + }, + }, + }, + }, + }, + { + Val: 5, + Children: []*MultiChildNode{ + { + Val: 9, + Children: []*MultiChildNode{ + { + Val: 13, + }, + }, + }, + { + Val: 10, + }, + }, + }, + }, + }, []int{1, 2, 3, 6, 7, 11, 14, 4, 8, 12, 5, 9, 13, 10}}, } // 开始测试 diff --git a/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/narytreeexample.png b/leetcode/501-600/0589.N-ary-Tree-Preorder-Traversal/narytreeexample.png new file mode 100644 index 0000000000000000000000000000000000000000..d28c543c8000bc9d8142ec9b63a4ae2b3810fc39 GIT binary patch literal 30744 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 z

KWy(q^?)V!3@0}a+dLF#}n@vK8$gLwpjcE}wA*r%wY0}jw&@$=A6PA+d0V13(EdY`(W1uH)E!q23^aZ%CP|Q~! zk%0|@>!nN9XpevXlMO7tG$ z0K~&JVjG~jwmN@a)EwT>)ffsLL@g3HIpe0PhYkJEL2I5cGn2CwOH#oH=BOV6FeFB( zay9n!-+~)1C64yXm{hvR4x#r1f}Nz?My`uOs)R3MntW#>_V=?In-X3~EVSgqv5iKi zMuqev0XYprjGt6$&$%~0q$8Gbx~9fP(jn3%BoQ-6(>@ltHVw{tJE5UQ;O+5m-_|Q} zpk?6`Q!_I+)TF=mw#;HD&{{$p^Jd?Z?jrtg&yccuvWYN5dD&*R# zGD3(ga~57lA3r`|&3a^$I;7|Rp|Ys>l8Woh}e~dl@-~Gr0-#l>@hOA14Lz8F&88J z_C_V8cXHpv35zYlnTTVj3<9;Rygan{%lJ(q6H`nTHZK}!7kyr!x{!ZB*vgpNRtDVm z%yI4#q1z!5cus3Py}U30QP;U{6eUxidpT$zePPGXbVf~d!y5ncg%hV0$7!K7I|`P5 zSa_V&E8m;mf4fnetNldETJKL`Z^CB6{?GT$Y`aG^=yc}z&37J9)6Z$TBQLx>aB@gx z-Qv*G11B_=n~%#>Iic2DSEq{xjkgd6$WpF?5Arfa{!tZq$CO;@zZB$x;DJYL9#_dY zZXoj+J(vx|V}3Y~MjS|6yFM0Q26&?FtgzwPTF2_kwhGVahWaXe#d59pPxF&M&N~dSl=VrWq`KkB?whulPrhWS4 zd~(~yvbg{day%-SqZNtoqag?QGbD?`f>Tp7^isjQP-KKAOi+n4dKK28JYwra6HJSp zd#gZ-vV#&Buf>~4g^}c-eJIf@wpXk6+5n8NjHn=nVE-8-il>-W!9hVJ3sG_ z!(Ti@Ssc>U-^tTiE33M`zT(o-)19P|55y7xO*M+llD7;Y8HQEfKTE(@r0{6vS;>C5 zlL;;uId}TlL+g2Q$C+TGSSW(+VjHLR$>O~G>zLn7=T0NUqhGxm-drSr8r; z_Rr$v2{-qUkPy_PIP-=uD50?e{{tU>m&IB)ip&<$Dlm#rC9{n7hc9uoH&DBhrw@Lw zdK(C;0l6GrHN^ba4gyw%#k}@zRD&)l8IS54%C6XJ&i6#zNBB&=sNSkevceePK-$K! z59L7Uhe7+n?}CEk?jXTYx(;nTX9g<*p%sUx+5@3YeNcQ;C>wZq>J}G5K0m-Pkz`qc zrirlj0CZa;mNxg}2Lf5t1f5^&lE$#aJf=)es-Tt3ExhRyM~}{aZr?avNe4$h1lCCA zs?pQ)BP`L}{X;&V#_0sWfC0Yc8}~^+_+Z&IJ4)M`wsa literal 0 HcmV?d00001 From c90ef9dce831fef41fc85279b10cf3c121f0ec09 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Jul 2022 15:51:42 +0800 Subject: [PATCH 0055/1057] Add solution and test-cases for problem 1696 --- .../1601-1700/1696.Jump-Game-VI/README.md | 36 ++++++---- .../1601-1700/1696.Jump-Game-VI/Solution.go | 70 ++++++++++++++++++- .../1696.Jump-Game-VI/Solution_test.go | 13 ++-- 3 files changed, 98 insertions(+), 21 deletions(-) diff --git a/leetcode/1601-1700/1696.Jump-Game-VI/README.md b/leetcode/1601-1700/1696.Jump-Game-VI/README.md index 2c8bf2f30..9c41a7c76 100755 --- a/leetcode/1601-1700/1696.Jump-Game-VI/README.md +++ b/leetcode/1601-1700/1696.Jump-Game-VI/README.md @@ -1,28 +1,38 @@ # [1696.Jump Game VI][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array `nums` and an integer `k`. + +You are initially standing at index `0`. In one move, you can jump at most `k` steps forward without going outside the boundaries of the array. That is, you can jump from index `i` to any index in the range `[i + 1, min(n - 1, i + k)]` **inclusive**. + +You want to reach the last index of the array (index `n - 1`). Your `score` is the `sum` of all `nums[j]` for each index `j` you visited in the array. + +Return the `maximum score` you can get. + + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,-1,-2,4,-7,3], k = 2 +Output: 7 +Explanation: You can choose your jumps forming the subsequence [1,-1,4,3] (underlined above). The sum is 7. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Jump Game VI -```go ``` +Input: nums = [10,-5,-2,4,0,3], k = 3 +Output: 17 +Explanation: You can choose your jumps forming the subsequence [10,4,3] (underlined above). The sum is 17. +``` + +**Example 3:** +``` +Input: nums = [1,-5,-20,4,-1,3,-6,-3], k = 2 +Output: 0 +``` ## 结语 diff --git a/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go b/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go index d115ccf5e..7f26c71c8 100644 --- a/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go +++ b/leetcode/1601-1700/1696.Jump-Game-VI/Solution.go @@ -1,5 +1,71 @@ package Solution -func Solution(x bool) bool { - return x +import "container/heap" + +type heapNode struct { + maxScore, idx int +} +type MyHeap []heapNode + +func (h MyHeap) Len() int { + return len(h) +} + +func (h MyHeap) Less(i, j int) bool { + return h[i].maxScore > h[j].maxScore +} + +func (h MyHeap) Swap(i, j int) { + h[i], h[j] = h[j], h[i] +} + +func (h *MyHeap) Push(val interface{}) { + *h = append(*h, val.(heapNode)) +} + +func (h *MyHeap) Pop() interface{} { + l := len(*h) + ret := (*h)[l-1] + *h = (*h)[:l-1] + return ret +} + +func (h *MyHeap) Top() interface{} { + if len(*h) > 0 { + top := (*h)[0] + return top + } + return nil +} + +func Solution(nums []int, k int) int { + length := len(nums) + if length == 0 { + return 0 + } + dp := make([]int, length) + dp[length-1] = nums[length-1] + priorityQueue := &MyHeap{} + heap.Init(priorityQueue) + heap.Push(priorityQueue, heapNode{maxScore: nums[length-1], idx: length - 1}) + for idx := length - 2; idx >= 0; idx-- { + for priorityQueue.Len() > 0 && priorityQueue.Top().(heapNode).idx > idx+k { + heap.Pop(priorityQueue) + } + dp[idx] = priorityQueue.Top().(heapNode).maxScore + nums[idx] + heap.Push(priorityQueue, heapNode{maxScore: dp[idx], idx: idx}) + /* + 这个是最开始的想法,超时了。。 + firstSet := true // default is zero ,but maybe set zero + for step := 1; step <= k && idx+step < length; step++ { + score := nums[idx] + dp[idx+step] + if firstSet || dp[idx] < score { + dp[idx] = score + firstSet = false + continue + } + } + */ + } + return dp[0] } diff --git a/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go b/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go index 14ff50eb4..e8bfd0ce2 100644 --- a/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go +++ b/leetcode/1601-1700/1696.Jump-Game-VI/Solution_test.go @@ -10,18 +10,19 @@ 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, -1, -2, 4, -7, 3}, 2, 7}, + {"TestCase2", []int{10, -5, -2, 4, 0, 3}, 3, 17}, + {"TestCase3", []int{1, -5, -20, 4, -1, 3, -6, -3}, 2, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) From 183997e0ca68d8f27c6b7976ec94670293e4f4eb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Jul 2022 16:41:33 +0800 Subject: [PATCH 0056/1057] Add solution and test-cases for problem 2236 --- .../README.md | 32 +++++++++--------- .../Solution.go | 24 +++++++++++-- .../Solution_test.go | 15 +++++--- .../graph3drawio-1.png | Bin 0 -> 9334 bytes .../graph3drawio.png | Bin 0 -> 9426 bytes 5 files changed, 49 insertions(+), 22 deletions(-) create mode 100644 leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/graph3drawio-1.png create mode 100644 leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/graph3drawio.png diff --git a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md index 75d8466d5..72c79e608 100755 --- a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md +++ b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/README.md @@ -1,28 +1,28 @@ # [2236.Root Equals Sum of Children][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given the `root` of a **binary tree** that consists of exactly `3` nodes: the root, its left child, and its right child. + +Return `true` if the value of the root is equal to the **sum** of the values of its two children, or `false` otherwise. -**Example 1:** +**Example 1:** +![tree1](./graph3drawio.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [10,4,6] +Output: true +Explanation: The values of the root, its left child, and its right child are 10, 4, and 6, respectively. +10 is equal to 4 + 6, so we return true. ``` -## 题意 -> ... - -## 题解 - -### 思路1 -> ... -Root Equals Sum of Children -```go +**Example 2:** +![tree2](./graph3drawio-1.png) +``` +Input: root = [5,3,1] +Output: false +Explanation: The values of the root, its left child, and its right child are 5, 3, and 1, respectively. +5 is not equal to 3 + 1, so we return false. ``` - ## 结语 diff --git a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go index d115ccf5e..4009cb418 100644 --- a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go +++ b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Left, Right *TreeNode + Val int +} + +func Solution(root *TreeNode) bool { + if root == nil { + return false + } + sum := 0 + checkTree2236(root, &sum) + return sum == root.Val*2 +} + +func checkTree2236(root *TreeNode, sum *int) { + if root == nil { + return + } + + *sum += root.Val + checkTree2236(root.Left, sum) + checkTree2236(root.Right, sum) } diff --git a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go index 14ff50eb4..1115b9c72 100644 --- a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go +++ b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/Solution_test.go @@ -10,12 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs *TreeNode expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 10, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 6}, + }, true}, + {"TestCase2", &TreeNode{ + Val: 10, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 7}, + }, false}, } // 开始测试 diff --git a/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/graph3drawio-1.png b/leetcode/2201-2300/2236.Root-Equals-Sum-of-Children/graph3drawio-1.png new file mode 100644 index 0000000000000000000000000000000000000000..71b7df4f94dc25188ac14702584ecef6dab613de GIT binary patch literal 9334 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 W22_eju{cnG4+d?ZQK9A#{l5THFCT0G literal 0 HcmV?d00001 From a9628bf9b0c5b4c633a5052168193500ab93ca40 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Jul 2022 16:26:47 +0800 Subject: [PATCH 0057/1057] Add solution for problem 349 --- .../0349.Intersection-of-Two-Arrays/Solution.go | 15 +++++++++++++++ .../Solution_test.go | 1 + 2 files changed, 16 insertions(+) diff --git a/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution.go b/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution.go index 10d0fba13..4754058ec 100644 --- a/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution.go +++ b/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution.go @@ -38,3 +38,18 @@ func intersection_2(nums1 []int, nums2 []int) []int { } return ans } + +func intersection_3(nums1, nums2 []int) []int { + ans := make([]int, 0) + buckets := make([]int, 1001) + for _, n := range nums1 { + buckets[n] = 1 + } + for _, n := range nums2 { + if buckets[n] == 1 { + ans = append(ans, n) + buckets[n]++ + } + } + return ans +} diff --git a/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution_test.go b/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution_test.go index bad0b4197..f29d39273 100644 --- a/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution_test.go +++ b/leetcode/301-400/0349.Intersection-of-Two-Arrays/Solution_test.go @@ -17,6 +17,7 @@ type SolutionFuncType func([]int, []int) []int var SolutionFuncList = []SolutionFuncType{ intersection_1, intersection_2, + intersection_3, } // test info struct From bc7dde759fd3741871725e4aef185f6f583eaa0e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 13 Jul 2022 00:19:18 +0800 Subject: [PATCH 0058/1057] Add solution and test-cases for problem 473 --- .../0473.Matchsticks-to-Square/README.md | 28 ++++++------- .../0473.Matchsticks-to-Square/Solution.go | 37 +++++++++++++++++- .../Solution_test.go | 9 +++-- .../matchsticks1-grid.jpg | Bin 0 -> 7201 bytes 4 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 leetcode/401-500/0473.Matchsticks-to-Square/matchsticks1-grid.jpg diff --git a/leetcode/401-500/0473.Matchsticks-to-Square/README.md b/leetcode/401-500/0473.Matchsticks-to-Square/README.md index 7085fb394..ad32bdc2a 100644 --- a/leetcode/401-500/0473.Matchsticks-to-Square/README.md +++ b/leetcode/401-500/0473.Matchsticks-to-Square/README.md @@ -1,28 +1,26 @@ # [473.Matchsticks to Square][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer array `matchsticks` where `matchsticks[i]` is the length of the ith matchstick. You want to use **all the matchsticks** to make one square. You **should not break** any stick, but you can link them up, and each matchstick must be used **exactly one time**. + +Return `true` if you can make this square and `false` otherwise. -**Example 1:** +**Example 1:** +![ex1](./matchsticks1-grid.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matchsticks = [1,1,2,2,2] +Output: true +Explanation: You can form a square with length 2, one side of the square came two sticks with length 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Matchsticks to Square -```go ``` - +Input: matchsticks = [3,3,3,3,4] +Output: false +Explanation: You cannot find a way to form a square with all the matchsticks. +``` ## 结语 diff --git a/leetcode/401-500/0473.Matchsticks-to-Square/Solution.go b/leetcode/401-500/0473.Matchsticks-to-Square/Solution.go index d115ccf5e..277b02e95 100644 --- a/leetcode/401-500/0473.Matchsticks-to-Square/Solution.go +++ b/leetcode/401-500/0473.Matchsticks-to-Square/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matchsticks []int) bool { + length := 0 + maxSide := 0 + for _, l := range matchsticks { + if l > maxSide { + maxSide = l + } + length += l + } + sideLength := length / 4 + if length%4 != 0 || len(matchsticks) < 4 || maxSide > sideLength { + return false + } + used := make(map[int]struct{}) + return dfs473(4, 0, sideLength, 0, matchsticks, used) +} + +// NOTE: dsf start, loop is always 4, square +func dfs473(loop, sum, target, idx int, nums []int, used map[int]struct{}) bool { + if sum == target { + return dfs473(loop-1, 0, target, 0, nums, used) + } + if loop == 1 { + return true + } + for i := idx; i < len(nums); i++ { + if _, ok := used[i]; !ok && sum+nums[i] <= target { + used[i] = struct{}{} + if dfs473(loop, sum+nums[i], target, i+1, nums, used) { + return true + } + delete(used, i) + } + } + return false } diff --git a/leetcode/401-500/0473.Matchsticks-to-Square/Solution_test.go b/leetcode/401-500/0473.Matchsticks-to-Square/Solution_test.go index 14ff50eb4..c89ca8aeb 100644 --- a/leetcode/401-500/0473.Matchsticks-to-Square/Solution_test.go +++ b/leetcode/401-500/0473.Matchsticks-to-Square/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 2, 2, 2}, true}, + {"TestCase2", []int{3, 3, 3, 3, 4}, false}, + {"TestCase3", []int{6, 6, 6, 6, 4, 2, 2}, false}, + {"TestCase4", []int{5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3}, true}, } // 开始测试 diff --git a/leetcode/401-500/0473.Matchsticks-to-Square/matchsticks1-grid.jpg b/leetcode/401-500/0473.Matchsticks-to-Square/matchsticks1-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a3df9e89469e6ee286f70219a82d18d28733c44 GIT binary patch literal 7201 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 VdI#V Date: Sat, 16 Jul 2022 16:59:21 +0800 Subject: [PATCH 0059/1057] Add solution and test-cases for problem 495 --- .../401-500/0495.Teemo-Attacking/README.md | 33 +++++++++++-------- .../401-500/0495.Teemo-Attacking/Solution.go | 17 ++++++++-- .../0495.Teemo-Attacking/Solution_test.go | 15 +++++---- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0495.Teemo-Attacking/README.md b/leetcode/401-500/0495.Teemo-Attacking/README.md index dcad1c03b..db06ddccd 100644 --- a/leetcode/401-500/0495.Teemo-Attacking/README.md +++ b/leetcode/401-500/0495.Teemo-Attacking/README.md @@ -1,28 +1,33 @@ # [495.Teemo Attacking][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Our hero Teemo is attacking an enemy Ashe with poison attacks! When Teemo attacks Ashe, Ashe gets poisoned for a exactly `duration` seconds. More formally, an attack at second `t` will mean Ashe is poisoned during the **inclusive** time interval `[t, t + duration - 1]`. If Teemo attacks again **before** the poison effect ends, the timer for it is **reset**, and the poison effect will end `duration` seconds after the new attack. + +You are given a **non-decreasing** integer array `timeSeries`, where `timeSeries[i]` denotes that Teemo attacks Ashe at second `timeSeries[i]`, and an integer `duration`. + +Return the **total** number of seconds that Ashe is poisoned. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: timeSeries = [1,4], duration = 2 +Output: 4 +Explanation: Teemo's attacks on Ashe go as follows: +- At second 1, Teemo attacks, and Ashe is poisoned for seconds 1 and 2. +- At second 4, Teemo attacks, and Ashe is poisoned for seconds 4 and 5. +Ashe is poisoned for seconds 1, 2, 4, and 5, which is 4 seconds in total. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Teemo Attacking -```go ``` - +Input: timeSeries = [1,2], duration = 2 +Output: 3 +Explanation: Teemo's attacks on Ashe go as follows: +- At second 1, Teemo attacks, and Ashe is poisoned for seconds 1 and 2. +- At second 2 however, Teemo attacks again and resets the poison timer. Ashe is poisoned for seconds 2 and 3. +Ashe is poisoned for seconds 1, 2, and 3, which is 3 seconds in total. +``` ## 结语 diff --git a/leetcode/401-500/0495.Teemo-Attacking/Solution.go b/leetcode/401-500/0495.Teemo-Attacking/Solution.go index d115ccf5e..89005ed62 100644 --- a/leetcode/401-500/0495.Teemo-Attacking/Solution.go +++ b/leetcode/401-500/0495.Teemo-Attacking/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(timeSeries []int, duration int) int { + ans, length := 0, len(timeSeries) + if length == 0 { + return ans + } + end := timeSeries[0] + duration - 1 + ans += duration + for idx := 1; idx < length; idx++ { + if timeSeries[idx] <= end { + ans -= end - timeSeries[idx] + 1 + } + end = timeSeries[idx] + duration - 1 + ans += duration + } + return ans } diff --git a/leetcode/401-500/0495.Teemo-Attacking/Solution_test.go b/leetcode/401-500/0495.Teemo-Attacking/Solution_test.go index 14ff50eb4..357868c10 100644 --- a/leetcode/401-500/0495.Teemo-Attacking/Solution_test.go +++ b/leetcode/401-500/0495.Teemo-Attacking/Solution_test.go @@ -9,19 +9,20 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []int + duration int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 4}, 2, 4}, + {"TestCase2", []int{1, 2}, 2, 3}, + {"TestCase3", []int{1, 2, 3, 4, 5}, 5, 9}, } // 开始测试 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.duration) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) From edcd1e1496cc5c0b4790d65ed3f072ac11ba6561 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Jul 2022 17:57:25 +0800 Subject: [PATCH 0060/1057] Add solution and test-cases for problem 1175 --- .../1175.Prime-Arrangements/README.md | 26 +++++++------- .../1175.Prime-Arrangements/Solution.go | 34 +++++++++++++++++-- .../1175.Prime-Arrangements/Solution_test.go | 13 ++++--- 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/leetcode/1101-1200/1175.Prime-Arrangements/README.md b/leetcode/1101-1200/1175.Prime-Arrangements/README.md index 146a5f8ad..ee5f354bd 100644 --- a/leetcode/1101-1200/1175.Prime-Arrangements/README.md +++ b/leetcode/1101-1200/1175.Prime-Arrangements/README.md @@ -1,28 +1,26 @@ # [1175.Prime Arrangements][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Return the number of permutations of 1 to `n` so that prime numbers are at prime indices (1-indexed.) + +(Recall that an integer is prime if and only if it is greater than 1, and cannot be written as a product of two positive integers both smaller than it.) + +Since the answer may be large, return the answer **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5 +Output: 12 +Explanation: For example [1,2,5,4,3] is a valid permutation, but [5,2,3,4,1] is not because the prime number 5 is at index 1. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Prime Arrangements -```go ``` - +Input: n = 100 +Output: 682289015 +``` ## 结语 diff --git a/leetcode/1101-1200/1175.Prime-Arrangements/Solution.go b/leetcode/1101-1200/1175.Prime-Arrangements/Solution.go index d115ccf5e..10d04c689 100644 --- a/leetcode/1101-1200/1175.Prime-Arrangements/Solution.go +++ b/leetcode/1101-1200/1175.Prime-Arrangements/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +const mod1175 = 1000000007 + +func Solution(n int) int { + primeArray := make([]uint8, n+1) + primeCount := 0 + for idx := 2; idx <= n; idx++ { + if primeArray[idx] == 0 { + primeCount++ + for next := idx + idx; next <= n; next += idx { + primeArray[next] = 1 + } + } + } + + max_ := primeCount + notPrimeCount := n - primeCount + + if notPrimeCount > max_ { + max_ = notPrimeCount + } + facPrime, facNotPrime := 1, 1 + a := 1 + for idx := 2; idx <= max_; idx++ { + a = (a * idx) % mod1175 + if idx == primeCount { + facPrime = a + } + if idx == notPrimeCount { + facNotPrime = a + } + } + return (facPrime * facNotPrime) % mod1175 } diff --git a/leetcode/1101-1200/1175.Prime-Arrangements/Solution_test.go b/leetcode/1101-1200/1175.Prime-Arrangements/Solution_test.go index 14ff50eb4..c807ed555 100644 --- a/leetcode/1101-1200/1175.Prime-Arrangements/Solution_test.go +++ b/leetcode/1101-1200/1175.Prime-Arrangements/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", 1, 1}, + {"TestCAse2", 2, 1}, + {"TestCAse3", 3, 2}, + {"TestCase4", 5, 12}, + {"TestCase5", 79, 351814543}, + {"TestCase6", 100, 682289015}, } // 开始测试 From 0852884b3cd2fa95743a1a35be82aebcfbc8a755 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 23 Jul 2022 16:57:56 +0800 Subject: [PATCH 0061/1057] Add solution and test-cases for problem 1460 --- .../README.md | 41 +++++++++++++++++++ .../Solution.go | 15 +++++++ .../Solution_test.go | 40 ++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/README.md create mode 100644 leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution.go create mode 100644 leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution_test.go diff --git a/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/README.md b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/README.md new file mode 100644 index 000000000..7eeb12767 --- /dev/null +++ b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/README.md @@ -0,0 +1,41 @@ +# [1460.Make Two Arrays Equal by Reversing Sub-arrays][title] + +## Description +You are given two integer arrays of equal length `target` and `arr`. In one step, you can select any `non-empty sub-array` of `arr` and reverse it. You are allowed to make any number of steps. + +Return `true` if you can make `arr` equal to `target` or `false` otherwise. + +**Example 1:** + +``` +Input: target = [1,2,3,4], arr = [2,4,1,3] +Output: true +Explanation: You can follow the next steps to convert arr to target: +1- Reverse sub-array [2,4,1], arr becomes [1,4,2,3] +2- Reverse sub-array [4,2], arr becomes [1,2,4,3] +3- Reverse sub-array [4,3], arr becomes [1,2,3,4] +There are multiple ways to convert arr to target, this is not the only way to do so. +``` + +**Example 2:** + +``` +Input: target = [7], arr = [7] +Output: true +Explanation: arr is equal to target without any reverses. +``` + +**Example 3:** + +``` +Input: target = [3,7,9], arr = [3,7,11] +Output: false +Explanation: arr does not have value 9 and it can never be converted to target. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-two-arrays-equal-by-reversing-sub-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution.go b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution.go new file mode 100644 index 000000000..01dc43247 --- /dev/null +++ b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution.go @@ -0,0 +1,15 @@ +package Solution + +func Solution(target, arr []int) bool { + check := make([]int, 1001) + for idx := 0; idx < len(target); idx++ { + check[target[idx]]++ + check[arr[idx]]-- + } + for idx := 0; idx < 1001; idx++ { + if check[idx] != 0 { + return false + } + } + return true +} diff --git a/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution_test.go b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution_test.go new file mode 100644 index 000000000..20392c0ee --- /dev/null +++ b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-byReversing-Sub-arrays/Solution_test.go @@ -0,0 +1,40 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + input, arr []int + expect bool + }{ + {"TestCase1", []int{1, 2, 3, 4}, []int{2, 4, 1, 3}, true}, + {"TestCase2", []int{7}, []int{7}, true}, + {"TestCase3", []int{3, 7, 9}, []int{3, 7, 11}, false}, + {"TestCase4", []int{1, 2, 3, 4, 5}, []int{5, 4, 3, 2, 1}, true}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.input, c.arr) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.input, c.arr) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 08b3d4ce0b535441d83e68fe62a517e3d2a6b40f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Jul 2022 23:37:14 +0800 Subject: [PATCH 0062/1057] Add solution and test-cases for problem 1464 --- .../README.md | 34 +++++++++++++++ .../Solution.go | 14 +++++++ .../Solution_test.go | 41 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/README.md create mode 100644 leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution.go create mode 100644 leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution_test.go diff --git a/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/README.md b/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/README.md new file mode 100644 index 000000000..0881dafd6 --- /dev/null +++ b/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/README.md @@ -0,0 +1,34 @@ +# [1464.Maximum Product of Two Elements in an Array][title] + +## Description +Given the array of integers `nums`, you will choose two different indices `i` and `j` of that array. Return the maximum value of `(nums[i]-1)*(nums[j]-1)`. + +**Example 1:** + +``` +Input: nums = [3,4,5,2] +Output: 12 +Explanation: If you choose the indices i=1 and j=2 (indexed from 0), you will get the maximum value, that is, (nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12. +``` + +**Example 2:** + +``` +Input: nums = [1,5,4,5] +Output: 16 +Explanation: Choosing the indices i=1 and j=3 (indexed from 0), you will get the maximum value of (5-1)*(5-1) = 16. +``` + +**Example 3:** + +``` +Input: nums = [3,7] +Output: 12 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-two-elements-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution.go b/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution.go new file mode 100644 index 000000000..9c2cdb8d1 --- /dev/null +++ b/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution.go @@ -0,0 +1,14 @@ +package Solution + +// top 2 +func Solution(nums []int) int { + ans := 0 + for idx := 0; idx < len(nums)-1; idx++ { + for next := idx + 1; next < len(nums); next++ { + if r := (nums[idx] - 1) * (nums[next] - 1); r > ans { + ans = r + } + } + } + return ans +} diff --git a/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution_test.go b/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution_test.go new file mode 100644 index 000000000..efd794a42 --- /dev/null +++ b/leetcode/1401-1500/1464.Maximum-Product-of-Two-Elements-in-an-Array/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + input []int + expect int + }{ + {"TestCase1", []int{1, 2, 3, 4}, 6}, + {"TestCase2", []int{3, 4, 5, 2}, 12}, + {"TestCase3", []int{3, 7, 9}, 48}, + {"TestCase4", []int{1, 2, 3, 4, 5}, 12}, + {"TestCase5", []int{1, 5, 4, 5}, 16}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.input) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.input) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 1433d8229e9f630246ebf941d899c69dc563b127 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 31 Jul 2022 00:31:19 +0800 Subject: [PATCH 0063/1057] Add solution and test-cases for problem 1206 --- .../1206.Design-Skiplist/1506_skiplist.gif | Bin 0 -> 49035 bytes .../1201-1300/1206.Design-Skiplist/README.md | 52 +++++-- .../1206.Design-Skiplist/Solution.go | 142 +++++++++++++++++- .../1206.Design-Skiplist/Solution_test.go | 53 +++++-- 4 files changed, 220 insertions(+), 27 deletions(-) create mode 100644 leetcode/1201-1300/1206.Design-Skiplist/1506_skiplist.gif diff --git a/leetcode/1201-1300/1206.Design-Skiplist/1506_skiplist.gif b/leetcode/1201-1300/1206.Design-Skiplist/1506_skiplist.gif new file mode 100644 index 0000000000000000000000000000000000000000..d21bd523463197cd13611bdbdc4835e7f6a1dc17 GIT binary patch literal 49035 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 literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1206.Design-Skiplist/README.md b/leetcode/1201-1300/1206.Design-Skiplist/README.md index 934f3865b..9489385a5 100644 --- a/leetcode/1201-1300/1206.Design-Skiplist/README.md +++ b/leetcode/1201-1300/1206.Design-Skiplist/README.md @@ -1,28 +1,48 @@ # [1206.Design Skiplist][title] -> [!WARNING|style:flat] -> 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 **Skiplist** without using any built-in libraries. -**Example 1:** +A **skiplist** is a data structure that takes `O(log(n))` time to add, erase and search. Comparing with treap and red-black tree which has the same function and performance, the code length of Skiplist can be comparatively short and the idea behind Skiplists is just simple linked lists. -``` -Input: a = "11", b = "1" -Output: "100" -``` +For example, we have a Skiplist containing `[30,40,50,60,70,90]` and we want to add `80` and `45` into it. The Skiplist works this way: +![skiplist](1506_skiplist.gif) +

Artyom Kalinin [CC BY-SA 3.0], via Wikimedia Commons

-## 题意 -> ... +You can see there are many layers in the Skiplist. Each layer is a sorted linked list. With the help of the top layers, add, erase and search can be faster than `O(n)`. It can be proven that the average time complexity for each operation is `O(log(n))` and space complexity is `O(n)`. -## 题解 +See more about Skiplist: `https://en.wikipedia.org/wiki/Skip_list` -### 思路1 -> ... -Design Skiplist -```go -``` +Implement the `Skiplist` class: + +- `Skiplist()` Initializes the object of the skiplist. +- `bool search(int target)` Returns true if the integer `target` exists in the Skiplist or `false` otherwise. +- `void add(int num)` Inserts the value `num` into the SkipList. +- `bool erase(int num)` Removes the value `num` from the Skiplist and returns `true`. If `num` does not exist in the Skiplist, do nothing and return `false`. If there exist multiple `num` values, removing any one of them is fine. +Note that duplicates may exist in the Skiplist, your code needs to handle this situation. + +**Example 1:** + +``` +Input +["Skiplist", "add", "add", "add", "search", "add", "search", "erase", "erase", "search"] +[[], [1], [2], [3], [0], [4], [1], [0], [1], [1]] +Output +[null, null, null, null, false, null, true, false, true, false] + +Explanation +Skiplist skiplist = new Skiplist(); +skiplist.add(1); +skiplist.add(2); +skiplist.add(3); +skiplist.search(0); // return False +skiplist.add(4); +skiplist.search(1); // return True +skiplist.erase(0); // return False, 0 is not in skiplist. +skiplist.erase(1); // return True +skiplist.search(1); // return False, 1 has already been erased. +``` ## 结语 diff --git a/leetcode/1201-1300/1206.Design-Skiplist/Solution.go b/leetcode/1201-1300/1206.Design-Skiplist/Solution.go index d115ccf5e..d7da09dcc 100644 --- a/leetcode/1201-1300/1206.Design-Skiplist/Solution.go +++ b/leetcode/1201-1300/1206.Design-Skiplist/Solution.go @@ -1,5 +1,143 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +type SkipListNode struct { + Value int + Count int + Forward []*SkipListNode +} + +const ( + level = 8 +) + +type Skiplist struct { + DummyHead *SkipListNode + loop int +} + +func newSkipListNodeWithValue(val int) *SkipListNode { + return &SkipListNode{Value: val, Forward: make([]*SkipListNode, level), Count: 1} +} + +func Constructor() Skiplist { + return Skiplist{ + DummyHead: newSkipListNodeWithValue(-1), + loop: -1, + } +} + +func (this *Skiplist) search(target int) *SkipListNode { + walker := this.DummyHead + for l := level - 1; l >= 0; l-- { + for walker.Forward[l] != nil { + if walker.Forward[l].Value == target { + return walker.Forward[l] + } + if walker.Forward[l].Value < target { + walker = walker.Forward[l] + continue + } + break + } + } + return nil +} +func (this *Skiplist) Search(target int) bool { + return this.search(target) != nil +} + +func (this *Skiplist) Add(num int) { + addLevel := (this.loop + 1) % level + update := make([]*SkipListNode, level) + walker := this.DummyHead + for l := addLevel; l >= 0; l-- { + for walker.Forward[l] != nil { + if walker.Forward[l].Value == num { + walker.Forward[l].Count++ + return + } + if walker.Forward[l].Value < num { + walker = walker.Forward[l] + continue + } + break + } + // update end idx + update[l] = walker + } + addNode := newSkipListNodeWithValue(num) + + for i := 0; i <= addLevel; i++ { + if update[i] == nil { + this.DummyHead.Forward[i] = addNode + continue + } + addNode.Forward[i] = update[i].Forward[i] + update[i].Forward[i] = addNode + } + + this.loop = addLevel +} + +func (this *Skiplist) Erase(num int) bool { + walker := this.DummyHead + del := make([]*SkipListNode, level) + found := -1 + for l := level - 1; l >= 0; l-- { + for walker.Forward[l] != nil { + if walker.Forward[l].Value < num { + walker = walker.Forward[l] + continue + } + if walker.Forward[l].Value == num { + if found == -1 { + found = l + } + + if walker.Forward[l].Count > 1 { + // same value + walker.Forward[l].Count-- + return true + } + } + break + } + del[l] = walker + } + for idx := 0; idx <= found; idx++ { + if del[idx] == nil { + continue + } + next := del[idx].Forward[idx] + if next == nil { + del[idx].Forward[idx] = nil + continue + } + del[idx].Forward[idx] = next.Forward[idx] + } + + return found != -1 +} + +func Solution(operations, ans []string, nums []int) bool { + o := Constructor() + for idx, operation := range operations { + if operation == "add" { + o.Add(nums[idx]) + continue + } + get := false + if operation == "erase" { + get = o.Erase(nums[idx]) + } else { + get = o.Search(nums[idx]) + } + getStr := fmt.Sprintf("%v", get) + if getStr != ans[idx] { + return false + } + } + return true } diff --git a/leetcode/1201-1300/1206.Design-Skiplist/Solution_test.go b/leetcode/1201-1300/1206.Design-Skiplist/Solution_test.go index 14ff50eb4..36f1bcf5f 100644 --- a/leetcode/1201-1300/1206.Design-Skiplist/Solution_test.go +++ b/leetcode/1201-1300/1206.Design-Skiplist/Solution_test.go @@ -9,22 +9,57 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + operations, ans []string + nums []int + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", + []string{ + "add", "add", "add", "add", "add", "add", "add", "add", "add", "add", "add", "search", "search", + "erase", "erase", "add", "search", "erase", "search", "search", "add", "search", "add", "erase", + "erase", "add", "erase", "erase", "erase", "search", "search", "erase", "erase", "erase", "search", + "add", "add", "add", "add", "erase", "erase", "add", "add", "erase", "erase", "erase", "search", + "search", "add", "add", "erase", "erase", "search", "add", "search", "search", "search", "search", + "search", "search", "search", "search", "search", "search", "search", "search"}, + []string{ + "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "null", "false", + "false", "true", "false", "null", "false", "true", "true", "false", "null", "false", "null", + "false", "false", "null", "true", "false", "true", "false", "false", "false", "false", "true", + "true", "null", "null", "null", "null", "false", "false", "null", "null", "false", "true", "false", + "false", "false", "null", "null", "true", "false", "false", "null", "false", "false", "false", + "false", "false", "true", "true", "false", "false", "false", "true", "true"}, + []int{ + 3, 14, 3, 18, 1, 18, 17, 8, 5, 16, 3, 10, 9, 14, 13, 18, 11, 16, + 1, 4, 7, 0, 5, 12, 11, 20, 17, 2, 1, 4, 17, 12, 1, 20, 7, 6, 21, + 2, 13, 16, 17, 6, 5, 10, 13, 10, 17, 0, 1, 8, 7, 4, 15, 14, 13, 0, + 13, 0, 19, 18, 1, 20, 15, 0, 21, 18}, true}, + {"TestCase2", []string{ + "add", "add", "add", "add", "add", "add", + "erase", "erase", "erase", "erase", "erase", "erase", "erase", + "search", "search", "search", "search", "search", "search", + }, []string{ + "null", "null", "null", "null", "null", "null", + "true", "true", "true", "true", "true", "true", "false", + "false", "false", "false", "false", "false", "false", + }, []int{5, 3, 1, 2, 2, 6, 5, 3, 1, 2, 2, 6, 7, 1, 2, 3, 4, 5, 6}, true}, + {"testCase3", []string{ + "add", "add", "add", "search", "add", "search", "erase", "erase", "search"}, []string{ + "null", "null", "null", "false", "null", "true", "false", "true", "false", + }, []int{1, 2, 3, 0, 4, 1, 0, 1, 1}, true}, + {"TestCase4", []string{ + "add", "add", "add", + "search", "erase", "erase", "search", "erase", "search", + }, []string{"null", "null", "null", "true", "true", "true", "true", "true", "false"}, []int{1, 1, 1, 1, 1, 1, 1, 1, 1}, true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.operations, c.ans, c.nums) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.operations, c.ans, c.nums) } }) } From 475ddb48f0b222c2e671fa255b4f54db0ec473dd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 31 Jul 2022 10:41:04 +0800 Subject: [PATCH 0064/1057] Add solution and test-cases for problem 307 --- .../0307.Range-Sum-Query--Mutable/README.md | 36 +++++++++-------- .../0307.Range-Sum-Query--Mutable/Solution.go | 40 ++++++++++++++++++- .../Solution_test.go | 20 ++++++---- 3 files changed, 71 insertions(+), 25 deletions(-) diff --git a/leetcode/301-400/0307.Range-Sum-Query--Mutable/README.md b/leetcode/301-400/0307.Range-Sum-Query--Mutable/README.md index 34875ad43..59e5d9414 100644 --- a/leetcode/301-400/0307.Range-Sum-Query--Mutable/README.md +++ b/leetcode/301-400/0307.Range-Sum-Query--Mutable/README.md @@ -1,28 +1,32 @@ # [307.Range Sum Query - Mutable][title] -> [!WARNING|style:flat] -> 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`, handle multiple queries of the following types: -**Example 1:** +- **Update** the value of an element in `nums`. +- Calculate the **sum** of the elements of `nums` between indices `left` and `right` **inclusive** where `left <= right`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `NumArray` class: -## 题意 -> ... +- `NumArray(int[] nums)` Initializes the object with the integer array `nums`. +- `void update(int index, int val)` **Updates** the value of `nums[index]` to be `val`. +- `int sumRange(int left, int right)` Returns the **sum** of the elements of `nums` between indices `left` and `right` **inclusive** (i.e. `nums[left] + nums[left + 1] + ... + nums[right]`). -## 题解 +**Example 1:** -### 思路1 -> ... -Range Sum Query - Mutable -```go ``` - +Input +["NumArray", "sumRange", "update", "sumRange"] +[[[1, 3, 5]], [0, 2], [1, 2], [0, 2]] +Output +[null, 9, null, 8] + +Explanation +NumArray numArray = new NumArray([1, 3, 5]); +numArray.sumRange(0, 2); // return 1 + 3 + 5 = 9 +numArray.update(1, 2); // nums = [1, 2, 5] +numArray.sumRange(0, 2); // return 1 + 2 + 5 = 8 +``` ## 结语 diff --git a/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution.go b/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution.go index d115ccf5e..cfec47381 100644 --- a/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution.go +++ b/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +type NumArray struct { + raw []int +} + +func Constructor307(nums []int) NumArray { + for idx := 1; idx < len(nums); idx++ { + nums[idx] += nums[idx-1] + } + return NumArray{raw: append([]int{0}, nums...)} +} + +func (this *NumArray) Update(index int, val int) { + source := this.raw[index+1] - this.raw[index] + diff := val - source + for idx := index + 1; idx < len(this.raw); idx++ { + this.raw[idx] += diff + } +} + +func (this *NumArray) SumRange(left int, right int) int { + return this.raw[right+1] - this.raw[left] +} + +// 这道题看解法,是线段树 +func Solution(nums []int, operations []string, optNums [][]int) []int { + o := Constructor307(nums) + ans := make([]int, 0) + for idx, opt := range operations { + if opt == "update" { + o.Update(optNums[idx][0], optNums[idx][1]) + continue + } + if opt == "sumRange" { + exp := o.SumRange(optNums[idx][0], optNums[idx][1]) + ans = append(ans, exp) + } + } + return ans } diff --git a/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution_test.go b/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution_test.go index 14ff50eb4..74bea2c6c 100644 --- a/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution_test.go +++ b/leetcode/301-400/0307.Range-Sum-Query--Mutable/Solution_test.go @@ -9,19 +9,25 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []int + operations []string + optNums [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", + []int{1, 3, 5}, + []string{"sumRange", "update", "sumRange"}, + [][]int{{0, 2}, {1, 2}, {0, 2}}, []int{9, 8}}, + {"TestCase2", []int{1}, + []string{"sumRange", "update", "sumRange"}, + [][]int{{0, 0}, {0, 3}, {0, 0}}, []int{1, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.operations, c.optNums) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) From cf914e9a3531ba91066b419b5591d6b547205dfe Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 31 Jul 2022 15:30:52 +0800 Subject: [PATCH 0065/1057] Add solution and test-cases for problem 1812 --- .../README.md | 32 +++++++++++------- .../Solution.go | 7 ++-- .../Solution_test.go | 8 ++--- .../screenshot-2021-02-20-at-22159-pm.png | Bin 0 -> 244163 bytes 4 files changed, 29 insertions(+), 18 deletions(-) create mode 100644 leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/screenshot-2021-02-20-at-22159-pm.png diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md index 6d75014f2..e5bb4aa79 100755 --- a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md +++ b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/README.md @@ -1,28 +1,36 @@ # [1812.Determine Color of a Chessboard Square][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given `coordinates`, a string that represents the coordinates of a square of the chessboard. Below is a chessboard for your reference. + +![chessboard](./screenshot-2021-02-20-at-22159-pm.png) +Return `true` if the square is white, and `false` if the square is black. + +The coordinate will always represent a valid chessboard square. The coordinate will always have the letter first, and the number second. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: coordinates = "a1" +Output: false +Explanation: From the chessboard above, the square with coordinates "a1" is black, so return false. ``` -## 题意 -> ... -## 题解 +**Example 2:** -### 思路1 -> ... -Determine Color of a Chessboard Square -```go +``` +Input: coordinates = "h3" +Output: true +Explanation: From the chessboard above, the square with coordinates "h3" is white, so return true. ``` +**Example 3:** + +``` +Input: coordinates = "c7" +Output: false +``` ## 结语 diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go index d115ccf5e..59a8f2de2 100644 --- a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go +++ b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution.go @@ -1,5 +1,8 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(coordinates string) bool { + x, y := coordinates[0]-'a', coordinates[1]-'0' + + black := (x&1 ==0 && y&1 != 0) || (x&1 != 0 && y &1 == 0) + return !black } diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go index 14ff50eb4..bfcef2802 100644 --- a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/Solution_test.go +++ b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/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", "a1", false}, + {"TestCase2", "h3", true}, + {"TestCase3", "c7", false}, } // 开始测试 diff --git a/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/screenshot-2021-02-20-at-22159-pm.png b/leetcode/1801-1900/1812.Determine-Color-of-a-Chessboard-Square/screenshot-2021-02-20-at-22159-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..f53ef96e69430da24511e88fd8bd4333625a4438 GIT binary patch literal 244163 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 ahVZ;>v?irAYCi@3s48kG6yJLq^8WxN%Y~Z& literal 0 HcmV?d00001 From b34c1e5aa67e23c8a323bd3c2cc6c1480e6541fa Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 2 Aug 2022 22:20:46 +0800 Subject: [PATCH 0066/1057] Add solution and test-cases for problem 378 --- .../README.md | 26 ++++++------ .../Solution.go | 40 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 57 insertions(+), 23 deletions(-) diff --git a/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/README.md b/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/README.md index a4fba9721..d229d471d 100644 --- a/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/README.md +++ b/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/README.md @@ -1,28 +1,26 @@ # [378.Kth Smallest Element in a Sorted Matrix][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `n x n` `matrix` where each of the rows and columns is sorted in ascending order, return the kth smallest element in the matrix. + +Note that it is the kth smallest element **in the sorted order**, not the kth **distinct** element. + +You must find a solution with a memory complexity better than `O(n^2)`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[1,5,9],[10,11,13],[12,13,15]], k = 8 +Output: 13 +Explanation: The elements in the matrix are [1,5,9,10,11,12,13,13,15], and the 8th smallest number is 13 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Kth Smallest Element in a Sorted Matrix -```go ``` - +Input: matrix = [[-5]], k = 1 +Output: -5 +``` ## 结语 diff --git a/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution.go b/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution.go index d115ccf5e..ba5254d6c 100644 --- a/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution.go +++ b/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +// 不是最优解法 +func Solution(matrix [][]int, k int) int { + length := len(matrix) + + ans := matrix[0] + + for row := 1; row < length; row++ { + ans = kthMerge(ans, matrix[row]) + } + return ans[k-1] +} + +func kthMerge(left, right []int) []int { + ll, lr := len(left), len(right) + ans := make([]int, ll+lr) + l, r, idx := 0, 0, -1 + for l < ll || r < lr { + idx++ + if l >= ll { + ans[idx] = right[r] + r++ + continue + } + if r >= lr { + ans[idx] = left[l] + l++ + continue + } + if left[l] < right[r] { + ans[idx] = left[l] + l++ + continue + } + ans[idx] = right[r] + r++ + } + + return ans } diff --git a/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution_test.go b/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution_test.go index 14ff50eb4..df30e6dfd 100644 --- a/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution_test.go +++ b/leetcode/301-400/0378.Kth-Smallest-Element-in-a-Sorted-Matrix/Solution_test.go @@ -9,19 +9,19 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs [][]int + k, expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 5, 9}, {10, 11, 13, 12, 13, 15}}, 8, 13}, + {"TestCase2", [][]int{{-5}}, 1, -5}, + {"TestCase3", [][]int{{1}, {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.k) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) From dee5411bcb862c6049cdf333915f25eb414e75c2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 4 Aug 2022 23:45:45 +0800 Subject: [PATCH 0067/1057] Add solution and test-cases for problem 858 --- .../801-900/0858.Mirror-Reflection/README.md | 33 ++++++++++-------- .../0858.Mirror-Reflection/Solution.go | 22 ++++++++++-- .../0858.Mirror-Reflection/Solution_test.go | 17 ++++----- .../0858.Mirror-Reflection/reflection.png | Bin 0 -> 37099 bytes 4 files changed, 47 insertions(+), 25 deletions(-) create mode 100644 leetcode/801-900/0858.Mirror-Reflection/reflection.png diff --git a/leetcode/801-900/0858.Mirror-Reflection/README.md b/leetcode/801-900/0858.Mirror-Reflection/README.md index e80e89238..d34f0f078 100644 --- a/leetcode/801-900/0858.Mirror-Reflection/README.md +++ b/leetcode/801-900/0858.Mirror-Reflection/README.md @@ -1,28 +1,31 @@ # [858.Mirror Reflection][title] -> [!WARNING|style:flat] -> 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 special square room with mirrors on each of the four walls. Except for the southwest corner, there are receptors on each of the remaining corners, numbered `0`, `1`, and `2`. -**Example 1:** +The square room has walls of length `p` and a laser ray from the southwest corner first meets the east wall at a distance q from the 0th receptor. + +Given the two integers `p` and `q`, return the number of the receptor that the ray meets first. + +The test cases are guaranteed so that the ray will meet a receptor eventually. -``` -Input: a = "11", b = "1" -Output: "100" -``` -## 题意 -> ... +**Example 1:** -## 题解 +![reflection](./reflection.png) -### 思路1 -> ... -Mirror Reflection -```go ``` +Input: p = 2, q = 1 +Output: 2 +Explanation: The ray meets receptor 2 the first time it gets reflected back to the left wall. +``` + +**Example 2:** +``` +Input: p = 3, q = 1 +Output: 1 +``` ## 结语 diff --git a/leetcode/801-900/0858.Mirror-Reflection/Solution.go b/leetcode/801-900/0858.Mirror-Reflection/Solution.go index d115ccf5e..7df3f3804 100644 --- a/leetcode/801-900/0858.Mirror-Reflection/Solution.go +++ b/leetcode/801-900/0858.Mirror-Reflection/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(p, q int) int { + g := gcd858(p, q) + p /= g + q /= g + + if p&1 == 0 { + return 2 + } + if q&1 == 0 { + return 0 + } + + return 1 +} + +func gcd858(a, b int) int { + if b == 0 { + return a + } + return gcd858(b, a%b) } diff --git a/leetcode/801-900/0858.Mirror-Reflection/Solution_test.go b/leetcode/801-900/0858.Mirror-Reflection/Solution_test.go index 14ff50eb4..4357ddffd 100644 --- a/leetcode/801-900/0858.Mirror-Reflection/Solution_test.go +++ b/leetcode/801-900/0858.Mirror-Reflection/Solution_test.go @@ -10,21 +10,22 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + p, q int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 1, 1}, + {"TestCase2", 6, 2, 1}, + {"TestCase3", 4, 3, 2}, + {"TestCase4", 3, 2, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.p, c.q) 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.q) } }) } diff --git a/leetcode/801-900/0858.Mirror-Reflection/reflection.png b/leetcode/801-900/0858.Mirror-Reflection/reflection.png new file mode 100644 index 0000000000000000000000000000000000000000..0b15f47aadd4cb8c123ce58dc632ac6f75c001a5 GIT binary patch literal 37099 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 literal 0 HcmV?d00001 From 26e282334031a8fef463be161b2fe45cb1724af8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 5 Aug 2022 22:11:35 +0800 Subject: [PATCH 0068/1057] Add solution and test-cases for problem 2239 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 23 ++++++++++++-- .../Solution_test.go | 10 +++---- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md index 736ba785e..25f094e87 100755 --- a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md +++ b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/README.md @@ -1,28 +1,30 @@ # [2239.Find Closest Number to Zero][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums` of size n, return the number with the value **closest** to `0` in `nums`. If there are multiple answers, return the number with the `largest` value. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [-4,-2,1,4,8] +Output: 1 +Explanation: +The distance from -4 to 0 is |-4| = 4. +The distance from -2 to 0 is |-2| = 2. +The distance from 1 to 0 is |1| = 1. +The distance from 4 to 0 is |4| = 4. +The distance from 8 to 0 is |8| = 8. +Thus, the closest number to 0 in the array is 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Closest Number to Zero -```go ``` - +Input: nums = [2,-1,1] +Output: 1 +Explanation: 1 and -1 are both the closest numbers to 0, so 1 being larger is returned. +``` ## 结语 diff --git a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go index d115ccf5e..ca5d10324 100644 --- a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go +++ b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + absMin, ans := -1, 0 + for idx := 0; idx < len(nums); idx++ { + target := nums[idx] + if target < 0 { + target = -target + } + if absMin == -1 { + // first + absMin = target + ans = nums[idx] + continue + } + if target <= absMin { + if target < absMin || ans < nums[idx] { + ans = nums[idx] + } + absMin = target + } + } + return ans } diff --git a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go index 14ff50eb4..bd331abbd 100644 --- a/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/Solution_test.go +++ b/leetcode/2201-2300/2239.Find-Closest-Number-to-Zero/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, -2, 1, 4, 8}, 1}, + {"TestCase2", []int{2, -1, 1}, 1}, + {"TestCase3", []int{-3, -2, -1, 0, 1, 2, 3}, 0}, } // 开始测试 From 11ab0f22a5f24a6b961231191b0abcbe098289a8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 6 Aug 2022 10:54:14 +0800 Subject: [PATCH 0069/1057] Add solution and test-cases for problem 458 --- leetcode/401-500/0458.Poor-Pigs/README.md | 37 ++++++++++++------- leetcode/401-500/0458.Poor-Pigs/Solution.go | 14 ++++++- .../401-500/0458.Poor-Pigs/Solution_test.go | 18 ++++----- 3 files changed, 45 insertions(+), 24 deletions(-) diff --git a/leetcode/401-500/0458.Poor-Pigs/README.md b/leetcode/401-500/0458.Poor-Pigs/README.md index 3cc15a52b..ab35a3b86 100644 --- a/leetcode/401-500/0458.Poor-Pigs/README.md +++ b/leetcode/401-500/0458.Poor-Pigs/README.md @@ -1,28 +1,39 @@ # [458.Poor Pigs][title] -> [!WARNING|style:flat] -> 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 `buckets` buckets of liquid, where **exactly one** of the buckets is poisonous. To figure out which one is poisonous, you feed some number of (poor) pigs the liquid to see whether they will die or not. Unfortunately, you only have `minutesToTest` minutes to determine which bucket is poisonous. + +You can feed the pigs according to these steps: + +- Choose some live pigs to feed. +- For each pig, choose which buckets to feed it. The pig will consume all the chosen buckets simultaneously and will take no time. +- Wait for `minutesToDie` minutes. You may **not** feed any other pigs during this time. +- After `minutesToDie` minutes have passed, any pigs that have been fed the poisonous bucket will die, and all others will survive. +- Repeat this process until you run out of time. + +Given `buckets`, `minutesToDie`, and `minutesToTest`, return the `minimum` number of pigs needed to figure out which bucket is poisonous within the allotted time. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: buckets = 1000, minutesToDie = 15, minutesToTest = 60 +Output: 5 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Poor Pigs -```go ``` +Input: buckets = 4, minutesToDie = 15, minutesToTest = 15 +Output: 2 +``` + +**Example 3:** +``` +Input: buckets = 4, minutesToDie = 15, minutesToTest = 30 +Output: 2 +``` ## 结语 diff --git a/leetcode/401-500/0458.Poor-Pigs/Solution.go b/leetcode/401-500/0458.Poor-Pigs/Solution.go index d115ccf5e..175e80590 100644 --- a/leetcode/401-500/0458.Poor-Pigs/Solution.go +++ b/leetcode/401-500/0458.Poor-Pigs/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(buckets int, minutesToDie int, minutesToTest int) int { + base := minutesToTest / minutesToDie + return powerX(base+1, buckets) +} + +func powerX(a, n int) int { + p := 0 + base := 1 + for ; base < n; base *= a { + p++ + } + return p } diff --git a/leetcode/401-500/0458.Poor-Pigs/Solution_test.go b/leetcode/401-500/0458.Poor-Pigs/Solution_test.go index 14ff50eb4..5d293344f 100644 --- a/leetcode/401-500/0458.Poor-Pigs/Solution_test.go +++ b/leetcode/401-500/0458.Poor-Pigs/Solution_test.go @@ -9,22 +9,22 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + buckets, minutesToDie, minutesToTest int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1000, 15, 60, 5}, + {"TestCase2", 4, 15, 15, 2}, + {"TestCase3", 4, 15, 30, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.buckets, c.minutesToDie, c.minutesToTest) 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.buckets, c.minutesToDie, c.minutesToTest) } }) } From 069124a0250b57b0d1e286b4324d83d183542471 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 7 Aug 2022 16:12:52 +0800 Subject: [PATCH 0070/1057] Add solution and test-cases for problem 1220 --- .../1220.Count-Vowels-Permutation/README.md | 37 ++++++++++++------- .../1220.Count-Vowels-Permutation/Solution.go | 25 ++++++++++++- .../Solution_test.go | 12 +++--- 3 files changed, 54 insertions(+), 20 deletions(-) diff --git a/leetcode/1201-1300/1220.Count-Vowels-Permutation/README.md b/leetcode/1201-1300/1220.Count-Vowels-Permutation/README.md index b0d1a2e0c..dad9a9678 100644 --- a/leetcode/1201-1300/1220.Count-Vowels-Permutation/README.md +++ b/leetcode/1201-1300/1220.Count-Vowels-Permutation/README.md @@ -1,28 +1,39 @@ # [1220.Count Vowels 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 an integer `n`, your task is to count how many strings of length `n` can be formed under the following rules: + +- Each character is a lower case vowel (`'a'`, `'e'`, `'i'`, `'o'`, `'u'`) +- Each vowel `'a'` may only be followed by an `'e'`. +- Each vowel `'e'` may only be followed by an `'a'` or an `'i'`. +- Each vowel `'i'` **may not** be followed by another `'i'`. +- Each vowel `'o'` may only be followed by an `'i'` or a `'u'`. +- Each vowel `'u'` may only be followed by an `'a'`. + +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 +Output: 5 +Explanation: All possible strings are: "a", "e", "i" , "o" and "u". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Vowels Permutation -```go ``` +Input: n = 2 +Output: 10 +Explanation: All possible strings are: "ae", "ea", "ei", "ia", "ie", "io", "iu", "oi", "ou" and "ua". +``` + +**Example 3:** +``` +Input: n = 5 +Output: 68 +``` ## 结语 diff --git a/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution.go b/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution.go index d115ccf5e..d206a9801 100644 --- a/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution.go +++ b/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +const mod1220 = 1000000007 + +// 类似黑白房那个问题 +// 结尾两个是黑只能接白的那种感觉 dp 确定是如何结尾的 + +func Solution(n int) int { + a, e, i, o, u := 1, 1, 1, 1, 1 + + // 'a': {'e'}, + // 'e': {'a', 'i'}, + // 'i': {'a', 'e', 'o', 'u'}, + // 'o': {'i', 'u'}, + // 'u': {'a'}, + for idx := 2; idx <= n; idx++ { + // e, i, u后面可以接a + a1 := (e + i + u) % mod1220 // x + e1 := (a + i) % mod1220 // + i1 := (e + o) % mod1220 // + o1 := i % mod1220 + u1 := (i + o) % mod1220 + a, e, i, o, u = a1, e1, i1, o1, u1 + } + return (a + e + i + o + u) % mod1220 } diff --git a/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution_test.go b/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution_test.go index 14ff50eb4..007221789 100644 --- a/leetcode/1201-1300/1220.Count-Vowels-Permutation/Solution_test.go +++ b/leetcode/1201-1300/1220.Count-Vowels-Permutation/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, 5}, + {"TestCase2", 10, 1739}, + {"TestCase3", 100, 173981881}, + {"TestCase4", 1000, 89945857}, + {"TestCase5", 1798, 324384432}, } // 开始测试 From 9a0dc4411544ebffb1821ba956f665204c3565c7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 9 Aug 2022 22:43:56 +0800 Subject: [PATCH 0071/1057] Add solution and README for problem 1394 --- .../README.md | 29 ++++++++++++------- .../Solution.go | 13 +++++++++ .../Solution_test.go | 5 ++++ 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/README.md b/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/README.md index 75c0c3623..644376934 100644 --- a/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/README.md +++ b/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/README.md @@ -1,26 +1,33 @@ -# [1362.Closest Divisors][title] +# [1394.Find Lucky Integer 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 array of integers `arr`, a **lucky integer** is an integer that has a frequency in the array equal to its value. + +Return the largest **lucky integer** in the array. If there is no **lucky integer** return `-1`. **Example 1:** ``` Input: arr = [2,2,3,4] Output: 2 +Explanation: The only lucky number in the array is 2 because frequency[2] == 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 +``` +Input: arr = [1,2,2,3,3,3] +Output: 3 +Explanation: 1, 2 and 3 are all lucky numbers, return the largest of them. +``` -### 思路1 -> ... -Closest Divisors -```go +**Example 3:** + +``` +Input: arr = [2,2,2,3,3] +Output: -1 +Explanation: There are no lucky numbers in the array. ``` @@ -28,5 +35,5 @@ Closest Divisors 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] -[title]: https://leetcode.com/problems/closest-divisors/ +[title]: https://leetcode.com/problems/find-lucky-integer-in-an-array/ [me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution.go b/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution.go index baab31ac7..3e8280cd4 100644 --- a/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution.go +++ b/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution.go @@ -21,3 +21,16 @@ func Solution(arr []int) int { } return m } + +func Solution2(arr []int) int { + bucket := make([]int, 501) + for _, n := range arr { + bucket[n]++ + } + for idx := 500; idx > 0; idx-- { + if bucket[idx] == idx { + return idx + } + } + return -1 +} diff --git a/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution_test.go b/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution_test.go index dc4b20885..83bc42a1d 100644 --- a/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution_test.go +++ b/leetcode/1301-1400/1394.Find-Lucky-Number-in-an-Array/Solution_test.go @@ -29,6 +29,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } From 58761bde23ef8aa736e0674dd57eb7cf322fe303 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 13 Aug 2022 20:34:53 +0800 Subject: [PATCH 0072/1057] Add solution and test-cases for problem 1518 --- .../1501-1600/1518.Water-Bottles/README.md | 32 ++++++++++-------- .../1501-1600/1518.Water-Bottles/Solution.go | 12 +++++-- .../1518.Water-Bottles/Solution_test.go | 16 ++++----- .../1518.Water-Bottles/sample_1_1875.png | Bin 0 -> 37469 bytes .../1518.Water-Bottles/sample_2_1875.png | Bin 0 -> 59634 bytes 5 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 leetcode/1501-1600/1518.Water-Bottles/sample_1_1875.png create mode 100644 leetcode/1501-1600/1518.Water-Bottles/sample_2_1875.png diff --git a/leetcode/1501-1600/1518.Water-Bottles/README.md b/leetcode/1501-1600/1518.Water-Bottles/README.md index fa6acc0a7..617c98c12 100755 --- a/leetcode/1501-1600/1518.Water-Bottles/README.md +++ b/leetcode/1501-1600/1518.Water-Bottles/README.md @@ -1,28 +1,32 @@ # [1518.Water Bottles][title] -> [!WARNING|style:flat] -> 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 `numBottles` water bottles that are initially full of water. You can exchange `numExchange` empty water bottles from the market with one full water bottle. -**Example 1:** +The operation of drinking a full water bottle turns it into an empty bottle. + +Given the two integers `numBottles` and `numExchange`, return the **maximum** number of water bottles you can drink. + +**Example 1:** +![exp1](./sample_1_1875.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: numBottles = 9, numExchange = 3 +Output: 13 +Explanation: You can exchange 3 empty bottles to get 1 full water bottle. +Number of water bottles you can drink: 9 + 3 + 1 = 13. ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![exp2](./sample_2_1875.png) -### 思路1 -> ... -Water Bottles -```go ``` - +Input: numBottles = 15, numExchange = 4 +Output: 19 +Explanation: You can exchange 4 empty bottles to get 1 full water bottle. +Number of water bottles you can drink: 15 + 3 + 1 = 19. +``` ## 结语 diff --git a/leetcode/1501-1600/1518.Water-Bottles/Solution.go b/leetcode/1501-1600/1518.Water-Bottles/Solution.go index d115ccf5e..759454c47 100644 --- a/leetcode/1501-1600/1518.Water-Bottles/Solution.go +++ b/leetcode/1501-1600/1518.Water-Bottles/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(numBottles int, numExchange int) int { + emptyBottles := numBottles + ans := numBottles + for emptyBottles >= numExchange { + bottles := emptyBottles/numExchange + ans += bottles + emptyBottles = emptyBottles%numExchange + bottles + } + return ans } + diff --git a/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go b/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go index 14ff50eb4..992a74db4 100644 --- a/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go +++ b/leetcode/1501-1600/1518.Water-Bottles/Solution_test.go @@ -10,21 +10,21 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + numBottles, numExchange int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 3, 1}, + {"TestCase2", 9, 3, 13}, + {"TestCase3", 15, 4, 19}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.numBottles, c.numExchange) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.numBottles, c.numExchange) } }) } diff --git a/leetcode/1501-1600/1518.Water-Bottles/sample_1_1875.png b/leetcode/1501-1600/1518.Water-Bottles/sample_1_1875.png new file mode 100644 index 0000000000000000000000000000000000000000..aab02d3db089c1e0d92c140b0b185da241a725b9 GIT binary patch literal 37469 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

    upf%GA09?sDY^{muip_vrH^DROYZjYx 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 MHT5+ft6K&AFM-V{4gdfE literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1518.Water-Bottles/sample_2_1875.png b/leetcode/1501-1600/1518.Water-Bottles/sample_2_1875.png new file mode 100644 index 0000000000000000000000000000000000000000..2c9a40997f8ffdd2db45ca9fe82610561ff527a3 GIT binary patch literal 59634 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

    k`%`{5U1&#{;mONJqX2Yn- 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 Date: Mon, 15 Aug 2022 23:02:20 +0800 Subject: [PATCH 0073/1057] Add solution and test-cases for problem 2032 --- .../2001-2100/2032.Two-Out-of-Three/README.md | 34 ++++++++++++------- .../2032.Two-Out-of-Three/Solution.go | 22 ++++++++++-- .../2032.Two-Out-of-Three/Solution_test.go | 16 ++++----- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/leetcode/2001-2100/2032.Two-Out-of-Three/README.md b/leetcode/2001-2100/2032.Two-Out-of-Three/README.md index a977394d6..a005bf817 100755 --- a/leetcode/2001-2100/2032.Two-Out-of-Three/README.md +++ b/leetcode/2001-2100/2032.Two-Out-of-Three/README.md @@ -1,28 +1,36 @@ # [2032.Two Out of Three][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given three integer arrays `nums1`, `nums2`, `nums3`, return a **distinct** array containing all the values that are present in **at least two** out of the three arrays. You may return the values in `any` order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [1,1,3,2], nums2 = [2,3], nums3 = [3] +Output: [3,2] +Explanation: The values that are present in at least two arrays are: +- 3, in all three arrays. +- 2, in nums1 and nums2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Two Out of Three -```go +``` +Input: nums1 = [3,1], nums2 = [2,3], nums3 = [1,2] +Output: [2,3,1] +Explanation: The values that are present in at least two arrays are: +- 2, in nums2 and nums3. +- 3, in nums1 and nums2. +- 1, in nums1 and nums3. ``` +**Example 3:** + +``` +Input: nums1 = [1,2,2], nums2 = [4,3,3], nums3 = [5] +Output: [] +Explanation: No value is present in at least two arrays. +``` ## 结语 diff --git a/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go index d115ccf5e..9f9942a5e 100644 --- a/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go +++ b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int, nums3 []int) []int { + ans := make([]int, 0) + bucket := make([]int, 101) + for _, n := range nums1 { + bucket[n] |= 1 + } + for _, n := range nums2 { + bucket[n] |= 2 + } + for _, n := range nums3 { + bucket[n] |= 4 + } + + // 000, 001, 010, 011, 100, 101, 110,111 + for idx, n := range bucket { + if n == 3 || n == 5 || n == 6 || n == 7 { + ans = append(ans, idx) + } + } + return ans } diff --git a/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go index 14ff50eb4..5eb4ae689 100644 --- a/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go +++ b/leetcode/2001-2100/2032.Two-Out-of-Three/Solution_test.go @@ -10,21 +10,21 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2, n3 []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 3, 2}, []int{2, 3}, []int{3}, []int{2 ,3}}, + {"TestCase2", []int{3, 1}, []int{2, 3}, []int{1, 2}, []int{1, 2, 3}}, + {"TestCase3", []int{1, 2, 2}, []int{4, 3, 3}, []int{5}, []int{}}, } // 开始测试 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) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n1, c.n2, c.n3) } }) } From 420b2842b1e3fbdf70451366860ec8a4e83b2a62 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 17 Aug 2022 22:17:23 +0800 Subject: [PATCH 0074/1057] Add solution and test-cases for problem 804 --- .../0804.Unique-Morse-Code-Words/README.md | 38 ++++++++++++------- .../0804.Unique-Morse-Code-Words/Solution.go | 18 ++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0804.Unique-Morse-Code-Words/README.md b/leetcode/801-900/0804.Unique-Morse-Code-Words/README.md index 2ebfec876..38b0b53ad 100644 --- a/leetcode/801-900/0804.Unique-Morse-Code-Words/README.md +++ b/leetcode/801-900/0804.Unique-Morse-Code-Words/README.md @@ -1,28 +1,38 @@ # [804.Unique Morse Code 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 +International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows: + +- `'a'` maps to `".-"`, +- `'b'` maps to `"-..."`, +- `'c'` maps to `"-.-."`, and so on. +For convenience, the full table for the `26` letters of the English alphabet is given below: + +`[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]` +Given an array of strings `words` where each word can be written as a concatenation of the Morse code of each letter. + +- For example, `"cab"` can be written as `"-.-..--..."`, which is the concatenation of `"-.-."`, `".-"`, and `"-..."`. We will call such a concatenation the **transformation** of a word. +Return the number of different `transformations` among all words we have. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["gin","zen","gig","msg"] +Output: 2 +Explanation: The transformation of each word is: +"gin" -> "--...-." +"zen" -> "--...-." +"gig" -> "--...--." +"msg" -> "--...--." +There are 2 different transformations: "--...-." and "--...--.". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Unique Morse Code Words -```go ``` - +Input: words = ["a"] +Output: 1 +``` ## 结语 diff --git a/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution.go b/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution.go index d115ccf5e..401a1c55a 100644 --- a/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution.go +++ b/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +var byte2str = []string{".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."} + +func Solution(words []string) int { + unique := make(map[string]struct{}) + + sb := strings.Builder{} + for _, word := range words { + for _, b := range word { + sb.WriteString(byte2str[b-'a']) + } + unique[sb.String()] = struct{}{} + sb.Reset() + } + return len(unique) } diff --git a/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution_test.go b/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution_test.go index 14ff50eb4..5da4eaa2b 100644 --- a/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution_test.go +++ b/leetcode/801-900/0804.Unique-Morse-Code-Words/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"gin", "zen", "gig", "msg"}, 2}, + {"TestCase2", []string{"a"}, 1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8933a79385eb0ddee7f529dd577d219d9f7a0a59 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 22 Aug 2022 21:48:09 +0800 Subject: [PATCH 0075/1057] Add solution and test-cases for problem 342 --- leetcode/301-400/0342.Power-of-Four/README.md | 28 ++++++++++--------- .../301-400/0342.Power-of-Four/Solution.go | 15 ++++++++-- .../0342.Power-of-Four/Solution_test.go | 12 ++++---- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/leetcode/301-400/0342.Power-of-Four/README.md b/leetcode/301-400/0342.Power-of-Four/README.md index caf864565..f3c5f7d84 100644 --- a/leetcode/301-400/0342.Power-of-Four/README.md +++ b/leetcode/301-400/0342.Power-of-Four/README.md @@ -1,28 +1,30 @@ # [342.Power of Four][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `n`, return `true` if it is a power of four. Otherwise, return `false`. + +An integer `n` is a power of four, if there exists an integer `x` such that `n == 4^x`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 16 +Output: true ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Power of Four -```go +``` +Input: n = 5 +Output: false ``` +**Example 3:** + +``` +Input: n = 1 +Output: true +``` ## 结语 diff --git a/leetcode/301-400/0342.Power-of-Four/Solution.go b/leetcode/301-400/0342.Power-of-Four/Solution.go index d115ccf5e..7cf92e009 100644 --- a/leetcode/301-400/0342.Power-of-Four/Solution.go +++ b/leetcode/301-400/0342.Power-of-Four/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) bool { + if n < 1 { + return false + } + // 4^2 == 2^4 4^n=2^(2n) + // 所以需要先判断是否是2的幂次,然后判断这个幂次是不是偶数 + // 0101(8组, int 32) 55555555 + x := 0x55555555 + powerOf2 := n&(n-1) == 0 + if !powerOf2 { + return false + } + return n&x != 0 } diff --git a/leetcode/301-400/0342.Power-of-Four/Solution_test.go b/leetcode/301-400/0342.Power-of-Four/Solution_test.go index 14ff50eb4..32d8bfedc 100644 --- a/leetcode/301-400/0342.Power-of-Four/Solution_test.go +++ b/leetcode/301-400/0342.Power-of-Four/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", 16, true}, + {"TestCase2", 8, false}, + {"TestCase3", -1, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8c35c5328971310b8e6e2d1994b10b11e8838168 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 24 Aug 2022 21:33:52 +0800 Subject: [PATCH 0076/1057] Add solution and test-cases for problem 326 --- .../301-400/0326.Power-of-Three/README.md | 28 ++++++++++--------- .../301-400/0326.Power-of-Three/Solution.go | 6 ++-- .../0326.Power-of-Three/Solution_test.go | 13 +++++---- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/leetcode/301-400/0326.Power-of-Three/README.md b/leetcode/301-400/0326.Power-of-Three/README.md index 4be5994d2..14baf51e9 100644 --- a/leetcode/301-400/0326.Power-of-Three/README.md +++ b/leetcode/301-400/0326.Power-of-Three/README.md @@ -1,28 +1,30 @@ # [326.Power of Three][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `n`, return `true` if it is a power of three. Otherwise, return `false`. + +An integer `n` is a power of three, if there exists an integer `x` such that `n == 3^x`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 27 +Output: true ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Power of Three -```go +``` +Input: n = 0 +Output: false ``` +**Example 3:** + +``` +Input: n = 9 +Output: true +``` ## 结语 diff --git a/leetcode/301-400/0326.Power-of-Three/Solution.go b/leetcode/301-400/0326.Power-of-Three/Solution.go index d115ccf5e..a9d3b67c7 100644 --- a/leetcode/301-400/0326.Power-of-Three/Solution.go +++ b/leetcode/301-400/0326.Power-of-Three/Solution.go @@ -1,5 +1,7 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) bool { + // n = 3^x ==> x= log3 n ==> log(n)/log(3) + // 看到另一个解法,找到int32范围最大幂次,然后确实mod + return n > 0 && 1162261467%n == 0 } diff --git a/leetcode/301-400/0326.Power-of-Three/Solution_test.go b/leetcode/301-400/0326.Power-of-Three/Solution_test.go index 14ff50eb4..d82de652d 100644 --- a/leetcode/301-400/0326.Power-of-Three/Solution_test.go +++ b/leetcode/301-400/0326.Power-of-Three/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", 3, true}, + {"TestCase3", 27, true}, + {"TestCase4", 18, false}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9f7c5f7d0d77f58975b702ded26b23c32148b36f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 27 Aug 2022 16:19:36 +0800 Subject: [PATCH 0077/1057] Add solution and test-cases for problem 1758 --- .../README.md | 33 +++++++------ .../Solution.go | 46 ++++++++++++++++++- .../Solution_test.go | 21 ++++++--- 3 files changed, 78 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md index 0063894b6..8818a9df7 100755 --- a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/README.md @@ -1,28 +1,35 @@ # [1758.Minimum Changes To Make Alternating 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 +You are given a string `s` consisting only of the characters `'0'` and `'1'`. In one operation, you can change any `'0'` to `'1'` or vice versa. + +The string is called alternating if no two adjacent characters are equal. For example, the string `"010"` is alternating, while the string `"0100"` is not. + +Return the **minimum** number of operations needed to make `s` alternating. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "0100" +Output: 1 +Explanation: If you change the last character to '1', s will be "0101", which is alternating. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Changes To Make Alternating Binary String -```go ``` +Input: s = "10" +Output: 0 +Explanation: s is already alternating. +``` + +**Example 3:** +``` +Input: s = "1111" +Output: 2 +Explanation: You need two operations to reach "0101" or "1010". +``` ## 结语 diff --git a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go index d115ccf5e..365312fb7 100644 --- a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + pz, po := 0, 0 + if s[0] == '1' { + pz = 1 + } else { + po = 1 + } + for idx := 1; idx < len(s); idx++ { + if s[idx] == '1' { + pre := po + po = pz + pz = pre + 1 + continue + } + pre := pz + pz = po + po = pre + 1 + } + if pz > po { + return po + } + return pz +} + +func Solution2(s string) int { + case1, b1 := 0, uint8(0) // 0101..... + case2, b2 := 0, uint8(1) // 1010 + for _, is := range s { + if uint8(is-'0') != b1 { + case1++ + } + b1 = 1 - b1 + } + for _, is := range s { + if uint8(is-'0') != b2 { + case2++ + } + b2 = 1 - b2 + } + if case1 > case2 { + return case2 + } + return case1 + } diff --git a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go index 14ff50eb4..2bec072c7 100644 --- a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-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", "1", 0}, + {"TestCase2", "0111110101010101010101111", 4}, + {"TestCase3", "1010", 0}, + {"TestCase4", "1111", 2}, } // 开始测试 @@ -26,14 +27,20 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + + got = Solution2(c.inputs) + if !reflect.DeepEqual(got, 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 d320145ba44f1ab9bf464d8153cb34c1f6d8f89a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 27 Aug 2022 22:04:48 +0800 Subject: [PATCH 0078/1057] Add solution and test-cases for problem 1736 --- .../README.md | 31 ++++++++++-------- .../Solution.go | 32 +++++++++++++++++-- .../Solution_test.go | 15 +++++---- .../Solution_test.go | 4 +-- 4 files changed, 58 insertions(+), 24 deletions(-) diff --git a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md index 0dd7c6010..9e3193a9c 100755 --- a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md +++ b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/README.md @@ -1,28 +1,33 @@ # [1736.Latest Time by Replacing Hidden Digits][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a string `time` in the form of `hh:mm`, where some of the digits in the string are hidden (represented by `?`). + +The valid times are those inclusively between `00:00` and `23:59`. + +Return the latest valid time you can get from `time` by replacing the hidden digits. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: time = "2?:?0" +Output: "23:50" +Explanation: The latest hour beginning with the digit '2' is 23 and the latest minute ending with the digit '0' is 50. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Latest Time by Replacing Hidden Digits -```go ``` +Input: time = "0?:3?" +Output: "09:39" +``` + +**Example 3:** +``` +Input: time = "1?:22" +Output: "19:22" +``` ## 结语 diff --git a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go index d115ccf5e..4b8f98133 100644 --- a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go +++ b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(time string) string { + questionMark := uint8(63) + var h1, h2, m1, m2 byte + _, _ = fmt.Sscanf(time, "%c%c:%c%c", &h1, &h2, &m1, &m2) + if m1 == questionMark { + m1 = '5' + } + if m2 == questionMark { + m2 = '9' + } + + if h2 == questionMark { + // ?? -> 23 + // 0?, 1? -> 09, 19 + h2 = '3' + if h1 == questionMark { + h1 = '2' + } + if h1 < '2' { + h2 = '9' + } + } else if h1 == questionMark { + h1 = '1' + if h2 <= '3' { + h1 = '2' + } + } + return fmt.Sprintf("%c%c:%c%c", h1, h2, m1, m2) } diff --git a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go index 14ff50eb4..5c98cc3ac 100644 --- a/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go +++ b/leetcode/1701-1800/1736.Latest-Time-by-Replacing-Hidden-Digits/Solution_test.go @@ -10,12 +10,13 @@ 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", "??:??", "23:59"}, + {"TestCase2", "?0:15", "20:15"}, + {"TestCase3", "1?:??", "19:59"}, + {"TestCase4", "2?:3?", "23:39"}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go index 14ff50eb4..499883f0b 100644 --- a/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go +++ b/leetcode/1701-1800/1758.Minimum-Changes-To-Make-Alternating-Binary-String/Solution_test.go @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 31384832147a8c5ec7f621d33995325a8b1a2d17 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 28 Aug 2022 11:31:35 +0800 Subject: [PATCH 0079/1057] Add solution and test-cases for problem 1329 --- .../1482_example_1_2.png | Bin 0 -> 9403 bytes .../1329.Sort-the-Matrix-Diagonally/README.md | 26 ++++++-------- .../Solution.go | 24 +++++++++++-- .../Solution_test.go | 34 ++++++++++++++---- 4 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/1482_example_1_2.png diff --git a/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/1482_example_1_2.png b/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/1482_example_1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..804acb098961c08c696898831c13a3ff1d2b1c4a GIT binary patch literal 9403 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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 +A **matrix diagonal** is a diagonal line of cells starting from some cell in either the topmost row or leftmost column and going in the bottom-right direction until reaching the matrix's end. For example, the **matrix diagonal** starting from `mat[2][0]`, where `mat` is a `6 x 3` matrix, includes cells `mat[2][0]`, `mat[3][1]`, and `mat[4][2]`. + +Given an `m x n` matrix `mat` of integers, sort each **matrix diagonal** in ascending order and return the resulting matrix. -**Example 1:** +**Example 1:** +![pic1](1482_example_1_2.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]] +Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sort the Matrix Diagonally -```go ``` - +Input: mat = [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]] +Output: [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]] +``` ## 结语 diff --git a/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution.go b/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution.go index d115ccf5e..2917fa551 100644 --- a/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution.go +++ b/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(mat [][]int) [][]int { + rows, cols := len(mat), len(mat[0]) + x, y := 0, 0 + for ; y < cols-1; y++ { + sort1329(mat, x, y, rows, cols) + } + y = 0 + for ; x < rows-1; x++ { + sort1329(mat, x, y, rows, cols) + } + return mat +} + +func sort1329(mat [][]int, x, y, rows, cols int) { + for cmpTimes := 0; cmpTimes < rows-x-1; cmpTimes++ { + for x1, y1 := x, y; x1 < rows-1 && y1 < cols-1; x1, y1 = x1+1, y1+1 { + nx, ny := x1+1, y1+1 + if mat[x1][y1] > mat[nx][ny] { + mat[nx][ny], mat[x1][y1] = mat[x1][y1], mat[nx][ny] + } + } + } } diff --git a/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution_test.go b/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution_test.go index 14ff50eb4..373a4d520 100644 --- a/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution_test.go +++ b/leetcode/1301-1400/1329.Sort-the-Matrix-Diagonally/Solution_test.go @@ -10,12 +10,32 @@ 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, 3, 1, 1}, + {2, 2, 1, 2}, + {1, 1, 1, 2}, + }, [][]int{ + {1, 1, 1, 1}, + {1, 2, 2, 2}, + {1, 2, 3, 3}, + }}, + {"TestCase2", [][]int{ + {11, 25, 66, 1, 69, 7}, + {23, 55, 17, 45, 15, 52}, + {75, 31, 36, 44, 58, 8}, + {22, 27, 33, 25, 68, 4}, + {84, 28, 14, 11, 5, 50}, + }, [][]int{ + {5, 17, 4, 1, 52, 7}, + {11, 11, 25, 45, 8, 69}, + {14, 23, 25, 44, 58, 15}, + {22, 27, 31, 36, 50, 66}, + {84, 28, 75, 33, 55, 68}, + }}, + {"TestCase3", [][]int{{1}}, [][]int{{1}}}, } // 开始测试 @@ -30,10 +50,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 54c9aa35567e745d1a1b3a4e1bc5b7cc6effcd7f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 29 Aug 2022 21:45:48 +0800 Subject: [PATCH 0080/1057] Add solution and test-cases for problem 200 --- .../101-200/0200.Number-of-Islands/README.md | 37 +++++++++++++++++++ .../0200.Number-of-Islands/Solution.go | 33 +++++++++++++++++ .../0200.Number-of-Islands/Solution_test.go | 24 ++++++++---- .../201-300/0200.Number-of-Islands/README.md | 32 ---------------- .../0200.Number-of-Islands/Solution.go | 5 --- 5 files changed, 87 insertions(+), 44 deletions(-) create mode 100644 leetcode/101-200/0200.Number-of-Islands/README.md create mode 100644 leetcode/101-200/0200.Number-of-Islands/Solution.go rename leetcode/{201-300 => 101-200}/0200.Number-of-Islands/Solution_test.go (55%) delete mode 100644 leetcode/201-300/0200.Number-of-Islands/README.md delete mode 100644 leetcode/201-300/0200.Number-of-Islands/Solution.go diff --git a/leetcode/101-200/0200.Number-of-Islands/README.md b/leetcode/101-200/0200.Number-of-Islands/README.md new file mode 100644 index 000000000..7dff27efb --- /dev/null +++ b/leetcode/101-200/0200.Number-of-Islands/README.md @@ -0,0 +1,37 @@ +# [200.Number of Islands][title] + +## Description +Given an `m x n` 2D binary grid `grid` which represents a map of `'1'`s (land) and `'0'`s (water), return the number of islands. + +An **island** is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water. + +**Example 1:** + +``` +Input: grid = [ + ["1","1","1","1","0"], + ["1","1","0","1","0"], + ["1","1","0","0","0"], + ["0","0","0","0","0"] +] +Output: 1 +``` + +**Example 2:** + +``` +Input: grid = [ + ["1","1","0","0","0"], + ["1","1","0","0","0"], + ["0","0","1","0","0"], + ["0","0","0","1","1"] +] +Output: 3 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-islands/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0200.Number-of-Islands/Solution.go b/leetcode/101-200/0200.Number-of-Islands/Solution.go new file mode 100644 index 000000000..24b169ef5 --- /dev/null +++ b/leetcode/101-200/0200.Number-of-Islands/Solution.go @@ -0,0 +1,33 @@ +package Solution + +var dirs = [4][2]int{ + {1, 0}, + {-1, 0}, + {0, 1}, + {0, -1}, +} + +func Solution(grid [][]byte) int { + ans := 0 + rows, cols := len(grid), len(grid[0]) + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + if grid[row][col] == '1' { + ans++ + dfs200(grid, row, col, rows, cols) + } + } + } + return ans +} + +func dfs200(grid [][]byte, x, y, rows, cols int) { + if x < 0 || x >= rows || y < 0 || y >= cols || grid[x][y] == '0' { + return + } + grid[x][y] = '0' + for _, dir := range dirs { + nx, ny := x+dir[0], y+dir[1] + dfs200(grid, nx, ny, rows, cols) + } +} diff --git a/leetcode/201-300/0200.Number-of-Islands/Solution_test.go b/leetcode/101-200/0200.Number-of-Islands/Solution_test.go similarity index 55% rename from leetcode/201-300/0200.Number-of-Islands/Solution_test.go rename to leetcode/101-200/0200.Number-of-Islands/Solution_test.go index 14ff50eb4..f58bf5010 100644 --- a/leetcode/201-300/0200.Number-of-Islands/Solution_test.go +++ b/leetcode/101-200/0200.Number-of-Islands/Solution_test.go @@ -10,12 +10,22 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]byte + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]byte{ + {'1', '1', '1', '1', '0'}, + {'1', '1', '0', '1', '0'}, + {'1', '1', '0', '0', '0'}, + {'0', '0', '0', '0', '0'}, + }, 1}, + {"TestCase2", [][]byte{ + {'1', '1', '0', '0', '0'}, + {'1', '1', '0', '0', '0'}, + {'0', '0', '1', '0', '0'}, + {'0', '0', '0', '1', '1'}, + }, 3}, + {"TestCase3", [][]byte{{'1'}}, 1}, } // 开始测试 @@ -30,10 +40,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/201-300/0200.Number-of-Islands/README.md b/leetcode/201-300/0200.Number-of-Islands/README.md deleted file mode 100644 index c2816c0d1..000000000 --- a/leetcode/201-300/0200.Number-of-Islands/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# [200.Number of Islands][title] - -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - -## Description - -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` - -## 题意 -> ... - -## 题解 - -### 思路1 -> ... -Number of Islands -```go -``` - - -## 结语 - -如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] - -[title]: https://leetcode.com/problems/number-of-islands/ -[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/201-300/0200.Number-of-Islands/Solution.go b/leetcode/201-300/0200.Number-of-Islands/Solution.go deleted file mode 100644 index d115ccf5e..000000000 --- a/leetcode/201-300/0200.Number-of-Islands/Solution.go +++ /dev/null @@ -1,5 +0,0 @@ -package Solution - -func Solution(x bool) bool { - return x -} From 9e013f87401b3c1731b5e135ebc905a7b6ebab6c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 1 Sep 2022 22:06:00 +0800 Subject: [PATCH 0081/1057] Add solution and test-cases for problem 1448 --- .../README.md | 43 +++++++++++ .../Solution.go | 25 ++++++ .../Solution_test.go | 71 ++++++++++++++++++ .../test_sample_1.png | Bin 0 -> 7593 bytes .../test_sample_2.png | Bin 0 -> 4716 bytes 5 files changed, 139 insertions(+) create mode 100644 leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/README.md create mode 100644 leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution.go create mode 100644 leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution_test.go create mode 100644 leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/test_sample_1.png create mode 100644 leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/test_sample_2.png diff --git a/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/README.md b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/README.md new file mode 100644 index 000000000..e3bf2c543 --- /dev/null +++ b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/README.md @@ -0,0 +1,43 @@ +# [1448.Count Good Nodes in Binary Tree][title] + +## Description +Given a binary tree `root`, a node X in the tree is named **good** if in the path from root to X there are no nodes with a value greater than X. + +Return the number of **good** nodes in the binary tree. + +**Example 1:** +![test1](./test_sample_1.png) + +``` +Input: root = [3,1,4,3,null,1,5] +Output: 4 +Explanation: Nodes in blue are good. +Root Node (3) is always a good node. +Node 4 -> (3,4) is the maximum value in the path starting from the root. +Node 5 -> (3,4,5) is the maximum value in the path +Node 3 -> (3,1,3) is the maximum value in the path. +``` + +**Example 2:** +![test2](./test_sample_2.png) + +``` +Input: root = [3,3,null,4,2] +Output: 3 +Explanation: Node 2 -> (3, 3, 2) is not good, because "3" is higher than it. +``` + +**Example 3:** + +``` +Input: root = [1] +Output: 1 +Explanation: Root is considered as good. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-good-nodes-in-binary-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution.go b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution.go new file mode 100644 index 000000000..328fb3816 --- /dev/null +++ b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution.go @@ -0,0 +1,25 @@ +package Solution + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode) int { + ans := 0 + goodNodesDfs(root, &ans, root.Val) + return ans +} + +func goodNodesDfs(root *TreeNode, ans *int, cmp int) { + if root == nil { + return + } + if root.Val >= cmp { + *ans++ + cmp = root.Val + } + goodNodesDfs(root.Left, ans, cmp) + goodNodesDfs(root.Right, ans, cmp) +} diff --git a/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution_test.go b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution_test.go new file mode 100644 index 000000000..934e97b40 --- /dev/null +++ b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/Solution_test.go @@ -0,0 +1,71 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *TreeNode + expect int + }{ + {"TestCase1", &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 3}, + }, + Right: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 5}, + }, + }, 4}, + {"TestCase2", &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 2}, + }, + }, 3}, + {"TestCase3", &TreeNode{Val: 1}, 1}, + {"TestCase4", &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 4}, + }, + }, 2}, + {"TestCase5", &TreeNode{ + Val: 9, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + }, + }, 1}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/test_sample_1.png b/leetcode/1401-1500/1448.Count-Good-Nodes-in-Binary-Tree/test_sample_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1108150d69ce124565048fc86ea6c0a215632c22 GIT binary patch literal 7593 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

    vuYL_jjj$23Ba5kOn1SB zswpj>?J9hV-t|da%Hx(TmiD+tziSqcjN~`z8bwB)93Rqbqk%*7htAU7Rd1eSXkA?# zKL0Ac0NY}xN3G8w8_7eP-36*)dX}UL!w4vw4t}3plxGtykrmsVtvi-VYK>;6w7-<7 zHJig&e8>;Fx#0Ib&>V7~cs6*$*=A?|sp@$TD-=YqFgfT{uLhf}oavl>L1`T|nJz!? z7&6Yi~5S9m%p{X4AO+piwC zFny=Jx3{-4Ies}lS+0Yu-8nNO^Z45wl$jIvB!p&TM!J4SHS9c?tP7*+*WJiLA`R9P z_S*LWAxcV070!*Z5*EoVtKPs+ar%`)Z3VJi_coV9C-X8gFK>3z{6fs$jv%9iw?enZDU=vcHaM7cV%Ooc+ zK?PBO?eH|g2PdLXitk^KkB{4CX^M!77JLlSNu0DuCahXyrebIRgyvpAF?i$GLPvte zHA~bmS*&?bsS2ELe!uq#u)eMpav%KmU{S%y$Vfd^-Y+)0qP*Nd)ZN{^xSxMH{GmP) zuBt5?Ef$etT4<+c8_ntgL>kK*@Q`%I0SqSBtNsM@eeG}bV2)>wwjmH~>+0)8G2*D2 znlzLV42WJ+go2S}J!(Wzi&U&MFZbYZI*a|fxVWetFkM{Y_NzWk6wXRdB+qK3V&go|f-na1;23O1uA!h9L><~z zn>eZJRzEdwBq2G0M?6mlKfep4Wi57UUCid!cDxt#)*-Z!NDso5rdIPoS2Z;iPjk5y z9z4BX8?V_Fo^%NaWMi(sVdoY=OEIJ8pws@9@T~;JC1LY`ne2B=Q&Uqu7>UkoJ2l0y zxONI9C@f4DhiYiJqE}Enf@6v_CEZ=Itdjws{Ak(f^aj!z9|372u{9UzH$oBcSc|w? z89dJA@)J0FsDp#UtD6EX2BKC$&KE?>0=2cYZbMqj@2A$sie%7#j-2sg6_}12z>pvs2 zvwU8OKY7UVA!sjMOVV`$F`_XtsAXx{pFoaPbJ)V j-~X(>2<@-eM=}zspGh5(KVazl>Eu2KI1e;ii& literal 0 HcmV?d00001 From fd2770850eb9122f63417144909480b8b7205274 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 Sep 2022 15:51:29 +0800 Subject: [PATCH 0082/1057] Add solution and test-cases for problem 967 --- .../README.md | 26 +++++++--------- .../Solution.go | 31 +++++++++++++++++-- .../Solution_test.go | 20 ++++++------ 3 files changed, 51 insertions(+), 26 deletions(-) diff --git a/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/README.md b/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/README.md index 36d7ac3fc..9d6978d1c 100644 --- a/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/README.md +++ b/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/README.md @@ -1,28 +1,26 @@ # [967.Numbers With Same Consecutive Differences][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Return all **non-negative** integers of length `n` such that the absolute difference between every two consecutive digits is `k`. + +Note that **every** number in the answer **must not** have leading zeros. For example, `01` has one leading zero and is invalid. + +You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, k = 7 +Output: [181,292,707,818,929] +Explanation: Note that 070 is not a valid number, because it has leading zeroes. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Numbers With Same Consecutive Differences -```go ``` - +Input: n = 2, k = 1 +Output: [10,12,21,23,32,34,43,45,54,56,65,67,76,78,87,89,98] +``` ## 结语 diff --git a/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution.go b/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution.go index d115ccf5e..4aa2c6c2d 100644 --- a/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution.go +++ b/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(n int, k int) []int { + + ans := make([]int, 0) + bs := make([]byte, n) + for idx := 1; idx <= 9; idx++ { + ans = append(ans, helper967(0, idx, k, n, bs)...) + } + return ans +} + +func helper967(deep, now, k, n int, bs []byte) []int { + + ans := make([]int, 0) + bs[deep] = uint8(now) + '0' + if deep == n-1 { + var num int + fmt.Sscanf(string(bs), "%d", &num) + return []int{num} + } + if r := now - k; r >= 0 && r <= 9 { + ans = append(ans, helper967(deep+1, r, k, n, bs)...) + } + if r := now + k; r >= 0 && r <= 9 && k != 0 { + ans = append(ans, helper967(deep+1, r, k, n, bs)...) + } + + return ans } diff --git a/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution_test.go b/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution_test.go index 14ff50eb4..063066df3 100644 --- a/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/Solution_test.go +++ b/leetcode/901-1000/0967.Numbers-With-Same-Consecutive-Differences/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, 7, []int{181, 292, 707, 818, 929}}, + {"TestCase2", 2, 1, []int{10, 12, 21, 23, 32, 34, 43, 45, 54, 56, 65, 67, 76, 78, 87, 89, 98}}, + {"TestCase3", 5, 0, []int{11111, 22222, 33333, 44444, 55555, 66666, 77777, 88888, 99999}}, } // 开始测试 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 ba968c880bf08239a205b49f61aaec3565588fa9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 4 Sep 2022 10:56:41 +0800 Subject: [PATCH 0083/1057] Add solution and test-cases for problem 987 --- .../README.md | 53 ++++++++---- .../Solution.go | 79 +++++++++++++++++- .../Solution_test.go | 63 ++++++++++++-- .../vtree1.jpg | Bin 0 -> 16312 bytes .../vtree2.jpg | Bin 0 -> 21804 bytes .../vtree3.jpg | Bin 0 -> 21805 bytes 6 files changed, 173 insertions(+), 22 deletions(-) create mode 100644 leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree1.jpg create mode 100644 leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree2.jpg create mode 100644 leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree3.jpg diff --git a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/README.md b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/README.md index a8c101679..16ff5e329 100644 --- a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/README.md +++ b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/README.md @@ -1,28 +1,53 @@ # [987.Vertical Order Traversal of a 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, calculate the **vertical order traversal** of the binary tree. + +For each node at position `(row, col)`, its left and right children will be at positions `(row + 1, col - 1)` and `(row + 1, col + 1)` respectively. The root of the tree is at `(0, 0)`. + +The **vertical order traversal** of a binary tree is a list of top-to-bottom orderings for each column index starting from the leftmost column and ending on the rightmost column. There may be multiple nodes in the same row and same column. In such a case, sort these nodes by their values. -**Example 1:** +Return the **vertical order traversal** of the binary tree. + +**Example 1:** +![exp1](vtree1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [3,9,20,null,null,15,7] +Output: [[9],[3,15],[20],[7]] +Explanation: +Column -1: Only node 9 is in this column. +Column 0: Nodes 3 and 15 are in this column in that order from top to bottom. +Column 1: Only node 20 is in this column. +Column 2: Only node 7 is in this column. ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![exp2](vtree2.jpg) -### 思路1 -> ... -Vertical Order Traversal of a Binary Tree -```go ``` +Input: root = [1,2,3,4,5,6,7] +Output: [[4],[2],[1,5,6],[3],[7]] +Explanation: +Column -2: Only node 4 is in this column. +Column -1: Only node 2 is in this column. +Column 0: Nodes 1, 5, and 6 are in this column. + 1 is at the top, so it comes first. + 5 and 6 are at the same position (2, 0), so we order them by their value, 5 before 6. +Column 1: Only node 3 is in this column. +Column 2: Only node 7 is in this column. +``` + +**Example 3:** +![exp3](vtree3.jpg) +``` +Input: root = [1,2,3,4,6,5,7] +Output: [[4],[2],[1,5,6],[3],[7]] +Explanation: +This case is the exact same as example 2, but with nodes 5 and 6 swapped. +Note that the solution remains the same since 5 and 6 are in the same location and should be ordered by their values. +``` ## 结语 diff --git a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution.go b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution.go index d115ccf5e..4798b9f60 100644 --- a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution.go +++ b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution.go @@ -1,5 +1,82 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +const base = 1000 + +type nodePointer struct { + Val int + Row int +} + +type nodePointerList []nodePointer + +func (npl *nodePointerList) Len() int { + return len(*npl) +} + +func (npl *nodePointerList) Less(i, j int) bool { + if (*npl)[i].Row == (*npl)[j].Row { + return (*npl)[i].Val < (*npl)[j].Val + } + return (*npl)[i].Row < (*npl)[j].Row +} + +func (npl *nodePointerList) Swap(i, j int) { + (*npl)[i], (*npl)[j] = (*npl)[j], (*npl)[i] +} + +func (npl *nodePointerList) Push(x interface{}) { + *npl = append(*npl, x.(nodePointer)) +} + +func (npl *nodePointerList) Pop() interface{} { + old := *npl + n := len(old) + x := old[n-1] + *npl = old[:n-1] return x } + +func Solution(root *TreeNode) [][]int { + ans := make([][]int, 0) + + if root == nil { + return ans + } + columns := make([]*nodePointerList, base*2+1) + for idx := 0; idx < base*2+1; idx++ { + columns[idx] = &nodePointerList{} + } + var inOrder func(*TreeNode, int, int) + inOrder = func(root *TreeNode, row int, col int) { + if root.Left != nil { + inOrder(root.Left, row+1, col-1) + } + + heap.Push(columns[col+base], nodePointer{Val: root.Val, Row: row}) + if root.Right != nil { + inOrder(root.Right, row+1, col+1) + } + } + + inOrder(root, 0, 0) + for idx := 0; idx < base*2+1; idx++ { + if columns[idx].Len() == 0 { + continue + } + xs := make([]int, 0) + for columns[idx].Len() > 0 { + x := heap.Pop(columns[idx]).(nodePointer) + xs = append(xs, x.Val) + } + ans = append(ans, xs) + } + return ans +} diff --git a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution_test.go b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution_test.go index 14ff50eb4..8b95c6875 100644 --- a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution_test.go +++ b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/Solution_test.go @@ -10,12 +10,61 @@ 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, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 6}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 5}, + Right: &TreeNode{Val: 7}, + }, + }, [][]int{ + {4}, + {2}, + {1, 5, 6}, + {3}, + {7}, + }}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 5}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 7}, + }, + }, [][]int{ + {4}, + {2}, + {1, 5, 6}, + {3}, + {7}, + }}, + {"TestCase3", &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 9}, + Right: &TreeNode{ + Val: 20, + Left: &TreeNode{Val: 15}, + Right: &TreeNode{Val: 7}, + }, + }, [][]int{ + {9}, + {3, 15}, + {20}, + {7}, + }}, } // 开始测试 @@ -30,10 +79,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree1.jpg b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56f652a074ec4041b3270197c126212c96165519 GIT binary patch literal 16312 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 K1{HMw9{oQhCa$mm literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree3.jpg b/leetcode/901-1000/0987.Vertical-Order-Traversal-of-a-Binary-Tree/vtree3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fca758d4d58187e9304713a489cd3f717f56f53b GIT binary patch literal 21805 zcmd?RbyOQ)yEYuGNK26-Elz=Ag%&6j*HTFE;K7QO;_g(EfF(SpNvX|7mzQ4{)(DvGD);7)%Vnz{1AB!o2_L2M@6E2>}?GSlEF3ElBW4 z8K3ZwJ(p6$=QSp0k`ADtHK4o?ajLsBPcdL5FBBK)&6JI{|M&Ru`4J~I^_qeR; z@%ui>{yI7T+WuNg@}Jkv0v_ET8YT%A2|xmHtBzoo{F_lsWN&XPm+82_C5{@}OI%|) zfAECST%}Ky242yR;W**<6}Y;izmY$bZJ#u|YCh&=L1X=LPN;zVnsl_nk81HLDWzjd z<|WgQpw=~VIE)Aoy*8RkWpZIBb!&%CZa<5kO(NcHj5(TiOneA97;F}zjZTtdX8ugx zBkC43i=}T}R6I}~T0GYC-g800#`*f;q`H7OKjGRRz+@FYS}*U~u}#A2+P|2nQ!VpQ zVawh?e6gjyI{BDplio9T0 z$C`^G{;`tR4uREr%x!2QH5Tq{CSI z_T@F-l)N2#t2SAZQ63&>F`d0~+0D**W~dkb^YHn^8|S^@4RhZDHU|#|5;UP3=+O(= zB-5wa1N`;3E{dL>kCyF_ataEreY^x36>tPT>t}dANDYG>5J$`jLNzIE7C+%7ue97{ zi?=+-rZjDTXR+R=CwZX%vd6ZEbXuYt{AB6!z*=T%im%G6ZMvqBL% zwScMr6aM8B4z?5OjZF-i%je}yFJ!ElQNEJ9I~_{BjV&ocQ9O*6>)l)D7~1y#~KqPb5F4{q2K|YbLGlzTB^1c0lu} z*S3aiQKB0Tzohf|_S-?d1EMHN z36QG=Ns7JoC)#8S%e?b$zWDN~Y({|4^LhSI)m_&-Pc}534sLY6e<}`+#UM}e>D_ra z1nq}F(K^PX)hGrcxzaT;Z1dc+-7|q3!9VJl5i)7u3_e%k{p9f3fjlvh%HsT8Q?@#h z0HZ+7RxiE>)a}V$Ax76xzAT3uo+El3W+R@>Om}Wtn=>A}-($~O zO`~Z~V50yR;C{_q^ZaE_%rTKb$(rEoXLhjsIX1CW5k+4+S2CyJTK(D4EagMys)1^W zxio3;G048*rpKM(IuL`r>koiPzkfZ+CAf5f&3aOw zeR5PPu1NyHiL3GnaKw6|L@$dGXVftr(W&TNR~&*pUEop_5dk)_zp7^`g&0)VQG{94 znYM=i0m}XpAC-vDStiq|Xbf;I2FQFLBaV;r9U@NMi(MOCd;ASBN> zY-0L8D%g<2(lwc?ErCq6xzJ)uu-*4zEfIHpMSEonofr5e+&g`C;Nyo5$llsH;!#xO zv#(ts$VeQQf_mten;%g=RK=E3{HGtr>fHKAX6xr*C;4^tyh8H01FyM$a`n(k7>Z1e zN(`FhgMM*QRex>xcv@qxZ9nTS1bbFF3%T%DqR7J+Lkk4Wm7Lb^b3*P6rS(+o2l^H^ z$q;P+--DdPHRBy^-u%_xU))DA#=n>H3K5&|fLFv@JKkk#( zmt-NhW@m-x`I5zOT4WsSb4^}X$+p(FLU}oZS!{YOxdlo_$%H@wxPch-c@Hv@m#_{a z%03HX8PVb1MQ*q3KnJ$`F}{x%Dd(p)tYLA6THJn}d(&%i=4cxHcx4f>?S8W{oZnOP z?Qt6j901N;&U;sqG~ZPDn|9-MuZ0ZLjADUz7`9(Zrsk+{6ROyfF11o|9#J%})Z{k6 z#1)uJU)N6;VV23%|JBjhj7Tg`d$vN1dmFJumv+Eqz=*FnK>i)BjDL19CFG_;pIfvF zrv#%*`?Cgd%eZ>X5B$w?M)$)n}#u0H)>fGb$|A z?=Ys)L3%hw4~FKeRui-)wtB19v1itM+_z_AS<5+8{{S%I5|FJDbgE#dQIx;Ua%4AF z!=%9#n;gC0N;BJA;Vbija7@mzjXtY4p9b?c(majvZ1HLCam4`u5To)LM|oy(1%Hf= zh4qY%FG-}_NzPMIfr5zK{W~~bBACD;-g6^hy>0)rnEcjwJY9D<_m<&#OFlm)obnc@ zMtQ%)QR-KPHw@X``Mw8!X?baBqi{Y+S3fz4y``Kt29vg6j!uqNZr7I8M*s%eM1LW5y z>sAAX*8$bKAHFXzRXS1|x(6DWEZAtrKY2mZ+rR$!zG{n&W=IhL0oj3g*d$Wve-roq z-OV`v?!V^2_PoyHz*Y+zgK*ai1s`Q<b3m54IS6 z@HpdpCW*uU3CTyufrX|5dEU8JfZ_CAESx~;QL?zlcuX+a_uq#I6J5j-_0R2M$_JV( zcgBPGgxidB>)c$^hh33OGwfIcMNzm|o3Mvk=Kf^xVwQ*UU=2ZrC@He1G*3i2-RzjG zhYl2W^#;EkwVQQ(f2N<=N$((6uYt!1WFUh{0RlNC)Y6=TKGG6>q!dGC7dh=iyiOT@ z4wdOxq770lj^}N^o`EEfc9;TMub43>^a3qBq6Rx{Js0qO!#&FlbrchwnK;L|KDCm z>_31)?t(egwa~Ove@gj|r$Pr0Qp3}JRfM=9qE(_91Z!pORj{V(7d?b_QoIFgr%*qy z<+wHPbPfKtY9r&wP+Lc-2(M#=r+?MPfA?t%Jd6hf!&OBZ>2MV{*%P>?={kEhepGDP z%*=3DFv`W@2(i@%)90h5N2MfW3|l%`@4|)X{{Rvp{`tc^)l_$l5I z&^>P}125)KxzCtDyaTC>>zx$zgguY~FW%rGJvG#$t~rNgp>(LI{1bH6)Atbrxx9Ni zz7(VArP^wj6)Hj9l|R{haDksvt7W1(@-@m>%YKu*`EZ_r-Q51_h=M{SKyr6AV5aw+ zf3jT9_iQXukL$a*?6ucE1(V`Xz0dRKH`ZJ7550d$vD?=kd4oM@4%l8mJ5rNR3>1>2 z`gwu6gtK&Ay(WtFeKaEcli3f(k3v~%8fwx;31$y=+Fd0yD1Bd3Q1_gX7vJ=^ z_Rzd|d6tS-#|zB>4Met}PQWP=kk%92KY*WHv3~&DC7OQ#zM5X{&m%jE#qh0ao*cq# zzq1VKs-#W(1u6M-Ok=K$3SEzY$NxfdpOXJx+5!G1C|HJQgEml=;z1K{HISuWYTvE@ zB*Jny@9tXV4E)YZ>LVodfjLI5Z?#nw1hF*WOt<@aMWitgo^2*wev}TI69}{us`$!p_eVHJVdXrKA8_#fNvEcX!+e_ zPUb5883NIKhq)R?t~_6FPwBBMw<-DU^t;Fgk-Pr67W7WW`N`HFzz9X%A3()q%XOve zFV5tXOUAFMV%9U@blZ5{&b<=B)o=J9(&rg*q&@)L7$v)DG%#xYOsDPztACAQF<dhSQ-n)mq3$a=$v8FwO8q|%R6ng-?||ElNaBRrdLs<{^ud<7tDSGG*!yCAt= z3{YV3sZZeOIF_Qje>thkuJ=ByegA zH+`Do$-`sgH1*NMrpBVrZjrEd(@UWM?YjO2K(;cmt{@IP0+!g8oOa7FIepY?5DhqR z{*7D^ifU8ebm^=t%gWkf0B5Ol2CBA~cQ0I;l(XCjhK4xZ8jQScatc_NtP&;hK-WxCM6kwnq34VFQVD50>{M z!@IR{c+HqEoSa&L%+T1L&l&KlzYl09jQ<;2TIvQ2u7Yzh0#%m+g|Ia&QEOc+q^-RQKV50TCOAg{;fa;Ihhd|J%YE>|cOd#GGiBv!v zU!&Z|6@kWm?B=e<>C%@k6osPW`e~%jvAq$Jfn+flKx|^X=ar|=HUtHXN6w6$=j%Z| z+^4yv;731qa6;17XD0o{Ca0lh*+kqGf;2=~l3Xq}J*8<0t=s_9Q3h zFBq<@mr0j}_I`{4YKQL1u!Dwc{G+@xpToTU!_%c+IZKJ$$)KFItA#%R^Tjj5i6E3Z z7p1jlx6?(wD-vF7EIVC^>xp4yJhTQ6no~VoB26Pwub(Y;N7)qeqfr#g_9>%@air?( zt_icM%kmI10*x4=d-^Lssqf;mHA?I^H|IEa^WYoAiplK@n*QRAGyUM(q_in6HV@H! zgRsMWjrHbb%srg&)Djm@*t$SMVl?e|?O2}b8aoG&Q4-1!)P(p#L!Pa9qOWI|a3^git2~<3nFd4CQ<_ z42HZI0KlUN!6rmn-7S-FO1dyKkm17>j*H};|5lbeQpus85zFle!r#T0RA3`mHkzda zu(Oto{tN#7&vovvHR)a{+wU)nO9Tww<~Vj&40a@C8kKW#vMv`N1~9rm>!*(q78HFf zr3(Zc;M2OBTTBvammYCN!VH(H=Dp$7aq1Lvt1r=SMOtIO` z7{>1fciqZGG}M;2^-LXHW0`n~7rHr> zNCjZiKUQRdX%3?=nBXvtwCb^aP`!FiIH@gUnAEs1DDsPPvm(CNhS)tNd`WYl!dfnt zM{^-x)S^-^_jGGVQ@1*bXYS|&(y&(9`Pw?-T-;(^*tb8vStZRw9^@Ot`9t-dpf)+O z(W4rC>2#RV+-BDVVHJSHK3IN6RCc8DOJ0Xv;vnx2;N>`qGxIyC8&rv{ZtW_Si2I{v zQM#u}$wHfG1Mf(6Og34RMh=kSv+s?U8-k5L(z4?9UPIsvQXIp>Zo{~_TQM<)SWwiP z{UPuu7$J!Oii5LZzJ(TfJGdcU^4phQIg~EGdQI;NyG5vDo>rO_u{P^#_0Se0ugy6@ zo~yNt>~ur|Tz`{e!_K`3WuHqn+?jtqP^h4%Z8Cj0@LBq+L}dr!e3)q%>z94{aRDOa zS;Ttj_>C0M-_`1%fSw5_`Rneerd2@9CZcV1%O#!q_u=1}H{et)nUv$5WLf;QQn4D$^ z?2QYr-`X$7vbp?D53MzadMMtDynK0-U4R|R#PH-)JXtAyL&F@D9+F8~Z|!zAoamm? z!I=68YR;RFW+u6E3f9#A?~*59hSSEzzcc7z5900&RlvVCmzvGl|HP>lNP^3Rs^x`c z_*7OA>8WT&97KcC94z;Uq{w2&Nz8;^$j)=axSL8HD;TdUOEz@EOrW7gGBwImP zZxx~JwLUcAyNTcY2*aRQlir`fLafJZWZ5ioK}*`yTS0k#d57qH))VOX-Z{mfT}wIP zR`{9dsMeOX z0K%7Zu>TxI5QcqFKr}`LhLg6e$l69f%zbB@EaQK%uW5#~X`ijS(9z=^84Dx0+p=Ac z5rclZCdgw@j&u&7S|{{9T(1b7)jo%12j1UjVsiN0$ZT{WPxPwI6jcdJhEQ1P`wcAd zzy1J@AlB8^y}Y)G5BO}8Vwm4mwi}Q5wvV=xmiQ;Wp(bPp;rxxj?$` zC#Gs?MT{pX^cV0sQk&ZL_xQjd!nT-&0~E?Ac^xR8m6d8A-L)y>A~JU7%%kRV*HtIx zIQ7>3$z7>=+VSV!%Er>0WM4Fnz>g(&CzYQSpOKu2uH<8PT;tuy=t4fl(C1aU>-`@! zf~VIi2KK$=>bUZit5!fFwajkU*`6ioAUv%5vy`hqe|tCEa<^mm2XMphzB;K>J0FOO zYIB@of@D_W#|cY8V569%8j^rCQlTY`;SnuqIKgVF;of8wRCy-HZgkQvXQ9D7I=)RE zI=4>ro>w(`{heT01#a3n=bnL+&9vJznENe0S9dr$qWO9#kA)Bk1HrR=008Fn(I2AH zE5b*MlT8VPH3?Z&x2-ME0vQ~0CHNdjeRg)*?+RNH@}X}XEhGdQ?%}+dVm)*}xQR^U0`b@-RIO#Ueq;=#*K61H^`4$q z>^Su@SLAgc`@q9Ulg-jJP{vgPs1FB1?2>A$f%1nMn)eKerFW>q5)~7m&Za5Bn__^a zoT<5N%7Yq8lj5F>a`Yac}mhNMRW3H#bfSg-Ofd^l68gAzP(^v|aRk*}gJnzSjI>6tTf$ zzoWZd!&UJ4mgRWupLlX;pkjN*;fHERCHmmc_oOTwionGWzKffG2Az4SgGODebYi?t zAh#5<{U$86oHet|hmyx&-(&ROWyYQYwhA9_DSRkgnn58`oVI71geX!nl0|FLw|Zc+ zGZqm25;$~61IKb^GI=~%Oss)kXJtkRe-DJ73}NBIy5VqS0p7h+^)Z+icKq5xb2rmL z9f9j!)NrC2C4SrGqs=t*2SBWxc*rhMc9`;OK0HRG-$bX(qp-0bUVg)-E?PM(O2kd% zUu-_RDf6Q{`vxNH(E+;L2$n+2-DQfk9F^pUSlhanFedvow;t|(fXl?LwI z8~E|fCQI&VDA?CRJpJVJx4Z0d0#&0Eig}UdQ$Klac1m_O!0TTC(tdG!2T4XwIy5X( z_E++T(@E06bCx9L?#f+(*Ee}pL(8Pk?9&;M%q(0`e-7>RCU>y5PRcgz0K%&%azM2x z;YYA}xC(8~u=6^e>)35K{bdjCv7p!{C*)rl>i>w)JIyZ*!g0FnE^}0bh>I!MUg=xN z>mHy88H%m`06vS0S106C7e7087kB^cq7td#NXc6PQ)w_ zdoG9VQ1IA2M_ARgAm#D#1l?fm!l6=JxqT2@=d1WW0y{T8TXU8|Yo*KOPwGa(W5W-n zQ8xwhstZe}T;r@t#)9YCUdZK`>E|~QyN%CD638ceM1{mjC7n2GvFd=d2)QrW*GXvX zr&_f)3H`6TCxj^4{nt9O6uA ze;+n6c(Xk7VsAhcnK-@smKxcuiyOq@olp2?v1TakaLrq*TqJ8SayB-f?f<+?v0VwbhpLYf7b9wy*b`-2TM=66;Mt^?%Kl{zqd?T(4L0{Nnfn zXv+rd*+t=XzHA}Q7m|g#1W(qnh*|Zv{bjkv+$4$6ZIStr2?a9Rm09W~ueh zIWd9dOWK2CAwnc?5#?Fx-9!VNg@W!B_m{%1LW*w+`J5GKROTvr$H-=j(!->qGON1M zvC6R>yP975_w*HcekWpR5t|WkR}C4tzZv;|3y)V*1Ij$6wQDt(gY8I&iI}iWf(o8- z2uy4B+bt;#g9E#Wa{Q8V$63C2KhtDzHv%HwsXBrC?nt*`)N*O$vsM1&8u8X*m2_27 zWx9;~kLPV8#s#C3Xc*)5xBp+`UA?YclQfCeK zbtQzR?#OH_dIw>h=vhgrZ5$!3(yI-)&Ij~G=CkyiGUk|SI5_vxz&py!><{TPf!O}3 z9?qi5gJ~<2jr7l>=&RQ#wkZ0F55zwj+A0-!UY+HQUtajEyC^Y(>-{}Q zzYd$cn%sZ8B%99PO@|A?8bg#LpOO1tpG|%50^3;csro)*N8E5-EpwO9Z`1lTq@DRu z4{rU4TCx}OHm(E9l9_T9Lm6AkXt@H{qfDo1OCV1Yo{lX>I@L?cn8oXPW}oAT9->`k zEje%ufp2J!;z%v1ybWB+8%{>O>|}eW8a{fmS1%ma)&O};4E7AaO*~iF6>=kEE5&<$UcbgDug}Q2>n3+^VJz=RX zcaWCY?jIq5`D+x`N%Yqc;K-}@ZM&B|orFWb{*`2W*|(77_&yc1`rWG#8*(QiHb+sC z_QGmckp@PW%WNmxl%3~_7iyi>qTB>=0&9mSD;1=og$ZOa9@t+Ha$7ov&^Hl-8i3oMs_i_6WP7ChMQ)s zKQm33Y-L@Ppl62vdp;JDJ-bG?03tm$r@faHNPz^no026Mzv9=tUI9!00CZL2OY4o! zqFCXK3hTCY_h5%PojD%MP^G>hkHbo1tl%)UINoI*W}|PoM=)0HHZHp`Q>zaz1x?ed z5GStV>*7IavYDAl7UxP=UevjrZ_xucBXNA^i0v=QlRufdwed%+nK|p%4K@HoNSn_I z3>8Y!7Ue1f$y+f4HxSldlN&I@>IEK;f#-=+`I8<_+%Ms0aG)N$dJr`CrwSBd11He1 z{%WN!QIwioRY|)+XD1c4BE(ml#%@Z<&Xd{xPV3hWXxID`+Se}cW-V<5e%NJ8%P-@l zo*awNN4xAMb$pp8u|qbw`Sig~<9$?jY=l=Di)scUgE@aMvtMILsex-lL6?KG`^NqJ zAGIBw+++)14XyI73wt{0tHK)yq=zRIqLA0n37}fZJsrg1ALpvIxSju#s~xcl30$Pw zXHWBY=eT|SYWX^JYQ&gB2e-#NUwn%O2LqJ+DwQ5`F3>kn$(^&PY--`AXR|!{fO||g z$ntYY52s`NfF-Zih9mgS57!=dFLJY9F7sPjr70>NRk-M{QJaBQGChA6ldAGVoJ(6uvjvfa-QQ-);raM#h+ zs2#uE&dcObWjH(cJeC5E{)m8Tu82|Z?PLOU*9v# z_Ou9bBK(;kM$SQZW83l=e_ijxjMGCoYxD< z{%TT^Q}J8QH8Zv``)@5H-vwcWvH)S*4XR`EK=9;``w|-C4?5LAOliq^51Ja!Gk%Co zfx^(h-&~V2;@WmSOb6@jQU{V~$&*p?Rvqqp%H&G;1#(VcQYGya5hvrCPfev;W%5Wo zhVtRlkYyPLtTv!;CncHS5}ZZyW&)zc_q4kx(eABPr(+&rTh$CBpMB7?@^)S0Y;1vm zE9`87zW-;;;ZV5uTdTEvRagE4FphG?kBpDI;fe?uO_P#nCs-*A*wv`^Rnm&%^J7S~ z{k@T;Uj6zvK}E5YM`-FS$P-7J>M~~b>+!T{f=2cwZW$&Udy*Cr&QBW@5kc8T;?DAp zp{#ABOGvZSdTz2p*aoze003>_Px-%aAouS|jJ%h>PD`C_QW|)-ZBKp+xSJz~Xg`?j z@h1u-;@LRWJhMT@ve>zkzuH)GJMe1*jv`9Jv->L7lf$)5>%^uQrl#M^ceOl=b4aZF z_EnRHLy=Oe0YPq%Z54hv&Lq;cul9SV+3WNJGT$gk_R9p9o#TmTE(QeQ+ zG(`tAt0VU~N;D7phGK%lZ=e)^^j6sVgSMzbgOEEejJ5P%fLj=P{ZD z?y~Zz@MDX#^r2}kdoZBf9Vc>kGe5DyPiy={d)8boojz3(>s-?|Rm)ZA!&V_-fY2HW zVOICD+@@z)pPNwXYaO2jT0-F#yK zVOwyhsXToFt+dLe6KD5OMVH$hZItr%69p4({V1~6VI=liz1kX`Fi9dWZgx(2>2cV- zE*-V7gtvrCy4CI%Q1j7hT4+O~e##V`QqBIQPW9*$_j771(VThfhy)O9L|hcJ25;TS zDsN_h$MV_B2wrgoD|d!4@+W2xHJ)n4kHUQ*Iz5JS1Odb6EJ0=ue#DHIvc`*hyYn6-Gcb3}lkd`Bz(Igyp2_ub9@6?wD#OEt_y0d$YGRws1bPL8prtsAyXDbB!O@* zI9PnCrI_}MkFM|Kh}~pE5C@d|(dMR~Xb4;oOk?{2VaYT{ER_+sr`MwD>g{jJyU?&> zXhM}U^>(Uk=kmJ^-myKWtr7D;yFwdKj;W4Bo?g0Ta>10nqg3!=ofe-@)x2YuUaFrc z$|h&w>nfgf9arrP8#@NGQ*7%>)&7a{mgygWKbv&NiClP7?ry z><`Gst0TvG2>4^hmtUwCze!t6{85LeU@0Mzkp^IXP&$Hbsd$nQ(8A2cHDsc(nGg10 zk2uNI|KxkI3zpy5v6psXbGvv=xBCb1wm$ply1mnW_g# z{Q^zvZ0={wEF3hN^n5RhzQ}!e>?wxM#~1Yk#GYgex3Pznv#iztF&!uEj=z| z&zD^Zy*~iOy{>SzKY+f0I=}1lW5J~_B-6hRd)#Z>w)S;(*DZTo4UNJfyz^F})X85Z zoJ~Zh6CTohX6~}>-9azgxL=vpi4w<;$M_sp-z)#_3iOv%+oiXWHU0;m-g*k59}*_h zgn1%@Ln_>f2czxubwPGfT(q0-Of);T!G0e|`j~nTb+<>32_+)T3)^)rs9o@$icN$U z;qB@{(3Xlw@R-f3dlwah6J`@nKTJdv)7mE^y6Qzwn~T86+*PcNxtq;<{fK&HgO6^< zLbZ|l#j$$Qw_5rxUy3pWC#-yJ%L7qpwYS}G zEunA)!FYl1qg)3G*TNIzN^%MV(nLA^1pRt8q<}RTAY+MEjBU;nCM&9}9$`E!EmMsNQp`Frf5g?!7JGqI<_IXmaR3v>FCT>q?p zdw>CNfI6$vqdJ>yqx^7#KH6Awv-t4jd#4vSb^IDjHBqTO8^m9EHfIO+?`XGp4v{+( zED5H2)Wb>_$kR?&gTQumdcFa4%_c0j7D1GRQ(Th*JQZ9MVhE&O3pn;3p(5~Cj_2}A zk&*nE=sHZ(HG6L|(2PH)^DqYCfV>oni;WtM2*B}`eMi<~E?eO_4fFk)E2m?VRq5i^ z1JN8BMao#E;@eOT$Yjnpc-CL0{TG#q$jphWyBTMswXf~hm12Wrw)pv+E-FqiktIlB zumX-NNgz&s!tC)oNGxhC5p8519%JHu?YccCM3=35wx!e;aV4}`_gDa=A%yLOf0jQ` z$QdMzvb7Yu^Z{B^biaDCdx?F7FN+ktxJ!1@U!5u22FGzu<2duK4wOu-@yBnt**WOKC(1}Fw zu=^G6=@#2a%M{)nbpYknj(pOaK7E^d_Sk4#!CQno-~joOZo0vZqdi^vXTDRQVqF&- zYZ(j1%M8w7|4$x(Y}gJd;(gGwtx7X~I#IXros#;pF9KhpG!SeT005A6HoG}0vu}a= z?FZLl|A>tavwcqTRy|*A4sjvE(U>DCn(SU*4qciHc5OOx-KhFX>RS|5x0m6RGknOj zf%`$XfptuwZ!}i(I+vv9-lHR^J)`w%zg0+k+0KKe&X={^oH(y{&+uOAWt63fzlTUl zd#=tM2(fMhB_NOH|5>!~EYaG08}3r5G{os-JZSEi&AYVDT~!6oXZHQd>@R#W8mPXB zx&D^8n{Ozg^k{N#O2M4emPa8pfwrO_oQ+zLF#1m5fN=sM6}r}pW3gFsff`cne?lq< z-u

    2r%qDn6>*gTx{oRi6HlPM=Tvl(5MtlzzA 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 Date: Mon, 5 Sep 2022 22:32:15 +0800 Subject: [PATCH 0084/1057] Add solution and test-cases for problem 1046 --- .../1046.Last-Stone-Weight/README.md | 35 +++++++------ .../1046.Last-Stone-Weight/Solution.go | 49 ++++++++++++++++++- .../1046.Last-Stone-Weight/Solution_test.go | 14 +++--- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/leetcode/1001-1100/1046.Last-Stone-Weight/README.md b/leetcode/1001-1100/1046.Last-Stone-Weight/README.md index 4d4d50c32..ec2889ca4 100644 --- a/leetcode/1001-1100/1046.Last-Stone-Weight/README.md +++ b/leetcode/1001-1100/1046.Last-Stone-Weight/README.md @@ -1,28 +1,35 @@ # [1046.Last Stone Weight][title] -> [!WARNING|style:flat] -> 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 `stones` where `stones[i]` is the weight of the ith stone. + +We are playing a game with the stones. On each turn, we choose the **heaviest two stones** and smash them together. Suppose the heaviest two stones have weights `x` and `y` with `x <= y`. The result of this smash is: + +- If `x == y`, both stones are destroyed, and +- If `x != y`, the stone of weight `x` is destroyed, and the stone of weight `y` has new weight `y - x`. + +At the end of the game, there is **at most one stone** left. + +Return the weight of the last remaining stone. If there are no stones left, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: stones = [2,7,4,1,8,1] +Output: 1 +Explanation: +We combine 7 and 8 to get 1 so the array converts to [2,4,1,1,1] then, +we combine 2 and 4 to get 2 so the array converts to [2,1,1,1] then, +we combine 2 and 1 to get 1 so the array converts to [1,1,1] then, +we combine 1 and 1 to get 0 so the array converts to [1] then that's the value of the last stone. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Last Stone Weight -```go ``` - +Input: stones = [1] +Output: 1 +``` ## 结语 diff --git a/leetcode/1001-1100/1046.Last-Stone-Weight/Solution.go b/leetcode/1001-1100/1046.Last-Stone-Weight/Solution.go index d115ccf5e..2b76fc4ac 100644 --- a/leetcode/1001-1100/1046.Last-Stone-Weight/Solution.go +++ b/leetcode/1001-1100/1046.Last-Stone-Weight/Solution.go @@ -1,5 +1,52 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type stoneList []int + +func (s *stoneList) Len() int { + return len(*s) +} + +func (s *stoneList) Less(i, j int) bool { + return (*s)[i] > (*s)[j] +} + +func (s *stoneList) Swap(i, j int) { + (*s)[i], (*s)[j] = (*s)[j], (*s)[i] +} + +func (s *stoneList) Push(x interface{}) { + *s = append(*s, x.(int)) +} + +func (s *stoneList) Pop() interface{} { + old := *s + l := len(old) + x := old[l-1] + *s = old[:l-1] return x } + +func Solution(stones []int) int { + if len(stones) == 0 { + return 0 + } + h := stoneList(stones) + h1 := &h + heap.Init(h1) + + for h1.Len() > 1 { + top := heap.Pop(h1).(int) + second := heap.Pop(h1).(int) + if top == second { + continue + } + heap.Push(h1, top-second) + } + + if h1.Len() == 0 { + return 0 + } + return heap.Pop(h1).(int) +} diff --git a/leetcode/1001-1100/1046.Last-Stone-Weight/Solution_test.go b/leetcode/1001-1100/1046.Last-Stone-Weight/Solution_test.go index 14ff50eb4..4fca17dde 100644 --- a/leetcode/1001-1100/1046.Last-Stone-Weight/Solution_test.go +++ b/leetcode/1001-1100/1046.Last-Stone-Weight/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, 7, 4, 1, 8, 1}, 1}, + {"TestCase2", []int{1, 1}, 0}, + {"TestCase3", []int{1}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2663b363b92c3db10ce72fe50d2e347a16dce9c8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 6 Sep 2022 22:15:53 +0800 Subject: [PATCH 0085/1057] Add solution and test-cases for problem 1854 --- .../1854.Maximum-Population-Year/README.md | 30 ++++++++++--------- .../1854.Maximum-Population-Year/Solution.go | 16 ++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/leetcode/1801-1900/1854.Maximum-Population-Year/README.md b/leetcode/1801-1900/1854.Maximum-Population-Year/README.md index 36f1c73fb..4268b6aff 100755 --- a/leetcode/1801-1900/1854.Maximum-Population-Year/README.md +++ b/leetcode/1801-1900/1854.Maximum-Population-Year/README.md @@ -1,28 +1,30 @@ # [1854.Maximum Population Year][title] -> [!WARNING|style:flat] -> 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 `logs` where each `logs[i] = [birthi, deathi]` indicates the birth and death years of the ith person. + +The **population** of some year `x` is the number of people alive during that year. The ith person is counted in year `x`'s population if `x` is in the **inclusive** range `[birthi, deathi - 1]`. Note that the person is **not** counted in the year that they die. + +Return the **earliest** year with the **maximum population**. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: logs = [[1993,1999],[2000,2010]] +Output: 1993 +Explanation: The maximum population is 1, and 1993 is the earliest year with this population. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Population Year -```go ``` - +Input: logs = [[1950,1961],[1960,1971],[1970,1981]] +Output: 1960 +Explanation: +The maximum population is 2, and it had happened in years 1960 and 1970. +The earlier year between them is 1960. +``` ## 结语 diff --git a/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go index d115ccf5e..9a9549cd9 100644 --- a/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go +++ b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(logs [][]int) int { + bucket := make([]int, 101) + for _, log := range logs { + for year := log[0]; year < log[1]; year++ { + bucket[year-1950]++ + } + } + targetIdx := 0 + for idx := 1; idx < 101; idx++ { + if bucket[idx] > bucket[targetIdx] { + targetIdx = idx + } + } + return targetIdx + 1950 } diff --git a/leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go b/leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go index 14ff50eb4..c03673bcb 100644 --- a/leetcode/1801-1900/1854.Maximum-Population-Year/Solution_test.go +++ b/leetcode/1801-1900/1854.Maximum-Population-Year/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{{1993, 1999}, {2000, 2010}}, 1993}, + {"TestCase2", [][]int{{1950, 1961}, {1960, 1971}, {1970, 1981}}, 1960}, + {"TestCase", [][]int{{1950, 1980}}, 1950}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b75d7568d4302adb672589aad20d3eeccaa66fd3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 7 Sep 2022 22:59:04 +0800 Subject: [PATCH 0086/1057] Add solution and test-cases for problem 2206 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 13 ++++++-- .../Solution_test.go | 12 +++---- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md index 5c5ec8785..ffe96349a 100755 --- a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md +++ b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/README.md @@ -1,28 +1,33 @@ # [2206.Divide Array Into Equal Pairs][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer array `nums` consisting of `2 * n` integers. + +You need to divide `nums` into `n` pairs such that: + +- Each element belongs to **exactly one** pair. +- The elements present in a pair are **equal**. + +Return `true` if nums can be divided into `n` pairs, otherwise return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,2,3,2,2,2] +Output: true +Explanation: +There are 6 elements in nums, so they should be divided into 6 / 2 = 3 pairs. +If nums is divided into the pairs (2, 2), (3, 3), and (2, 2), it will satisfy all the conditions. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Divide Array Into Equal Pairs -```go ``` - +Input: nums = [1,2,3,4] +Output: false +Explanation: +There is no way to divide nums into 4 / 2 = 2 pairs such that the pairs satisfy every condition. +``` ## 结语 diff --git a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go index d115ccf5e..c4a372703 100644 --- a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go +++ b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) bool { + bucket := make([]int, 501) + for _, n := range nums { + bucket[n]++ + } + for idx := 0; idx < 501; idx++ { + if bucket[idx]&1 == 1 { + return false + } + } + return true } diff --git a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go index 14ff50eb4..e45aa2c4a 100644 --- a/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go +++ b/leetcode/2201-2300/2206.Divide-Array-Into-Equal-Pairs/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 2, 3, 2, 2, 2}, true}, + {"TestCase2", []int{1, 2, 3, 4}, false}, + {"TestCase3", []int{9, 9, 19, 10, 9, 12, 2, 12, 3, 3, 11, 5, 8, 4, 13, 6, 2, 11, 9, 19, 11, 15, 9, 17, 15, 12, 5, 14, 12, 16, 18, 16, 10, 3, 8, 9, 16, 20, 2, 4, 16, 12, 11, 14, 20, 16, 2, 18, 17, 20, 3, 13, 16, 17, 1, 1, 11, 20, 20, 4}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 440bea035c0238410609d95a9f99ca2b18c6ca32 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 10 Sep 2022 16:03:43 +0800 Subject: [PATCH 0087/1057] Add solution and test-cases for problem 188 --- .../Solution.go | 124 ++++++++++++++++++ .../Solution_test.go | 2 + 2 files changed, 126 insertions(+) diff --git a/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution.go b/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution.go index 9fb437f8e..2f2b578d6 100644 --- a/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution.go +++ b/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution.go @@ -1,5 +1,7 @@ package Solution +import "container/heap" + /* [天数][股票状态] 股票状态: 奇数表示第 k 次交易持有/买入, 偶数表示第 k 次交易不持有/卖出, 0 表示没有操作 @@ -43,3 +45,125 @@ func max(x, y int) int { } return y } + +// heap + stack +type stock []int + +func (s *stock) Len() int { + return len(*s) +} + +func (s *stock) Less(i, j int) bool { + return (*s)[i] > (*s)[j] +} + +func (s *stock) Swap(i, j int) { + (*s)[i], (*s)[j] = (*s)[j], (*s)[i] +} + +func (s *stock) Push(x interface{}) { + *s = append(*s, x.(int)) +} + +func (s *stock) Pop() interface{} { + old := *s + n := len(old) + x := old[n-1] + *s = old[:n-1] + return x +} + +type stockPair struct { + start, end int +} + +func maxProfit_3(k int, prices []int) int { + if len(prices) == 0 || k == 0 { + return 0 + } + + // 开始忘记合并1 ,3, 2, 5这种情况,如何合并参考了 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/discuss/54145/O(n)-time-8ms-Accepted-Solution-with-Detailed-Explanation-(C%2B%2B) + //diff := 0 + //differences := &stock{} + // + //// 3, 2, 3, 6, 5, 0, 3 + // + //min := prices[0] + //for idx := 1; idx < len(prices); idx++ { + // if prices[idx] < prices[idx-1] { + // if diff != 0 && prices[idx] < min { + // heap.Push(differences, diff) + // diff = 0 + // } + // fmt.Println() + // continue + // } + // + // diff += prices[idx] - prices[idx-1] + // fmt.Printf("diff += prices[%d]-prices[%d]=%d\n", idx, idx-1, diff) + //} + //if diff != 0 { + // heap.Push(differences, diff) + //} + //loop := 0 + //ans := 0 + //for differences.Len() > 0 && loop < k { + // pop := heap.Pop(differences).(int) + // ans += pop + // loop++ + //} + + s, e := 0, -1 + pairs := make([]stockPair, 0) + profit := &stock{} + for { + for s = e + 1; s+1 < len(prices) && prices[s] >= prices[s+1]; s++ { + } + for e = s; e+1 < len(prices) && prices[e] <= prices[e+1]; e++ { + } + + if s == e { + break + } + + /* + 情况1:价格[v1]<=价格[v2],价格[p1]<=价格[p2]。 + 在这种情况下,如果我们能进行一次交易,我们将使用(v1,p2)。 + 如果我们可以进行两次交易,我们将使用(v1,p1)和(v2,p2)。 + 等价地,我们可以把(v1,p2)视为一个交易机会,把(v2,p1)视为另一个交易机会。 + 关键的想法是,这两个原始谷峰对提供了两个交易机会:(v1,p2)和(v2,p1)。 + + 情况2:价格[v1]>=价格[v2]或价格[p1]>=价格[p2]。 + 在这种情况下,如果我们可以进行一次交易,我们将使用(v1,p1)或(v2,p2)。 + 如果我们可以进行两次交易,我们将同时使用(v1,p1)和(v2,p2)。 + 也就是说,这两个谷峰对提供了两个交易机会:(v1,p1)和(v2,p2)。 + */ + + for l := len(pairs); l > 0 && prices[s] <= prices[pairs[l-1].start]; l-- { + heap.Push(profit, prices[pairs[l-1].end]-prices[pairs[l-1].start]) + pairs = pairs[:l-1] + } + + for l := len(pairs); l > 0 && prices[e] >= prices[pairs[l-1].end]; l-- { + heap.Push(profit, prices[pairs[l-1].end]-prices[s]) + s = pairs[l-1].start + pairs = pairs[:l-1] + } + + pairs = append(pairs, stockPair{s, e}) + } + + for l := len(pairs); l > 0; l-- { + heap.Push(profit, prices[pairs[l-1].end]-prices[pairs[l-1].start]) + pairs = pairs[:l-1] + } + + ans := 0 + loop := 0 + for profit.Len() > 0 && loop < k { + top := heap.Pop(profit).(int) + ans += top + loop++ + } + return ans +} diff --git a/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution_test.go b/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution_test.go index a30581cef..60c3bdd13 100644 --- a/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution_test.go +++ b/leetcode/101-200/0188.Best-Time-to-Buy-and-Sell-Stock-IV/Solution_test.go @@ -16,6 +16,7 @@ type SolutionFuncType func(int, []int) int var SolutionFuncList = []SolutionFuncType{ maxProfit_1, maxProfit_2, + maxProfit_3, } // Test case info struct @@ -30,6 +31,7 @@ type Case struct { var cases = []Case{ {"TestCase 1", []int{2, 4, 1}, 2, 2}, {"TestCase 2", []int{3, 2, 6, 5, 0, 3}, 2, 7}, + {"TestCase 3", []int{1, 2, 4, 2, 5, 7, 2, 4, 9, 0}, 2, 13}, } // TestSolution Run test case for all solutions From c9697ab85cf19a7749cca9a59a43215421389dd5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 10 Sep 2022 16:17:00 +0800 Subject: [PATCH 0088/1057] Add solution and test-cases for problem 2011 --- .../README.md | 49 ++++++++++++++----- .../Solution.go | 13 ++++- .../Solution_test.go | 14 +++--- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md index 20b09b2ec..8fc98574a 100755 --- a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md +++ b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/README.md @@ -1,28 +1,51 @@ # [2011.Final Value of Variable After Performing 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 +There is a programming language with only **four** operations and **one** variable `X`: + +- `++X` and `X++` **increments** the value of the variable `X` by `1`. +- `--X` and `X--` **decrements** the value of the variable `X` by `1`. + +Initially, the value of `X` is `0`. + +Given an array of strings `operations` containing a list of operations, return the **final** value of `X` after performing all the operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: operations = ["--X","X++","X++"] +Output: 1 +Explanation: The operations are performed as follows: +Initially, X = 0. +--X: X is decremented by 1, X = 0 - 1 = -1. +X++: X is incremented by 1, X = -1 + 1 = 0. +X++: X is incremented by 1, X = 0 + 1 = 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Final Value of Variable After Performing Operations -```go ``` +Input: operations = ["++X","++X","X++"] +Output: 3 +Explanation: The operations are performed as follows: +Initially, X = 0. +++X: X is incremented by 1, X = 0 + 1 = 1. +++X: X is incremented by 1, X = 1 + 1 = 2. +X++: X is incremented by 1, X = 2 + 1 = 3. +``` + +**Example 3:** +``` +Input: operations = ["X++","++X","--X","X--"] +Output: 0 +Explanation: The operations are performed as follows: +Initially, X = 0. +X++: X is incremented by 1, X = 0 + 1 = 1. +++X: X is incremented by 1, X = 1 + 1 = 2. +--X: X is decremented by 1, X = 2 - 1 = 1. +X--: X is decremented by 1, X = 1 - 1 = 0. +``` ## 结语 diff --git a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go index d115ccf5e..0b1930748 100644 --- a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go +++ b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(operations []string) int { + + ans := 0 + for _, opt := range operations { + if opt == "++X" || opt == "X++" { + ans++ + continue + } + ans-- + } + return ans } diff --git a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution_test.go b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution_test.go index 14ff50eb4..672d68823 100644 --- a/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/Solution_test.go +++ b/leetcode/2001-2100/2011.Final-Value-of-Variable-After-Performing-Operations/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{"--X", "X++", "X++"}, 1}, + {"TestCase2", []string{"++X", "++X", "X++"}, 3}, + {"TestCase3", []string{"X++", "++X", "--X", "X--"}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3e81f2cf76baaa0b1c453c0f200c1f4fad7b2141 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 14 Sep 2022 23:11:19 +0800 Subject: [PATCH 0089/1057] Add solution and test-cases for problem 1457 --- .../README.md | 38 ++++++++++++ .../Solution.go | 45 ++++++++++++++ .../Solution_test.go | 58 ++++++++++++++++++ .../palindromic_paths_1.png | Bin 0 -> 6941 bytes .../palindromic_paths_2.png | Bin 0 -> 6891 bytes 5 files changed, 141 insertions(+) create mode 100644 leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/README.md create mode 100644 leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution.go create mode 100644 leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution_test.go create mode 100644 leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/palindromic_paths_1.png create mode 100644 leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/palindromic_paths_2.png diff --git a/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/README.md b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/README.md new file mode 100644 index 000000000..523d2624e --- /dev/null +++ b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/README.md @@ -0,0 +1,38 @@ +# [1457.Pseudo-Palindromic Paths in a Binary Tree][title] + +## Description +Given a binary tree where node values are digits from 1 to 9. A path in the binary tree is said to be **pseudo-palindromic** if at least one permutation of the node values in the path is a palindrome. + +Return the number of **pseudo-palindromic** paths going from the root node to leaf nodes. + +**Example 1:** +![test1](./palindromic_paths_1.png) + +``` +Input: root = [2,3,1,3,1,null,1] +Output: 2 +Explanation: The figure above represents the given binary tree. There are three paths going from the root node to leaf nodes: the red path [2,3,3], the green path [2,1,1], and the path [2,3,1]. Among these paths only red path and green path are pseudo-palindromic paths since the red path [2,3,3] can be rearranged in [3,2,3] (palindrome) and the green path [2,1,1] can be rearranged in [1,2,1] (palindrome). +``` + +**Example 2:** +![test2](././palindromic_paths_2.png) + +``` +Input: root = [2,1,1,1,3,null,null,null,null,null,1] +Output: 1 +Explanation: The figure above represents the given binary tree. There are three paths going from the root node to leaf nodes: the green path [2,1,1], the path [2,1,3,1], and the path [2,1]. Among these paths only the green path is pseudo-palindromic since [2,1,1] can be rearranged in [1,2,1] (palindrome). +``` + +**Example 3:** + +``` +Input: root = [9] +Output: 1 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/pseudo-palindromic-paths-in-a-binary-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution.go b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution.go new file mode 100644 index 000000000..937bba47b --- /dev/null +++ b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution.go @@ -0,0 +1,45 @@ +package Solution + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode) int { + ans := 0 + path := make([]bool, 9) + pseudoPalindromic1457(root, path, &ans) + return ans +} + +// 00000000 00000000 00000000 00000000 +func pseudoPalindromic1457(root *TreeNode, path []bool, ans *int) { + if root == nil { + return + } + path[root.Val-1] = !path[root.Val-1] + + pseudoPalindromic1457(root.Left, path, ans) + pseudoPalindromic1457(root.Right, path, ans) + + if root.Left == nil && root.Right == nil { + odd := false + idx := 0 + for ; idx < 9; idx++ { + if !path[idx] { + continue + } + if odd { + break + } + odd = true + } + if idx == 9 { + *ans++ + } + } + + path[root.Val-1] = !path[root.Val-1] + +} diff --git a/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution_test.go b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution_test.go new file mode 100644 index 000000000..4f70495d4 --- /dev/null +++ b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,58 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *TreeNode + expect int + }{ + {"TestCase1", &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 1}, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 1}, + }, + }, 2}, + {"TestCase2", &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 1}, + }, 1}, + {"TestCase3", &TreeNode{Val: 1}, 1}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/palindromic_paths_1.png b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/palindromic_paths_1.png new file mode 100644 index 0000000000000000000000000000000000000000..04ace7782c5a5a9bf56520e61e80e89017ab17ae GIT binary patch literal 6941 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 IyiL^q0Gjr21poj5 literal 0 HcmV?d00001 diff --git a/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/palindromic_paths_2.png b/leetcode/1401-1500/1457.Pseudo-Palindromic-Paths-in-a-Binary-Tree/palindromic_paths_2.png new file mode 100644 index 0000000000000000000000000000000000000000..920102d6b338da03329d0cfef54047836cf08dc8 GIT binary patch literal 6891 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 literal 0 HcmV?d00001 From 157f67ced8db0d2c0e0d160648efe15b9972f3b2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 16 Sep 2022 22:39:19 +0800 Subject: [PATCH 0090/1057] add 2301-2400 problems and 2357 solution --- cmd/main.go | 2 + .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2301-2400/2306.Naming-a-Company/README.md | 32 +++++++++++++++ .../2306.Naming-a-Company/Solution.go | 5 +++ .../2306.Naming-a-Company/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 +++++++++++++++++++ .../2312.Selling-Pieces-of-Wood/README.md | 32 +++++++++++++++ .../2312.Selling-Pieces-of-Wood/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2301-2400/2315.Count-Asterisks/README.md | 32 +++++++++++++++ .../2315.Count-Asterisks/Solution.go | 5 +++ .../2315.Count-Asterisks/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 +++++++++++++++++++ .../2325.Decode-the-Message/README.md | 32 +++++++++++++++ .../2325.Decode-the-Message/Solution.go | 5 +++ .../2325.Decode-the-Message/Solution_test.go | 39 +++++++++++++++++++ .../2301-2400/2326.Spiral-Matrix-IV/README.md | 32 +++++++++++++++ .../2326.Spiral-Matrix-IV/Solution.go | 5 +++ .../2326.Spiral-Matrix-IV/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2301-2400/2347.Best-Poker-Hand/README.md | 32 +++++++++++++++ .../2347.Best-Poker-Hand/Solution.go | 5 +++ .../2347.Best-Poker-Hand/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 +++++++++++++++++++ .../2352.Equal-Row-and-Column-Pairs/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2354.Number-of-Excellent-Pairs/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 35 +++++++++++++++++ .../Solution.go | 12 ++++++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2360.Longest-Cycle-in-a-Graph/README.md | 32 +++++++++++++++ .../2360.Longest-Cycle-in-a-Graph/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2363.Merge-Similar-Items/README.md | 32 +++++++++++++++ .../2363.Merge-Similar-Items/Solution.go | 5 +++ .../2363.Merge-Similar-Items/Solution_test.go | 39 +++++++++++++++++++ .../2364.Count-Number-of-Bad-Pairs/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2365.Task-Scheduler-II/README.md | 32 +++++++++++++++ .../2365.Task-Scheduler-II/Solution.go | 5 +++ .../2365.Task-Scheduler-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 +++++++++++++++++++ .../2370.Longest-Ideal-Subsequence/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2376.Count-Special-Integers/README.md | 32 +++++++++++++++ .../2376.Count-Special-Integers/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2381.Shifting-Letters-II/README.md | 32 +++++++++++++++ .../2381.Shifting-Letters-II/Solution.go | 5 +++ .../2381.Shifting-Letters-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 +++++++++++++++++++ .../2384.Largest-Palindromic-Number/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2386.Find-the-K-Sum-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 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ 229 files changed, 5788 insertions(+) create mode 100755 leetcode/2301-2400/2301.Match-Substring-After-Replacement/README.md create mode 100644 leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution.go create mode 100644 leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution_test.go create mode 100755 leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/README.md create mode 100644 leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution.go create mode 100644 leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution_test.go create mode 100755 leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/README.md create mode 100644 leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution.go create mode 100644 leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution_test.go create mode 100755 leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/README.md create mode 100644 leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution.go create mode 100644 leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution_test.go create mode 100755 leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md create mode 100644 leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go create mode 100644 leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go create mode 100755 leetcode/2301-2400/2306.Naming-a-Company/README.md create mode 100644 leetcode/2301-2400/2306.Naming-a-Company/Solution.go create mode 100644 leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go create mode 100755 leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/README.md create mode 100644 leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution.go create mode 100644 leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution_test.go create mode 100755 leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/README.md create mode 100644 leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution.go create mode 100644 leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution_test.go create mode 100755 leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/README.md create mode 100644 leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution.go create mode 100644 leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution_test.go create mode 100755 leetcode/2301-2400/2312.Selling-Pieces-of-Wood/README.md create mode 100644 leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution.go create mode 100644 leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution_test.go create mode 100755 leetcode/2301-2400/2315.Count-Asterisks/README.md create mode 100644 leetcode/2301-2400/2315.Count-Asterisks/Solution.go create mode 100644 leetcode/2301-2400/2315.Count-Asterisks/Solution_test.go create mode 100755 leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md create mode 100644 leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go create mode 100644 leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go create mode 100755 leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/README.md create mode 100644 leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution.go create mode 100644 leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution_test.go create mode 100755 leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/README.md create mode 100644 leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution.go create mode 100644 leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution_test.go create mode 100755 leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/README.md create mode 100644 leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution.go create mode 100644 leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution_test.go create mode 100755 leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/README.md create mode 100644 leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution.go create mode 100644 leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution_test.go create mode 100755 leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/README.md create mode 100644 leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution.go create mode 100644 leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution_test.go create mode 100755 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md create mode 100644 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go create mode 100644 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go create mode 100755 leetcode/2301-2400/2325.Decode-the-Message/README.md create mode 100644 leetcode/2301-2400/2325.Decode-the-Message/Solution.go create mode 100644 leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go create mode 100755 leetcode/2301-2400/2326.Spiral-Matrix-IV/README.md create mode 100644 leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go create mode 100644 leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go create mode 100755 leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md create mode 100644 leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go create mode 100644 leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go create mode 100755 leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md create mode 100644 leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go create mode 100644 leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go create mode 100755 leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/README.md create mode 100644 leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution.go create mode 100644 leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution_test.go create mode 100755 leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/README.md create mode 100644 leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution.go create mode 100644 leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution_test.go create mode 100755 leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/README.md create mode 100644 leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution.go create mode 100644 leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution_test.go create mode 100755 leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/README.md create mode 100644 leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution.go create mode 100644 leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution_test.go create mode 100755 leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/README.md create mode 100644 leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution.go create mode 100644 leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution_test.go create mode 100755 leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md create mode 100644 leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go create mode 100644 leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go create mode 100755 leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md create mode 100644 leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go create mode 100644 leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go create mode 100755 leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md create mode 100644 leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go create mode 100644 leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go create mode 100755 leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/README.md create mode 100644 leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution.go create mode 100644 leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution_test.go create mode 100755 leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md create mode 100644 leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go create mode 100644 leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go create mode 100755 leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md create mode 100644 leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go create mode 100644 leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go create mode 100755 leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/README.md create mode 100644 leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution.go create mode 100644 leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution_test.go create mode 100755 leetcode/2301-2400/2347.Best-Poker-Hand/README.md create mode 100644 leetcode/2301-2400/2347.Best-Poker-Hand/Solution.go create mode 100644 leetcode/2301-2400/2347.Best-Poker-Hand/Solution_test.go create mode 100755 leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md create mode 100644 leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go create mode 100644 leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go create mode 100755 leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md create mode 100644 leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go create mode 100644 leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go create mode 100755 leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/README.md create mode 100644 leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution.go create mode 100644 leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution_test.go create mode 100755 leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/README.md create mode 100644 leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution.go create mode 100644 leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution_test.go create mode 100755 leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md create mode 100644 leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go create mode 100644 leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go create mode 100755 leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md create mode 100644 leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution.go create mode 100644 leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution_test.go create mode 100755 leetcode/2301-2400/2354.Number-of-Excellent-Pairs/README.md create mode 100644 leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution.go create mode 100644 leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution_test.go create mode 100755 leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/README.md create mode 100644 leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution.go create mode 100644 leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution_test.go create mode 100755 leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/README.md create mode 100644 leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution.go create mode 100644 leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution_test.go create mode 100755 leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md create mode 100644 leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go create mode 100644 leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go create mode 100755 leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md create mode 100644 leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go create mode 100644 leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go create mode 100755 leetcode/2301-2400/2363.Merge-Similar-Items/README.md create mode 100644 leetcode/2301-2400/2363.Merge-Similar-Items/Solution.go create mode 100644 leetcode/2301-2400/2363.Merge-Similar-Items/Solution_test.go create mode 100755 leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md create mode 100644 leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go create mode 100644 leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go create mode 100755 leetcode/2301-2400/2365.Task-Scheduler-II/README.md create mode 100644 leetcode/2301-2400/2365.Task-Scheduler-II/Solution.go create mode 100644 leetcode/2301-2400/2365.Task-Scheduler-II/Solution_test.go create mode 100755 leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/README.md create mode 100644 leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution.go create mode 100644 leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution_test.go create mode 100755 leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md create mode 100644 leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go create mode 100644 leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go create mode 100755 leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md create mode 100644 leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go create mode 100644 leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go create mode 100755 leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md create mode 100644 leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go create mode 100644 leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution_test.go create mode 100755 leetcode/2301-2400/2370.Longest-Ideal-Subsequence/README.md create mode 100644 leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution.go create mode 100644 leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution_test.go create mode 100755 leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/README.md create mode 100644 leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution.go create mode 100644 leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution_test.go create mode 100755 leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/README.md create mode 100644 leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution.go create mode 100644 leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution_test.go create mode 100755 leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md create mode 100644 leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go create mode 100644 leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go create mode 100755 leetcode/2301-2400/2376.Count-Special-Integers/README.md create mode 100644 leetcode/2301-2400/2376.Count-Special-Integers/Solution.go create mode 100644 leetcode/2301-2400/2376.Count-Special-Integers/Solution_test.go create mode 100755 leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md create mode 100644 leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go create mode 100644 leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go create mode 100755 leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/README.md create mode 100644 leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution.go create mode 100644 leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution_test.go create mode 100755 leetcode/2301-2400/2381.Shifting-Letters-II/README.md create mode 100644 leetcode/2301-2400/2381.Shifting-Letters-II/Solution.go create mode 100644 leetcode/2301-2400/2381.Shifting-Letters-II/Solution_test.go create mode 100755 leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/README.md create mode 100644 leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution.go create mode 100644 leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution_test.go create mode 100755 leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/README.md create mode 100644 leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution.go create mode 100644 leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution_test.go create mode 100755 leetcode/2301-2400/2384.Largest-Palindromic-Number/README.md create mode 100644 leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution.go create mode 100644 leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution_test.go create mode 100755 leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md create mode 100644 leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go create mode 100644 leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go create mode 100755 leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/README.md create mode 100644 leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution.go create mode 100644 leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution_test.go create mode 100755 leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md create mode 100644 leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go create mode 100644 leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go create mode 100755 leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md create mode 100644 leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go create mode 100644 leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go create mode 100755 leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md create mode 100644 leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go create mode 100644 leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go create mode 100755 leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md create mode 100644 leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go create mode 100644 leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go create mode 100755 leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md create mode 100644 leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go create mode 100644 leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go create mode 100755 leetcode/2301-2400/2396.Strictly-Palindromic-Number/README.md create mode 100644 leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution.go create mode 100644 leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution_test.go create mode 100755 leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/README.md create mode 100644 leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution.go create mode 100644 leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution_test.go create mode 100755 leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/README.md create mode 100644 leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution.go create mode 100644 leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution_test.go create mode 100755 leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/README.md create mode 100644 leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution.go create mode 100644 leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution_test.go create mode 100755 leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/README.md create mode 100644 leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution.go create mode 100644 leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution_test.go diff --git a/cmd/main.go b/cmd/main.go index 7612b170a..c7079ab11 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -30,6 +30,8 @@ func main() { //leetcode.MakeDirFromTo(problems, 2001, 2100) //leetcode.MakeDirFromTo(problems, 2101, 2200) //leetcode.MakeDirFromTo(problems, 2201, 2300) + //leetcode.MakeDirFromTo(problems, 2301, 2400) + // leetcode.MakeDir(problems) // leetcode.GetReadmeTemplateBuffer() diff --git a/leetcode/2301-2400/2301.Match-Substring-After-Replacement/README.md b/leetcode/2301-2400/2301.Match-Substring-After-Replacement/README.md new file mode 100755 index 000000000..c542a3efa --- /dev/null +++ b/leetcode/2301-2400/2301.Match-Substring-After-Replacement/README.md @@ -0,0 +1,32 @@ +# [2301.Match Substring After Replacement][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Match Substring After Replacement +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/match-substring-after-replacement/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution.go b/leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution_test.go b/leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2301.Match-Substring-After-Replacement/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/README.md b/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/README.md new file mode 100755 index 000000000..0b342183f --- /dev/null +++ b/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/README.md @@ -0,0 +1,32 @@ +# [2302.Count Subarrays With Score Less Than K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Subarrays With Score Less Than K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-subarrays-with-score-less-than-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution.go b/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution_test.go b/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2302.Count-Subarrays-With-Score-Less-Than-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/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/README.md b/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/README.md new file mode 100755 index 000000000..80e44d36c --- /dev/null +++ b/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/README.md @@ -0,0 +1,32 @@ +# [2303.Calculate Amount Paid in Taxes][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Calculate Amount Paid in Taxes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/calculate-amount-paid-in-taxes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution.go b/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution_test.go b/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2303.Calculate-Amount-Paid-in-Taxes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/README.md b/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/README.md new file mode 100755 index 000000000..84f6f12cd --- /dev/null +++ b/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/README.md @@ -0,0 +1,32 @@ +# [2304.Minimum Path Cost in a Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Path Cost in a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-path-cost-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution.go b/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution_test.go b/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2304.Minimum-Path-Cost-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md new file mode 100755 index 000000000..39502e3e3 --- /dev/null +++ b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md @@ -0,0 +1,32 @@ +# [2305.Fair Distribution of Cookies][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Fair Distribution of Cookies +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/fair-distribution-of-cookies/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2306.Naming-a-Company/README.md b/leetcode/2301-2400/2306.Naming-a-Company/README.md new file mode 100755 index 000000000..23240a3df --- /dev/null +++ b/leetcode/2301-2400/2306.Naming-a-Company/README.md @@ -0,0 +1,32 @@ +# [2306.Naming a Company][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Naming a Company +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/naming-a-company/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2306.Naming-a-Company/Solution.go b/leetcode/2301-2400/2306.Naming-a-Company/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2306.Naming-a-Company/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go b/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/README.md b/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/README.md new file mode 100755 index 000000000..f49c6de3e --- /dev/null +++ b/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/README.md @@ -0,0 +1,32 @@ +# [2309.Greatest English Letter in Upper and Lower Case][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Greatest English Letter in Upper and Lower Case +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/greatest-english-letter-in-upper-and-lower-case/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution.go b/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution_test.go b/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2309.Greatest-English-Letter-in-Upper-and-Lower-Case/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/README.md b/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/README.md new file mode 100755 index 000000000..f844867b6 --- /dev/null +++ b/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/README.md @@ -0,0 +1,32 @@ +# [2310.Sum of Numbers With Units Digit 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 +> ... +Sum of Numbers With Units Digit K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-numbers-with-units-digit-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution.go b/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution_test.go b/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2310.Sum-of-Numbers-With-Units-Digit-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/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/README.md b/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/README.md new file mode 100755 index 000000000..5ea2af31d --- /dev/null +++ b/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [2311.Longest Binary Subsequence Less Than or 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 +> ... +Longest Binary Subsequence Less Than or Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-binary-subsequence-less-than-or-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution.go b/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution_test.go b/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2311.Longest-Binary-Subsequence-Less-Than-or-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/2301-2400/2312.Selling-Pieces-of-Wood/README.md b/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/README.md new file mode 100755 index 000000000..767952eec --- /dev/null +++ b/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/README.md @@ -0,0 +1,32 @@ +# [2312.Selling Pieces of Wood][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Selling Pieces of Wood +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/selling-pieces-of-wood/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution.go b/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution_test.go b/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2312.Selling-Pieces-of-Wood/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2315.Count-Asterisks/README.md b/leetcode/2301-2400/2315.Count-Asterisks/README.md new file mode 100755 index 000000000..7ea6a50d1 --- /dev/null +++ b/leetcode/2301-2400/2315.Count-Asterisks/README.md @@ -0,0 +1,32 @@ +# [2315.Count Asterisks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Asterisks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-asterisks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2315.Count-Asterisks/Solution.go b/leetcode/2301-2400/2315.Count-Asterisks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2315.Count-Asterisks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2315.Count-Asterisks/Solution_test.go b/leetcode/2301-2400/2315.Count-Asterisks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2315.Count-Asterisks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md new file mode 100755 index 000000000..01b6c7ba8 --- /dev/null +++ b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md @@ -0,0 +1,32 @@ +# [2316.Count Unreachable Pairs of Nodes in an Undirected Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Unreachable Pairs of Nodes in an Undirected Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-unreachable-pairs-of-nodes-in-an-undirected-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/README.md b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/README.md new file mode 100755 index 000000000..e0aa2b793 --- /dev/null +++ b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/README.md @@ -0,0 +1,32 @@ +# [2317.Maximum XOR After Operations ][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum XOR After Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-xor-after-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution.go b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution_test.go b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations-/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/README.md b/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/README.md new file mode 100755 index 000000000..1f1428c10 --- /dev/null +++ b/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/README.md @@ -0,0 +1,32 @@ +# [2318.Number of Distinct Roll 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 +> ... +Number of Distinct Roll Sequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-distinct-roll-sequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution.go b/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution_test.go b/leetcode/2301-2400/2318.Number-of-Distinct-Roll-Sequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2318.Number-of-Distinct-Roll-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/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/README.md b/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/README.md new file mode 100755 index 000000000..a54a80c87 --- /dev/null +++ b/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/README.md @@ -0,0 +1,32 @@ +# [2319.Check if Matrix Is X-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 +> ... +Check if Matrix Is X-Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-matrix-is-x-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution.go b/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution_test.go b/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2319.Check-if-Matrix-Is-X-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/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/README.md b/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/README.md new file mode 100755 index 000000000..71efad774 --- /dev/null +++ b/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/README.md @@ -0,0 +1,32 @@ +# [2320.Count Number of Ways to Place Houses][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Ways to Place Houses +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-ways-to-place-houses/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution.go b/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution_test.go b/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2320.Count-Number-of-Ways-to-Place-Houses/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/README.md b/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/README.md new file mode 100755 index 000000000..6d9e6b137 --- /dev/null +++ b/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/README.md @@ -0,0 +1,32 @@ +# [2321.Maximum Score Of Spliced Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Score Of Spliced Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-score-of-spliced-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution.go b/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution_test.go b/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2321.Maximum-Score-Of-Spliced-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/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md new file mode 100755 index 000000000..0bc3f2043 --- /dev/null +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md @@ -0,0 +1,32 @@ +# [2322.Minimum Score After Removals on a Tree][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Score After Removals on a Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-score-after-removals-on-a-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-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/2301-2400/2325.Decode-the-Message/README.md b/leetcode/2301-2400/2325.Decode-the-Message/README.md new file mode 100755 index 000000000..ab3b63856 --- /dev/null +++ b/leetcode/2301-2400/2325.Decode-the-Message/README.md @@ -0,0 +1,32 @@ +# [2325.Decode the Message][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Decode the Message +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/decode-the-message/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2325.Decode-the-Message/Solution.go b/leetcode/2301-2400/2325.Decode-the-Message/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2325.Decode-the-Message/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go b/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/README.md b/leetcode/2301-2400/2326.Spiral-Matrix-IV/README.md new file mode 100755 index 000000000..dc72e7cdd --- /dev/null +++ b/leetcode/2301-2400/2326.Spiral-Matrix-IV/README.md @@ -0,0 +1,32 @@ +# [2326.Spiral Matrix IV][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Spiral Matrix IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/spiral-matrix-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2326.Spiral-Matrix-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md new file mode 100755 index 000000000..cf66c0936 --- /dev/null +++ b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/README.md @@ -0,0 +1,32 @@ +# [2327.Number of People Aware of a Secret][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of People Aware of a Secret +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-people-aware-of-a-secret/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2327.Number-of-People-Aware-of-a-Secret/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md new file mode 100755 index 000000000..e05a57f1b --- /dev/null +++ b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md @@ -0,0 +1,32 @@ +# [2328.Number of Increasing Paths in a Grid][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Increasing Paths in a Grid +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-increasing-paths-in-a-grid/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/README.md b/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/README.md new file mode 100755 index 000000000..8708489c7 --- /dev/null +++ b/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/README.md @@ -0,0 +1,32 @@ +# [2331.Evaluate Boolean Binary Tree][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Evaluate Boolean Binary Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/evaluate-boolean-binary-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution.go b/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution_test.go b/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2331.Evaluate-Boolean-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/README.md b/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/README.md new file mode 100755 index 000000000..c4c2abcd7 --- /dev/null +++ b/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/README.md @@ -0,0 +1,32 @@ +# [2332.The Latest Time to Catch a Bus][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Latest Time to Catch a Bus +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-latest-time-to-catch-a-bus/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution.go b/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution_test.go b/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2332.The-Latest-Time-to-Catch-a-Bus/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/README.md b/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/README.md new file mode 100755 index 000000000..ad422e1a1 --- /dev/null +++ b/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/README.md @@ -0,0 +1,32 @@ +# [2333.Minimum Sum of Squared 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 +> ... +Minimum Sum of Squared Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-sum-of-squared-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution.go b/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution_test.go b/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2333.Minimum-Sum-of-Squared-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/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/README.md b/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/README.md new file mode 100755 index 000000000..3b9b634e4 --- /dev/null +++ b/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/README.md @@ -0,0 +1,32 @@ +# [2334.Subarray With Elements Greater Than Varying 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Subarray With Elements Greater Than Varying Threshold +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/subarray-with-elements-greater-than-varying-threshold/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution.go b/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution_test.go b/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2334.Subarray-With-Elements-Greater-Than-Varying-Threshold/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/README.md b/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/README.md new file mode 100755 index 000000000..7302a209a --- /dev/null +++ b/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/README.md @@ -0,0 +1,32 @@ +# [2335.Minimum Amount of Time to Fill Cups][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Amount of Time to Fill Cups +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-amount-of-time-to-fill-cups/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution.go b/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution_test.go b/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2335.Minimum-Amount-of-Time-to-Fill-Cups/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md new file mode 100755 index 000000000..a34298856 --- /dev/null +++ b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md @@ -0,0 +1,32 @@ +# [2336.Smallest Number in Infinite Set][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Number in Infinite Set +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-number-in-infinite-set/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md new file mode 100755 index 000000000..af73de22e --- /dev/null +++ b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/README.md @@ -0,0 +1,32 @@ +# [2337.Move Pieces to Obtain a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Move Pieces to Obtain a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/move-pieces-to-obtain-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2337.Move-Pieces-to-Obtain-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md new file mode 100755 index 000000000..d50e3f325 --- /dev/null +++ b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/README.md @@ -0,0 +1,32 @@ +# [2338.Count the Number of Ideal Arrays][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count the Number of Ideal Arrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-the-number-of-ideal-arrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-Arrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2338.Count-the-Number-of-Ideal-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/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/README.md b/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/README.md new file mode 100755 index 000000000..78e391ef4 --- /dev/null +++ b/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/README.md @@ -0,0 +1,32 @@ +# [2341.Maximum Number of Pairs in Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Pairs in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-pairs-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution.go b/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution_test.go b/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2341.Maximum-Number-of-Pairs-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md new file mode 100755 index 000000000..5f594706e --- /dev/null +++ b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/README.md @@ -0,0 +1,32 @@ +# [2342.Max Sum of a Pair With Equal Sum of Digits][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Max Sum of a Pair With Equal Sum of Digits +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/max-sum-of-a-pair-with-equal-sum-of-digits/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2342.Max-Sum-of-a-Pair-With-Equal-Sum-of-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md new file mode 100755 index 000000000..e49a1a0c9 --- /dev/null +++ b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/README.md @@ -0,0 +1,32 @@ +# [2343.Query Kth Smallest Trimmed Number][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Query Kth Smallest Trimmed Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/query-kth-smallest-trimmed-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2343.Query-Kth-Smallest-Trimmed-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/README.md b/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/README.md new file mode 100755 index 000000000..b99c06b48 --- /dev/null +++ b/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/README.md @@ -0,0 +1,32 @@ +# [2344.Minimum Deletions to Make Array Divisible][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Deletions to Make Array Divisible +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-deletions-to-make-array-divisible/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution.go b/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution_test.go b/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2344.Minimum-Deletions-to-Make-Array-Divisible/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2347.Best-Poker-Hand/README.md b/leetcode/2301-2400/2347.Best-Poker-Hand/README.md new file mode 100755 index 000000000..6310a119b --- /dev/null +++ b/leetcode/2301-2400/2347.Best-Poker-Hand/README.md @@ -0,0 +1,32 @@ +# [2347.Best Poker Hand][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Best Poker Hand +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/best-poker-hand/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2347.Best-Poker-Hand/Solution.go b/leetcode/2301-2400/2347.Best-Poker-Hand/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2347.Best-Poker-Hand/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2347.Best-Poker-Hand/Solution_test.go b/leetcode/2301-2400/2347.Best-Poker-Hand/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2347.Best-Poker-Hand/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md new file mode 100755 index 000000000..f0f309525 --- /dev/null +++ b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md @@ -0,0 +1,32 @@ +# [2348.Number of Zero-Filled Subarrays][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Zero-Filled Subarrays +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-zero-filled-subarrays/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md b/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md new file mode 100755 index 000000000..223c5767d --- /dev/null +++ b/leetcode/2301-2400/2349.Design-a-Number-Container-System/README.md @@ -0,0 +1,32 @@ +# [2349.Design a Number Container System][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design a Number Container System +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-a-number-container-system/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2349.Design-a-Number-Container-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..9f3908f18 --- /dev/null +++ b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Shortest Impossible Sequence of Rolls +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shortest-impossible-sequence-of-rolls/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2350.Shortest-Impossible-Sequence-of-Rolls/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/README.md b/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/README.md new file mode 100755 index 000000000..86c4f3a38 --- /dev/null +++ b/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/README.md @@ -0,0 +1,32 @@ +# [2351.First Letter to Appear Twice][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +First Letter to Appear Twice +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/first-letter-to-appear-twice/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution.go b/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution_test.go b/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2351.First-Letter-to-Appear-Twice/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md new file mode 100755 index 000000000..a3b618ede --- /dev/null +++ b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md @@ -0,0 +1,32 @@ +# [2352.Equal Row and Column Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Equal Row and Column Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/equal-row-and-column-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md new file mode 100755 index 000000000..dd0ad8a84 --- /dev/null +++ b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Design a Food Rating System +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-a-food-rating-system/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2353.Design-a-Food-Rating-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/README.md b/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/README.md new file mode 100755 index 000000000..f486a6e07 --- /dev/null +++ b/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/README.md @@ -0,0 +1,32 @@ +# [2354.Number of Excellent Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Excellent Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-excellent-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution.go b/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution_test.go b/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2354.Number-of-Excellent-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/README.md b/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/README.md new file mode 100755 index 000000000..a7a3c9166 --- /dev/null +++ b/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/README.md @@ -0,0 +1,35 @@ +# [2357.Make Array Zero by Subtracting Equal Amounts][title] + +## Description +You are given a non-negative integer array `nums`. In one operation, you must: + +- Choose a positive integer `x` such that `x` is less than or equal to the **smallest non-zero** element in `nums`. +- Subtract `x` from every **positive** element in `nums`. + +Return the **minimum** number of operations to make every element in `nums` equal to `0`. + +**Example 1:** + +``` +Input: nums = [1,5,0,3,5] +Output: 3 +Explanation: +In the first operation, choose x = 1. Now, nums = [0,4,0,2,4]. +In the second operation, choose x = 2. Now, nums = [0,2,0,0,2]. +In the third operation, choose x = 2. Now, nums = [0,0,0,0,0]. +``` + +**Example 2:** + +``` +Input: nums = [0] +Output: 0 +Explanation: Each element in nums is already 0 so no operations are needed. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/make-array-zero-by-subtracting-equal-amounts/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution.go b/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution.go new file mode 100644 index 000000000..a821ceb85 --- /dev/null +++ b/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution.go @@ -0,0 +1,12 @@ +package Solution + +func Solution(nums []int) int { + bucket := make(map[int]struct{}) + for _, n := range nums { + if n == 0 { + continue + } + bucket[n] = struct{}{} + } + return len(bucket) +} diff --git a/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution_test.go b/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/Solution_test.go new file mode 100644 index 000000000..c55095ce0 --- /dev/null +++ b/leetcode/2301-2400/2357.Make-Array-Zero-by-Subtracting-Equal-Amounts/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{1, 5, 0, 3, 5}, 3}, + {"TestCase2", []int{0}, 0}, + {"TestCase3", []int{1}, 1}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/README.md b/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/README.md new file mode 100755 index 000000000..2c3516486 --- /dev/null +++ b/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/README.md @@ -0,0 +1,32 @@ +# [2358.Maximum Number of Groups Entering a Competition][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Groups Entering a Competition +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-groups-entering-a-competition/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution.go b/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution_test.go b/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2358.Maximum-Number-of-Groups-Entering-a-Competition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md new file mode 100755 index 000000000..d96f028a6 --- /dev/null +++ b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md @@ -0,0 +1,32 @@ +# [2359.Find Closest Node to Given Two 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 Closest Node to Given Two Nodes +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-closest-node-to-given-two-nodes/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-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/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md new file mode 100755 index 000000000..59a7c6513 --- /dev/null +++ b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md @@ -0,0 +1,32 @@ +# [2360.Longest Cycle in a Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Cycle in a Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-cycle-in-a-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2363.Merge-Similar-Items/README.md b/leetcode/2301-2400/2363.Merge-Similar-Items/README.md new file mode 100755 index 000000000..d4274933b --- /dev/null +++ b/leetcode/2301-2400/2363.Merge-Similar-Items/README.md @@ -0,0 +1,32 @@ +# [2363.Merge Similar 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 +> ... +Merge Similar Items +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/merge-similar-items/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2363.Merge-Similar-Items/Solution.go b/leetcode/2301-2400/2363.Merge-Similar-Items/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2363.Merge-Similar-Items/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2363.Merge-Similar-Items/Solution_test.go b/leetcode/2301-2400/2363.Merge-Similar-Items/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2363.Merge-Similar-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/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md new file mode 100755 index 000000000..14b8afa41 --- /dev/null +++ b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/README.md @@ -0,0 +1,32 @@ +# [2364.Count Number of Bad Pairs][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Bad Pairs +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-bad-pairs/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2364.Count-Number-of-Bad-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2365.Task-Scheduler-II/README.md b/leetcode/2301-2400/2365.Task-Scheduler-II/README.md new file mode 100755 index 000000000..5df3958c3 --- /dev/null +++ b/leetcode/2301-2400/2365.Task-Scheduler-II/README.md @@ -0,0 +1,32 @@ +# [2365.Task Scheduler 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 +> ... +Task Scheduler II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/task-scheduler-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2365.Task-Scheduler-II/Solution.go b/leetcode/2301-2400/2365.Task-Scheduler-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2365.Task-Scheduler-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2365.Task-Scheduler-II/Solution_test.go b/leetcode/2301-2400/2365.Task-Scheduler-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2365.Task-Scheduler-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/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/README.md b/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/README.md new file mode 100755 index 000000000..7ea4d5b6b --- /dev/null +++ b/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/README.md @@ -0,0 +1,32 @@ +# [2366.Minimum Replacements to Sort 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Replacements to Sort the Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-replacements-to-sort-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution.go b/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution_test.go b/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2366.Minimum-Replacements-to-Sort-the-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/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md new file mode 100755 index 000000000..080678717 --- /dev/null +++ b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md @@ -0,0 +1,32 @@ +# [2367.Number of Arithmetic Triplets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Arithmetic Triplets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-arithmetic-triplets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md new file mode 100755 index 000000000..8a124eb7a --- /dev/null +++ b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/README.md @@ -0,0 +1,32 @@ +# [2368.Reachable Nodes With Restrictions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reachable Nodes With Restrictions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reachable-nodes-with-restrictions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2368.Reachable-Nodes-With-Restrictions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md new file mode 100755 index 000000000..603cc24c1 --- /dev/null +++ b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md @@ -0,0 +1,32 @@ +# [2369.Check if There is a Valid Partition For 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check if There is a Valid Partition For The Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-if-there-is-a-valid-partition-for-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution_test.go b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-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/2301-2400/2370.Longest-Ideal-Subsequence/README.md b/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/README.md new file mode 100755 index 000000000..adef61878 --- /dev/null +++ b/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/README.md @@ -0,0 +1,32 @@ +# [2370.Longest Ideal Subsequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Ideal Subsequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-ideal-subsequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution.go b/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution_test.go b/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2370.Longest-Ideal-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/README.md b/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/README.md new file mode 100755 index 000000000..bbda67a43 --- /dev/null +++ b/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/README.md @@ -0,0 +1,32 @@ +# [2373.Largest Local Values in a 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 +> ... +Largest Local Values in a Matrix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-local-values-in-a-matrix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution.go b/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution_test.go b/leetcode/2301-2400/2373.Largest-Local-Values-in-a-Matrix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2373.Largest-Local-Values-in-a-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/2301-2400/2374.Node-With-Highest-Edge-Score/README.md b/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/README.md new file mode 100755 index 000000000..675a43fa8 --- /dev/null +++ b/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/README.md @@ -0,0 +1,32 @@ +# [2374.Node With Highest Edge 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 +> ... +Node With Highest Edge Score +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/node-with-highest-edge-score/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution.go b/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution_test.go b/leetcode/2301-2400/2374.Node-With-Highest-Edge-Score/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2374.Node-With-Highest-Edge-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/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md new file mode 100755 index 000000000..f1befb500 --- /dev/null +++ b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/README.md @@ -0,0 +1,32 @@ +# [2375.Construct Smallest Number From DI String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Construct Smallest Number From DI String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/construct-smallest-number-from-di-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2375.Construct-Smallest-Number-From-DI-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/2301-2400/2376.Count-Special-Integers/README.md b/leetcode/2301-2400/2376.Count-Special-Integers/README.md new file mode 100755 index 000000000..3187a6935 --- /dev/null +++ b/leetcode/2301-2400/2376.Count-Special-Integers/README.md @@ -0,0 +1,32 @@ +# [2376.Count Special 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 Special Integers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-special-integers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2376.Count-Special-Integers/Solution.go b/leetcode/2301-2400/2376.Count-Special-Integers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2376.Count-Special-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2376.Count-Special-Integers/Solution_test.go b/leetcode/2301-2400/2376.Count-Special-Integers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2376.Count-Special-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/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md new file mode 100755 index 000000000..9c3ca6447 --- /dev/null +++ b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/README.md @@ -0,0 +1,32 @@ +# [2379.Minimum Recolors to Get K Consecutive Black Blocks][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Recolors to Get K Consecutive Black Blocks +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-recolors-to-get-k-consecutive-black-blocks/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2379.Minimum-Recolors-to-Get-K-Consecutive-Black-Blocks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/README.md b/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/README.md new file mode 100755 index 000000000..813c0fde5 --- /dev/null +++ b/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/README.md @@ -0,0 +1,32 @@ +# [2380.Time Needed to Rearrange a 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Time Needed to Rearrange a Binary String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/time-needed-to-rearrange-a-binary-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution.go b/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution_test.go b/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2380.Time-Needed-to-Rearrange-a-Binary-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/2301-2400/2381.Shifting-Letters-II/README.md b/leetcode/2301-2400/2381.Shifting-Letters-II/README.md new file mode 100755 index 000000000..8db8e7790 --- /dev/null +++ b/leetcode/2301-2400/2381.Shifting-Letters-II/README.md @@ -0,0 +1,32 @@ +# [2381.Shifting Letters 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 +> ... +Shifting Letters II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shifting-letters-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2381.Shifting-Letters-II/Solution.go b/leetcode/2301-2400/2381.Shifting-Letters-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2381.Shifting-Letters-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2381.Shifting-Letters-II/Solution_test.go b/leetcode/2301-2400/2381.Shifting-Letters-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2381.Shifting-Letters-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/2301-2400/2382.Maximum-Segment-Sum-After-Removals/README.md b/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/README.md new file mode 100755 index 000000000..9605d1855 --- /dev/null +++ b/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/README.md @@ -0,0 +1,32 @@ +# [2382.Maximum Segment Sum After Removals][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Segment Sum After Removals +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-segment-sum-after-removals/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution.go b/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution_test.go b/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2382.Maximum-Segment-Sum-After-Removals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/README.md b/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/README.md new file mode 100755 index 000000000..218462057 --- /dev/null +++ b/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/README.md @@ -0,0 +1,32 @@ +# [2383.Minimum Hours of Training to Win a Competition][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Hours of Training to Win a Competition +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-hours-of-training-to-win-a-competition/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution.go b/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution_test.go b/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2383.Minimum-Hours-of-Training-to-Win-a-Competition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2384.Largest-Palindromic-Number/README.md b/leetcode/2301-2400/2384.Largest-Palindromic-Number/README.md new file mode 100755 index 000000000..64861db59 --- /dev/null +++ b/leetcode/2301-2400/2384.Largest-Palindromic-Number/README.md @@ -0,0 +1,32 @@ +# [2384.Largest Palindromic 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Palindromic Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-palindromic-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution.go b/leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution_test.go b/leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2384.Largest-Palindromic-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md new file mode 100755 index 000000000..8679eed4b --- /dev/null +++ b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md @@ -0,0 +1,32 @@ +# [2385.Amount of Time for Binary Tree to Be Infected][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Amount of Time for Binary Tree to Be Infected +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/amount-of-time-for-binary-tree-to-be-infected/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/README.md b/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/README.md new file mode 100755 index 000000000..318448132 --- /dev/null +++ b/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/README.md @@ -0,0 +1,32 @@ +# [2386.Find the K-Sum 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-Sum of an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-k-sum-of-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution.go b/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution_test.go b/leetcode/2301-2400/2386.Find-the-K-Sum-of-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2386.Find-the-K-Sum-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/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md new file mode 100755 index 000000000..3a60382c7 --- /dev/null +++ b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md @@ -0,0 +1,32 @@ +# [2389.Longest Subsequence With Limited 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 +> ... +Longest Subsequence With Limited Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-subsequence-with-limited-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-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/2301-2400/2390.Removing-Stars-From-a-String/README.md b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md new file mode 100755 index 000000000..b818423ce --- /dev/null +++ b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md @@ -0,0 +1,32 @@ +# [2390.Removing Stars From a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Removing Stars From a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/removing-stars-from-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md new file mode 100755 index 000000000..eb8384a37 --- /dev/null +++ b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md @@ -0,0 +1,32 @@ +# [2391.Minimum Amount of Time to Collect Garbage][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Amount of Time to Collect Garbage +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-amount-of-time-to-collect-garbage/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md new file mode 100755 index 000000000..0f48c237e --- /dev/null +++ b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/README.md @@ -0,0 +1,32 @@ +# [2392.Build a Matrix With Conditions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Build a Matrix With Conditions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/build-a-matrix-with-conditions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2392.Build-a-Matrix-With-Conditions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md new file mode 100755 index 000000000..ce147751c --- /dev/null +++ b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md @@ -0,0 +1,32 @@ +# [2395.Find Subarrays With Equal 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 +> ... +Find Subarrays With Equal Sum +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-subarrays-with-equal-sum/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-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/2301-2400/2396.Strictly-Palindromic-Number/README.md b/leetcode/2301-2400/2396.Strictly-Palindromic-Number/README.md new file mode 100755 index 000000000..15e176580 --- /dev/null +++ b/leetcode/2301-2400/2396.Strictly-Palindromic-Number/README.md @@ -0,0 +1,32 @@ +# [2396.Strictly Palindromic 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Strictly Palindromic Number +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/strictly-palindromic-number/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution.go b/leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution_test.go b/leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2396.Strictly-Palindromic-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/README.md b/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/README.md new file mode 100755 index 000000000..99fd5abaf --- /dev/null +++ b/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/README.md @@ -0,0 +1,32 @@ +# [2397.Maximum Rows Covered by Columns][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Rows Covered by Columns +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-rows-covered-by-columns/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution.go b/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution_test.go b/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2397.Maximum-Rows-Covered-by-Columns/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/README.md b/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/README.md new file mode 100755 index 000000000..554f2ace2 --- /dev/null +++ b/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/README.md @@ -0,0 +1,32 @@ +# [2398.Maximum Number of Robots Within Budget][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Number of Robots Within Budget +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-robots-within-budget/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution.go b/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution_test.go b/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2398.Maximum-Number-of-Robots-Within-Budget/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/README.md b/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/README.md new file mode 100755 index 000000000..f1f5ca296 --- /dev/null +++ b/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/README.md @@ -0,0 +1,32 @@ +# [2399.Check Distances Between Same Letters][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Check Distances Between Same Letters +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/check-distances-between-same-letters/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution.go b/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution_test.go b/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2399.Check-Distances-Between-Same-Letters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/README.md b/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/README.md new file mode 100755 index 000000000..35eb6e4de --- /dev/null +++ b/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/README.md @@ -0,0 +1,32 @@ +# [2400.Number of Ways to Reach a Position After Exactly k Steps][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Ways to Reach a Position After Exactly k Steps +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-to-reach-a-position-after-exactly-k-steps/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution.go b/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution_test.go b/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2400.Number-of-Ways-to-Reach-a-Position-After-Exactly-k-Steps/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, 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 23b22a9165768a03101b8fa12983a748ae21011c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 17 Sep 2022 16:21:45 +0800 Subject: [PATCH 0091/1057] Add solution and test-cases for problem 1502 --- .../README.md | 24 +++++----- .../Solution.go | 45 ++++++++++++++++++- .../Solution_test.go | 12 ++--- 3 files changed, 61 insertions(+), 20 deletions(-) diff --git a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md index b72529362..f3e037651 100755 --- a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md +++ b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/README.md @@ -1,28 +1,26 @@ # [1502.Can Make Arithmetic Progression From Sequence][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) ## Description +A sequence of numbers is called an **arithmetic progression** if the difference between any two consecutive elements is the same. + +Given an array of numbers `arr`, return `true` if the array can be rearranged to form an **arithmetic progression**. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [3,5,1] +Output: true +Explanation: We can reorder the elements as [1,3,5] or [5,3,1] with differences 2 and -2 respectively, between each consecutive elements. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Can Make Arithmetic Progression From Sequence -```go ``` - +Input: arr = [1,2,4] +Output: false +Explanation: There is no way to reorder the elements to obtain an arithmetic progression. +``` ## 结语 diff --git a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go index d115ccf5e..17493c9d2 100644 --- a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go +++ b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type arr1502 []int + +func (a *arr1502) Len() int { + return len(*a) +} + +func (a *arr1502) Less(i, j int) bool { + return (*a)[i] < (*a)[j] +} + +func (a *arr1502) Swap(i, j int) { + (*a)[i], (*a)[j] = (*a)[j], (*a)[i] +} + +func (a *arr1502) Push(x interface{}) { + *a = append(*a, x.(int)) +} + +func (a *arr1502) Pop() interface{} { + old := *a + l := len(old) + x := old[l-1] + *a = old[:l-1] return x } + +func Solution(arr []int) bool { + h := arr1502(arr) + heap.Init(&h) + + first := heap.Pop(&h).(int) + diff := -1 + + for (&h).Len() > 0 { + second := heap.Pop(&h).(int) + _diff := second - first + if diff != -1 && diff != _diff { + return false + } + diff = _diff + first = second + } + return true +} diff --git a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go index 14ff50eb4..d56f0a15f 100644 --- a/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/Solution_test.go +++ b/leetcode/1501-1600/1502.Can-Make-Arithmetic-Progression-From-Sequence/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, 5}, true}, + {"TestCase2", []int{1, 2, 4}, false}, + {"TestCase3", []int{2, 4, 6}, true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 73fa6274531d5e0eace43d1c0a0b21a5f0d99040 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 1 Oct 2022 18:39:27 +0800 Subject: [PATCH 0092/1057] Add solution and test-cases for problem 1837 --- .../1837.Sum-of-Digits-in-Base-K/README.md | 25 ++++++++----------- .../1837.Sum-of-Digits-in-Base-K/Solution.go | 9 +++++-- .../Solution_test.go | 19 +++++++------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md index cea028f27..ba47546da 100755 --- a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md +++ b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/README.md @@ -1,28 +1,25 @@ # [1837.Sum of Digits in Base K][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `n` (in base `10`) and a base `k`, return the **sum** of the digits of `n` **after** converting `n` from base `10` to base `k`. + +After converting, each digit should be interpreted as a base `10` number, and the sum should be returned in base `10`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 34, k = 6 +Output: 9 +Explanation: 34 (base 10) expressed in base 6 is 54. 5 + 4 = 9. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sum of Digits in Base K -```go ``` - +Input: n = 10, k = 10 +Output: 1 +Explanation: n is already in base 10. 1 + 0 = 1. +``` ## 结语 diff --git a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go index d115ccf5e..f78c452bf 100644 --- a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go +++ b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution.go @@ -1,5 +1,10 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, k int) int { + + ans := 0 + for base := n; base != 0; base /= k { + ans += base % k + } + return ans } diff --git a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go index 14ff50eb4..e9d86027f 100644 --- a/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go +++ b/leetcode/1801-1900/1837.Sum-of-Digits-in-Base-K/Solution_test.go @@ -10,30 +10,29 @@ 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", 34, 6, 9}, + {"TestCase2", 10, 10, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.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 86d296b58fd5a99e117ad4057ee7a42f03963510 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 4 Oct 2022 12:13:59 +0800 Subject: [PATCH 0093/1057] Add solution and test-cases for problem 2278 --- .../README.md | 25 ++++++++----------- .../Solution.go | 11 ++++++-- .../Solution_test.go | 20 +++++++-------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md index 95fc5ac71..f92417be4 100755 --- a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md +++ b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/README.md @@ -1,28 +1,25 @@ # [2278.Percentage of Letter 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 +Given a string `s` and a character `letter`, return the **percentage** of characters in `s` that equal `letter` **rounded down** to the nearest whole percent. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "foobar", letter = "o" +Output: 33 +Explanation: +The percentage of characters in s that equal the letter 'o' is 2 / 6 * 100% = 33% when rounded down, so we return 33. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Percentage of Letter in String -```go ``` - +Input: s = "jjjj", letter = "k" +Output: 0 +Explanation: +The percentage of characters in s that equal the letter 'k' is 0%, so we return 0. +``` ## 结语 diff --git a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go index d115ccf5e..c29ffe97e 100644 --- a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go +++ b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution.go @@ -1,5 +1,12 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, letter byte) int { + count := 0 + for _, b := range s { + if byte(b) == letter { + count++ + } + } + + return count * 100 / len(s) } diff --git a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go index 14ff50eb4..d3c6979c2 100644 --- a/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go +++ b/leetcode/2201-2300/2278.Percentage-of-Letter-in-String/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + letter byte + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "foobar", byte('o'), 33}, + {"TestCase2", "jjjj", byte('k'), 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.letter) 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.letter) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 553a350dbe897757d01157972a904d54381754d3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 5 Oct 2022 19:31:34 +0800 Subject: [PATCH 0094/1057] Add solution and test-cases for problem 623 --- .../0623.Add-One-Row-to-Tree/README.md | 35 ++++++------ .../0623.Add-One-Row-to-Tree/Solution.go | 34 +++++++++++- .../0623.Add-One-Row-to-Tree/Solution_test.go | 50 ++++++++++++++---- .../0623.Add-One-Row-to-Tree/add2-tree.jpg | Bin 0 -> 23689 bytes .../0623.Add-One-Row-to-Tree/addrow-tree.jpg | Bin 0 -> 33759 bytes 5 files changed, 91 insertions(+), 28 deletions(-) create mode 100644 leetcode/601-700/0623.Add-One-Row-to-Tree/add2-tree.jpg create mode 100644 leetcode/601-700/0623.Add-One-Row-to-Tree/addrow-tree.jpg diff --git a/leetcode/601-700/0623.Add-One-Row-to-Tree/README.md b/leetcode/601-700/0623.Add-One-Row-to-Tree/README.md index 7c47c2e45..07a77de14 100644 --- a/leetcode/601-700/0623.Add-One-Row-to-Tree/README.md +++ b/leetcode/601-700/0623.Add-One-Row-to-Tree/README.md @@ -1,28 +1,33 @@ # [623.Add One Row to 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 and two integers `val` and `depth`, add a row of nodes with value `val` at the given depth `depth`. -**Example 1:** +Note that the `root` node is at depth `1`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The adding rule is: + +- Given the integer `depth`, for each not null tree node `cur` at the depth `depth - 1`, create two tree nodes with value `val` as `cur`'s left subtree root and right subtree root. +- `cur`'s original left subtree should be the left subtree of the new left subtree root. +- `cur`'s original right subtree should be the right subtree of the new right subtree root. +- If `depth == 1` that means there is no depth `depth - 1` at all, then create a tree node with value `val` as the new root of the whole original tree, and the original tree is the new root's left subtree. -## 题意 -> ... -## 题解 +**Example 1:** +![example1](./addrow-tree.jpg) -### 思路1 -> ... -Add One Row to Tree -```go ``` +Input: root = [4,2,6,3,1,5], val = 1, depth = 2 +Output: [4,1,1,2,null,null,6,3,1,5] +``` + +**Example 2:** +![example2](./add2-tree.jpg) +``` +Input: root = [4,2,null,3,1], val = 1, depth = 3 +Output: [4,2,null,1,1,3,null,null,1] +``` ## 结语 diff --git a/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution.go b/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution.go index d115ccf5e..3b7981cd0 100644 --- a/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution.go +++ b/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode, val int, depth int) *TreeNode { + if depth == 1 { + node := &TreeNode{Val: val, Left: root} + return node + } + addOneRow623(root, val, 1, depth) + return root +} + +func addOneRow623(root *TreeNode, val, depth, target int) { + if root == nil { + return + } + + if depth == target-1 { + // need to add node + leftNode := &TreeNode{Val: val, Left: root.Left} + rightNode := &TreeNode{Val: val, Right: root.Right} + + root.Left = leftNode + root.Right = rightNode + return + } + + addOneRow623(root.Left, val, depth+1, target) + addOneRow623(root.Right, val, depth+1, target) } diff --git a/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution_test.go b/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution_test.go index 14ff50eb4..1507219e4 100644 --- a/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution_test.go +++ b/leetcode/601-700/0623.Add-One-Row-to-Tree/Solution_test.go @@ -9,31 +9,59 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + tree *TreeNode + val, depth int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 1}, + }, + Right: &TreeNode{ + Val: 6, + Left: &TreeNode{Val: 5}, + }, + }, 1, 2, &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 1}, + }, + }, + Right: &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 6, + Left: &TreeNode{Val: 5}, + }, + }, + }}, + {"TestCase2", &TreeNode{Val: 1}, 2, 1, &TreeNode{Val: 2, Left: &TreeNode{Val: 1}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.tree, c.val, c.depth) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.tree, c.val, c.depth) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0623.Add-One-Row-to-Tree/add2-tree.jpg b/leetcode/601-700/0623.Add-One-Row-to-Tree/add2-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..543c7c42a75ccc23621503b21974ce6dcb96942b GIT binary patch literal 23689 zcmbSz2Ut_vvT(2qq9P(n(IZ79fG7}JOX+eUNBm@Kr z5Fl_6X+e5IFCxA7-u|3-%X{~}ciz44pL`!{?Y-9CYu3!HS+i$maoBVC18`nPQ(F_j z#s&bev3`KVet}SrMVdpr@ar!hT z7w6e?=g)JUXFqd+`@(r{R{i`RFJb%R$)m?ku^v3nahij5_x}iozXP~Vv1J|EIm#vk zIKsttl#A`~8{q06sIu_-1L42IsS_uU9zSyIG#fjs-S9l%kCBfYJ$~%?3HDPb|Cra2 zqpbSLQ(PCWa|_)$eNpBCgh%+-CzouVp3yCMQNv3(i!g~1fPAtnd9t5_g! zY=`#peuZJZ@d|6G|2iCNRMrdGj&J^Ga*gMiz_{H)5t%uQ*+qbeE zVG%<*-`~oSCU84 z^^K#+fQMdQ{1g4k@KI9)xb*vlL?z-CPJY)!O9Aaw?7InIODt^uYr_F|ByM7>oim_Q z@as?Agz325;p^FPPNXTKu!*xP<@E9c4 zk=B8ax)dRHS#c_b)k0z!qkf8!+o&PqSg5hWKQr&&xMs@-Et)@5rA-I+8yBu6`P}6C z+}>uqnN!;JkaoM{YnlRWkjDF3OVJ;6f1=A0-7(MhZ7>mugXuZq(eXf&xJx=o)1~9r zv)@!yn(|ID=4Xgu^d$E8MwrIZ_}zt=AM$!!HNd-GQj4HB&iPCTP^j2ser~tacXA{V zfm77ND67)uTP5g)JqmhdrM6{ASAP|A!LS3rGq+f-e#l`Ce4cJLTqLFjay%Sp~n6b_z7=GmKZp_JUg1XD=K0b#iXbU{#?(4ziNj znGL`AWsjikot34t#Ru7o*sjAC&Uux4So5O$^xT_2m#SsA$gLON)498CP?1}rJ*k$-)#E= zaW;MFuY0{X*r|mhwpH!*mSDr7K?qG%Ani@FmDxnTHP>XXTNH1;$xFF!RBc z12IF-^k`-yl)fhzAG?MHuB|v80cm?r!|b=yO;+zv(p@E@YK}2RldooQ7`3DlDP}tiy~mzoB!*45bRKJXGrH zqs>QB867aQTj#reZA`9*BDYc|GGb!KD^^mXhju`=(hVZ`KKW3Dun{Zm8%=+mw&W?UM_7aH0H;@;>Q%Py18jPTkuZFUNXlL)Tt5rrNUveS?0 zCj>%xDze)V(Yb$4vp;Qlm{6warW+V#t8haU&Q;c`@@q zSRn`!Bq~v8yb*Lq+FQzoK~Gb4vn6gH*J-FEXT6yVIaTEq+Wl zqnjy(1psI6ZtvY;c;wnh-(;ZUlnEBmxN(yYElV3UxDH>Dyi)6BM zO;XIN(f>v;9rF`@wz*yVqNEl0$PUR5Eo=?@mb)C9C-kr{0Zuj#)IYu2=3em{0o<`B@KH#{GF?9*zKF1l)L zJtY`&T#8-94Kub$HA_q4aT1y@OjkHr#;HAMq4UKio*h12cTPd29(Lw}4`n@S-)x)7 zSC7XasTJEW_NhN5Fo2DKF+CB=n7U-CSL#>h=W(ylYto)W z%-7IoY1)t+WC&-538)i7;X4Ez$JaiMsLjcV^F>H!*kTETD~dkOCPOfKPN;65b>?=< z(wAhbF@@`oaqTb7L^o;5on=MiTx!R=##*($kByk}tzf}B0Z*{={1~bgN5sgEb-A

    AQXN`Pf{xa0o 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0623.Add-One-Row-to-Tree/addrow-tree.jpg b/leetcode/601-700/0623.Add-One-Row-to-Tree/addrow-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8295b3bd9d59d59ac771714d1f13a646ca459b57 GIT binary patch literal 33759 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 Date: Sat, 8 Oct 2022 22:32:27 +0800 Subject: [PATCH 0095/1057] Add solution and test-cases for problem 2395 --- .../README.md | 34 ++++++++++++------- .../Solution.go | 12 +++++-- .../Solution_test.go | 12 +++---- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md index ce147751c..920253e5e 100755 --- a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md +++ b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/README.md @@ -1,28 +1,36 @@ # [2395.Find Subarrays With Equal 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 **0-indexed** integer array `nums`, determine whether there exist `two` subarrays of length `2` with **equal** sum. Note that the two subarrays must begin at **different** indices. + +Return `true` if these subarrays exist, and `false` otherwise. + +A **subarray** is a contiguous non-empty sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,2,4] +Output: true +Explanation: The subarrays with elements [4,2] and [2,4] have the same sum of 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Subarrays With Equal Sum -```go ``` +Input: nums = [1,2,3,4,5] +Output: false +Explanation: No two subarrays of size 2 have the same sum. +``` + +**Example 3:** +``` +Input: nums = [0,0,0] +Output: true +Explanation: The subarrays [nums[0],nums[1]] and [nums[1],nums[2]] have the same sum of 0. +Note that even though the subarrays have the same content, the two subarrays are considered different because they are in different positions in the original array. +``` ## 结语 diff --git a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go index d115ccf5e..fc7061825 100644 --- a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go +++ b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) bool { + sumMap := make(map[int]struct{}) + for loop := 0; loop < len(nums)-1; loop++ { + s := nums[loop] + nums[loop+1] + if _, ok := sumMap[s]; ok { + return true + } + sumMap[s] = struct{}{} + } + return false } diff --git a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go index 14ff50eb4..dcc286902 100644 --- a/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go +++ b/leetcode/2301-2400/2395.Find-Subarrays-With-Equal-Sum/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 2, 4}, true}, + {"TestCase2", []int{1, 2, 3, 4, 5}, false}, + {"TestCase3", []int{0, 0, 0}, true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From dab02de3cab81ea8a34aca2994e76d30e9aed619 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 15 Oct 2022 23:55:01 +0800 Subject: [PATCH 0096/1057] Add solution and test-cases for problem 2094 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 28 ++++++++++++- .../Solution_test.go | 16 ++++---- 3 files changed, 63 insertions(+), 22 deletions(-) diff --git a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md index 1af75ad50..3da3c258d 100755 --- a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md +++ b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/README.md @@ -1,28 +1,43 @@ # [2094.Finding 3-Digit Even Numbers][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer array `digits`, where each element is a digit. The array may contain duplicates. + +You need to find **all** the **unique** integers that follow the given requirements: + +- The integer consists of the **concatenation** of **three** elements from `digits` in **any** arbitrary order. +- The integer does not have **leading zeros**. +- The integer is **even**. + +For example, if the given `digits` were `[1, 2, 3]`, integers `132` and `312` follow the requirements. + +Return a **sorted** array of the unique integers. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: digits = [2,1,3,0] +Output: [102,120,130,132,210,230,302,310,312,320] +Explanation: All the possible integers that follow the requirements are in the output array. +Notice that there are no odd integers or integers with leading zeros. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Finding 3-Digit Even Numbers -```go ``` +Input: digits = [2,2,8,8,2] +Output: [222,228,282,288,822,828,882] +Explanation: The same digit can be used as many times as it appears in digits. +In this example, the digit 8 is used twice each time in 288, 828, and 882. +``` + +**Example 3:** +``` +Input: digits = [3,7,5] +Output: [] +Explanation: No even integers can be formed using the given digits. +``` ## 结语 diff --git a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go index d115ccf5e..dc0db69a1 100644 --- a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go +++ b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(digits []int) []int { + + bucket := make([]int, 10) + + for _, i := range digits { + bucket[i]++ + } + + ans := make([]int, 0) + for idx := 100; idx < 1000; idx += 2 { + a := idx / 100 + b := idx % 100 + c := b / 10 + d := b % 10 + + bucket[a]-- + bucket[c]-- + bucket[d]-- + if bucket[a] >= 0 && bucket[c] >= 0 && bucket[d] >= 0 { + ans = append(ans, idx) + } + bucket[a]++ + bucket[c]++ + bucket[d]++ + } + return ans } diff --git a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go index 14ff50eb4..0fb010f15 100644 --- a/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/Solution_test.go +++ b/leetcode/2001-2100/2094.Finding-3-Digit-Even-Numbers/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{2, 1, 3, 0}, []int{102, 120, 130, 132, 210, 230, 302, 310, 312, 320}}, + {"TestCase2", []int{2, 2, 8, 8, 2}, []int{222, 228, 282, 288, 822, 828, 882}}, + {"TestCase3", []int{1, 3, 5}, []int{}}, } // 开始测试 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 8f85e9e8c709aab53ab5b25f4a41756e412112b0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 17 Oct 2022 23:05:22 +0800 Subject: [PATCH 0097/1057] Add solution and test-cases for problem 496 --- .../0496.Next-Greater-Element-I/README.md | 35 +++++++++++-------- .../0496.Next-Greater-Element-I/Solution.go | 34 ++++++++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 62 insertions(+), 27 deletions(-) diff --git a/leetcode/401-500/0496.Next-Greater-Element-I/README.md b/leetcode/401-500/0496.Next-Greater-Element-I/README.md index 897a27398..826584659 100644 --- a/leetcode/401-500/0496.Next-Greater-Element-I/README.md +++ b/leetcode/401-500/0496.Next-Greater-Element-I/README.md @@ -1,29 +1,34 @@ # [496.Next Greater Element 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 +The **next greater element** of some element x in an array is the **first greater** element that is **to the right** of `x` in the same array. -**Example 1:** +You are given two **distinct 0-indexed** integer arrays `nums1` and `nums2`, where `nums1` is a subset of `nums2`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +For each `0 <= i < nums1.length`, find the index `j` such that `nums1[i] == nums2[j]` and determine the **next greater element** of `nums2[j]` in `nums2`. If there is no next greater element, then the answer for this query is `-1`. -## 题意 -> ... +Return an array `ans` of length `nums1.length` such that `ans[i]` is the **next greater element** as described above. -## 题解 +**Example 1:** -### 思路1 -> ... -Next Greater Element I -```go +``` +Input: nums1 = [4,1,2], nums2 = [1,3,4,2] +Output: [-1,3,-1] +Explanation: The next greater element for each value of nums1 is as follows: +- 4 is underlined in nums2 = [1,3,4,2]. There is no next greater element, so the answer is -1. +- 1 is underlined in nums2 = [1,3,4,2]. The next greater element is 3. +- 2 is underlined in nums2 = [1,3,4,2]. There is no next greater element, so the answer is -1. ``` +**Example 2:** +``` +Input: nums1 = [2,4], nums2 = [1,2,3,4] +Output: [3,-1] +Explanation: The next greater element for each value of nums1 is as follows: +- 2 is underlined in nums2 = [1,2,3,4]. The next greater element is 3. +- 4 is underlined in nums2 = [1,2,3,4]. There is no next greater element, so the answer is -1. +``` ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/401-500/0496.Next-Greater-Element-I/Solution.go b/leetcode/401-500/0496.Next-Greater-Element-I/Solution.go index d115ccf5e..7494a3ee9 100644 --- a/leetcode/401-500/0496.Next-Greater-Element-I/Solution.go +++ b/leetcode/401-500/0496.Next-Greater-Element-I/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int) []int { + ans := make([]int, len(nums1)) + + greater := make([]int, len(nums2)) + bucket := make(map[int]int) + length := len(nums2) + greater[length-1] = -1 + bucket[nums2[length-1]] = length - 1 + + for idx := len(nums2) - 2; idx >= 0; idx-- { + bucket[nums2[idx]] = idx + if nums2[idx] < nums2[idx+1] { + greater[idx] = idx + 1 + continue + } + greater[idx] = -1 + next := greater[idx+1] + for ; next != -1 && nums2[next] < nums2[idx]; next = greater[next] { + } + if next != -1 { + greater[idx] = next + } + } + for idx, n := range nums1 { + nextIdx := greater[bucket[n]] + if nextIdx == -1 { + ans[idx] = nextIdx + continue + } + ans[idx] = nums2[nextIdx] + } + return ans } diff --git a/leetcode/401-500/0496.Next-Greater-Element-I/Solution_test.go b/leetcode/401-500/0496.Next-Greater-Element-I/Solution_test.go index 14ff50eb4..cc15f0420 100644 --- a/leetcode/401-500/0496.Next-Greater-Element-I/Solution_test.go +++ b/leetcode/401-500/0496.Next-Greater-Element-I/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{4, 1, 2}, []int{1, 3, 4, 2}, []int{-1, 3, -1}}, + {"TestCase2", []int{2, 4}, []int{1, 2, 3, 4}, []int{3, -1}}, + {"TestCase3", []int{1}, []int{1, 2}, []int{2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.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 0f1dc43e6a0dc231ae34e7bae45a470ce3934fff Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 18 Oct 2022 21:49:35 +0800 Subject: [PATCH 0098/1057] Add solution and test-cases for problem 1556 --- .../1556.Thousand-Separator/README.md | 22 ++++++--------- .../1556.Thousand-Separator/Solution.go | 28 +++++++++++++++++-- .../1556.Thousand-Separator/Solution_test.go | 14 +++++----- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/leetcode/1501-1600/1556.Thousand-Separator/README.md b/leetcode/1501-1600/1556.Thousand-Separator/README.md index e47a73324..64896ff48 100755 --- a/leetcode/1501-1600/1556.Thousand-Separator/README.md +++ b/leetcode/1501-1600/1556.Thousand-Separator/README.md @@ -1,28 +1,22 @@ # [1556.Thousand Separator][title] -> [!WARNING|style:flat] -> 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`, add a dot (".") as the thousands separator and return it in string format. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 987 +Output: "987" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Thousand Separator -```go ``` - +Input: n = 1234 +Output: "1.234" +``` ## 结语 diff --git a/leetcode/1501-1600/1556.Thousand-Separator/Solution.go b/leetcode/1501-1600/1556.Thousand-Separator/Solution.go index d115ccf5e..8ba04733b 100644 --- a/leetcode/1501-1600/1556.Thousand-Separator/Solution.go +++ b/leetcode/1501-1600/1556.Thousand-Separator/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(n int) string { + nString := fmt.Sprintf("%d", n) + length := len(nString) + dotCount := length / 3 + if length%3 == 0 { + dotCount-- + } + if dotCount == 0 { + return nString + } + + target := make([]byte, length+dotCount) + loop, targetIdx := 0, length+dotCount-1 + + for idx := length - 1; idx >= 0; idx-- { + target[targetIdx] = nString[idx] + targetIdx, loop = targetIdx-1, loop+1 + if loop == 3 && targetIdx >= 0 { + target[targetIdx] = '.' + targetIdx-- + loop = 0 + } + } + return string(target) } diff --git a/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go b/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go index 14ff50eb4..ec39273a0 100644 --- a/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go +++ b/leetcode/1501-1600/1556.Thousand-Separator/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 987, "987"}, + {"TestCase1", 1234, "1.234"}, + {"TestCase3", 123456789, "123.456.789"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cdcb8953ab3351b07d03a63c57e1f2213c4f4112 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 19 Oct 2022 23:02:07 +0800 Subject: [PATCH 0099/1057] Add solution and test-cases for problem 692 --- .../0692.Top-K-Frequent-Words/README.md | 26 ++++----- .../0692.Top-K-Frequent-Words/Solution.go | 58 ++++++++++++++++++- .../Solution_test.go | 20 +++---- 3 files changed, 78 insertions(+), 26 deletions(-) diff --git a/leetcode/601-700/0692.Top-K-Frequent-Words/README.md b/leetcode/601-700/0692.Top-K-Frequent-Words/README.md index d8888ed5a..85800300c 100644 --- a/leetcode/601-700/0692.Top-K-Frequent-Words/README.md +++ b/leetcode/601-700/0692.Top-K-Frequent-Words/README.md @@ -1,28 +1,26 @@ # [692.Top K Frequent 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 +Given an array of strings `words` and an integer `k`, return the k most frequent strings. + +Return the answer **sorted** by **the frequency** from highest to lowest. Sort the words with the same frequency by their **lexicographical order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["i","love","leetcode","i","love","coding"], k = 2 +Output: ["i","love"] +Explanation: "i" and "love" are the two most frequent words. +Note that "i" comes before "love" due to a lower alphabetical order. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Top K Frequent Words -```go ``` - +Input: words = ["the","day","is","sunny","the","the","the","sunny","is","is"], k = 4 +Output: ["the","is","sunny","day"] +Explanation: "the", "is", "sunny" and "day" are the four most frequent words, with the number of occurrence being 4, 3, 2 and 1 respectively. +``` ## 结语 diff --git a/leetcode/601-700/0692.Top-K-Frequent-Words/Solution.go b/leetcode/601-700/0692.Top-K-Frequent-Words/Solution.go index d115ccf5e..b95ab39f9 100644 --- a/leetcode/601-700/0692.Top-K-Frequent-Words/Solution.go +++ b/leetcode/601-700/0692.Top-K-Frequent-Words/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "container/heap" +) + +type topWord struct { + word string + count int +} + +type topWordList []topWord + +func (tl *topWordList) Len() int { + return len(*tl) +} + +func (tl *topWordList) Swap(i, j int) { + (*tl)[i], (*tl)[j] = (*tl)[j], (*tl)[i] +} + +func (tl *topWordList) Less(i, j int) bool { + if (*tl)[i].count == (*tl)[j].count { + return (*tl)[i].word < (*tl)[j].word + } + + return (*tl)[i].count > (*tl)[j].count +} + +func (tl *topWordList) Push(x interface{}) { + *tl = append(*tl, x.(topWord)) +} + +func (tl *topWordList) Pop() interface{} { + old := *tl + n := len(old) + item := old[n-1] + *tl = old[:n-1] + return item +} + +func Solution(words []string, k int) []string { + ans := make([]string, 0) + wordBucket := make(map[string]int) + for _, word := range words { + wordBucket[word]++ + } + h := topWordList([]topWord{}) + heap.Init(&h) + for k, v := range wordBucket { + heap.Push(&h, topWord{word: k, count: v}) + } + + for ; k > 0; k-- { + top := heap.Pop(&h) + ans = append(ans, top.(topWord).word) + } + return ans } diff --git a/leetcode/601-700/0692.Top-K-Frequent-Words/Solution_test.go b/leetcode/601-700/0692.Top-K-Frequent-Words/Solution_test.go index 14ff50eb4..b8421dcd3 100644 --- a/leetcode/601-700/0692.Top-K-Frequent-Words/Solution_test.go +++ b/leetcode/601-700/0692.Top-K-Frequent-Words/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + words []string + k int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"i", "love", "leetcode", "i", "love", "coding"}, 2, []string{"i", "love"}}, + {"TestCase2", []string{"the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"}, 4, []string{"the", "is", "sunny", "day"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.words, c.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, %d", + c.expect, got, c.words, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 444d5fff22d3f0d3d41db42087273bba66aa6efe Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 20 Oct 2022 22:54:00 +0800 Subject: [PATCH 0100/1057] Add solution and test-cases for problem 2325 --- .../2325.Decode-the-Message/README.md | 38 +++++++++++------- .../2325.Decode-the-Message/Solution.go | 23 ++++++++++- .../2325.Decode-the-Message/Solution_test.go | 21 +++++----- .../2325.Decode-the-Message/ex1new4.jpg | Bin 0 -> 29164 bytes .../2325.Decode-the-Message/ex2new.jpg | Bin 0 -> 27798 bytes 5 files changed, 54 insertions(+), 28 deletions(-) create mode 100644 leetcode/2301-2400/2325.Decode-the-Message/ex1new4.jpg create mode 100644 leetcode/2301-2400/2325.Decode-the-Message/ex2new.jpg diff --git a/leetcode/2301-2400/2325.Decode-the-Message/README.md b/leetcode/2301-2400/2325.Decode-the-Message/README.md index ab3b63856..21d142e15 100755 --- a/leetcode/2301-2400/2325.Decode-the-Message/README.md +++ b/leetcode/2301-2400/2325.Decode-the-Message/README.md @@ -1,28 +1,36 @@ # [2325.Decode the Message][title] -> [!WARNING|style:flat] -> 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 strings `key` and `message`, which represent a cipher key and a secret message, respectively. The steps to decode `message` are as follows: -**Example 1:** +1. Use the **first** appearance of all 26 lowercase English letters in key as the **order** of the substitution table. +2. Align the substitution table with the regular English alphabet. +3. Each letter in `message` is then **substituted** using the table. +4. Spaces `' '` are transformed to themselves. -``` -Input: a = "11", b = "1" -Output: "100" -``` +- For example, given `key = "happy boy"` (actual key would have **at least one** instance of each letter in the alphabet), we have the partial substitution table of (`'h' -> 'a', 'a' -> 'b', 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f'`). -## 题意 -> ... +Return the decoded message. -## 题解 +**Example 1:** +![example1](./ex1new4.jpg) -### 思路1 -> ... -Decode the Message -```go +``` +Input: key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv" +Output: "this is a secret" +Explanation: The diagram above shows the substitution table. +It is obtained by taking the first appearance of each letter in "the quick brown fox jumps over the lazy dog". ``` +**Example 2:** +![example2](./ex2new.jpg) + +``` +Input: key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb" +Output: "the five boxing wizards jump quickly" +Explanation: The diagram above shows the substitution table. +It is obtained by taking the first appearance of each letter in "eljuxhpwnyrdgtqkviszcfmabo". +``` ## 结语 diff --git a/leetcode/2301-2400/2325.Decode-the-Message/Solution.go b/leetcode/2301-2400/2325.Decode-the-Message/Solution.go index d115ccf5e..aa6c7f6f2 100644 --- a/leetcode/2301-2400/2325.Decode-the-Message/Solution.go +++ b/leetcode/2301-2400/2325.Decode-the-Message/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +import "bytes" + +func Solution(key string, message string) string { + bucket := make([]uint8, 26) // space + + char := 'a' + for _, b := range key { + if b != ' ' && bucket[b-'a'] == 0 { + bucket[b-'a'] = uint8(char) + char++ + } + } + buf := bytes.NewBuffer([]byte{}) + for _, msg := range message { + if msg == ' ' { + buf.WriteByte(byte(msg)) + continue + } + buf.WriteByte(bucket[msg-'a']) + } + return buf.String() } diff --git a/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go b/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go index 14ff50eb4..ff04151a6 100644 --- a/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go +++ b/leetcode/2301-2400/2325.Decode-the-Message/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + key, message string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "eljuxhpwnyrdgtqkviszcfmabo", "zwx hnfx lqantp mnoeius ycgk vcnjrdb", "the five boxing wizards jump quickly"}, + {"TestCase2", "the quick brown fox jumps over the lazy dog", "vkbs bs t suepuv", "this is a secret"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.key, c.message) 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.key, c.message) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2325.Decode-the-Message/ex1new4.jpg b/leetcode/2301-2400/2325.Decode-the-Message/ex1new4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aceb9ff8719f1a1b79d853b7509cf930ccca25c7 GIT binary patch literal 29164 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 literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2325.Decode-the-Message/ex2new.jpg b/leetcode/2301-2400/2325.Decode-the-Message/ex2new.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7812900431e042b233b813c18cf1134d42dc5923 GIT binary patch literal 27798 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 literal 0 HcmV?d00001 From 3d8f39fa97c6fca585fb2544590b08052c9bb4f3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 22 Oct 2022 14:45:55 +0800 Subject: [PATCH 0101/1057] Add solution and test-cases for problem 1608 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 14 ++++++- .../Solution_test.go | 14 +++---- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md index 15e8cf409..0797cf85c 100755 --- a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md +++ b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/README.md @@ -1,29 +1,41 @@ # [1608.Special Array With X Elements Greater Than or Equal X][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an array `nums` of non-negative integers. `nums` is considered **special** if there exists a number `x` such that there are **exactly** `x` numbers in `nums` that are **greater than or equal to** `x`. + +Notice that x **does not** have to be an element in `nums`. + +Return `x` if the array is **special**, otherwise, return `-1`. It can be proven that if `nums` is special, the value for `x` is **unique**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,5] +Output: 2 +Explanation: There are 2 values (3 and 5) that are greater than or equal to 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Special Array With X Elements Greater Than or Equal X -```go +``` +Input: nums = [0,0] +Output: -1 +Explanation: No numbers fit the criteria for x. +If x = 0, there should be 0 numbers >= x, but there are 2. +If x = 1, there should be 1 number >= x, but there are 0. +If x = 2, there should be 2 numbers >= x, but there are 0. +x cannot be greater since there are only 2 numbers in nums. ``` +**Example 3:** + +``` +Input: nums = [0,4,3,0,4] +Output: 3 +Explanation: There are 3 values that are greater than or equal to 3. +``` + ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go index d115ccf5e..55d5bff01 100644 --- a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go +++ b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + bucket := make([]int, 1001) + for _, n := range nums { + bucket[n]++ + } + for idx := 999; idx >= 0; idx-- { + bucket[idx] += bucket[idx+1] + if bucket[idx] == idx { + return idx + } + } + return -1 } diff --git a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go index 14ff50eb4..b9454f846 100644 --- a/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/Solution_test.go +++ b/leetcode/1601-1700/1608.Special-Array-With-X-Elements-Greater-Than-or-Equal-X/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, 5}, 2}, + {"TestCase2", []int{0, 0}, -1}, + {"TestCase3", []int{0, 4, 3, 0, 4}, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5e6168b2f57f7938bff00967f55863b17f6d1da7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Oct 2022 13:21:41 +0800 Subject: [PATCH 0102/1057] Add solution and test-cases for problem 645 --- leetcode/601-700/0645.Set-Mismatch/README.md | 25 ++++++++----------- .../601-700/0645.Set-Mismatch/Solution.go | 23 +++++++++++++++-- .../0645.Set-Mismatch/Solution_test.go | 13 +++++----- 3 files changed, 38 insertions(+), 23 deletions(-) diff --git a/leetcode/601-700/0645.Set-Mismatch/README.md b/leetcode/601-700/0645.Set-Mismatch/README.md index 5b33a5dc0..1a61ec379 100644 --- a/leetcode/601-700/0645.Set-Mismatch/README.md +++ b/leetcode/601-700/0645.Set-Mismatch/README.md @@ -1,28 +1,25 @@ # [645.Set Mismatch][title] -> [!WARNING|style:flat] -> 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 set of integers `s`, which originally contains all the numbers from `1` to `n`. Unfortunately, due to some error, one of the numbers in `s` got duplicated to another number in the set, which results in **repetition of one** number and **loss of another** number. + +You are given an integer array `nums` representing the data status of this set after the error. + +Find the number that occurs twice and the number that is missing and return them in the form of an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,2,4] +Output: [2,3] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Set Mismatch -```go ``` - +Input: nums = [1,1] +Output: [1,2] +``` ## 结语 diff --git a/leetcode/601-700/0645.Set-Mismatch/Solution.go b/leetcode/601-700/0645.Set-Mismatch/Solution.go index d115ccf5e..16df4bc7e 100644 --- a/leetcode/601-700/0645.Set-Mismatch/Solution.go +++ b/leetcode/601-700/0645.Set-Mismatch/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + dup := -1 + for _, n := range nums { + abs := n + if abs < 0 { + abs = -abs + } + if nums[abs-1] < 0 { + dup = abs + continue + } + nums[abs-1] *= -1 + } + missing := 1 + for i := 1; i < len(nums); i++ { + if nums[i] > 0 { + missing = i + 1 + break + } + } + return []int{dup, missing} } diff --git a/leetcode/601-700/0645.Set-Mismatch/Solution_test.go b/leetcode/601-700/0645.Set-Mismatch/Solution_test.go index 14ff50eb4..a5f3168bf 100644 --- a/leetcode/601-700/0645.Set-Mismatch/Solution_test.go +++ b/leetcode/601-700/0645.Set-Mismatch/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 2, 4}, []int{2, 3}}, + {"TestCase2", []int{1, 1}, []int{1, 2}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6bcc4a7f15db99c41e07248f6ec0b39cf81806f0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Oct 2022 16:15:09 +0800 Subject: [PATCH 0103/1057] Add solution and test-cases for problem 1189 --- .../1536_ex1_upd.jpeg | Bin 0 -> 13119 bytes .../1536_ex2_upd.jpeg | Bin 0 -> 16098 bytes .../1189.Maximum-Number-of-Balloons/README.md | 31 ++++++++++-------- .../Solution.go | 21 ++++++++++-- .../Solution_test.go | 14 ++++---- 5 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 leetcode/1101-1200/1189.Maximum-Number-of-Balloons/1536_ex1_upd.jpeg create mode 100644 leetcode/1101-1200/1189.Maximum-Number-of-Balloons/1536_ex2_upd.jpeg diff --git a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/1536_ex1_upd.jpeg b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/1536_ex1_upd.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..00c66e32e01674768c2733f70ed4e69ada37d90e GIT binary patch literal 13119 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

    q|Tz-{TmC?3S4c00R-NkaeSdtR#%oTR#Ia6B^$ zAHRU$aj8?%GO}`~HO^>iY3p3LXkch`$=KxTHESE&>o@G&+#w#GUfw<-p<&?>u*j%{ z-|i$PC8wn3} z^Au(dJOBO1!s600esgPkXLpaVPyC6C2B7^LtUr+bJ6xPpTu12WXz3V#;-WbcK~1!r zbo64X3|!|e8C`<7#no;z@#trlynN3rp>BoabqyY2;gdX#k;4Ck_B*ow9I*KR60$#l z{fTP|V56m>HXbb}00xMLsqzcpepAJwL!Lr zm3G(O?nkfj=wgv6z4cF%`~o6l5Ie`^a^LS&I#N&DKW}4~uHk|2 z^_sle|E2_}5( zj1%g4o&Dhc?e{AaRWZ!r0W@C|UG(`pP$XA65pz9d5W8R*BIvjZPwv61-P_Dz!9 z9;(u!aM;p-w`7r?$MW3&F~wl<{A5$Vp~DzE3b6QQWpQ~QJ*P~{pGFV~^%P(vX!6m0 z_)*aF9Z+8a1(@-n0F#aTABZ~7mW%2W(_ANuYQESstc=h5hAiq?ym+3smDu`pS(K+u z0`1}{%a?eSx2o7iE9u+aEGq_!Sv~nOPUlY*knmmIhX}bF8OAy}-z(`OLEYPFh)fVq zywyvCr(eVO>*szyLAgp;{?Z>Vlwg*o=^aPSeS@>Xka7X_cXemcM$1^?zgjo9JY#; z9!7rmXclP`<+$tSQ>~~3>sc&c^B{UJZ0?IJ8ANWppWzvp<6t%RjFm7Ads5fs?v^uh zH=HXLCV{I0ACGYkD)YYL)f8I8v$t&L%`;nlA)R9{(`Z=KZV{F&2bwOy8lC!Jszx3> zu&pQBM;}f-Xjs3{vO#|s%7EW*8^L|`GFtsRGd2a}3+#Rb8 zC$D=6%!-Cd)5X;fR-`?Q952XTy;j!o$p^`9IcVlJUjyACSCc(mDt*H3T2r083oO6d z_w2c6)Pai8Q9B?ZbfccaC#z9Jnwmvdy&6sV8#P19XL{kU@RsEj1I(X0_rV{_N?>ChWJ&0q zkucsjXZqT%xWRUj$bLrN!DW)hR_eB6HlNzX2ooce% zf6!ILgF4z0%{h81+s(1jCKIhtCg~^L#w78@c2p;JYG$cnGFheZSoz~927m(C&9FOJ z3zb;0GZN%!zi>{pbf75!%V|&C_rVg(%6Uknr(i)}M#_zQ zY}xTJtwAPY1Xh05B1KC58!YOF{>X0!W-r|K0?&nsIwWMdIUcLA;kA~VnDofv=FY#V zs>SS9w;4LgH9yQG+6foj@ej*jnOwEyyB~2e*y>_8V?0bk8#`JZ!!-V+ z8Mj{Yr2qRw7sRVBZuyOFtXetw)XPe{YG|}v0~Pdz6Zx}H$cD;0Z7F_lLuchJLqr#9 zUs?@5`O$ge8HtesWb9XR9@7 zu~k=!-CjJ8y4Iwd?+oF~Z7l2BNKmd2Y~3^&%FKR6R(O#Xs9fSKAn z(42CJt`Qzmo8F$@xqO?vTWiSfb@7fVl<2s{ED*+6BKjz%6A%7Sl+=Ytvx(!yH4BEW z+(_qJEnf|%0Qs*P4^Gl19FCyBA)m&`W1e#`5}eTbqgVavAG*+TZe99%WBN;uF>#pj zE-aU9(lWDi$iHQ`qZf^~6HTgAaWWtM!qLj!v<@L|0@Q)V2zynIbm1d=+lH2dY?jwT zID_g&(FREw*VW5g-;Qpx1Xi#?mWYcHs>}+ zD>~0PkG07VBCfo>?zpbdC&chJoqp&ecUD(3{mov%ODEIg&rar(^l|Koi1ITvr5F83 z@w$WyTouM$nBw2Kw6=*hh<3kl(?h=4GvE94a%lyn5sI(Sv*$^jP{AJ4e4}THU2|fo z#9CST`q0U%4IjhKDxUiIW!YABTK}l#rJ&rOQ(~>j!rV~O$-CA1oAb08Bl-Y{0;n?7 z>pEhXTI>|^qtOkfo*p-o1>R_3CGlfO4c^L*EH*p+V@uznBO=Q^q<7HsausVQh8I8R zwp%-R$voYQy>xmeg)H>ZpN}s;+R*KmzZ=V2V*EK06v-$dk?mxRmw2xep7Er!$_xJ> zZ0llh$D6!)A(bI>L`@iiO+zq@gT71JZw)GcPM|mtkl19;YJZ|$psA1^c)#Ch!ik?N zZ;c8@8Y@b=wM_wt`(Pq-jl~_*rucgb;8;!phMz0{$M>EoW7S#Uo7xBhynCVTG`ydm zJWT=CbXH@i-9%g|j{-QrcikK!y0Z4;DZn)Ru+lN>7PZG1jG|Vu$o*bf`0F_85UE*1 z=H0)T(CN$-BQ^Wr0IJNryy6xVTI_!5X7=XWE@Oj}Y{a>OE@#dd)!DP|xgUyh&Pyh! z+8eSCNRKdT?P-bZY)!5?Qvit{X%yh*%wg5eFiDf34$k}@AVjjskNzB{U>4v$cr}W1 z^Hp{{zra+2fB?~EVOZE8YYjYmqWL`?etGwjx$Z%lwd~Hm@Plon-Pq0vJ$s8p3UK*t z>iQ@qqVu$ZphHx=d=E$>Zivi3PLdDPyc62JUE?%$CWqGFyr-LP-?toFd@J)j+Ojip zZ}lzq?1KO@9vV^%2bf9n11-$6GXzs5B@I0vW2bS+_xqVkGtYXq z7Z5cN?brKmZ|B`q>s{=$eAQaMHLYe(DtFFs6ioT;(2IUkJq6y@oxEBGOER5Y>u<82 zGHcwZG_t5FhKuACfICpEL;kMET|2XH;k(}_VG#>X)=#ILWAyN)heb94GAZIA@AB0@ zkslw*301N~UiR7YXTGb~HLGAOYrODnxt?6&UGceoq9jPTg?0Q37Pklbcp(3Dqgrtt zGgJ`7)mymjl1*Ca)V=V`iLlkRRQdVsf!6&F-=y`btX47FPh7EgytOxLj*`N)UA#Nr zhnUz&eOdPhDZ;`9S@VfZGe_^>TT1 z#<0OE9WBPFyvi>qoq503H^u?C_vlp*Y8tUqY(-sc48J1UO3$L09AORLSTkHB`Hf#O z$cSH!U(h}o#a3+LG-Ez#OYnZ|oue=Egg&BcG<4Tdy656(nmLXwKc)HPcP+OVLm+$9fzFt0#u$W!OBzABo^A^vewc-e(rg?SS#OLq(<;eZh(V369&R0xzFf(Xj4D@ww${eY-)tnXOw1?%s-?cr~Tcc~Kpeb8y zWgwtU#7cacI2`Cd6JF==)#PpmS3#uEtc zH$D{KhSQgr&e>cqt^Ee+odrCyBn-9Bzr#V?DWCx7G`0rb1SC5PkQRB1SkvB%NruMj z2FHS|X_ujkegR~I!wckA2sJL*BMD}XH)h90k~yI~2sAsC{xi zs)Yi)fKu0ypPnzW>{EbQFe%FxvC9rWJi!}FV@J*8-TuRvpX0L8Viqfb>LI~Eof4d= z(y(Om1;LYSpeR9ZaiK0dU0b5D3#9bp7Kc%dbrunyL;(y^uYtc+#iR{@ z=Z&aK(ngeed)r^+H<6aw2k%0Vhd~ze@(UE;FN(Vr@!m;hjAV(Kj!t6+awM-6ADPj; z%%BpRsin89GHS|gsa|%r!s^BumU5dEp94qvI73o$UDrsrro@qIjzH*wD7CyMLYY_c zK|x=kv9N$I7~`~rRX%negJf}9=Dx&bkY3LEkpFJFjA$14oEdE6-M}eRB>xv51B+aU zzil`;gFw5&N3|55oIeO9$qt6eO@=<+w^HkH3B1l$E0`#bsJ}ODtm$48OUCx= zUcibbN03EY>L)^FYgQpyzM~C~6kKfeB1Gu@;)YOLD%9D!kvv{IHdp)1vyue*DAxSQ zEq@&>$29aUyN-kQQFvVOx628XQi z7U^@)=h5T&Q=d$Xy@fX=5unF8G&^6SZvWKJ7Y^jTj;k%|6r+TCf~sH7cx1C+YFuY; zfoF6VDtj5-oX^{KIh`2Su(*W~T&Vll*P09$UzO2%)8LkuXY>@4G>i;!cDHxvi1cP3 zsD6H$Tf9doIav5o_etV0FWQb4V+tVU6hI`W?bk%t!$i~8K|Of6-Pu|U`>1iF*5Hwc zwvArI&f>RE(9xB>k{M_T-IDe4aPhZG8UvCs-z>DMsc)j30>hlC@sQOhA&fSC;P4U%LuS}~sf4@M=HAUN-<1uw{ zx77oZB_voCmJM&ix}{m@0@SnmXt%4J`8^6rH|VU~4TP)iquug-5o4lvq7aGItE(-V zZX!j=FHXzNBJnvi3bDqOk>-BVQ1F`MY6w>**uck&SP@-?cM6qkb z?kiXqX4rkw8wV#Fup)_MICV~v?rc7|PEr?6>qq$%K|<5sT0TU$nEut{vUSzep7x9F zuL|Sm2YNQwsd^OE1>UDwq5wOa@NI7DD>(SPK?1p%+6pB$&i~;pYpTS3f*@sjl0`SQ zH!?)G=qW%01voHo7Nw4X-Dwr@Nzudmlfw8i@=et43beje5bA}>`SPJm!xCF^Y z7fi}nf!~R<1ce?xr;eL3BkfxlUBIUyb`0n$` zh8Q9IL@rhtSi)a7;o38A$edaq`4o_mt-p>A)9MB%U4e!ya-2h^xAAv1IKN&iKhv-K zX6J18aHW2;lu)#5+iQG8N_C4U#`G}6D(rfVxIz_L#0~rX{JJ?K)>(l(sADjc3{q`q z)G092k*)Q(o5_}QVs;5u2DGjG|u5{VacXo7rK@g?9$frYFR zX|Sckipk)@;QOk`{Mo0L~)f4+2WAv@y} z_%TwKV0j#zk)REr{Uns4iy1dhwT2jvTA@46OkGQm7k-g?IpS;}dh1k+efuN|mjc^o zs5p3?YSj1;fnm&;xjcI)Cta2?DCFzNa^Lvc)ENt$-g+I$g3AJ-!yiS?uIQ zQB#wA8H0@=+tKqP^*tn`NwLuu=@4J{BR_W7RJ%B&EZE}icaxxzr%R_n3H(+(xUG8) zue6W}{T&}Bt3XSyB)4XwC_qZhOgem%c8mh7%u{F5Q_o{WMjgf4#>*WP?#D~4WZF~v zI32mqB~O-hb+ye)gSqV|Qud32EjxW>6`gWJP zDU3$@FEY-><*j|Rm3ud~Jni^E?=#+9qjD9)WV|8MHMG%uvaYUitlH((%R4t4Zyzx_ zew2r$Y|i57Cs^ghg3IH_UR!KQAirgx4MngT&ke%0p1idi-hX5Bj3u?&{bOz`@e9to zjR!W}p_4m=vER_M_?q(#+Z`^FUVV3FxM9z;>_T$TwggL%cbD7*)Uf5Cn2rLl z$BDt75GCg96OKzCF>S86dvc@x3S!9#jd5oEL@>ILWj=P>Kf+XOcPzSLLR;MNrMM--z;C0r&L#6v zp6!mdHV5Vv*o;fxd^lL8T25K5oH(Xm5O6MXss%3hmEb(9XZoJC3hv`z*FTx482|bH z>?v~dJ$UqXEjcx?eeAb;`HQOB>zdq#p{FJ#Yf5cQ2A7o3%6Qfe%{WEegQcRF7oFOL zlI+@Iu(i9)hjJW=ZCtH5&qR;09og9;Z~vm0>3lgF>nm#Kz#U89nuzii5K-?nork6> zwJ!qb;lX=bsAm{at~O=@Y7YFt<(V^7$Ne~U{EwH4WE<`nf6;uVKw5euD$2IO+s?5# zrQB|*$X%YkqTG~66^VN)Aex1WYBcZ(6mi5?Vweeqm7l+OU$vitp1D|R7W76kTf{{5 z%BA=7LL%gPBrdDHO$z56UvL3$eVDh@aPKg?MsT_>dFw^KwKSs^_EwPNI1kN2R8mJ; zt0~%QxlwJ(xYA4}Qe0uW7fa_Ra0r##!YrhOvMxMm*BmuwL$v2IJ>)R#p}uY}rjHun z&8^^zRPR+8ZMHRQ{;C(I8_baelA8<@(@d__%_ap8sN~@nA9GPxdgI$QN|Od-VlQ4~ zxgSes+caJ`UN>_ntvdZNT(cdr9hlL}@3#~6Di4o}$KoBUE$E)pZv)BmE}L}-j4vEC zlM%${BuGdrH`+DRp3j`o^=-*3$^|Kl_NC|<^ejRtI; znLz5W%}u5jPuPh4htD=`C}S?L&9&slfh-q<9g!6?)G?rpK_wa%JmJ0{p{ZzIzk|JPN5!b^#Hpq%h8V4+ zb8j3kT+3EM+8)|H-WLaz=~=$hq-` zNkikoIggtrCXBS*jVdKx&CmRApw3`O$AA5>a9if9I4;K@ao;T~h<56|f^A&*J;5p3m{A5L@S;)n)dRcLSj15JJ`;WKj lZ+Ci^Dg;#-mT;b9sZs&9shiiVzi+Vr++_dfiIMX8-vD!du-E_q literal 0 HcmV?d00001 diff --git a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/README.md b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/README.md index 30c7b0f2f..da340eb31 100644 --- a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/README.md +++ b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/README.md @@ -1,28 +1,33 @@ # [1189.Maximum Number of Balloons][title] -> [!WARNING|style:flat] -> 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 `text`, you want to use the characters of `text` to form as many instances of the word "**ballon**" as possible. + +You can use each character in `text` **at most once**. Return the maximum number of instances that can be formed. -**Example 1:** +**Example 1:** +![example1](./1536_ex1_upd.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: text = "nlaebolko" +Output: 1 ``` -## 题意 -> ... -## 题解 +**Example 2:** +![example2](./1536_ex2_upd.jpeg) -### 思路1 -> ... -Maximum Number of Balloons -```go +``` +Input: text = "loonbalxballpoon" +Output: 2 ``` +**Example 3:** + +``` +Input: text = "leetcode" +Output: 0 +``` ## 结语 diff --git a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution.go b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution.go index d115ccf5e..29fd14c79 100644 --- a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution.go +++ b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(text string) int { + target := "balloon" + can := 10001 + + bucket := make([]int, 26) + for _, b := range text { + bucket[b-'a']++ + } + + for _, b := range target { + n := bucket[b-'a'] + if b == 'l' || b == 'o' { + n /= 2 + } + if n < can { + can = n + } + } + return can } diff --git a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution_test.go b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution_test.go index 14ff50eb4..c56859a6e 100644 --- a/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/Solution_test.go +++ b/leetcode/1101-1200/1189.Maximum-Number-of-Balloons/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", "nlaebolko", 1}, + {"TestCase2", "loonbalxballpoon", 2}, + {"TestCase3", "leetcode", 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bda48bf271b58798fdb8cee5cd8ee71ca36caedd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Oct 2022 20:23:44 +0800 Subject: [PATCH 0104/1057] Add solution and test-cases for problem 687 --- .../0687.Longest-Univalue-Path/README.md | 29 +++++----- .../0687.Longest-Univalue-Path/Solution.go | 43 +++++++++++++- .../Solution_test.go | 53 +++++++++++++++--- .../0687.Longest-Univalue-Path/ex1.jpg | Bin 0 -> 15174 bytes .../0687.Longest-Univalue-Path/ex2.jpg | Bin 0 -> 15233 bytes 5 files changed, 101 insertions(+), 24 deletions(-) create mode 100644 leetcode/601-700/0687.Longest-Univalue-Path/ex1.jpg create mode 100644 leetcode/601-700/0687.Longest-Univalue-Path/ex2.jpg diff --git a/leetcode/601-700/0687.Longest-Univalue-Path/README.md b/leetcode/601-700/0687.Longest-Univalue-Path/README.md index 288f867b5..034ead4c3 100644 --- a/leetcode/601-700/0687.Longest-Univalue-Path/README.md +++ b/leetcode/601-700/0687.Longest-Univalue-Path/README.md @@ -1,28 +1,27 @@ # [687.Longest Univalue Path][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the `root` of a binary tree, return the length of the longest path, where each node in the path has the same value. This path may or may not pass through the root. + +**The length of the path** between two nodes is represented by the number of edges between them. -**Example 1:** +**Example 1:** +![ex1](./ex1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [5,4,5,1,1,null,5] +Output: 2 +Explanation: The shown image shows that the longest path of the same value (i.e. 5). ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![ex2](./ex2.jpg) -### 思路1 -> ... -Longest Univalue Path -```go ``` - +Input: root = [1,4,5,4,4,null,5] +Output: 2 +Explanation: The shown image shows that the longest path of the same value (i.e. 4). +``` ## 结语 diff --git a/leetcode/601-700/0687.Longest-Univalue-Path/Solution.go b/leetcode/601-700/0687.Longest-Univalue-Path/Solution.go index d115ccf5e..64c904d60 100644 --- a/leetcode/601-700/0687.Longest-Univalue-Path/Solution.go +++ b/leetcode/601-700/0687.Longest-Univalue-Path/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode) int { + ans := 0 + longestUnivaluePath687(root, &ans) + if ans > 0 { + ans-- + } + return ans +} + +func longestUnivaluePath687(root *TreeNode, ans *int) int { + if root == nil { + return 0 + } + if root.Left == nil && root.Right == nil { + return 1 + } + left := longestUnivaluePath687(root.Left, ans) + right := longestUnivaluePath687(root.Right, ans) + tryReturn := 0 + current := 1 + if left != 0 && root.Val == root.Left.Val { + current += left + tryReturn = left + } + + if right != 0 && root.Val == root.Right.Val { + current += right + if tryReturn < right { + tryReturn = right + } + } + if current > *ans { + *ans = current + } + return tryReturn + 1 } diff --git a/leetcode/601-700/0687.Longest-Univalue-Path/Solution_test.go b/leetcode/601-700/0687.Longest-Univalue-Path/Solution_test.go index 14ff50eb4..783b96d0b 100644 --- a/leetcode/601-700/0687.Longest-Univalue-Path/Solution_test.go +++ b/leetcode/601-700/0687.Longest-Univalue-Path/Solution_test.go @@ -10,12 +10,51 @@ 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: 5, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 1}, + }, + Right: &TreeNode{ + Val: 5, + Right: &TreeNode{Val: 5}, + }, + }, 2}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 5, + Right: &TreeNode{ + Val: 5, + }, + }, + }, 2}, + {"TestCase3", &TreeNode{ + Val: 4, + Left: &TreeNode{Val: -8}, + Right: &TreeNode{ + Val: -3, + Right: &TreeNode{ + Val: -3, + Right: &TreeNode{Val: 6}, + }, + Left: &TreeNode{ + Val: -9, + Left: &TreeNode{Val: -7}, + Right: &TreeNode{Val: -4}, + }, + }, + }, 1}, } // 开始测试 @@ -30,10 +69,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0687.Longest-Univalue-Path/ex1.jpg b/leetcode/601-700/0687.Longest-Univalue-Path/ex1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cd35d0443c938587c60769f75eccfa3db182914 GIT binary patch literal 15174 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 EZ;Gd(3;+NC literal 0 HcmV?d00001 From a311e3c60d45b88b9d96289d953523e8f2275624 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Oct 2022 23:09:53 +0800 Subject: [PATCH 0105/1057] Add solution and test-cases for problem 2231 --- .../README.md | 30 ++++++------- .../Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md index 48e38bb72..e12b635ab 100755 --- a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md +++ b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/README.md @@ -1,28 +1,30 @@ # [2231.Largest Number After Digit Swaps by Parity][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a positive integer `num`. You may swap any two digits of `num` that have the same `parity` (i.e. both odd digits or both even digits). + +Return the **largest** possible value of `num` after **any** number of swaps. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 1234 +Output: 3412 +Explanation: Swap the digit 3 with the digit 1, this results in the number 3214. +Swap the digit 2 with the digit 4, this results in the number 3412. +Note that there may be other sequences of swaps but it can be shown that 3412 is the largest possible number. +Also note that we may not swap the digit 4 with the digit 1 since they are of different parities. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Largest Number After Digit Swaps by Parity -```go ``` - +Input: num = 65875 +Output: 87655 +Explanation: Swap the digit 8 with the digit 6, this results in the number 85675. +Swap the first digit 5 with the digit 7, this results in the number 87655. +Note that there may be other sequences of swaps but it can be shown that 87655 is the largest possible number. +``` ## 结语 diff --git a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go index d115ccf5e..16f91fb79 100644 --- a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go +++ b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(num int) int { + odd := make([]byte, 10) + oddPos := make([]int, 0) + even := make([]byte, 10) + evenPos := make([]int, 0) + numString := fmt.Sprintf("%d", num) + for idx, b := range numString { + if b&1 == 1 { + odd[b-'0']++ + oddPos = append(oddPos, idx) + continue + } + even[b-'0']++ + evenPos = append(evenPos, idx) + } + + ans := make([]byte, len(numString)) + if len(oddPos) > 0 { + start := 0 + for idx := 9; idx >= 0; idx-- { + for times := odd[idx]; times > 0; times-- { + ans[oddPos[start]] = byte(idx + '0') + start++ + } + } + } + if len(evenPos) > 0 { + start := 0 + for idx := 9; idx >= 0; idx-- { + for times := even[idx]; times > 0; times-- { + ans[evenPos[start]] = byte(idx + '0') + start++ + } + } + } + var n int + fmt.Sscanf(string(ans), "%d", &n) + return n } diff --git a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go index 14ff50eb4..a8becc59b 100644 --- a/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/Solution_test.go +++ b/leetcode/2201-2300/2231.Largest-Number-After-Digit-Swaps-by-Parity/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", 1234, 3412}, + {"TestCase2", 65875, 87655}, + {"TestCase3", 247, 427}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0d971c3d1b24027270fc5092a51f5f5acdc73bbf Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 25 Oct 2022 20:55:22 +0800 Subject: [PATCH 0106/1057] Add solution and test-cases for problem 1662 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 16 ++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md index 706f8e459..c7d63a638 100755 --- a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md +++ b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/README.md @@ -1,28 +1,34 @@ # [1662.Check If Two String Arrays are Equivalent][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two string arrays `word1` and `word2`, return `true` if the two arrays **represent** the same string, and `false` otherwise. + +A string is **represented** by an array if the array elements concatenated **in order** forms the string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word1 = ["ab", "c"], word2 = ["a", "bc"] +Output: true +Explanation: +word1 represents string "ab" + "c" -> "abc" +word2 represents string "a" + "bc" -> "abc" +The strings are the same, so return true. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Check If Two String Arrays are Equivalent -```go +``` +Input: word1 = ["a", "cb"], word2 = ["ab", "c"] +Output: false ``` +**Example 3:** + +``` +Input: word1 = ["abc", "d", "defg"], word2 = ["abcddefg"] +Output: true +``` ## 结语 diff --git a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go index d115ccf5e..d11d7317f 100644 --- a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go +++ b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(word1 []string, word2 []string) bool { + sb1, sb2 := strings.Builder{}, strings.Builder{} + + for _, s := range word1 { + sb1.WriteString(s) + } + + for _, s := range word2 { + sb2.WriteString(s) + } + + return sb1.String() == sb2.String() } diff --git a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go index 14ff50eb4..f814bf2e2 100644 --- a/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go +++ b/leetcode/1601-1700/1662.Check-If-Two-String-Arrays-are-Equivalent/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + word1, word2 []string + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"ab", "c"}, []string{"a", "bc"}, true}, + {"TestCase2", []string{"a", "cb"}, []string{"ab", "c"}, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.word1, c.word2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.word1, c.word2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 143ec5aa284c28d7fff076f994b24c540daeabfc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 2 Nov 2022 00:31:32 +0800 Subject: [PATCH 0107/1057] Add solution and test-cases for problem 1706 --- .../1706.Where-Will-the-Ball-Fall/README.md | 45 ++++++++++++------ .../1706.Where-Will-the-Ball-Fall/Solution.go | 21 +++++++- .../Solution_test.go | 27 ++++++++--- .../1706.Where-Will-the-Ball-Fall/ball.jpg | Bin 0 -> 149558 bytes 4 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/ball.jpg diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md index 5006da3b2..163ad5c7a 100755 --- a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md +++ b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/README.md @@ -1,28 +1,45 @@ # [1706.Where Will the Ball Fall][title] -> [!WARNING|style:flat] -> 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 2-D `grid` of size `m x n` representing a box, and you have `n` balls. The box is open on the top and bottom sides. + +Each cell in the box has a diagonal board spanning two corners of the cell that can redirect a ball to the right or to the left. + +- A board that redirects the ball to the right spans the top-left corner to the bottom-right corner and is represented in the grid as `1`. +- A board that redirects the ball to the left spans the top-right corner to the bottom-left corner and is represented in the grid as `-1`. + +We drop one ball at the top of each column of the box. Each ball can get stuck in the box or fall out of the bottom. A ball gets stuck if it hits a "V" shaped pattern between two boards or if a board redirects the ball into either wall of the box. + +Return an array `answer` of size n where `answer[i]` is the column that the ball falls out of at the bottom after dropping the ball from the ith column at the top, or `-1` if the ball gets stuck in the box. -**Example 1:** +**Example 1:** +![example1](./ball.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,1,1,-1,-1],[1,1,1,-1,-1],[-1,-1,-1,1,1],[1,1,1,1,-1],[-1,-1,-1,-1,-1]] +Output: [1,-1,-1,-1,-1] +Explanation: This example is shown in the photo. +Ball b0 is dropped at column 0 and falls out of the box at column 1. +Ball b1 is dropped at column 1 and will get stuck in the box between column 2 and 3 and row 1. +Ball b2 is dropped at column 2 and will get stuck on the box between column 2 and 3 and row 0. +Ball b3 is dropped at column 3 and will get stuck on the box between column 2 and 3 and row 0. +Ball b4 is dropped at column 4 and will get stuck on the box between column 2 and 3 and row 1. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Where Will the Ball Fall -```go ``` +Input: grid = [[-1]] +Output: [-1] +Explanation: The ball gets stuck against the left wall. +``` + +**Example 3:** +``` +Input: grid = [[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1],[1,1,1,1,1,1],[-1,-1,-1,-1,-1,-1]] +Output: [0,1,2,3,4,-1] +``` ## 结语 diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go index d115ccf5e..0a872beff 100644 --- a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go +++ b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) []int { + m, n := len(grid), len(grid[0]) + ans := make([]int, n) + + for col := 0; col < n; col++ { + cur := col + for row := 0; row < m; row++ { + nextCol := cur + grid[row][cur] + + /* /\ \/ */ + if !(nextCol >= 0 && nextCol < n && grid[row][cur] == grid[row][nextCol]) { + ans[col] = -1 + break + } + ans[col] = nextCol + cur = nextCol + } + } + return ans } diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go index 14ff50eb4..5ae1fc4ea 100644 --- a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go +++ b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/Solution_test.go @@ -10,12 +10,25 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 1, 1, -1, -1}, + {1, 1, 1, -1, -1}, + {-1, -1, -1, 1, 1}, + {1, 1, 1, 1, -1}, + {-1, -1, -1, -1, -1}, + }, []int{1, -1, -1, -1, -1}}, + {"TestCase2", [][]int{ + {-1}, + }, []int{-1}}, + {"TestCase3", [][]int{ + {1, 1, 1, 1, 1, 1}, + {-1, -1, -1, -1, -1, -1}, + {1, 1, 1, 1, 1, 1}, + {-1, -1, -1, -1, -1, -1}, + }, []int{0, 1, 2, 3, 4, -1}}, } // 开始测试 @@ -30,10 +43,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/ball.jpg b/leetcode/1701-1800/1706.Where-Will-the-Ball-Fall/ball.jpg new file mode 100644 index 0000000000000000000000000000000000000000..87f0a17d5007e8a94c2eec55449e4cb541d6241f GIT binary patch literal 149558 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 literal 0 HcmV?d00001 From c388038475ebeb10d93936ea324d47eeb29c4c1b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 4 Nov 2022 23:56:11 +0800 Subject: [PATCH 0108/1057] Add solution and test-cases for problem 345 --- .../0345.Reverse-Vowels-of-a-String/README.md | 24 ++++++++---------- .../Solution.go | 25 +++++++++++++++++-- .../Solution_test.go | 14 +++++------ 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/leetcode/301-400/0345.Reverse-Vowels-of-a-String/README.md b/leetcode/301-400/0345.Reverse-Vowels-of-a-String/README.md index c4ca19535..d91a6e753 100644 --- a/leetcode/301-400/0345.Reverse-Vowels-of-a-String/README.md +++ b/leetcode/301-400/0345.Reverse-Vowels-of-a-String/README.md @@ -1,28 +1,24 @@ # [345.Reverse Vowels of a String][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a string `s`, reverse only all the vowels in the string and return it. + +The vowels are `'a'`, `'e'`, `'i'`, `'o'`, and `'u'`, and they can appear in both lower and upper cases, more than once. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "hello" +Output: "holle" ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Reverse Vowels of a String -```go ``` - +Input: s = "leetcode" +Output: "leotcede" +``` ## 结语 diff --git a/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution.go b/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution.go index d115ccf5e..573176754 100644 --- a/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution.go +++ b/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(ss string) string { + bs := []byte(ss) + s, e := 0, len(bs)-1 + for s < e { + shouldExchange := true + if !isVowels(bs[s]) { + s++ + shouldExchange = false + } + if !isVowels(bs[e]) { + e-- + shouldExchange = false + } + if shouldExchange { + bs[s], bs[e] = bs[e], bs[s] + s, e = s+1, e-1 + } + } + return string(bs) +} + +func isVowels(b byte) bool { + return b == 'A' || b == 'a' || b == 'e' || b == 'E' || b == 'i' || b == 'I' || b == 'o' || b == 'O' || b == 'u' || b == 'U' } diff --git a/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution_test.go b/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution_test.go index 14ff50eb4..cdccbe3e9 100644 --- a/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution_test.go +++ b/leetcode/301-400/0345.Reverse-Vowels-of-a-String/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "hello", "holle"}, + {"TestCase2", "leetcode", "leotcede"}, + {"TestCase3", "dff", "dff"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a10135935082563bcd7eef8285cf6f98d026656b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 6 Nov 2022 22:14:46 +0800 Subject: [PATCH 0109/1057] Add solution and test-cases for problem 1734 --- .../1734.Decode-XORed-Permutation/README.md | 26 ++++++++--------- .../1734.Decode-XORed-Permutation/Solution.go | 28 +++++++++++++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md b/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md index 6084de918..a07e58219 100755 --- a/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md +++ b/leetcode/1701-1800/1734.Decode-XORed-Permutation/README.md @@ -1,28 +1,26 @@ # [1734.Decode XORed 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 +There is an integer array `perm` that is a permutation of the first `n` positive integers, where `n` is always `odd`. + +It was encoded into another integer array `encoded` of length `n - 1`, such that `encoded[i] = perm[i] XOR perm[i + 1]`. For example, if `perm = [1,3,2]`, then `encoded = [2,1]`. + +Given the `encoded` array, return the original array `perm`. It is guaranteed that the answer exists and is unique. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: encoded = [3,1] +Output: [1,2,3] +Explanation: If perm = [1,2,3], then encoded = [1 XOR 2,2 XOR 3] = [3,1] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Decode XORed Permutation -```go ``` - +Input: encoded = [6,5,4,6] +Output: [2,4,1,5,3] +``` ## 结语 diff --git a/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go index d115ccf5e..e2d3ce3b9 100644 --- a/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go +++ b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func xor(n int) int { + switch n % 4 { + case 1: + return 1 + case 0: + return n + case 2: + return n - 1 + } + return 0 +} +func Solution(encoded []int) []int { + l := len(encoded) + toN := xor(l + 1) + pick := 0 + for step := 0; step < l; step += 2 { + pick ^= encoded[step] + } + + lastElem := toN ^ pick + ans := make([]int, l+1) + ans[l] = lastElem + for idx := l - 1; idx >= 0; idx-- { + ans[idx] = ans[idx+1] ^ encoded[idx] + } + return ans } diff --git a/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go index 14ff50eb4..5f0dc0e88 100644 --- a/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go +++ b/leetcode/1701-1800/1734.Decode-XORed-Permutation/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1}, []int{1, 2, 3}}, + {"TestCase2", []int{6, 5, 4, 6}, []int{2, 4, 1, 5, 3}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b1f264c49007f35b65dcd634aa710b37747ae3a8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 7 Nov 2022 22:21:05 +0800 Subject: [PATCH 0110/1057] Add solution and test-cases for problem 1323 --- .../1323.Maximum-69-Number/README.md | 38 ++++++++++++------- .../1323.Maximum-69-Number/Solution.go | 24 +++++++++++- .../1323.Maximum-69-Number/Solution_test.go | 14 +++---- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1323.Maximum-69-Number/README.md b/leetcode/1301-1400/1323.Maximum-69-Number/README.md index 4ee6cccab..28a1006b0 100644 --- a/leetcode/1301-1400/1323.Maximum-69-Number/README.md +++ b/leetcode/1301-1400/1323.Maximum-69-Number/README.md @@ -1,29 +1,41 @@ # [1323.Maximum 69 Number][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a positive integer `num` consisting only of digits `6` and `9`. + +Return the maximum number you can get by changing **at most** one digit (`6` becomes `9`, and `9` becomes `6`). + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 9669 +Output: 9969 +Explanation: +Changing the first digit results in 6669. +Changing the second digit results in 9969. +Changing the third digit results in 9699. +Changing the fourth digit results in 9666. +The maximum number is 9969. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum 69 Number -```go +``` +Input: num = 9996 +Output: 9999 +Explanation: Changing the last digit 6 to 9 results in the maximum number. ``` +**Example 3:** + +``` +Input: num = 9999 +Output: 9999 +Explanation: It is better not to apply any change. +``` + ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/1301-1400/1323.Maximum-69-Number/Solution.go b/leetcode/1301-1400/1323.Maximum-69-Number/Solution.go index d115ccf5e..ea80a3469 100644 --- a/leetcode/1301-1400/1323.Maximum-69-Number/Solution.go +++ b/leetcode/1301-1400/1323.Maximum-69-Number/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(num int) int { + bits := [4]int{} + idx, six := 0, -1 + source := num + + for num > 0 { + n := num % 10 + bits[idx] = n + if n == 6 { + six = idx + } + idx, num = idx+1, num/10 + } + if six == -1 { + return source + } + base := 0 + bits[six] = 9 + for i := idx - 1; i >= 0; i-- { + base = base*10 + bits[i] + } + return base } diff --git a/leetcode/1301-1400/1323.Maximum-69-Number/Solution_test.go b/leetcode/1301-1400/1323.Maximum-69-Number/Solution_test.go index 14ff50eb4..a00cf49b7 100644 --- a/leetcode/1301-1400/1323.Maximum-69-Number/Solution_test.go +++ b/leetcode/1301-1400/1323.Maximum-69-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", 9669, 9969}, + {"TestCase2", 9996, 9999}, + {"TestCase3", 9999, 9999}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b85fd5cc7fa38e5be7c5d1b9c2dc4b02ed4f889e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 8 Nov 2022 22:49:18 +0800 Subject: [PATCH 0111/1057] Add solution and test-cases for problem 1544 --- .../1544.Make-The-String-Great/README.md | 42 +++++++++++++------ .../1544.Make-The-String-Great/Solution.go | 24 ++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1544.Make-The-String-Great/README.md b/leetcode/1501-1600/1544.Make-The-String-Great/README.md index a501a3839..6ce4e31d3 100755 --- a/leetcode/1501-1600/1544.Make-The-String-Great/README.md +++ b/leetcode/1501-1600/1544.Make-The-String-Great/README.md @@ -1,28 +1,44 @@ # [1544.Make The String Great][title] -> [!WARNING|style:flat] -> 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` of lower and upper case English letters. + +A good string is a string which doesn't have **two adjacent characters** `s[i]` and `s[i + 1]` where: + +- `0 <= i <= s.length - 2` +- `s[i]` is a lower-case letter and `s[i + 1]` is the same letter but in upper-case or **vice-versa**. + +To make the string good, you can choose **two adjacent** characters that make the string bad and remove them. You can keep doing this until the string becomes good. + +Return the string after making it good. The answer is guaranteed to be unique under the given constraints. + +**Notice** that an empty string is also good. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "leEeetcode" +Output: "leetcode" +Explanation: In the first step, either you choose i = 1 or i = 2, both will result "leEeetcode" to be reduced to "leetcode". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Make The String Great -```go +``` +Input: s = "abBAcC" +Output: "" +Explanation: We have many possible scenarios, and all lead to the same answer. For example: +"abBAcC" --> "aAcC" --> "cC" --> "" +"abBAcC" --> "abBA" --> "aA" --> "" ``` +**Example 3:** + +``` +Input: s = "s" +Output: "s" +``` ## 结语 diff --git a/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go b/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go index d115ccf5e..c691d115e 100644 --- a/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go +++ b/leetcode/1501-1600/1544.Make-The-String-Great/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + length := len(s) + if length == 0 { + return "" + } + ans := make([]byte, length) + + idx, walker := -1, 0 + for ; walker < length; walker++ { + if idx == -1 || !byteEqual(ans[idx], s[walker]) { + idx++ + ans[idx] = s[walker] + continue + } + idx-- + } + return string(ans[:idx+1]) +} + +func byteEqual(a, b byte) bool { + diff := int(a) - int(b) + return diff == 32 || diff == -32 } diff --git a/leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go b/leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go index 14ff50eb4..b5054139a 100644 --- a/leetcode/1501-1600/1544.Make-The-String-Great/Solution_test.go +++ b/leetcode/1501-1600/1544.Make-The-String-Great/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", "leEeetcode", "leetcode"}, + {"TestCase2", "abBAcC", ""}, + {"TestCase3", "s", "s"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7267c8bbf28462b08b213a202cc804a911dbbfa6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 9 Nov 2022 23:16:01 +0800 Subject: [PATCH 0112/1057] Add solution and test-cases for problem 901 --- .../901-1000/0901.Online-Stock-Span/README.md | 40 +++++++++++-------- .../0901.Online-Stock-Span/Solution.go | 22 +++++++++- .../0901.Online-Stock-Span/Solution_test.go | 23 +++++------ 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/leetcode/901-1000/0901.Online-Stock-Span/README.md b/leetcode/901-1000/0901.Online-Stock-Span/README.md index 1ae447450..d06d2f5ab 100644 --- a/leetcode/901-1000/0901.Online-Stock-Span/README.md +++ b/leetcode/901-1000/0901.Online-Stock-Span/README.md @@ -1,28 +1,36 @@ # [901.Online Stock Span][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Design an algorithm that collects daily price quotes for some stock and returns **the span** of that stock's price for the current day. -**Example 1:** +The **span** of the stock's price today is defined as the maximum number of consecutive days (starting from today and going backward) for which the stock price was less than or equal to today's price. -``` -Input: a = "11", b = "1" -Output: "100" -``` +- For example, if the price of a stock over the next `7` days were `[100,80,60,70,60,75,85]`, then the stock spans would be `[1,1,1,2,1,4,6]`. -## 题意 -> ... +Implement the `StockSpanner` class: -## 题解 +- `StockSpanner()` Initializes the object of the class. +- `int next(int price)` Returns the **span** of the stock's price given that today's price is `price`. -### 思路1 -> ... -Online Stock Span -```go -``` +**Example 1:** +``` +Input +["StockSpanner", "next", "next", "next", "next", "next", "next", "next"] +[[], [100], [80], [60], [70], [60], [75], [85]] +Output +[null, 1, 1, 1, 2, 1, 4, 6] + +Explanation +StockSpanner stockSpanner = new StockSpanner(); +stockSpanner.next(100); // return 1 +stockSpanner.next(80); // return 1 +stockSpanner.next(60); // return 1 +stockSpanner.next(70); // return 2 +stockSpanner.next(60); // return 1 +stockSpanner.next(75); // return 4, because the last 4 prices (including today's price of 75) were less than or equal to today's price. +stockSpanner.next(85); // return 6 +``` ## 结语 diff --git a/leetcode/901-1000/0901.Online-Stock-Span/Solution.go b/leetcode/901-1000/0901.Online-Stock-Span/Solution.go index d115ccf5e..a328bb1e4 100644 --- a/leetcode/901-1000/0901.Online-Stock-Span/Solution.go +++ b/leetcode/901-1000/0901.Online-Stock-Span/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +type StockSpanner struct { + less []int + data []int +} + +func Constructor() StockSpanner { + return StockSpanner{less: make([]int, 0), data: make([]int, 0)} +} + +// 常规思路解法,看解题可以用栈 +func (this *StockSpanner) Next(price int) int { + this.less = append(this.less, 1) + l := len(this.less) + this.data = append(this.data, price) + + start := l - 2 + for ; start >= 0 && price >= this.data[start]; start -= this.less[start] { + this.less[l-1] += this.less[start] + } + return this.less[len(this.less)-1] } diff --git a/leetcode/901-1000/0901.Online-Stock-Span/Solution_test.go b/leetcode/901-1000/0901.Online-Stock-Span/Solution_test.go index 14ff50eb4..e12b7728b 100644 --- a/leetcode/901-1000/0901.Online-Stock-Span/Solution_test.go +++ b/leetcode/901-1000/0901.Online-Stock-Span/Solution_test.go @@ -1,7 +1,6 @@ package Solution import ( - "reflect" "strconv" "testing" ) @@ -10,30 +9,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{100, 80, 60, 70, 60, 75, 85}, []int{1, 1, 1, 2, 1, 4, 6}}, + {"TestCase2", []int{1, 2, 3, 4, 5}, []int{1, 2, 3, 4, 5}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + u := Constructor() + for idx, n := range c.inputs { + if r := u.Next(n); r != c.expect[idx] { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect[idx], r, n) + } } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3a3c26af816042ba163afe572b501d0149f3eb8a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 11 Nov 2022 00:51:40 +0800 Subject: [PATCH 0113/1057] Add solution and test-cases for problem 1047 --- .../README.md | 28 ++++++++++--------- .../Solution.go | 14 ++++++++-- .../Solution_test.go | 14 +++++----- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/README.md b/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/README.md index ea1323ee5..4f32c182e 100644 --- a/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/README.md +++ b/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/README.md @@ -1,28 +1,30 @@ # [1047.Remove All Adjacent Duplicates 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 `s` consisting of lowercase English letters. A **duplicate removal** consists of choosing two **adjacent** and **equal** letters and removing them. + +We repeatedly make **duplicate removals** on `s` until we no longer can. + +Return the final string after all such duplicate removals have been made. It can be proven that the answer is **unique**. + + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abbaca" +Output: "ca" +Explanation: +For example, in "abbaca" we could remove "bb" since the letters are adjacent and equal, and this is the only possible move. The result of this move is that the string is "aaca", of which only "aa" is possible, so the final string is "ca". ``` -## 题意 -> ... -## 题解 +**Example 2:** -### 思路1 -> ... -Remove All Adjacent Duplicates In String -```go ``` - +Input: s = "azxxzy" +Output: "ay" +``` ## 结语 diff --git a/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution.go b/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution.go index d115ccf5e..2f4c06e5c 100644 --- a/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution.go +++ b/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + ans := make([]byte, len(s)) + idx := -1 + for walker := 0; walker < len(s); walker++ { + if idx == -1 || s[walker] != ans[idx] { + idx++ + ans[idx] = s[walker] + continue + } + idx-- + } + return string(ans[:idx+1]) } diff --git a/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution_test.go b/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution_test.go index 14ff50eb4..b54f34c39 100644 --- a/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-In-String/Solution_test.go +++ b/leetcode/1001-1100/1047.Remove-All-Adjacent-Duplicates-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", "abbaca", "ca"}, + {"TestCase2", "azxxzy", "ay"}, + {"TestCase3", "ab", "ab"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7aedf72ca7c8c4c6d58c8c372bca5aba380c8fd4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 11 Nov 2022 23:16:08 +0800 Subject: [PATCH 0114/1057] Add solution and test-cases for problem 1957 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 22 ++++++++++- .../Solution_test.go | 16 ++++---- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md index b3775cbbf..c2879ab90 100755 --- a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md +++ b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/README.md @@ -1,28 +1,40 @@ # [1957.Delete Characters to Make Fancy 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 **fancy string** is a string where no **three consecutive** characters are equal. + +Given a string `s`, delete the **minimum** possible number of characters from `s` to make it `fancy`. + +Return the final string after the deletion. It can be shown that the answer will always be `unique`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "leeetcode" +Output: "leetcode" +Explanation: +Remove an 'e' from the first group of 'e's to create "leetcode". +No three consecutive characters are equal, so return "leetcode". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Delete Characters to Make Fancy String -```go ``` +Input: s = "aaabaaaa" +Output: "aabaa" +Explanation: +Remove an 'a' from the first group of 'a's to create "aabaaaa". +Remove two 'a's from the second group of 'a's to create "aabaa". +No three consecutive characters are equal, so return "aabaa". +``` + +**Example 3:** +``` +Input: s = "aab" +Output: "aab" +Explanation: No three consecutive characters are equal, so return "aab". +``` ## 结语 diff --git a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go index d115ccf5e..ea08f3cc1 100644 --- a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go +++ b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string) string { + preByte, repeatCount := byte(' '), 0 + + sb := strings.Builder{} + for idx := 0; idx < len(s); idx++ { + if preByte == ' ' || preByte != s[idx] { + sb.WriteByte(s[idx]) + preByte = s[idx] + repeatCount = 1 + continue + } + if repeatCount < 2 { + repeatCount++ + sb.WriteByte(s[idx]) + continue + } + } + return sb.String() } diff --git a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go index 14ff50eb4..86eb25732 100644 --- a/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go +++ b/leetcode/1901-2000/1957.Delete-Characters-to-Make-Fancy-String/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leeetcode", "leetcode"}, + {"TestCase2", "aaabaaaa", "aabaa"}, + {"TestCase3", "aab", "aab"}, + {"TestCase4", "aaaaa", "aa"}, + {"TestCase5", "b", "b"}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7073faf8d56f437aa461a174aa1f5f34c0585407 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 12 Nov 2022 16:28:00 +0800 Subject: [PATCH 0115/1057] Add solution and test-cases for problem 1003 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 14 ++++++- .../Solution_test.go | 14 ++++--- 3 files changed, 46 insertions(+), 21 deletions(-) diff --git a/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/README.md b/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/README.md index a7b9e6309..efc166004 100644 --- a/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/README.md +++ b/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/README.md @@ -1,28 +1,41 @@ # [1003.Check If Word Is Valid After Substitutions][title] -> [!WARNING|style:flat] -> 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`, determine if it is **valid**. + +A string `s` is **valid** if, starting with an empty string `t = ""`, you can **transform** `s` **into** `s` after performing the following operation **any number of times**: + +- Insert string `"abc"` into any position in `t`. More formally, `t` becomes tleft + `"abc"` + tright, where t == tleft + tright. Note that tleft and tright may be **empty**. + +Return `true` if `s` is a **valid** string, otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aabcbc" +Output: true +Explanation: +"" -> "abc" -> "aabcbc" +Thus, "aabcbc" is valid. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Check If Word Is Valid After Substitutions -```go ``` +Input: s = "abcabcababcc" +Output: true +Explanation: +"" -> "abc" -> "abcabc" -> "abcabcabc" -> "abcabcababcc" +Thus, "abcabcababcc" is valid. +``` + +**Example 3:** +``` +Input: s = "abccba" +Output: false +Explanation: It is impossible to get "abccba" using the operation. +``` ## 结语 diff --git a/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution.go b/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution.go index d115ccf5e..d0d71cd06 100644 --- a/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution.go +++ b/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) bool { + stack := make([]byte, len(s)) + i := -1 + for idx := 0; idx < len(s); idx++ { + if s[idx] == 'c' && i >= 1 && stack[i] == 'b' && stack[i-1] == 'a' { + i -= 2 + continue + } + i++ + stack[i] = s[idx] + } + return i == -1 } diff --git a/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution_test.go b/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution_test.go index 14ff50eb4..133c08761 100644 --- a/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution_test.go +++ b/leetcode/1001-1100/1003.Check-If-Word-Is-Valid-After-Substitutions/Solution_test.go @@ -10,12 +10,14 @@ 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", "aabcbc", true}, + {"TestCase2", "abcabcababcc", true}, + {"TestCase3", "abccba", false}, + {"TestCase4", "ab", false}, + {"TestCase5", "b", false}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 75f8ddaa59fcbf701015fc642e9de73ec3b3b904 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 14 Nov 2022 23:01:06 +0800 Subject: [PATCH 0116/1057] Add solution and test-cases for problem 947 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 32 +++++++++++++- .../Solution_test.go | 37 +++++++++++++--- 3 files changed, 91 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/README.md b/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/README.md index 0c0f22f78..310e21984 100644 --- a/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/README.md +++ b/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/README.md @@ -1,29 +1,47 @@ # [947.Most Stones Removed with Same Row or Column][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +On a 2D plane, we place `n` stones at some integer coordinate points. Each coordinate point may have at most one stone. + +A stone can be removed if it shares either **the same row or the same column** as another stone that has not been removed. + +Given an array `stones` of length n where `stones[i] = [xi, yi]` represents the location of the ith stone, return the largest possible number of stones that can be removed. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: stones = [[0,0],[0,1],[1,0],[1,2],[2,1],[2,2]] +Output: 5 +Explanation: One way to remove 5 stones is as follows: +1. Remove stone [2,2] because it shares the same row as [2,1]. +2. Remove stone [2,1] because it shares the same column as [0,1]. +3. Remove stone [1,2] because it shares the same row as [1,0]. +4. Remove stone [1,0] because it shares the same column as [0,0]. +5. Remove stone [0,1] because it shares the same row as [0,0]. +Stone [0,0] cannot be removed since it does not share a row/column with another stone still on the plane. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Most Stones Removed with Same Row or Column -```go +``` +Input: stones = [[0,0],[0,2],[1,1],[2,0],[2,2]] +Output: 3 +Explanation: One way to make 3 moves is as follows: +1. Remove stone [2,2] because it shares the same row as [2,0]. +2. Remove stone [2,0] because it shares the same column as [0,0]. +3. Remove stone [0,2] because it shares the same row as [0,0]. +Stones [0,0] and [1,1] cannot be removed since they do not share a row/column with another stone still on the plane. ``` +**Example 3:** + +``` +Input: stones = [[0,0]] +Output: 0 +Explanation: [0,0] is the o +``` + ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution.go b/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution.go index d115ccf5e..333ecdb60 100644 --- a/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution.go +++ b/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(stones [][]int) int { + visited := make([]bool, len(stones)) + combindStones := 0 + var dfs func(int) + dfs = func(i int) { + visited[i] = true + for idx := 0; idx < len(stones); idx++ { + if visited[idx] { + continue + } + + // 横着或者竖着 + if canRemove(stones[i], stones[idx]) { + combindStones++ + dfs(idx) + } + } + } + for i := 0; i < len(stones); i++ { + if visited[i] { + continue + } + dfs(i) + } + + return combindStones +} + +func canRemove(p1, p2 []int) bool { + return p1[0] == p2[0] || p1[1] == p2[1] } diff --git a/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution_test.go b/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution_test.go index 14ff50eb4..d5ac3b733 100644 --- a/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution_test.go +++ b/leetcode/901-1000/0947.Most-Stones-Removed-with-Same-Row-or-Column/Solution_test.go @@ -10,12 +10,35 @@ 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}, + {0, 1}, + {1, 0}, + {1, 2}, + {2, 1}, + {2, 2}, + }, 5}, + {"TestCase2", [][]int{ + {0, 0}, + {0, 2}, + {1, 1}, + {2, 0}, + {2, 2}, + }, 3}, + {"TestCase3", [][]int{ + {0, 0}, + }, 0}, + {"TestCase4", [][]int{ + {3, 2}, + {3, 1}, + {4, 4}, + {1, 1}, + {0, 2}, + {4, 0}, + }, 4}, } // 开始测试 @@ -30,10 +53,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 62e18827d721e859c9857a9f7415010ed0ccabf4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 15 Nov 2022 23:36:02 +0800 Subject: [PATCH 0117/1057] dd solution and test-cases for problem 258 --- leetcode/201-300/0258.Add-Digits/README.md | 25 ++++++++----------- leetcode/201-300/0258.Add-Digits/Solution.go | 12 +++++++-- .../201-300/0258.Add-Digits/Solution_test.go | 14 +++++------ 3 files changed, 28 insertions(+), 23 deletions(-) diff --git a/leetcode/201-300/0258.Add-Digits/README.md b/leetcode/201-300/0258.Add-Digits/README.md index 9cfe3a257..216f55d3f 100644 --- a/leetcode/201-300/0258.Add-Digits/README.md +++ b/leetcode/201-300/0258.Add-Digits/README.md @@ -1,28 +1,25 @@ # [258.Add Digits][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `num`, repeatedly add all its digits until the result has only one digit, and return it. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: num = 38 +Output: 2 +Explanation: The process is +38 --> 3 + 8 --> 11 +11 --> 1 + 1 --> 2 +Since 2 has only one digit, return it. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Add Digits -```go ``` - +Input: num = 0 +Output: 0 +``` ## 结语 diff --git a/leetcode/201-300/0258.Add-Digits/Solution.go b/leetcode/201-300/0258.Add-Digits/Solution.go index d115ccf5e..f626d4218 100644 --- a/leetcode/201-300/0258.Add-Digits/Solution.go +++ b/leetcode/201-300/0258.Add-Digits/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +// 借鉴官方解题思路 +func Solution(n int) int { + if n == 0 { + return 0 + } + r := n % 9 + if r == 0 { + return 9 + } + return r } diff --git a/leetcode/201-300/0258.Add-Digits/Solution_test.go b/leetcode/201-300/0258.Add-Digits/Solution_test.go index 14ff50eb4..3a64adb8d 100644 --- a/leetcode/201-300/0258.Add-Digits/Solution_test.go +++ b/leetcode/201-300/0258.Add-Digits/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", 123, 6}, + {"TestCase2", 0, 0}, + {"TestCase3", 38, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e9c22fc9ca2339bb3f6c2056781e91764bc2cd0e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 18 Nov 2022 23:17:53 +0800 Subject: [PATCH 0118/1057] Add solution and test-cases for problem 1437 --- .../README.md | 30 ++++++++++++++ .../Solution.go | 17 ++++++++ .../Solution_test.go | 39 ++++++++++++++++++ .../sample_1_1791.png | Bin 0 -> 7806 bytes .../sample_2_1791.png | Bin 0 -> 5948 bytes 5 files changed, 86 insertions(+) create mode 100644 leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/README.md create mode 100644 leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution.go create mode 100644 leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution_test.go create mode 100644 leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/sample_1_1791.png create mode 100644 leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/sample_2_1791.png diff --git a/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/README.md b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/README.md new file mode 100644 index 000000000..d79ac29df --- /dev/null +++ b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/README.md @@ -0,0 +1,30 @@ +# [1464.Maximum Product of Two Elements in an Array][title] + +## Description +Given an binary array `nums` and an integer `k`, return `true` if all `1's` are at least `k` places away from each other, otherwise return `false`. + + +**Example 1:** +![example1](./sample_1_1791.png) + +``` +Input: nums = [1,0,0,0,1,0,0,1], k = 2 +Output: true +Explanation: Each of the 1s are at least 2 places away from each other. +``` + +**Example 2:** +![example2](./sample_2_1791.png) + +``` +Input: nums = [1,0,0,1,0,1], k = 2 +Output: false +Explanation: The second 1 and third 1 are only one apart from each other. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-product-of-two-elements-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution.go b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution.go new file mode 100644 index 000000000..0f312f037 --- /dev/null +++ b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution.go @@ -0,0 +1,17 @@ +package Solution + +// top 2 +func Solution(nums []int, k int) bool { + oneIdx := -1 + for i, n := range nums { + if n == 1 { + if oneIdx == -1 || i-oneIdx > k { + // 满足条件 + oneIdx = i + continue + } + return false + } + } + return true +} diff --git a/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution_test.go b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution_test.go new file mode 100644 index 000000000..96b1ac9bd --- /dev/null +++ b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + input []int + k int + expect bool + }{ + {"TestCase1", []int{1, 0, 0, 0, 1, 0, 0, 1}, 2, true}, + {"TestCase2", []int{1, 0, 0, 1, 0, 1}, 2, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.input, c.k) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %d", + c.expect, got, c.input, c.k) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/sample_1_1791.png b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/sample_1_1791.png new file mode 100644 index 0000000000000000000000000000000000000000..cb2c951cb72a34b78c132b3e50c467bb1c988a6a GIT binary patch literal 7806 zcmd6sXEdDAyXXg_jHnX{QAZ33qKgu3CQ(N3!icERqXdIs$OwrRqeY8OL>Ik_h=}OD z*C^3D(a)RwzudLX{czVkUyijf^X_-={p`J;_Iq}SmWC1~IU_j;1fo<%$?JeX1ckuo zN-{#=Z#eh~Gw_eVO-Jb=sJMrD75DD`pwE%l&drH|?+_Q1ksAmEb^rTIFk{W; z1p={NSC&WWc|F}s@zaWV+|+(jzu9!~pgv}NeA>u!)BS@hX06eu-o@uw!(+53$!MM5 zGi65jSIVLA^9Up@5s#u4duA9dtu`G8A)~zDTY)GG%1~5#X3OKkyRUBYqK7_x%2PSK zjCLbqPxoVu#=nuC?foDZy&}D!+~X~~;+g8!6Z3Wj1cF(@kf4CVS6~8A83_~&`oV~z z0l^&p2M@K-5AeVtHCVSMz-eM|3il=*R@dV`6Z#k?`w;_(nMB5X2nL2Qw#ay8J%9`+@*yVf6&LkA2;^>!ILU!Qg@2PT$6BWyXFEN66{&MR9 zFNJ95E*pV&!QeJRh{}!JR)fsM!nay#KMz+o3A_j}t$L$BTE;qNiGa?~>`sZmq_Sjc zN{sv~1j7;Zn6Cvn&+a8TD}Z!hGzs(bQ_bza@jTaP+8Ml4(HU)yfN?;R&5I4v^7J)5 zdT(eBBusjffCRp}8Zs$#bL!Y^&MO5Va6B#igK7_q?-(Y2p&zMM>JqfD1~-6xLVR5H zvquKHBSG_TW78$ZN~xd+r1j?Hes6@h3~4ALTBC)>?~|u~tY#-+zKKsC`uvgN?2L3? zLo=+UGFtSueR0QSEE|!3*wyKFH(w$LyX^7B$hIpIAnq2oGTph4@{fphEIJZ=C(i7_fORtmmdwheK@bv(Fe8iEc~wc-Cp?cLVVAr?u`>w0lO~KueyLZ`^UxO zjbvkX>Tc7G`f6`?FYnNjS0+w(nnBh2+wMM*vZ-vKcn! za^+O+_IDori6%|jj0E@z)A#OEqno7R8)rkIAx8GE$ie_1!N@usbLg_i0*x5XtS<{z4kdY)Eo^ z+8biz8$JGX?tvVj(c>oHi^Mw@9}HObYvs-8BsW;=jekpA)L*E0#%(ftRP)KOq_MST zlqmR%AGh{8gPh&oB6kyabx0cV>p4DTfvUZ3LyjWF6RacxXTZ|PS~@yRY6`(@j;f^! zj(AG?1g`h)q?m7PpE;5++CClK>GSl=ZWVQK9HMJHTy<;5-cMmNp4a6vh}IVTv|%r3 zd%AT)>unM5=f<5$V&RVk-&pt>KpPCSLGj?pMw7uvAMph|)O|vD>Q~R(&)OnG6NE8E z)9pe69~fL8Fdtcm<$O)oTsUSUMQJ@_by@Pc$~F1O@UmNR>d|~t;H?ZjZTNjyo(WId zC+Fo{0uZQG6}R=)u@pS**VA_l<_0@(_wTeP3Vr9k&&lV<&wLM=yY5?kC?R@~JRiDF zit5Xym?3>5-Exhqh5i*Q6g1a*tc2T=ITwhAwU19*6bT;4^s8me^xm#Tw$2M5SEbsa zf3YV|&$|d3QL$1r%j0mjTROas=s*Zq;1=Xm_CvdQ($b3|8mMEBKGn;E!F}t-b#2)x z3t6a@v!yx_ePww)(?iZ5+mKVL&(9ODw<~^U;NNZjc#px5XEa5hKrn`DSgX>!r^@KE3WZ)9vUM>14TOUyfy z8x88lg`b>gmsdEZq;H>W-SE{OjJ;^d0zsk&#~vUJP<}e$J}h%qy}E5I_tmC|Mj(pe zVTVseiGWb_3JPz)*0oj2XJzIrJ-g1)%i?h{DL3UK(uLV}DVWUsb*4PDCD=8t(_cN< z+IZvJ7=j?(hoNVLi98xMUwXqfv)QH{C7SGs>2AzUMALu?LBSSyAT%H}5ICLO^78#M z`fBId6ZNGnS(g5)zV<>gJ!f&1_*vNdL%4mH!oXkEK>XPVQ>1 zC9u1@TikhOalAK8Dy663ammQY$ks%qYRRa`9jEcKoV>i%@p7AUIL*jZjcZm}*^AYI z9KAzcgTnMtt4H>r_IE5I$=!wejuRDm83as3uL&W+ta}qperE>7PioCt2t&7<{w!Qe z-Ss;-IM5pG{rU4n=gzP0WbxKubBe<#DbKC&urT8?tBzMhq@Tuj!e42X80qWh46fSN zxSSr?Vd)weP=Z!ZYF`A^x!M<6Op7OwQnND4VWp*{lE(!F1hyADVrKo0S$avbKDe#) zXg6ryS0$RsQi>c12(W2Ln3bZhGzv|dS;Z)*ZS^{DUr;iMX(jYVk}vn9NG&Zb@x+CqCl1#~PqYPT zP%f|2XKFGtaZ}>{m*)ZX&Vrh0vPC5&xx8=2T?Rj@r}Dv(Mup_s@wBbg;17Ck%K z7!L{xx(tWDefRDi4u|vJU*4Ro-oCszJHPvz2ui`fC>zre`~JP+*5qePB~{gHy$sx` zGCqp^@=i|0)s)Inz+mCY;?4#J2K?xXyWHG%y{R&z#U{UQVcjmzPc}9jiwul)bpx5& zXAn5#t0^TuueQ(|ySuyWuCsXjB?{LS%p~sQ=;-*GGAD4_Nt`jlzA`CE-NWOs(dXDp z5s|S=;L!mbzpVEjTn_F7Ye78R;uR1uZSs|@Evc#b1L&LdBa1%bQty51NJ?%!-@Qdh zFA)b-o9)TTi5|VfXfdZU@foX=v$M0l{tbmBy~CC!J`tV(FcGM>q_EI&yzJTjayKsz zPc&-k&THLVjpyTKOEH?V8NB%5uF`q3Ux~*sNUD_QJ2n>Dt*P2a5%2R;U#|CP9NB^r z2_aN$FJ`x<>veT?6VDVqawn#y8a&nw;#ArkZ7b1ia@ekYM7sB%o%tvZrLmNS=x8V- z*?u@}ZdO*Snc%m!w$17K(Ruu;t|AQCk3UmURn^te0Z!G}(2&8Jh&)uO>iMLYO%HR~ zd@v=GS?ia*Zt>ZT$!h2MuR*Hu{4y?c2+wLb>%MASlhbtF;^Jbj?3r3{bqG5$1Am6u zoKSckU)$TOe{Em|*d$_NVmb~yrQ3@aYwPRH7e~gaq~BVXWj=WtHNLF;Lfp&I6>|NK zL7`z(R1`AM9gAW`;AV+xBT4R|i{87J`ki53c8XXL`B_EFQl6N%&bwZodsod`{`wx# zYPcgEeQwi&pkEq707D zpD*3|a;;7fvoRKh$Ag%tLTqL%`!f}|Vz>jYr7A@O>RV)7J@Cg5&_8Ic=Pfu4N#Erc zMlbM@=gzT7EiP??PTt05rP!qY<~>7%SXWO^aY2F4!Ef5$7|vAhNWcxu@p-W-12(19 za&P>6P*aX_v{+*VYPFR`9(;DbczU@0?Af!BkdU%Uc7=AwnLyb~vU^^v=6ARyc=I$$BrFlL|u8~5cM`H0OA0#3!4qwXnF%4Z0 zUwg+l1^?~JHhGKxjlM<}RcJO9o2;5S-8eotChKeP5FWENm8X-px3{;`$};mo!WEYv zy)J?NXl(`Q-z=X zENO2%!3?p%6V{3Zrf6iCAUWX=b~2;B6@leiZR_41Y+mL50ws8WS| z31Ka;SRNXvdzBsl8|`(WISeIwOXxbU@1>AJaM99)Q1MrVb&V725cOAHq2aAbSq2&| zqYE{k#zbSTDjCQiBu#qw^cpLf^s}P%_4r`$WQ5Sx_c?XFq~YG#{@us87VfxNs5^Qv z)5}i!u0{CeMUpCvbId+vzogJm2cJGI;iko>xK?<1ksmq>rBKNuV7E ziY&Q#voCP34l)1Gl|8CPFw5C+!_6?0X3yWB26xd1B_jK}I3$lgh_lAuGF<9CwJPLk zS&3=kB3mTw3kW9JVwzYx+vtS$jZybIxbeB&b*!?WZO)!9uBt0!OGlnb>g=7>XAXdr zu~rP=hq!kaQtlTi1z~vAJ|H>ffBSIMG>iu$zplx5dZ)!Kjz2g*Syp5~p$q)!XBnUDk(H&b|^ zk2A;)FXw0V_e^oaOj$-kx3T%YZz8fE@*{JDMic6Yeo4RvPU`(qvozO@UP{?S;_NHm79z z#x#=4L9DTK^`#A+7ib=6#j_n_)T7mp{(a&U=TT-mDogR;dNrX!vPa5&XPHn{5WGe~ zL}ps&B4^zL!TGx#n#jdc(w5PK?o8l&$zW#}@ns1U+ad zna%lES^>yQ9NDUJpOmr!?vbBJM!Z>{%2G3URk2Parx4TQ9aZhhwtlfY#!x<`cPPkiEx?e6!H(6$PeiLJp?-D){ zQj9MHUrY+=w2U_FH{Mcz`7|u?Qhpz+B53$;&Q%nR&l?5ylg3t^Xc(pFXHPGQf0D<+ z=52+zl()Hsk$3-^SigQ&{GP5=HXQl2UnetaPS=X?DGy38mKy}6AOv)RhU_hvNW+Yi z;R_vLwW$b{;0^+pq4w8(A+>=KHDH_!ePBp1#XnDW_uoT`TR=1X9@78)5AZdVmL3lL zhy;F@8Kp({&)5C;cY$6ATqYFGAPhs!1D^uG3Y`BJFADfgLMUAvtOZZ-&+QV!@A4pV z>_kvHD)?RU|CfmXp*C14bPK@c6E18^9!MH+s#*( zrko_oc$p#{dpy`LU!Ob#{-Z!w1rO#Nt03cQsT*Nc&iSIcbJ5(5N1wJ(V-ej8Z{*JB zfmlXI-X`FG(rKy;;^}3(`qO>_{k83X`6o!u(Y?m(zJ ztPSNgC~|&jXY-f#J3aXE1mCDM4h+)6>)LwK=)DgG-8VIDBKOc7JfKHQu-cC9?a1`gS4wcQ=4n4)*q9j$;V1 zY({jsb;P)%lk@TRoqiBr+;eM6()W*xq9Vz4(RnaU0C{mm8<|15VUS_(4se2{D{SCT8kr;Agw$vWEG zXKwLwbBEZA-oIa2QE>o>9?2%RYy*P%02z|Y#+Xp!)821Nt$7U%(seFg7%z4y$jf~I z-~e#joTzm8OO}ISH~DyYcruf=R(H3>KM^nlNu>1D)zx{dj|lD3GKo3b+S+=Z9&pQX zs6|zR{n81_I;O zWY{@7%X#g<>ZyfodOl1|Jqc^Wg;>*&0BNy1H&xmwwpbt^jaz z8h|z|vc3`ka8@Q%I*c0V>wCDn?>K@KiPY8Ay}i8w>7R8=aBu{o4^yN(y{f`rf!kaG z)&Vj>^<=TUVf&G29$sF6q|P_SMX)5G=oahprInTPwyxJ2xd1#51$&FR5CMp@rohC= z2%tz6fX(*io$&&*0Ggfbul%J5pdUvM0OEP-_M(hjO%)XterHF17l)(LOcaDr3JMt+ znW6QqvCo#f3vEMt(J?WrhpU6R+tc;!y&#zFlNy(d(oz>7i&yjQe9tG6sAh^i;p`<5 zAcj&%184M6(a69+@p%*)-WEa<*kWIa@$}pm0qrCM_@k{}>H4e(tSB^<+VQzVx--(IVr=CMN2n-eRCYTL*_pV6mY$cny=4fpZJotcwPgbt@$$ zEk0{QYX)m2W-ipf`X6&1|w!-{rvfJKw5ids&)W@Q5eU1C&0KhG&BId2g(d5w-Ag7 z-24}y%iq1%#C3Lc!R4wdDqdg2%w>NEcK#i!OdU{?c>NljPZp=5kaAt0(#aHc3ne)9 zXRlL$8?-CEz%C=x*wAneuoE?_^qfsVz(dmw0J8vMN=isTnMx=u85tQ_m*1N7P`ZXU zlW@B@J)D?82ey16jLA`rXN>sXD|f|At+jVOchJbx)Kp7rZoIf)be)=6B7n3o0zmWH zzUk@bmFTe0&@m3yoBU5uqb?>U(-BPKe{Rj?NPF+SK8;*hun^PLw6eAa${-f?TehUo zSPswandkQQJlx#M>gqXRlCrW`!1!*45%;p}&ev}@NqMZ%1@&%(-8Lvf1El4;I>3n~ zVYooxUaZWwz5zI5y4;4^=Nr*k|LLPQR3^21U)c(%e3FurRaI4GCOuY@GqzXGPxhsm zUen`YzgK|M28wKFN1OW_=IQjJ3-w;R7Gqa%Zpog(>olvYs{p$W$?Q1NG$C+vL0W<+ z_IUtk$7g^$A8)|!gSs`Nqjv#M+Bt%T(w%C9P;4}E?_smVk6V}5R#tjgZIyXo zFlC!{j$KV&y9kK>Oq(?GNt z7;7jle)muh@M(Yp0wdpCoX^ZO`g8=Uy#+QfCnu-%QdtKm)Ag7Mmag=0ad9oLtc;F~ zSR7wtAi={Jw8wh4S%7#lUFWee|B{=VyREHF)b_cvb2DHzbHpJ)C^}y&D7jmloxxA( zJYFRidUp3Ti$SZbT*#~f1i@+j^*{v$ZfQ;o%hI3@g29+me6F zrgno|Kx|;UM@#^Qf_3Kmvy?=8o;x^5`5Za=`N?!dJ(NrC9_jC=73(a21^(~1dNB4n z`xnE5-+6BXrTudEkNZ@q1c<%>@GE(jiLzM!iwNC(-GkF?hU#ls?vxs-)Cd=#P1JTo zNkRUuHREO~+Yblv?|9PLfyqBUARHl_EIXjJFtbKrWT<;qq|h#uOrhd)N;5Hx0f9r1 z8&)oUfnN)5GF$vBimkY!lDs_qWSXb3o4(5NG(s&rfR+#nhNdHxCc-p;TbtYex#~g3 zy|~Bn^&1)B$Y6Mo6Qu4#y!EChYchkjtq_U?37iZxK-r~FzEs9vm}P`Hm>5a(Z~TE; zC!+kWrfSf*U~P67AOsm81fhGP#Se^#dQ(+_n>yno9PHCy$;K#kQJzifV4&j9ahtA= z{2L062@jYfgb;?9iT6g_rsm=Lb|4U?tu`WVZU6?; zqi9g1N~%Hpm}sA(3X2AvIER*Q1dZ?i_swa-O79h0c}ryMX9PtIaAyosR?v_yerSgK EFOH(MLjV8( literal 0 HcmV?d00001 diff --git a/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/sample_2_1791.png b/leetcode/1401-1500/1437.Check-If-All-1-Are-at-Least-Length-K-Places-Away/sample_2_1791.png new file mode 100644 index 0000000000000000000000000000000000000000..3e644f98a72d9f2301d9729feac69f74fc2e5efa GIT binary patch literal 5948 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 literal 0 HcmV?d00001 From 5406c30e45685c6204cac36cd0ade83fc8965f13 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Nov 2022 13:33:53 +0800 Subject: [PATCH 0119/1057] Add solution and test-cases for problem 2017 --- leetcode/2001-2100/2017.Grid-Game/README.md | 47 ++++++++++++------ leetcode/2001-2100/2017.Grid-Game/Solution.go | 26 +++++++++- .../2001-2100/2017.Grid-Game/Solution_test.go | 15 +++--- leetcode/2001-2100/2017.Grid-Game/a1.png | Bin 0 -> 2362 bytes leetcode/2001-2100/2017.Grid-Game/a2.png | Bin 0 -> 2127 bytes leetcode/2001-2100/2017.Grid-Game/a3.png | Bin 0 -> 4848 bytes 6 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 leetcode/2001-2100/2017.Grid-Game/a1.png create mode 100644 leetcode/2001-2100/2017.Grid-Game/a2.png create mode 100644 leetcode/2001-2100/2017.Grid-Game/a3.png diff --git a/leetcode/2001-2100/2017.Grid-Game/README.md b/leetcode/2001-2100/2017.Grid-Game/README.md index fd6b9c131..818139db6 100755 --- a/leetcode/2001-2100/2017.Grid-Game/README.md +++ b/leetcode/2001-2100/2017.Grid-Game/README.md @@ -1,28 +1,47 @@ # [2017.Grid Game][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** 2D array `grid` of size `2 x n`, where `grid[r][c]` represents the number of points at position `(r, c)` on the matrix. Two robots are playing a game on this matrix. + +Both robots initially start at `(0, 0)` and want to reach `(1, n-1)`. Each robot may only move to the **right** (`(r, c) to (r, c + 1)`) or **down** (`(r, c) to (r + 1, c)`). + +At the start of the game, the **first** robot moves from `(0, 0)` to `(1, n-1)`, collecting all the points from the cells on its path. For all cells `(r, c)` traversed on the path, `grid[r][c]` is set to `0`. Then, the **second** robot moves from `(0, 0)` to `(1, n-1)`, collecting the points on its path. Note that their paths may intersect with one another. + +The **first** robot wants to **minimize** the number of points collected by the **second** robot. In contrast, the **second** robot wants to **maximize** the number of points it collects. If both robots play **optimally**, return the **number of points** collected by the **second** robot. + -**Example 1:** +**Example 1:** +![example1](./a1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[2,5,4],[1,5,1]] +Output: 4 +Explanation: The optimal path taken by the first robot is shown in red, and the optimal path taken by the second robot is shown in blue. +The cells visited by the first robot are set to 0. +The second robot will collect 0 + 0 + 4 + 0 = 4 points. ``` -## 题意 -> ... +**Example 2:** +![example2](./a2.png) -## 题解 - -### 思路1 -> ... -Grid Game -```go ``` +Input: grid = [[3,3,1],[8,5,2]] +Output: 4 +Explanation: The optimal path taken by the first robot is shown in red, and the optimal path taken by the second robot is shown in blue. +The cells visited by the first robot are set to 0. +The second robot will collect 0 + 3 + 1 + 0 = 4 points. +``` + +**Example 3:** +![example2](./a3.png) +``` +Input: grid = [[1,3,1,15],[1,3,3,1]] +Output: 7 +Explanation: The optimal path taken by the first robot is shown in red, and the optimal path taken by the second robot is shown in blue. +The cells visited by the first robot are set to 0. +The second robot will collect 0 + 1 + 3 + 3 + 0 = 7 points. +``` ## 结语 diff --git a/leetcode/2001-2100/2017.Grid-Game/Solution.go b/leetcode/2001-2100/2017.Grid-Game/Solution.go index d115ccf5e..364ccf70b 100644 --- a/leetcode/2001-2100/2017.Grid-Game/Solution.go +++ b/leetcode/2001-2100/2017.Grid-Game/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int64 { + column := len(grid[0]) + for col := 1; col < column; col++ { + grid[0][col] += grid[0][col-1] + } + + for col := column - 2; col >= 0; col-- { + grid[1][col] += grid[1][col+1] + } + + secondMax := int64(-1) + for firstDown := 0; firstDown < column; firstDown++ { + // 第一个机器人在哪个节点向下转动 + top := int64(grid[0][column-1] - grid[0][firstDown]) + down := int64(grid[1][0] - grid[1][firstDown]) + if top < down { + top = down + } + if secondMax == -1 || top < secondMax { + secondMax = top + } + } + + return secondMax } diff --git a/leetcode/2001-2100/2017.Grid-Game/Solution_test.go b/leetcode/2001-2100/2017.Grid-Game/Solution_test.go index 14ff50eb4..38e66cdad 100644 --- a/leetcode/2001-2100/2017.Grid-Game/Solution_test.go +++ b/leetcode/2001-2100/2017.Grid-Game/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{2, 5, 4}, {1, 5, 1}}, 4}, + {"TestCase2", [][]int{{3, 3, 1}, {8, 5, 2}}, 4}, + {"TestCase3", [][]int{{1, 3, 1, 15}, {1, 3, 3, 1}}, 7}, + {"TestCase4", [][]int{{2, 4, 6, 8, 10, 12}, {11, 9, 7, 5, 3, 1}}, 27}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2001-2100/2017.Grid-Game/a1.png b/leetcode/2001-2100/2017.Grid-Game/a1.png new file mode 100644 index 0000000000000000000000000000000000000000..3e95c24c4559f91569cb84031e0b965751daeb2a GIT binary patch literal 2362 zcmc&#`&Uxi7G4{*+V(QkG<*00A83iMV@V;PCJ2!tYQ{YB2PWFX*TBkgP4SJG zue8LnEDKC~t7T#t6^=?YvtdeBR-WqEG39Ri;hy^++%@)EbFTfZ`OR;QJ?GfjLCk=~ zh8BhZfW z+h3>CA<)ds3}QIteE@9@yvf`eN-poi+CXHfni=j2AfVGAOgtVBxX+=gSOLfCjUnF!5c zJOwrZ5e&9V`^Y{>ETU0o65e7Gu2AT7oUCMKINlo>JcUN5GeLwAOPSI>(7)tt-M&qpWO3Oll&F8G?L; z|K9))iK7P)CGb9KgaCjg9di@v+AG@$z`WZuKQcQx^5dzYy#szmU3>c+lt0kh518gt zAkR0)3pQqne)kV$?W~S7?mr%A<-b6_AbUOz+Da|*sVw_8HF2Y?>FBFJ<0smW)FnMX z>~;C3<>QML4>azJI`BETgdh2~@y9#YxgV$#T{rdJS@hw`>ipo8MYP%xDqM&^Ndpr7 zbeiNo1~5=ots=Q%UlE%_3TBmOZ;VQt*5zB-528w&?)l3za`y~kqEBN~`!MpC)wX{y zPEH<@&#d1D*yMB#x~gr|*&lmBM3*kx$Ugv-4tn=Uop`rf+F+^fVo)u;f=A zky6?#9uLrQ-pBPosV^5sx7V$L!Rb6zWAY7vJ@Koo~{m7vQtACi7w+`zK8C47I z{Rh`6hkb{FvfLo5)#1EbQVykLb9>q00lLlbN}-k`Tr%+dmNluA6nslRc)juFtJg#G zFZEfbmQpCp@KNI-rRk7K^}+hQNlzmKckWpFWPAd=a>-X*(d*`iTkUZ&g0NK=LVZnd zjXio{>8Eod8cG|CH|}lKjg^opaB|>$x3D`2XqnRDsA0w1U@J;h{vXvi~*6aF1hMs>1|V@AV)!uMsb`7!?@!k$Z{SXqapzk=Vp z1K+#Y0T;` z77!c~JU$l3hU$YG_1iYAeG(vaJRkJwS%<~U{DgBCqbS7wvo+G$hG%XC`0S^tvP!sp zW0{eC&6KTZ_e|#pn(L}%(>|(Yucm_)6qV;qT~ppupB-#Fk7X;c(|ZD1(BtGmnolE1 z;iQhq^i$r~k8_99`*&L$4J(Bma<*?lRbM1n%gX>#=v4S)EdzDm4Z4IvI~ylD8w0Pf z%$Q7Oo#^}Xt1c;)2AN@ugmGZ${(+8H0n!6Ft*A#*iC04Z$8zmwO z7Hz?pzN3bVKI;mDLL?K?ZogXe4uGu8d@V7B+3~0Ll zbzCmEy|MThj?}(0qw;*!W6bbmxYt7)OnT|#g+V@rgz*(GuTkpJ(q6g}*JVH96`0vW zT)@VDzFz6l(3FxzN6j$*^Jj|69BR6#cdt9Fswo@sZZOEBOB8&d?|nJN;0FSr-@x%x~}9s620`llP} zu9u7(jFy)4=d-w;m=Bw2FX+xS>CQ6Sr%L*^lMEvj%9e$b=-=6hR$s3(EjAJe*{@8N zHGIkqObD~f(X(?5_RlBXJhJ04jCusK&NrV!Cv|Oo=)dALeZ8fRtHALQ_TPo7YwFx0 zL;Bhbx7S|;k#cln#%X%>qStJP<=X6mOYhD61ZHMwxARL3Nhlwi&n|vXSOnI*Ju1D* zJhfTFCpP6-3T?%{&0WHbwCQtnnX}3mJ6x2j4rxT2XSQA8Hmr8kd$A*fSkXh&JV}oH zyXj5cqSl|sDUmmeFBn-_Te_%xsRCH;L5~HwtL1*1yNQ~74@0WN>ZGyk5eBps2K8BO z`Qu$gVoo+ArE3vW yR$b^3H^JDJIzrW0U+&3S)xb4B#{GKe=Bu=3C)$z_5cCcCzX6&*)9)fBI`coh@;bBt literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2017.Grid-Game/a2.png b/leetcode/2001-2100/2017.Grid-Game/a2.png new file mode 100644 index 0000000000000000000000000000000000000000..e9505c358959194eeadb02fd93606a39c81491ee GIT binary patch literal 2127 zcmb_dd03N28vhcALaHoC0J&TUL~g|rxf}Snp%AXH2q*@Da9AQ&gkpejgMh?xh(stz z3{Wb_Ruh2*5mD&^m0L)bjV(t58if^w6lt#^*@JzknD%| zhtA>uT>$@$#4%`n*?6}g=rZIUNh<8=h2{tV*hh7D0tu<1!W*CY^IT9avqZ4QLE}b| zYTv@FE`>{S2uEtu+1Peg7EUBCTb`SHb}E?PU2{g=d0=ChhIvNSSw0eT@6fAb2A6N@ z7nj7?%}ikFab`1P=dB`?5#Po{u&R=xv3Z)#?h`(+NCJ?9B!0pJhV>;9`4iGWM1?OT z|BhiGA{iO(*^zxuzCpkBxobt&n#o@r7yR08GZ?3Coa=>mam-7W=Q6UV0PU%siKcn3 z?bFyoW8!(ELS1 ze(&@_YT0qP6D-B;B8zs8nAv{VEV)&i>RVTeo48=j$lUocQ$edDQP{bxG$JD)GgJs$ zx0@W!Y)*!Xqqe-F-VSYxiUF{1dT`x55dnm6y66X2q)%)kiUV>dv#h9;(Gr@@+ws~h zSJnnMT|ujENZCO5)|HVT8S|ynEj{K>m|mqiPXyu8vK&efwYQo5ps z_3O*0rL!gmjt-8O0I^wAvy2XCIzE3W>ats`Ic!qVqf7RZ;7U!JBH5#FVL%0`s2G3u zDpfHwwD+0`@zf07C)Q$JSh&^jX1u$>L}j#RswqP-zfKk$2m~m!!t4uKPOz89DDz6w zQo*_}jJ^8UHf>%a<#;Q&vF6HiJ$`N=Khy0MB8bbErr6;;p&m)`Mcq^DQ{T&*AipRR zQu`D0j7<7&2^|NpR|%po`gABczc^p*0?(fA`>IE)LmlNll7^s0!jG+-=tO-tfY=%P z8_=cHWC11{iGHZ{8hvbKn}L=qLe>v0A(UHBXVV(qhz^t{yvb#~C{B!z?zU^qR1N3L zdc9plj9!1>SjjK%TBojTE*#u_U8gGgYmw|=&wihY@PFjkkLS!7AY9(Z39Nc$v{`2K&gz<%4NAgQrA%krHMcyoLk-Qmvg_;nP3BsG zB)|uak+_NKcA8}=>rSJ7jN1Q>ZV+MGO#9rB_VbENv|Wa)BFG*gx+dV8#-jiJCK_GJ zipMuKzz_dd)_lyOPg(OZi+;}pJpSH;*oT&GjmAxq)2RZ(;f9p%Kw2*6mSfTQ|gL~_Yb|fL~>pi{sShq&q zHC4JEz$|rb&G8n7@363qcoGtG+t22tT)*Wotq91d(8WoS4*6iUh_=e{DSc%+!=4Sy zfY^cobjhOw_9yfE^?QsAY20s~&m%6nTpLDt1UF>(SW1-T=5lN@(vq!`r=2qONOXiH^Wp8yhz8>-xH5sJZuk|mJZO@X z*<9fep6xBS2EVTXYYKuhAv0lU`x>?VVHzYEihaQ({MI`GOqKZfvEMJ@ec7R~>hFhR z<6puOU`4fo#gMzlEm0)Z)di;AbDfkyNDKtaJY(ybdV$S=d> zTOsdT=IQBCDka`UvVNsiCd?gIhO)y=Q_TR=v${I$-;U znn`UBK)S=5MGjFzC%j?Fa{Qf$rYa@U^oMg343~MA=9tQv(Jmiiw7X0$IXV>Ndv}W3 z3a$xLunOAuyt^%K{`ozrrq;n-YK8R#JY1lfz5hh7iec^0>&LyDtE2m1U!E6_U3@K~ z-J?Sus`;6HxGJog*S|Hrm}4l9n*6<|`;S5QpQn2-s6Pfbgj6A%TgD%AlKc$*&b}yT f-wNmOnB~lJjGjr%xw;PMa{}C*@lI_H#O&Vy1DwHU literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2017.Grid-Game/a3.png b/leetcode/2001-2100/2017.Grid-Game/a3.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e3d7a3bb20b0a1527d2a70c5411449e991998d GIT binary patch literal 4848 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 Date: Mon, 21 Nov 2022 22:52:11 +0800 Subject: [PATCH 0120/1057] Add solution and test-cases for problem 1926 --- .../README.md | 48 +++++++++---- .../Solution.go | 67 +++++++++++++++++- .../Solution_test.go | 33 ++++++--- .../nearesr2-grid.jpg | Bin 0 -> 19980 bytes .../nearest1-grid.jpg | Bin 0 -> 23592 bytes .../nearest3-grid.jpg | Bin 0 -> 6059 bytes 6 files changed, 122 insertions(+), 26 deletions(-) create mode 100644 leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/nearesr2-grid.jpg create mode 100644 leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/nearest1-grid.jpg create mode 100644 leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/nearest3-grid.jpg diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md index e20ec7dd1..e7acc3c2e 100755 --- a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md +++ b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/README.md @@ -1,28 +1,48 @@ # [1926.Nearest Exit from Entrance in Maze][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `m x n` matrix `maze` (**0-indexed**) with empty cells (represented as `'.'`) and walls (represented as `'+'`). You are also given the `entrace` of the maze, where entrance = [entrancerow, entrancecol] denotes the row and column of the cell you are initially standing at. + +In one step, you can move one cell **up**, **down**, **left**, or **right**. You cannot step into a cell with a wall, and you cannot step outside the maze. Your goal is to find the **nearest exit** from the entrance. An **exit** is defined as an **empty cell** that is at the **border** of the `maze`. The `entrace` **does not count** as an exit. + +Return the **number of steps** in the shortest path from the `entrace` to the nearest exit, or -1 if no such path exists. -**Example 1:** + +**Example 1:** +![example1](./nearest1-grid.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: maze = [["+","+",".","+"],[".",".",".","+"],["+","+","+","."]], entrance = [1,2] +Output: 1 +Explanation: There are 3 exits in this maze at [1,0], [0,2], and [2,3]. +Initially, you are at the entrance cell [1,2]. +- You can reach [1,0] by moving 2 steps left. +- You can reach [0,2] by moving 1 step up. +It is impossible to reach [2,3] from the entrance. +Thus, the nearest exit is [0,2], which is 1 step away. ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](./nearesr2-grid.jpg) -### 思路1 -> ... -Nearest Exit from Entrance in Maze -```go ``` +Input: maze = [["+","+","+"],[".",".","."],["+","+","+"]], entrance = [1,0] +Output: 2 +Explanation: There is 1 exit in this maze at [1,2]. +[1,0] does not count as an exit since it is the entrance cell. +Initially, you are at the entrance cell [1,0]. +- You can reach [1,2] by moving 2 steps right. +Thus, the nearest exit is [1,2], which is 2 steps away. +``` + +**Example 3:** +![example3](./nearest3-grid.jpg) +``` +Input: maze = [[".","+"]], entrance = [0,0] +Output: -1 +Explanation: There are no exits in this maze. +``` ## 结语 diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go index d115ccf5e..23e5b1fb4 100644 --- a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go +++ b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution.go @@ -1,5 +1,70 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type point struct { + x, y, l int +} +type points []point + +func (p *points) Len() int { + return len(*p) +} + +func (p *points) Swap(i, j int) { + (*p)[i], (*p)[j] = (*p)[j], (*p)[i] +} + +func (p *points) Less(i, j int) bool { + return (*p)[i].l < (*p)[j].l +} + +func (p *points) Push(x interface{}) { + *p = append(*p, x.(point)) +} + +func (p *points) Pop() interface{} { + old := *p + n := len(old) + x := old[n-1] + *p = old[:n-1] return x } + +var dir1926 = [][]int{ + {1, 0}, + {-1, 0}, + {0, 1}, + {0, -1}, +} + +func Solution(maze [][]byte, entrance []int) int { + init := &points{} + heap.Init(init) + m, n := len(maze), len(maze[0]) + visited := make([][]bool, m) + for i := 0; i < m; i++ { + visited[i] = make([]bool, n) + } + + root := point{x: entrance[0], y: entrance[1], l: 0} + visited[entrance[0]][entrance[1]] = true + heap.Push(init, root) + for init.Len() > 0 { + getOne := heap.Pop(init).(point) + if (getOne.x == 0 || getOne.x == m-1 || getOne.y == 0 || getOne.y == n-1) && + (getOne.x != entrance[0] || getOne.y != entrance[1]) { + return getOne.l + } + for _, dir := range dir1926 { + nextX, nextY := getOne.x+dir[0], getOne.y+dir[1] + if nextX >= 0 && nextX < m && nextY >= 0 && nextY < n && maze[nextX][nextY] == '.' && !visited[nextX][nextY] { + heap.Push(init, point{x: nextX, y: nextY, l: getOne.l + 1}) + visited[nextX][nextY] = true + } + } + } + return -1 +} diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go index 14ff50eb4..5c43ac302 100644 --- a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go +++ b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/Solution_test.go @@ -9,31 +9,42 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs [][]byte + entrace []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]byte{ + {'+', '+', '.', '+'}, + {'.', '.', '.', '+'}, + {'+', '+', '+', '.'}, + }, []int{1, 2}, 1}, + {"TestCase2", [][]byte{ + {'+', '+', '+'}, + {'.', '.', '.'}, + {'+', '+', '+'}, + }, []int{1, 0}, 2}, + {"TestCase3", [][]byte{ + {'.', '+'}, + }, []int{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.inputs, c.entrace) 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.entrace) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/nearesr2-grid.jpg b/leetcode/1901-2000/1926.Nearest-Exit-from-Entrance-in-Maze/nearesr2-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e3ef56b9fc210e89b6b8beefcae4e7b01d41b52 GIT binary patch literal 19980 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 G`~Lu$D+x^i literal 0 HcmV?d00001 From cd301feb06c3356251fb78f1588ba21e146332df Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 21 Nov 2022 23:12:12 +0800 Subject: [PATCH 0121/1057] Add solution and test-cases for problem 1732 --- .../1732.Find-the-Highest-Altitude/README.md | 25 ++++++++----------- .../Solution.go | 12 +++++++-- .../Solution_test.go | 13 +++++----- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md index b78c7f804..0d429fb60 100755 --- a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md +++ b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/README.md @@ -1,28 +1,25 @@ # [1732.Find the Highest Altitude][title] -> [!WARNING|style:flat] -> 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 biker going on a road trip. The road trip consists of `n + 1` points at different altitudes. The biker starts his trip on point `0` with altitude equal `0`. + +You are given an integer array `gain` of length `n` where `gain[i]` is the **net gain in altitude** between points `i` and `i + 1` for all (`0 <= i < n`). Return the **highest altitude** of a point. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: gain = [-5,1,5,0,-7] +Output: 1 +Explanation: The altitudes are [0,-5,-4,1,1,-6]. The highest is 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find the Highest Altitude -```go ``` - +Input: gain = [-4,-3,-2,-1,4,3,2] +Output: 0 +Explanation: The altitudes are [0,-4,-7,-9,-10,-6,-3,-1]. The highest is 0. +``` ## 结语 diff --git a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go index d115ccf5e..18a310bc6 100644 --- a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go +++ b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(gain []int) int { + start := 0 + ans := 0 + for _, h := range gain { + start += h + if start > ans { + ans = start + } + } + return ans } diff --git a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go index 14ff50eb4..f2d278c1c 100644 --- a/leetcode/1701-1800/1732.Find-the-Highest-Altitude/Solution_test.go +++ b/leetcode/1701-1800/1732.Find-the-Highest-Altitude/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, 1, 5, 0, -7}, 1}, + {"TestCase2", []int{-4, -3, -2, -1, 4, 3, 2}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3beed623a43202c486d5aa8541c121520d2524cd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 23 Nov 2022 21:28:32 +0800 Subject: [PATCH 0122/1057] Add solution and test-cases for problem 2109 --- .../2109.Adding-Spaces-to-a-String/README.md | 38 ++++++++++++------- .../Solution.go | 17 ++++++++- .../Solution_test.go | 22 ++++++----- 3 files changed, 52 insertions(+), 25 deletions(-) diff --git a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md index 003865456..d9bd46e8c 100755 --- a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md +++ b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/README.md @@ -1,28 +1,40 @@ # [2109.Adding Spaces to a String][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** string `s` and a **0-indexed** integer array `spaces` that describes the indices in the original string where spaces will be added. Each space should be inserted **before** the character at the given index. + +- For example, given `s = "EnjoyYourCoffee"` and `spaces = [5, 9]`, we place spaces before `'Y'` and `'C'`, which are at indices `5` and `9` respectively. Thus, we obtain `"Enjoy Your Coffee"`. + +Return the modified string **after** the spaces have been added. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "LeetcodeHelpsMeLearn", spaces = [8,13,15] +Output: "Leetcode Helps Me Learn" +Explanation: +The indices 8, 13, and 15 correspond to the underlined characters in "LeetcodeHelpsMeLearn". +We then place spaces before those characters. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Adding Spaces to a String -```go ``` +Input: s = "icodeinpython", spaces = [1,5,7,9] +Output: "i code in py thon" +Explanation: +The indices 1, 5, 7, and 9 correspond to the underlined characters in "icodeinpython". +We then place spaces before those characters. +``` + +**Example 3:** +``` +Input: s = "spacing", spaces = [0,1,2,3,4,5,6] +Output: " s p a c i n g" +Explanation: +We are also able to place spaces before the first character of the string. +``` ## 结语 diff --git a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go index d115ccf5e..a3485e856 100644 --- a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go +++ b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(s string, spaces []int) string { + sb := strings.Builder{} + + spaceIdx := 0 + for i, b := range s { + if spaceIdx < len(spaces) && i == spaces[spaceIdx] { + sb.WriteByte(' ') + spaceIdx++ + } + sb.WriteByte(byte(b)) + } + + return sb.String() } diff --git a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go index 14ff50eb4..f3b7040fc 100644 --- a/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go +++ b/leetcode/2101-2200/2109.Adding-Spaces-to-a-String/Solution_test.go @@ -10,30 +10,32 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + spaces []int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "LeetcodeHelpsMeLearn", []int{8, 13, 15}, "Leetcode Helps Me Learn"}, + {"TestCase2", "icodeinpython", []int{1, 5, 7, 9}, "i code in py thon"}, + {"TestCase3", "spacing", []int{0, 1, 2, 3, 4, 5, 6}, " s p a c i n g"}, + {"TestCase4", "a", []int{0}, " a"}, } // 开始测试 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.spaces) 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.spaces) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9ea6cf9cb89dbc8fd14d493f6a9d987f51f95e5b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 24 Nov 2022 21:54:00 +0800 Subject: [PATCH 0123/1057] Add solution and test-cases for problem 498 --- .../401-500/0498.Diagonal-Traverse/README.md | 25 +++++------ .../0498.Diagonal-Traverse/Solution.go | 36 +++++++++++++++- .../0498.Diagonal-Traverse/Solution_test.go | 40 +++++++++++++++--- .../0498.Diagonal-Traverse/diag1-grid.jpg | Bin 0 -> 18807 bytes 4 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 leetcode/401-500/0498.Diagonal-Traverse/diag1-grid.jpg diff --git a/leetcode/401-500/0498.Diagonal-Traverse/README.md b/leetcode/401-500/0498.Diagonal-Traverse/README.md index a448412dd..67d32cfc5 100644 --- a/leetcode/401-500/0498.Diagonal-Traverse/README.md +++ b/leetcode/401-500/0498.Diagonal-Traverse/README.md @@ -1,28 +1,23 @@ # [498.Diagonal Traverse][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `m x n` matrix `mat`, return an array of all the elements of the array in a diagonal order. + -**Example 1:** +**Example 1:** +![example1](./diag1-grid.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: mat = [[1,2,3],[4,5,6],[7,8,9]] +Output: [1,2,4,7,5,3,6,8,9] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Diagonal Traverse -```go ``` - +Input: mat = [[1,2],[3,4]] +Output: [1,2,3,4] +``` ## 结语 diff --git a/leetcode/401-500/0498.Diagonal-Traverse/Solution.go b/leetcode/401-500/0498.Diagonal-Traverse/Solution.go index d115ccf5e..27069f7d4 100644 --- a/leetcode/401-500/0498.Diagonal-Traverse/Solution.go +++ b/leetcode/401-500/0498.Diagonal-Traverse/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(mat [][]int) []int { + x, y := 0, 0 + m, n := len(mat), len(mat[0]) + idx := 0 + xDir, yDir := -1, 1 + ans := make([]int, m*n) + for ; idx < m*n; idx++ { + ans[idx] = mat[x][y] + switch { + case x == 0 && yDir == 1: + if y < n-1 { + y++ + } else { + x++ + } + xDir, yDir = 1, -1 + case y == 0 && xDir == 1: + if x < m-1 { + x++ + } else { + y++ + } + xDir, yDir = -1, 1 + case x == m-1 && yDir == -1: + y++ + xDir, yDir = -1, 1 + case y == n-1 && xDir == -1: + x++ + xDir, yDir = 1, -1 + default: + x, y = x+xDir, y+yDir + } + } + return ans } diff --git a/leetcode/401-500/0498.Diagonal-Traverse/Solution_test.go b/leetcode/401-500/0498.Diagonal-Traverse/Solution_test.go index 14ff50eb4..736402d15 100644 --- a/leetcode/401-500/0498.Diagonal-Traverse/Solution_test.go +++ b/leetcode/401-500/0498.Diagonal-Traverse/Solution_test.go @@ -10,12 +10,38 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 2, 3}, + {4, 5, 6}, + {7, 8, 9}, + }, []int{1, 2, 4, 7, 5, 3, 6, 8, 9}}, + {"TestCase2", [][]int{ + {1, 2}, + {3, 4}, + }, []int{1, 2, 3, 4}}, + {"TestCase3", [][]int{{1}}, []int{1}}, + {"TestCase4", [][]int{ + {1, 2, 3, 4}, + {5, 6, 7, 8}, + }, []int{1, 2, 5, 6, 3, 4, 7, 8}}, + {"TestCase5", [][]int{ + {1, 2}, + {3, 4}, + {5, 6}, + {7, 8}, + }, []int{1, 2, 3, 5, 4, 6, 7, 8}}, + {"TestCase6", [][]int{ + {1}, + {2}, + {3}, + {4}, + }, []int{1, 2, 3, 4}}, + {"TestCase7", [][]int{ + {1, 2, 3, 4}, + }, []int{1, 2, 3, 4}}, } // 开始测试 @@ -30,10 +56,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/401-500/0498.Diagonal-Traverse/diag1-grid.jpg b/leetcode/401-500/0498.Diagonal-Traverse/diag1-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1bdadc65157551ed822fa58116945215a272bf37 GIT binary patch literal 18807 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 bAK4Zf%5RQrv@#7d Date: Sat, 26 Nov 2022 12:26:11 +0800 Subject: [PATCH 0124/1057] Add solution and test-cases for problem 299 --- .../201-300/0299.Bulls-and-Cows/README.md | 39 ++++++++++++------- .../201-300/0299.Bulls-and-Cows/Solution.go | 30 +++++++++++++- .../0299.Bulls-and-Cows/Solution_test.go | 22 +++++------ 3 files changed, 64 insertions(+), 27 deletions(-) diff --git a/leetcode/201-300/0299.Bulls-and-Cows/README.md b/leetcode/201-300/0299.Bulls-and-Cows/README.md index 38bf4799a..ff7370c3c 100644 --- a/leetcode/201-300/0299.Bulls-and-Cows/README.md +++ b/leetcode/201-300/0299.Bulls-and-Cows/README.md @@ -1,28 +1,39 @@ # [299.Bulls and Cows][title] -> [!WARNING|style:flat] -> 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 the [**Bulls and Cows**](https://en.wikipedia.org/wiki/Bulls\_and\_Cows) game with your friend. + +You write down a secret number and ask your friend to guess what the number is. When your friend makes a guess, you provide a hint with the following info: + +- The number of "bulls", which are digits in the guess that are in the correct position. +- The number of "cows", which are digits in the guess that are in your secret number but are located in the wrong position. Specifically, the non-bull digits in the guess that could be rearranged such that they become bulls. + +Given the secret number `secret` and your friend's `guess` guess, return the hint for your friend's guess. + +The hint should be formatted as `"xAyB"`, where `x` is the number of bulls and `y` is the number of cows. Note that both `secret` and `guess` may contain duplicate digits. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: secret = "1807", guess = "7810" +Output: "1A3B" +Explanation: Bulls are connected with a '|' and cows are underlined: +"1807" + | +"7810" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Bulls and Cows -```go ``` - +Input: secret = "1123", guess = "0111" +Output: "1A1B" +Explanation: Bulls are connected with a '|' and cows are underlined: +"1123" "1123" + | or | +"0111" "0111" +Note that only one of the two unmatched 1s is counted as a cow since the non-bull digits can only be rearranged to allow one 1 to be a bull. +``` ## 结语 diff --git a/leetcode/201-300/0299.Bulls-and-Cows/Solution.go b/leetcode/201-300/0299.Bulls-and-Cows/Solution.go index d115ccf5e..c6f9fd069 100644 --- a/leetcode/201-300/0299.Bulls-and-Cows/Solution.go +++ b/leetcode/201-300/0299.Bulls-and-Cows/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(secret string, guess string) string { + a, b := 0, 0 + bucket := make([]int, 10) + missMatch := make([]int, 10) + + for idx := 0; idx < len(secret); idx++ { + if secret[idx] == guess[idx] { + a++ + continue + } + + missMatch[secret[idx]-'0']++ + bucket[guess[idx]-'0']++ + } + + for idx := 0; idx < 10; idx++ { + if bucket[idx] != 0 && missMatch[idx] != 0 { + add := bucket[idx] + if missMatch[idx] < add { + add = missMatch[idx] + } + b += add + } + } + ans := fmt.Sprintf("%dA%dB", a, b) + return ans } diff --git a/leetcode/201-300/0299.Bulls-and-Cows/Solution_test.go b/leetcode/201-300/0299.Bulls-and-Cows/Solution_test.go index 14ff50eb4..1909687c4 100644 --- a/leetcode/201-300/0299.Bulls-and-Cows/Solution_test.go +++ b/leetcode/201-300/0299.Bulls-and-Cows/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + secret, guess string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "1807", "7810", "1A3B"}, + {"TestCase2", "1123", "0111", "1A1B"}, + {"TestCase3", "1111", "1011", "3A0B"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.secret, c.guess) 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.secret, c.guess) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 72d0fc2e40afe037d0cc4092037aa513a259dfc5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Nov 2022 15:05:19 +0800 Subject: [PATCH 0125/1057] Add solution and test-cases for problem 446 --- .../README.md | 41 ++++++++++++------- .../Solution.go | 31 +++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/README.md b/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/README.md index 6790a337e..cac3f5b89 100644 --- a/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/README.md +++ b/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/README.md @@ -1,28 +1,41 @@ # [446.Arithmetic Slices II - Subsequence][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums`, return the number of all the **arithmetic subsequences** of `nums`. + +A sequence of numbers is called arithmetic if it consists of **at least three elements** and if the difference between any two consecutive elements is the same. + +- For example, `[1, 3, 5, 7, 9]`, `[7, 7, 7, 7]`, and `[3, -1, -5, -9]` are arithmetic sequences. +- For example, `[1, 1, 2, 5, 7]` is not an arithmetic sequence. + +A **subsequence** of an array is a sequence that can be formed by removing some elements (possibly none) of the array. + +- For example, `[2,5,10]` is a subsequence of `[1,2,1,2,4,1,5,10]`. + +The test cases are generated so that the answer fits in **32-bit** integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,4,6,8,10] +Output: 7 +Explanation: All arithmetic subsequence slices are: +[2,4,6] +[4,6,8] +[6,8,10] +[2,4,6,8] +[4,6,8,10] +[2,4,6,8,10] +[2,6,10] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Arithmetic Slices II - Subsequence -```go ``` - +Input: nums = [7,7,7,7,7] +Output: 16 +Explanation: Any subsequence of this array is arithmetic. +``` ## 结语 diff --git a/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution.go b/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution.go index d115ccf5e..6cfb5e061 100644 --- a/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution.go +++ b/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + l := len(nums) + if l < 3 { + return 0 + } + diffCache := make(map[int]map[int]int) + diffCache[l-2] = map[int]int{ + nums[l-1] - nums[l-2]: 1, + } + ans := 0 + + for idx := l - 3; idx >= 0; idx-- { + diffCache[idx] = make(map[int]int) + + for next := idx + 1; next < l; next++ { + diff := nums[next] - nums[idx] + cal := 1 + + if cache, ok := diffCache[next]; ok { + count, ok := cache[diff] + if ok { + cal += count + ans += cal - 1 + } + } + diffCache[idx][diff] += cal + } + } + return ans } diff --git a/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution_test.go b/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution_test.go index 14ff50eb4..0d3e4b334 100644 --- a/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/Solution_test.go +++ b/leetcode/401-500/0446.Arithmetic-Slices-II--Subsequence/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, 6, 8, 10}, 7}, + {"TestCase2", []int{7, 7, 7, 7, 7}, 16}, + {"TestCase3", []int{1}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f3f6b1409051d3499f111c6d267a2419082c8b93 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Nov 2022 22:34:47 +0800 Subject: [PATCH 0126/1057] Add solution and test-cases for problem 696 --- .../0696.Count-Binary-Substrings/README.md | 27 +++++++++---------- .../0696.Count-Binary-Substrings/Solution.go | 22 +++++++++++++-- .../Solution_test.go | 14 +++++----- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/leetcode/601-700/0696.Count-Binary-Substrings/README.md b/leetcode/601-700/0696.Count-Binary-Substrings/README.md index 60c4cb3b7..ee35002ad 100644 --- a/leetcode/601-700/0696.Count-Binary-Substrings/README.md +++ b/leetcode/601-700/0696.Count-Binary-Substrings/README.md @@ -1,28 +1,27 @@ # [696.Count Binary 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 binary string `s`, return the number of non-empty substrings that have the same number of `0`'s and `1`'s, and all the `0`'s and all the `1`'s in these substrings are grouped consecutively. + +Substrings that occur multiple times are counted the number of times they occur. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "00110011" +Output: 6 +Explanation: There are 6 substrings that have equal number of consecutive 1's and 0's: "0011", "01", "1100", "10", "0011", and "01". +Notice that some of these substrings repeat and are counted the number of times they occur. +Also, "00110011" is not a valid substring because all the 0's (and 1's) are not grouped together. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Binary Substrings -```go ``` - +Input: s = "10101" +Output: 4 +Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's. +``` ## 结语 diff --git a/leetcode/601-700/0696.Count-Binary-Substrings/Solution.go b/leetcode/601-700/0696.Count-Binary-Substrings/Solution.go index d115ccf5e..3339e9d45 100644 --- a/leetcode/601-700/0696.Count-Binary-Substrings/Solution.go +++ b/leetcode/601-700/0696.Count-Binary-Substrings/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + dp := make([]int, len(s)) + dp[0] = 1 + ans, pre := 0, 0 + for idx := 1; idx < len(s); idx++ { + if s[idx] == s[pre] { + dp[idx] = idx - pre + 1 + continue + } + dp[idx] = 1 + pre = idx + } + for idx := 1; idx < len(s); idx++ { + other := idx - dp[idx] + if other < 0 || dp[other] < dp[idx] { + continue + } + ans++ + } + return ans } diff --git a/leetcode/601-700/0696.Count-Binary-Substrings/Solution_test.go b/leetcode/601-700/0696.Count-Binary-Substrings/Solution_test.go index 14ff50eb4..d83d3a90b 100644 --- a/leetcode/601-700/0696.Count-Binary-Substrings/Solution_test.go +++ b/leetcode/601-700/0696.Count-Binary-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", "00110011", 6}, + {"TestCase2", "10101", 4}, + {"TestCase3", "000111", 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From efa901dc74e6696b22bf64563d732ad7d34e0534 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 28 Nov 2022 21:37:05 +0800 Subject: [PATCH 0127/1057] Add solution and test-cases for problem 2225 --- .../README.md | 42 ++++++++++++------- .../Solution.go | 21 +++++++++- .../Solution_test.go | 32 ++++++++++---- 3 files changed, 72 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md index 097de9452..c8cb17ce5 100755 --- a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md +++ b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/README.md @@ -1,28 +1,42 @@ # [2225.Find Players With Zero or One Losses][title] -> [!WARNING|style:flat] -> 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 `matches` where `matches[i] = [winneri, loseri]` indicates that the player winneri defeated player loseri in a match. + +Return a list `answer` of size `2` where: + +- `answer[0]` is a list of all players that have **not** lost any matches. +- `answer[1]` is a list of all players that have lost exactly **one** match. + +The values in the two lists should be returned in **increasing** order. + +**Note:** + +- You should only consider the players that have played **at least one** match. +- The testcases will be generated such that **no** two matches will have the **same** outcome. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: matches = [[1,3],[2,3],[3,6],[5,6],[5,7],[4,5],[4,8],[4,9],[10,4],[10,9]] +Output: [[1,2,10],[4,5,7,8]] +Explanation: +Players 1, 2, and 10 have not lost any matches. +Players 4, 5, 7, and 8 each have lost one match. +Players 3, 6, and 9 each have lost two matches. +Thus, answer[0] = [1,2,10] and answer[1] = [4,5,7,8]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Players With Zero or One Losses -```go ``` - +Input: matches = [[2,3],[1,3],[5,4],[6,4]] +Output: [[1,2,5,6],[]] +Explanation: +Players 1, 2, 5, and 6 have not lost any matches. +Players 3 and 4 each have lost two matches. +Thus, answer[0] = [1,2,5,6] and answer[1] = []. +``` ## 结语 diff --git a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go index d115ccf5e..0127b4945 100644 --- a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go +++ b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matches [][]int) [][]int { + ans := make([][]int, 2) + ans[0] = make([]int, 0) + ans[1] = make([]int, 0) + winners, losers := make([]int, 100001), make([]int, 100001) + for _, match := range matches { + winners[match[0]]++ + losers[match[1]]++ + } + + for win := 0; win < 100001; win++ { + if losers[win] == 1 { + ans[1] = append(ans[1], win) + } + if winners[win] > 0 && losers[win] == 0 { + ans[0] = append(ans[0], win) + } + } + return ans } diff --git a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go index 14ff50eb4..c3d57e0da 100644 --- a/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go +++ b/leetcode/2201-2300/2225.Find-Players-With-Zero-or-One-Losses/Solution_test.go @@ -10,12 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 3}, + {2, 3}, + {3, 6}, + {5, 6}, + {5, 7}, + {4, 5}, + {4, 8}, + {4, 9}, + {10, 4}, + {10, 9}, + }, [][]int{ + {1, 2, 10}, + {4, 5, 7, 8}, + }}, + {"TestCase2", [][]int{ + {2, 3}, + {1, 3}, + {5, 4}, + {6, 4}, + }, [][]int{{1, 2, 5, 6}, {}}}, } // 开始测试 @@ -30,10 +48,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 963467bbacd649db1ea16e9abddc2322996dc902 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 29 Nov 2022 23:46:36 +0800 Subject: [PATCH 0128/1057] Add solution and test-cases for problem 380 --- .../README.md | 40 ++++++---- .../Solution.go | 80 ++++++++++++++++++- .../Solution_test.go | 49 ++++++++++-- 3 files changed, 144 insertions(+), 25 deletions(-) diff --git a/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/README.md b/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/README.md index edb0ce92d..b4046cb63 100644 --- a/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/README.md +++ b/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/README.md @@ -1,28 +1,34 @@ # [380.Insert Delete GetRandom O(1)][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Implement the `RandomizedSet` class: -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `RandomizedSet()` Initializes the `RandomizedSet` object. +- `bool insert(int val)` Inserts an item `val` into the set if not present. Returns `true` if the item was not present, `false` otherwise. +- `bool remove(int val)` Removes an item `val` from the set if present. Returns `true` if the item was present, `false` otherwise. +- `int getRandom()` Returns a random element from the current set of elements (it's guaranteed that at least one element exists when this method is called). Each element must have the **same probability** of being returned. -## 题意 -> ... +You must implement the functions of the class such that each function works in **average** `O(1)` time complexity. -## 题解 +**Example 1:** -### 思路1 -> ... -Insert Delete GetRandom O(1) -```go ``` - +Input +["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"] +[[], [1], [2], [2], [], [1], [2], []] +Output +[null, true, false, true, 2, true, false, 2] + +Explanation +RandomizedSet randomizedSet = new RandomizedSet(); +randomizedSet.insert(1); // Inserts 1 to the set. Returns true as 1 was inserted successfully. +randomizedSet.remove(2); // Returns false as 2 does not exist in the set. +randomizedSet.insert(2); // Inserts 2 to the set, returns true. Set now contains [1,2]. +randomizedSet.getRandom(); // getRandom() should return either 1 or 2 randomly. +randomizedSet.remove(1); // Removes 1 from the set, returns true. Set now contains [2]. +randomizedSet.insert(2); // 2 was already in the set, so return false. +randomizedSet.getRandom(); // Since 2 is the only number in the set, getRandom() will always return 2. +``` ## 结语 diff --git a/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution.go b/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution.go index d115ccf5e..5024adeed 100644 --- a/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution.go +++ b/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution.go @@ -1,5 +1,81 @@ package Solution -func Solution(x bool) bool { - return x +import "math/rand" + +// 这道题先想的是map+双向链表,最后发现getRandom是过不去的 +// 再就是考虑直接用两个数组,大小都是MAXUINT32+1, 直接将int转换成uint32, 正负数都是直接对应下标, 这个内存开的有点过于不合理了。后来改成了map +type RandomizedSet struct { + bucket map[int]int + stack []int + index int +} + +func Constructor380() RandomizedSet { + return RandomizedSet{ + bucket: make(map[int]int), + stack: make([]int, 0), + index: -1, + } +} + +func (this *RandomizedSet) Insert(val int) bool { + _, ok := this.bucket[val] + if !ok { + if this.index == len(this.stack)-1 { + this.stack = append(this.stack, val) + this.index++ + } else { + this.index++ + this.stack[this.index] = val + } + this.bucket[val] = this.index + } + return !ok +} + +func (this *RandomizedSet) Remove(val int) bool { + removedIndex, ok := this.bucket[val] + if ok { + this.bucket[this.stack[this.index]] = removedIndex + this.stack[removedIndex] = this.stack[this.index] + + this.index-- + delete(this.bucket, val) + } + return ok +} + +func (this *RandomizedSet) GetRandom() int { + i := rand.Intn(int(this.index) + 1) + return this.stack[i] +} + +type action struct { + name string + v int + opResult bool + exp map[int]struct{} +} + +func Solution(actions []action) bool { + c := Constructor380() + for _, act := range actions { + if act.name == "insert" { + if c.Insert(act.v) != act.opResult { + return false + } + continue + } + if act.name == "remove" { + if c.Remove(act.v) != act.opResult { + return false + } + continue + } + e := c.GetRandom() + if _, ok := act.exp[e]; !ok { + return false + } + } + return true } diff --git a/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution_test.go b/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution_test.go index 14ff50eb4..fc43f0293 100644 --- a/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution_test.go +++ b/leetcode/301-400/0380.Insert-Delete-GetRandom-O-1/Solution_test.go @@ -10,12 +10,49 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []action expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []action{ + { + name: "insert", + v: 1, + opResult: true, + }, + { + name: "remove", + v: 2, + opResult: false, + }, + { + name: "insert", + v: 2, + opResult: true, + }, + { + name: "getRandom", + exp: map[int]struct{}{ + 1: {}, + 2: {}, + }, + }, + { + name: "remove", + v: 1, + opResult: true, + }, + { + name: "insert", + v: 2, + opResult: false, + }, + { + name: "getRandom", + exp: map[int]struct{}{ + 2: {}, + }, + }, + }, true}, } // 开始测试 @@ -30,10 +67,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b90c3695012513838401a60887192a4becac9b5b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 30 Nov 2022 20:32:54 +0800 Subject: [PATCH 0129/1057] Add solution and test-cases for problem 1207 --- .../README.md | 28 ++++++++++--------- .../Solution.go | 22 +++++++++++++-- .../Solution_test.go | 12 ++++---- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/README.md b/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/README.md index 5a2ae96bb..2dd4a70c0 100644 --- a/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/README.md +++ b/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/README.md @@ -1,28 +1,30 @@ # [1207.Unique Number of Occurrences][title] -> [!WARNING|style:flat] -> 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 `true` if the number of occurrences of each value in the array is **unique**, or `false` otherwise. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,2,2,1,1,3] +Output: true +Explanation: The value 1 has 3 occurrences, 2 has 2 and 3 has 1. No two values have the same number of occurrences. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Unique Number of Occurrences -```go +``` +Input: arr = [1,2] +Output: false ``` +**Example 3:** + +``` +Input: arr = [-3,0,1,-3,1,1,1,-3,10,0] +Output: true +``` ## 结语 diff --git a/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution.go b/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution.go index d115ccf5e..ac764bd6a 100644 --- a/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution.go +++ b/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int) bool { + // -1=1001, -1000=2000 + bucket := make([]int, 2001) + for _, n := range arr { + if n < 0 { + n = ^n + 1 + 1000 + } + bucket[n]++ + } + occur := make([]bool, 1001) + for _, c := range bucket { + if c == 0 { + continue + } + if occur[c] { + return false + } + occur[c] = true + } + return true } diff --git a/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution_test.go b/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution_test.go index 14ff50eb4..e4917a7e6 100644 --- a/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution_test.go +++ b/leetcode/1201-1300/1207.Unique-Number-of-Occurrences/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 2, 1, 1, 3}, true}, + {"TestCase2", []int{1, 2}, false}, + {"TestCase3", []int{-3, 0, 1, -3, 1, 1, 1, -3, 10, 0}, true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8a2335819989bfd65f8a6aaa804cabebc060527a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 1 Dec 2022 20:03:51 +0800 Subject: [PATCH 0130/1057] Add solution and test-cases for problem 1704 --- .../README.md | 28 +++++++++---------- .../Solution.go | 17 +++++++++-- .../Solution_test.go | 12 ++++---- 3 files changed, 35 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md index 4afc11082..29179f8ef 100755 --- a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md +++ b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/README.md @@ -1,28 +1,28 @@ # [1704.Determine if String Halves Are Alike][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a string `s` of even length. Split this string into two halves of equal lengths, and let `a` be the first half and `b` be the second half. + +Two strings are `alike` if they have the same number of vowels (`'a'`, `'e'`, `'i'`, `'o'`, `'u'`, `'A'`, `'E'`, `'I'`, `'O'`, `'U'`). Notice that `s` contains uppercase and lowercase letters. + +Return `true` if `a` and `b` are **alike**. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "book" +Output: true +Explanation: a = "bo" and b = "ok". a has 1 vowel and b has 1 vowel. Therefore, they are alike. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Determine if String Halves Are Alike -```go ``` - +Input: s = "textbook" +Output: false +Explanation: a = "text" and b = "book". a has 1 vowel whereas b has 2. Therefore, they are not alike. +Notice that the vowel o is counted twice. +``` ## 结语 diff --git a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go index d115ccf5e..9f8af638a 100644 --- a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go +++ b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) bool { + l, r := 0, 0 + // ab + for s1, e := 0, len(s)-1; s1 < e; s1, e = s1+1, e-1 { + if isVowels1704(s[s1]) { + l++ + } + if isVowels1704(s[e]) { + r++ + } + } + return l == r +} +func isVowels1704(b byte) bool { + return b == 'a' || b == 'A' || b == 'e' || b == 'E' || b == 'i' || b == 'I' || b == 'o' || b == 'O' || b == 'u' || b == 'U' } diff --git a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go index 14ff50eb4..70d57a025 100644 --- a/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/Solution_test.go +++ b/leetcode/1701-1800/1704.Determine-if-String-Halves-Are-Alike/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", "book", true}, + {"TestCase2", "textbook", false}, + {"TestCase3", "aeiouAEIOU", true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 134023f2896c5070b61d0fa1131f0782f2e84380 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 Dec 2022 23:06:15 +0800 Subject: [PATCH 0131/1057] Add solution and test-cases for problem 1657 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 28 +++++++++++- .../Solution_test.go | 18 ++++---- 3 files changed, 66 insertions(+), 24 deletions(-) diff --git a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md index 20ab507b5..8045418d5 100755 --- a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md +++ b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/README.md @@ -1,28 +1,46 @@ # [1657.Determine if Two Strings Are Close][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Two strings are considered **close** if you can attain one from the other using the following operations: + +- Operation 1: Swap any two **existing** characters. + - For example, `abcde -> aecdb` + +- Operation 2: Transform **every** occurrence of one **existing** character into another **existing** character, and do the same with the other character. + - For example, `aacabb -> bbcbaa` (all `a`'s turn into `b`'s, and all `b`'s turn into `a`'s) +You can use the operations on either string as many times as necessary. +Given two strings, `word1` and `word2`, return `true` if `word1` and `word2` are **close**, and `false` otherwise. + + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word1 = "abc", word2 = "bca" +Output: true +Explanation: You can attain word2 from word1 in 2 operations. +Apply Operation 1: "abc" -> "acb" +Apply Operation 1: "acb" -> "bca" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Determine if Two Strings Are Close -```go ``` +Input: word1 = "a", word2 = "aa" +Output: false +Explanation: It is impossible to attain word2 from word1, or vice versa, in any number of operations. +``` + +**Example 3:** +``` +Input: word1 = "cabbba", word2 = "abbccc" +Output: true +Explanation: You can attain word2 from word1 in 3 operations. +Apply Operation 1: "cabbba" -> "caabbb" +Apply Operation 2: "caabbb" -> "baaccc" +Apply Operation 2: "baaccc" -> "abbccc" +``` ## 结语 diff --git a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go index d115ccf5e..a2439333c 100644 --- a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go +++ b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(word1 string, word2 string) bool { + if len(word1) != len(word2) { + return false + } + bucket1, bucket2 := make([]int, 26), make([]int, 26) + for idx := 0; idx < len(word1); idx++ { + bucket1[word1[idx]-'a']++ + bucket2[word2[idx]-'a']++ + } + + for i := 0; i < 26; i++ { + if bucket2[i] != 0 && bucket1[i] == 0 || bucket1[i] != 0 && bucket2[i] == 0 { + return false + } + } + sort.Ints(bucket1) + sort.Ints(bucket2) + + for i := 0; i < 26; i++ { + if bucket1[i] != bucket2[i] { + return false + } + } + return true } diff --git a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go index 14ff50eb4..e3a831869 100644 --- a/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go +++ b/leetcode/1601-1700/1657.Determine-if-Two-Strings-Are-Close/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s1, s2 string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abc", "bca", true}, + {"TestCase2", "a", "aa", false}, + {"TestCase3", "cabbba", "abbccc", true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 816abc8246708ffb8a396f7fa98c18de99e26c49 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 Dec 2022 15:12:46 +0800 Subject: [PATCH 0132/1057] Add solution and test-cases for problem 451 --- .../README.md | 34 ++++++++++++------- .../Solution.go | 19 +++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0451.Sort-Characters-By-Frequency/README.md b/leetcode/401-500/0451.Sort-Characters-By-Frequency/README.md index 073f8753a..32e88b102 100644 --- a/leetcode/401-500/0451.Sort-Characters-By-Frequency/README.md +++ b/leetcode/401-500/0451.Sort-Characters-By-Frequency/README.md @@ -1,28 +1,36 @@ # [451.Sort Characters By Frequency][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a string `s`, sort it in **decreasing order** based on the **frequency** of the characters. The **frequency** of a character is the number of times it appears in the string. + +Return the sorted string. If there are multiple answers, return any of them. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "tree" +Output: "eert" +Explanation: 'e' appears twice while 'r' and 't' both appear once. +So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Sort Characters By Frequency -```go +``` +Input: s = "cccaaa" +Output: "aaaccc" +Explanation: Both 'c' and 'a' appear three times, so both "cccaaa" and "aaaccc" are valid answers. +Note that "cacaca" is incorrect, as the same characters must be together. ``` +**Example 3:** + +``` +Input: s = "Aabb" +Output: "bbAa" +Explanation: "bbaA" is also a valid answer, but "Aabb" is incorrect. +Note that 'A' and 'a' are treated as two different characters. +``` ## 结语 diff --git a/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution.go b/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution.go index d115ccf5e..90dc56397 100644 --- a/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution.go +++ b/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(s string) string { + + sb := []byte(s) + byteCount := make(map[byte]int) + for _, b := range sb { + byteCount[b]++ + } + sort.Slice(sb, func(i, j int) bool { + if byteCount[sb[i]] == byteCount[sb[j]] { + return sb[i] < sb[j] + } + return byteCount[sb[i]] > byteCount[sb[j]] + }) + // z知道每个字符的出现次数, 然后排序,写入 + return string(sb) } diff --git a/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution_test.go b/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution_test.go index 14ff50eb4..372eed14b 100644 --- a/leetcode/401-500/0451.Sort-Characters-By-Frequency/Solution_test.go +++ b/leetcode/401-500/0451.Sort-Characters-By-Frequency/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", "tree", "eert"}, + {"TestCase2", "cccaaa", "aaaccc"}, + {"TestCase3", "Aabb", "bbAa"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 98379f820d0e12994e4241ffd73aa100e461d24e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 Dec 2022 15:46:24 +0800 Subject: [PATCH 0133/1057] Add solution and test-cases for problem 860 --- .../801-900/0860.Lemonade-Change/README.md | 35 +++++++++++-------- .../801-900/0860.Lemonade-Change/Solution.go | 31 ++++++++++++++-- .../0860.Lemonade-Change/Solution_test.go | 12 +++---- 3 files changed, 56 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0860.Lemonade-Change/README.md b/leetcode/801-900/0860.Lemonade-Change/README.md index 0c76488d1..1f886f484 100644 --- a/leetcode/801-900/0860.Lemonade-Change/README.md +++ b/leetcode/801-900/0860.Lemonade-Change/README.md @@ -1,28 +1,35 @@ # [860.Lemonade Change][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +At a lemonade stand, each lemonade costs `$5`. Customers are standing in a queue to buy from you and order one at a time (in the order specified by bills). Each customer will only buy one lemonade and pay with either a `$5`, `$10`, or `$20` bill. You must provide the correct change to each customer so that the net transaction is that the customer pays `$5`. + +Note that you do not have any change in hand at first. + +Given an integer array `bills` where `bills[i]` is the bill the ith customer pays, return `true` if you can provide every customer with the correct change, or `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: bills = [5,5,5,10,20] +Output: true +Explanation: +From the first 3 customers, we collect three $5 bills in order. +From the fourth customer, we collect a $10 bill and give back a $5. +From the fifth customer, we give a $10 bill and a $5 bill. +Since all customers got correct change, we output true. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Lemonade Change -```go ``` - +Input: bills = [5,5,10,10,20] +Output: false +Explanation: +From the first two customers in order, we collect two $5 bills. +For the next two customers in order, we collect a $10 bill and give back a $5 bill. +For the last customer, we can not give the change of $15 back because we only have two $10 bills. +Since not every customer received the correct change, the answer is false. +``` ## 结语 diff --git a/leetcode/801-900/0860.Lemonade-Change/Solution.go b/leetcode/801-900/0860.Lemonade-Change/Solution.go index d115ccf5e..7237e4834 100644 --- a/leetcode/801-900/0860.Lemonade-Change/Solution.go +++ b/leetcode/801-900/0860.Lemonade-Change/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(bills []int) bool { + change := [5]int{} + for _, cost := range bills { + idx := cost / 5 + + if cost == 5 { + change[idx]++ + continue + } + + diff := cost - 5 + need10 := diff / 10 + if change[2] > 0 { + if change[2] >= need10 { + change[2] -= need10 + diff -= need10 * 10 + } else { + diff -= change[2] * 10 + change[2] = 0 + } + } + need5 := diff / 5 + if need5 != 0 && change[1] < need5 { + return false + } + change[1] -= need5 + change[idx]++ + } + return true } diff --git a/leetcode/801-900/0860.Lemonade-Change/Solution_test.go b/leetcode/801-900/0860.Lemonade-Change/Solution_test.go index 14ff50eb4..b681472b6 100644 --- a/leetcode/801-900/0860.Lemonade-Change/Solution_test.go +++ b/leetcode/801-900/0860.Lemonade-Change/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{5, 5, 5, 10, 20}, true}, + {"TestCase2", []int{5, 5, 10, 10, 20}, false}, + {"TestCase3", []int{5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20, 5, 10, 5, 20}, true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0acdf8a77a577c20126df99622dee5011dad7802 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 4 Dec 2022 12:01:16 +0800 Subject: [PATCH 0134/1057] Add solution and test-cases for problem 2256 --- .../2256.Minimum-Average-Difference/README.md | 41 +++++++++++++------ .../Solution.go | 29 ++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 62 insertions(+), 22 deletions(-) diff --git a/leetcode/2201-2300/2256.Minimum-Average-Difference/README.md b/leetcode/2201-2300/2256.Minimum-Average-Difference/README.md index 1b9375db0..c71ff9547 100755 --- a/leetcode/2201-2300/2256.Minimum-Average-Difference/README.md +++ b/leetcode/2201-2300/2256.Minimum-Average-Difference/README.md @@ -1,28 +1,43 @@ # [2256.Minimum Average 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 a **0-indexed** integer array `nums` of length `n`. + +The **average difference** of the index `i` is the **absolute difference** between the average of the **first** `i + 1` elements of `nums` and the average of the **last** `n - i - 1` elements. Both averages should be **rounded down** to the nearest integer. + +Return the index with the **minimum average difference**. If there are multiple such indices, return the **smallest** one. + +**Note:** + +- The **absolute difference** of two numbers is the absolute value of their difference. +- The **average** of `n` elements is the **sum** of the `n` elements divided (**integer division**) by `n`. +- The average of `0` elements is considered to be `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,5,3,9,5,3] +Output: 3 +Explanation: +- The average difference of index 0 is: |2 / 1 - (5 + 3 + 9 + 5 + 3) / 5| = |2 / 1 - 25 / 5| = |2 - 5| = 3. +- The average difference of index 1 is: |(2 + 5) / 2 - (3 + 9 + 5 + 3) / 4| = |7 / 2 - 20 / 4| = |3 - 5| = 2. +- The average difference of index 2 is: |(2 + 5 + 3) / 3 - (9 + 5 + 3) / 3| = |10 / 3 - 17 / 3| = |3 - 5| = 2. +- The average difference of index 3 is: |(2 + 5 + 3 + 9) / 4 - (5 + 3) / 2| = |19 / 4 - 8 / 2| = |4 - 4| = 0. +- The average difference of index 4 is: |(2 + 5 + 3 + 9 + 5) / 5 - 3 / 1| = |24 / 5 - 3 / 1| = |4 - 3| = 1. +- The average difference of index 5 is: |(2 + 5 + 3 + 9 + 5 + 3) / 6 - 0| = |27 / 6 - 0| = |4 - 0| = 4. +The average difference of index 3 is the minimum average difference so return 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Average Difference -```go ``` +Input: nums = [0] +Output: 0 +Explanation: +The only index is 0 so return 0. +The average difference of index 0 is: |0 / 1 - 0| = |0 - 0| = 0. +``` ## 结语 diff --git a/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go b/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go index d115ccf5e..1d05608c9 100644 --- a/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go +++ b/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + minIndex := -1 + minValue := 0 + length := len(nums) + if length == 1 { + return 0 + } + for idx := 1; idx < length; idx++ { + nums[idx] += nums[idx-1] + } + + for idx := 0; idx < length; idx++ { + left := nums[idx] / (idx + 1) + right := 0 + if idx != length-1 { + right = (nums[length-1] - nums[idx]) / (length - idx - 1) + } + diff := left - right + if diff < 0 { + diff = ^diff + 1 + } + if minIndex == -1 || minValue > diff { + minIndex = idx + minValue = diff + } + } + return minIndex } diff --git a/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution_test.go b/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution_test.go index 14ff50eb4..340ca8906 100644 --- a/leetcode/2201-2300/2256.Minimum-Average-Difference/Solution_test.go +++ b/leetcode/2201-2300/2256.Minimum-Average-Difference/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, 5, 3, 9, 5, 3}, 3}, + {"TestCase2", []int{0}, 0}, + {"TestCase", []int{2, 5, 3, 9, 5, 3, 6, 9, 9, 10, 12, 88, 45, 10000, 234, 43, 88, 72, 90}, 17}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a1cd0a314311d0c5f3cf9306c6fc1fc308e24a70 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 4 Dec 2022 22:04:08 +0800 Subject: [PATCH 0135/1057] Add solution and test-cases for problem 1582 --- .../README.md | 29 +++++++++--------- .../Solution.go | 22 +++++++++++-- .../Solution_test.go | 21 ++++++++----- .../special-grid.jpg | Bin 0 -> 7365 bytes .../special1.jpg | Bin 0 -> 7202 bytes 5 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/special-grid.jpg create mode 100644 leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/special1.jpg diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md index adb76fbf2..128ab7a61 100755 --- a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md +++ b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/README.md @@ -1,28 +1,27 @@ # [1582.Special Positions in a Binary Matrix][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `m x n` binary matrix `mat`, return the number of special positions in `mat`. + +A position (`i, j`) is called **special** if `mat[i][j] == 1` and all other elements in row `i` and column `j` are `0` (rows and columns are **0-indexed**). -**Example 1:** +**Example 1:** +![example1](./special1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: mat = [[1,0,0],[0,0,1],[1,0,0]] +Output: 1 +Explanation: (1, 2) is a special position because mat[1][2] == 1 and all other elements in row 1 and column 2 are 0. ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](./special-grid.jpg) -### 思路1 -> ... -Special Positions in a Binary Matrix -```go ``` - +Input: mat = [[1,0,0],[0,1,0],[0,0,1]] +Output: 3 +Explanation: (0, 0), (1, 1) and (2, 2) are special positions. +``` ## 结语 diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go index d115ccf5e..b33a05727 100644 --- a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go +++ b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(mat [][]int) int { + ans := 0 + m, n := len(mat), len(mat[0]) + rowSum := make([]int, m) + colSum := make([]int, n) + for row := 0; row < m; row++ { + for col := 0; col < n; col++ { + rowSum[row] += mat[row][col] + colSum[col] += mat[row][col] + } + } + + for row := 0; row < m; row++ { + for col := 0; col < n; col++ { + if mat[row][col] == 1 && rowSum[row] == 1 && colSum[col] == 1 { + ans++ + } + } + } + return ans } diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution_test.go b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution_test.go index 14ff50eb4..d126c5b4a 100644 --- a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/Solution_test.go +++ b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/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{ + {1, 0, 0}, + {0, 0, 1}, + {1, 0, 0}, + }, 1}, + {"TestCase2", [][]int{ + {1, 0, 0}, + {0, 1, 0}, + {0, 0, 1}, + }, 3}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/special-grid.jpg b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/special-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0dac5c8df62fb4417c9f88f9cce686d6b33c1cc4 GIT binary patch literal 7365 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 JWTv)1{1=;xnjZiF literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/special1.jpg b/leetcode/1501-1600/1582.Special-Positions-in-a-Binary-Matrix/special1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..824c482bbc1d93e1cb8714bb2244aba2dc5b8581 GIT binary patch literal 7202 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 H8&CfWi5w5@ literal 0 HcmV?d00001 From a9dd3ac1b9f7b7c4b8c6a6bc9d1b7480ee599426 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 5 Dec 2022 23:23:21 +0800 Subject: [PATCH 0136/1057] Add solution and test-cases for problem 897 --- .../README.md | 24 +++--- .../Solution.go | 36 ++++++++- .../Solution_test.go | 69 ++++++++++++++++-- .../0897.Increasing-Order-Search-Tree/ex1.jpg | Bin 0 -> 43382 bytes .../0897.Increasing-Order-Search-Tree/ex2.jpg | Bin 0 -> 13284 bytes 5 files changed, 106 insertions(+), 23 deletions(-) create mode 100644 leetcode/801-900/0897.Increasing-Order-Search-Tree/ex1.jpg create mode 100644 leetcode/801-900/0897.Increasing-Order-Search-Tree/ex2.jpg diff --git a/leetcode/801-900/0897.Increasing-Order-Search-Tree/README.md b/leetcode/801-900/0897.Increasing-Order-Search-Tree/README.md index 8d6655e89..58344d7b2 100644 --- a/leetcode/801-900/0897.Increasing-Order-Search-Tree/README.md +++ b/leetcode/801-900/0897.Increasing-Order-Search-Tree/README.md @@ -1,28 +1,24 @@ # [897.Increasing Order 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, rearrange the tree in **in-order** so that the leftmost node in the tree is now the root of the tree, and every node has no left child and only one right child. -**Example 1:** +**Example 1:** +![example1](./ex1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [5,3,6,2,4,null,8,1,null,null,null,7,9] +Output: [1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] ``` -## 题意 -> ... +**Example 2:** +![example2](./ex2.jpg) -## 题解 -### 思路1 -> ... -Increasing Order Search Tree -```go ``` - +Input: root = [5,1,7] +Output: [1,null,5,null,7] +``` ## 结语 diff --git a/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution.go b/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution.go index d115ccf5e..8d01fbd90 100644 --- a/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution.go +++ b/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + if root == nil { + return nil + } + + var tree, walker *TreeNode + var inOrder func(*TreeNode) + inOrder = func(root *TreeNode) { + if root == nil { + return + } + if root.Left != nil { + inOrder(root.Left) + } + + n := &TreeNode{Val: root.Val} + if tree == nil { + tree = n + walker = n + } else { + walker.Right = n + walker = walker.Right + } + if root.Right != nil { + inOrder(root.Right) + } + } + inOrder(root) + return tree } diff --git a/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution_test.go b/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution_test.go index 14ff50eb4..efebba852 100644 --- a/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution_test.go +++ b/leetcode/801-900/0897.Increasing-Order-Search-Tree/Solution_test.go @@ -10,12 +10,67 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 4}, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + }, + }, + Right: &TreeNode{ + Val: 6, + Right: &TreeNode{ + Val: 8, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 9}, + }, + }, + }, &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 4, + Right: &TreeNode{ + Val: 5, + Right: &TreeNode{ + Val: 6, + Right: &TreeNode{ + Val: 7, + Right: &TreeNode{ + Val: 8, + Right: &TreeNode{ + Val: 9, + }, + }, + }, + }, + }, + }, + }, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 7}, + }, &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 5, + Right: &TreeNode{ + Val: 7, + }, + }, + }}, } // 开始测试 @@ -30,10 +85,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0897.Increasing-Order-Search-Tree/ex1.jpg b/leetcode/801-900/0897.Increasing-Order-Search-Tree/ex1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ba1b5d2c088c21c9c0a6250d62fa073f5695b7b0 GIT binary patch literal 43382 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 TYp6)m|BM#H@UL84-{}7fa%9Ha literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0897.Increasing-Order-Search-Tree/ex2.jpg b/leetcode/801-900/0897.Increasing-Order-Search-Tree/ex2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c3918d31807b22d66309d633f10fb2d92849d00 GIT binary patch literal 13284 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 GWB&noL7HCx literal 0 HcmV?d00001 From 00d80772ee1dde52426ad46e7d16e7e073eef245 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 6 Dec 2022 23:47:09 +0800 Subject: [PATCH 0137/1057] Add solution and test-cases for problem 2210 --- .../README.md | 41 ++++++++++++------- .../Solution.go | 25 ++++++++++- .../Solution_test.go | 13 +++--- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md index 691039168..98ef7ff43 100755 --- a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md +++ b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/README.md @@ -1,28 +1,41 @@ # [2210.Count Hills and Valleys in an Array][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array `nums`. An index `i` is part of a **hill** in `nums` if the closest non-equal neighbors of `i` are smaller than `nums[i]`. Similarly, an index `i` is part of a **valley** in `nums` if the closest non-equal neighbors of `i` are larger than `nums[i]`. Adjacent indices `i` and `j` are part of the **same** hill or valley if `nums[i] == nums[j]`. + +Note that for an index to be part of a hill or valley, it must have a non-equal neighbor on **both** the left and right of the index. + +Return the number of hills and valleys in `nums`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [2,4,1,1,6,5] +Output: 3 +Explanation: +At index 0: There is no non-equal neighbor of 2 on the left, so index 0 is neither a hill nor a valley. +At index 1: The closest non-equal neighbors of 4 are 2 and 1. Since 4 > 2 and 4 > 1, index 1 is a hill. +At index 2: The closest non-equal neighbors of 1 are 4 and 6. Since 1 < 4 and 1 < 6, index 2 is a valley. +At index 3: The closest non-equal neighbors of 1 are 4 and 6. Since 1 < 4 and 1 < 6, index 3 is a valley, but note that it is part of the same valley as index 2. +At index 4: The closest non-equal neighbors of 6 are 1 and 5. Since 6 > 1 and 6 > 5, index 4 is a hill. +At index 5: There is no non-equal neighbor of 5 on the right, so index 5 is neither a hill nor a valley. +There are 3 hills and valleys so we return 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Hills and Valleys in an Array -```go ``` - +Input: nums = [6,6,5,5,4,1] +Output: 0 +Explanation: +At index 0: There is no non-equal neighbor of 6 on the left, so index 0 is neither a hill nor a valley. +At index 1: There is no non-equal neighbor of 6 on the left, so index 1 is neither a hill nor a valley. +At index 2: The closest non-equal neighbors of 5 are 6 and 4. Since 5 < 6 and 5 > 4, index 2 is neither a hill nor a valley. +At index 3: The closest non-equal neighbors of 5 are 6 and 4. Since 5 < 6 and 5 > 4, index 3 is neither a hill nor a valley. +At index 4: The closest non-equal neighbors of 4 are 5 and 1. Since 4 < 5 and 4 > 1, index 4 is neither a hill nor a valley. +At index 5: There is no non-equal neighbor of 1 on the right, so index 5 is neither a hill nor a valley. +There are 0 hills and valleys so we return 0. +``` ## 结语 diff --git a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go index d115ccf5e..c0fa0ca9e 100644 --- a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go +++ b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + hills := 0 + idx := 1 + which := 0 + left := false + + for ; idx < len(nums); idx++ { + if nums[idx] == nums[idx-1] { + continue + } + + if which == 0 { + left = nums[idx] > nums[idx-1] + which = 1 + continue + } + rigth := nums[idx-1] > nums[idx] + if (left && rigth) || (!left && !rigth) { + hills++ + } + left = !rigth + } + return hills } diff --git a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go index 14ff50eb4..d307f6311 100644 --- a/leetcode/2201-2300/2210.Count-Hills-and-Valleys-in-an-Array/Solution_test.go +++ b/leetcode/2201-2300/2210.Count-Hills-and-Valleys-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{2, 4, 1, 1, 6, 5}, 3}, + {"TestCase2", []int{6, 6, 5, 5, 4, 1}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4dc6bc7c6e25de2d3e74f302991a1ccdb0eaa95d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 7 Dec 2022 22:16:46 +0800 Subject: [PATCH 0138/1057] Add solution and test-cases for problem 938 --- .../901-1000/0938.Range-Sum-of-BST/README.md | 27 ++++----- .../0938.Range-Sum-of-BST/Solution.go | 34 +++++++++++- .../0938.Range-Sum-of-BST/Solution_test.go | 52 ++++++++++++++---- .../901-1000/0938.Range-Sum-of-BST/bst1.jpg | Bin 0 -> 15122 bytes .../901-1000/0938.Range-Sum-of-BST/bst2.jpg | Bin 0 -> 21186 bytes 5 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 leetcode/901-1000/0938.Range-Sum-of-BST/bst1.jpg create mode 100644 leetcode/901-1000/0938.Range-Sum-of-BST/bst2.jpg diff --git a/leetcode/901-1000/0938.Range-Sum-of-BST/README.md b/leetcode/901-1000/0938.Range-Sum-of-BST/README.md index db5c37846..48e028f4a 100644 --- a/leetcode/901-1000/0938.Range-Sum-of-BST/README.md +++ b/leetcode/901-1000/0938.Range-Sum-of-BST/README.md @@ -1,28 +1,25 @@ # [938.Range Sum of BST][title] -> [!WARNING|style:flat] -> 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` node of a binary search tree and two integers `low` and `high`, return the sum of values of all nodes with a value in the **inclusive** range `[low, high]`. -**Example 1:** +**Example 1:** +![example1](./bst1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [10,5,15,3,7,null,18], low = 7, high = 15 +Output: 32 +Explanation: Nodes 7, 10, and 15 are in the range [7, 15]. 7 + 10 + 15 = 32. ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](./bst2.jpg) -### 思路1 -> ... -Range Sum of BST -```go ``` - +Input: root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10 +Output: 23 +Explanation: Nodes 6, 7, and 10 are in the range [6, 10]. 6 + 7 + 10 = 23. +``` ## 结语 diff --git a/leetcode/901-1000/0938.Range-Sum-of-BST/Solution.go b/leetcode/901-1000/0938.Range-Sum-of-BST/Solution.go index d115ccf5e..605405e31 100644 --- a/leetcode/901-1000/0938.Range-Sum-of-BST/Solution.go +++ b/leetcode/901-1000/0938.Range-Sum-of-BST/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, low, high int) int { + var inOrder func(*TreeNode, *bool, *bool) + ans := 0 + inOrder = func(root *TreeNode, start, end *bool) { + if root == nil { + return + } + if root.Left != nil { + inOrder(root.Left, start, end) + } + if root.Val == low { + *start = true + } + if high == root.Val { + *end = true + ans += root.Val + } + if *start && !*end { + ans += root.Val + } + if !*end && root.Right != nil { + inOrder(root.Right, start, end) + } + } + start, end := false, false + inOrder(root, &start, &end) + return ans } diff --git a/leetcode/901-1000/0938.Range-Sum-of-BST/Solution_test.go b/leetcode/901-1000/0938.Range-Sum-of-BST/Solution_test.go index 14ff50eb4..e35101cae 100644 --- a/leetcode/901-1000/0938.Range-Sum-of-BST/Solution_test.go +++ b/leetcode/901-1000/0938.Range-Sum-of-BST/Solution_test.go @@ -9,31 +9,61 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs *TreeNode + low, high, expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 10, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 7}, + }, + Right: &TreeNode{ + Val: 15, + Right: &TreeNode{Val: 18}, + }, + }, 7, 15, 32}, + {"TestCase2", &TreeNode{ + Val: 10, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 1, + }, + }, + Right: &TreeNode{ + Val: 7, + Left: &TreeNode{Val: 6}, + }, + }, + Right: &TreeNode{ + Val: 15, + Left: &TreeNode{Val: 13}, + Right: &TreeNode{Val: 18}, + }, + }, 6, 10, 23}, } // 开始测试 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.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 %d %d", + c.expect, got, c.inputs, c.low, c.high) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0938.Range-Sum-of-BST/bst1.jpg b/leetcode/901-1000/0938.Range-Sum-of-BST/bst1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6325a02eeb7158caebea1d5760863b3f64e38e77 GIT binary patch literal 15122 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 Gn)*L%)DJ@d literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0938.Range-Sum-of-BST/bst2.jpg b/leetcode/901-1000/0938.Range-Sum-of-BST/bst2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a2d95bd03c429d94ccd51f3d4cc3f9baa8417c0e GIT binary patch literal 21186 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 Date: Thu, 8 Dec 2022 22:37:52 +0800 Subject: [PATCH 0139/1057] Add solution and test-cases for problem 872 --- .../801-900/0872.Leaf-Similar-Trees/README.md | 32 +++++----- .../0872.Leaf-Similar-Trees/Solution.go | 38 +++++++++++- .../0872.Leaf-Similar-Trees/Solution_test.go | 57 +++++++++++++++--- .../leaf-similar-1.jpg | Bin 0 -> 52495 bytes .../leaf-similar-2.jpg | Bin 0 -> 15957 bytes .../801-900/0872.Leaf-Similar-Trees/tree.png | Bin 0 -> 51194 bytes 6 files changed, 102 insertions(+), 25 deletions(-) create mode 100644 leetcode/801-900/0872.Leaf-Similar-Trees/leaf-similar-1.jpg create mode 100644 leetcode/801-900/0872.Leaf-Similar-Trees/leaf-similar-2.jpg create mode 100644 leetcode/801-900/0872.Leaf-Similar-Trees/tree.png diff --git a/leetcode/801-900/0872.Leaf-Similar-Trees/README.md b/leetcode/801-900/0872.Leaf-Similar-Trees/README.md index aed4240f8..4c57a2526 100644 --- a/leetcode/801-900/0872.Leaf-Similar-Trees/README.md +++ b/leetcode/801-900/0872.Leaf-Similar-Trees/README.md @@ -1,26 +1,30 @@ # [872.Leaf-Similar Trees][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Consider all the leaves of a binary tree, from left to right order, the values of those leaves form a **leaf value sequence**. +![tree1](./tree.png) + +For example, in the given tree above, the leaf value sequence is `(6, 7, 4, 9, 8)`. + +Two binary trees are considered leaf-similar if their leaf value sequence is the same. + +Return `true` if and only if the two given trees with head nodes `root1` and `root2` are leaf-similar. -**Example 1:** + +**Example 1:** +![tree2](./leaf-similar-1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root1 = [3,5,1,6,2,9,8,null,null,7,4], root2 = [3,5,1,6,7,4,2,null,null,null,null,null,null,9,8] +Output: true ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![tree3](./leaf-similar-2.jpg) -### 思路1 -> ... -Leaf-Similar Trees -```go +``` +Input: root1 = [1,2,3], root2 = [1,3,2] +Output: false ``` diff --git a/leetcode/801-900/0872.Leaf-Similar-Trees/Solution.go b/leetcode/801-900/0872.Leaf-Similar-Trees/Solution.go index d115ccf5e..626b06199 100644 --- a/leetcode/801-900/0872.Leaf-Similar-Trees/Solution.go +++ b/leetcode/801-900/0872.Leaf-Similar-Trees/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root1 *TreeNode, root2 *TreeNode) bool { + root1Leaves := leaves872(root1) + root2Leaves := leaves872(root2) + if len(root1Leaves) != len(root2Leaves) { + return false + } + + for i := 0; i < len(root1Leaves); i++ { + if root1Leaves[i] != root2Leaves[i] { + return false + } + } + return true +} + +func leaves872(root *TreeNode) []int { + if root == nil { + return []int{} + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + left := leaves872(root.Left) + right := leaves872(root.Right) + + ans := make([]int, 0) + ans = append(ans, left...) + ans = append(ans, right...) + return ans } diff --git a/leetcode/801-900/0872.Leaf-Similar-Trees/Solution_test.go b/leetcode/801-900/0872.Leaf-Similar-Trees/Solution_test.go index 14ff50eb4..d9caa548a 100644 --- a/leetcode/801-900/0872.Leaf-Similar-Trees/Solution_test.go +++ b/leetcode/801-900/0872.Leaf-Similar-Trees/Solution_test.go @@ -10,30 +10,69 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + t1, t2 *TreeNode expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 4}, + }, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 9}, + Right: &TreeNode{Val: 8}, + }, + }, &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 7}, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 9}, + Right: &TreeNode{Val: 8}, + }, + }, + }, true}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 2}, + Right: &TreeNode{Val: 3}, + }, &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 2}, + }, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.t1, c.t2) 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.t1, c.t2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0872.Leaf-Similar-Trees/leaf-similar-1.jpg b/leetcode/801-900/0872.Leaf-Similar-Trees/leaf-similar-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc249577f0abf58cfd24fcec784705d00e0ca702 GIT binary patch literal 52495 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

    UB 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 KboTA^!s4| literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0872.Leaf-Similar-Trees/leaf-similar-2.jpg b/leetcode/801-900/0872.Leaf-Similar-Trees/leaf-similar-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d1da6ea965d11e3486f1eb8756f2dac2daed2dd GIT binary patch literal 15957 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 literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0872.Leaf-Similar-Trees/tree.png b/leetcode/801-900/0872.Leaf-Similar-Trees/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..9298a575958509058a4e06b92a36d7973ecf3ab9 GIT binary patch literal 51194 zcmdSBby$_%*Dku~lnw#uMmnV%q#G$wI;6Wn0VyfzZb|7z;FV5kB&EB%VbA6F{=W0= zv-frWKYws7;CkkK#vF6Z5%;*~3R6{gI&EcnmuUH={U zfN@rrm4KB0da(okfVU7=5{E#lqS5Y+5WwFk4zG2cArR6K=nqWv#)%mO(i<%&C9dgV zxSxUa9&c*8*TQ={CP-Dnew-498w(4W=~He%05Lwk8jSC)rqmLgxR~lq*C}2lg^F|@ zCV6-+g*+7l@+TU2PYQA5AROdYxq-x^bZ`0^1$)7knwF<`U;8s=XJ?z7e`Vga+xD!V zc;Ep!Adt@Y+D~xMU!KDi;r{(Z`~TZ#T<@A%90cOfWMD|ck)mh~w#6qv00v@!Q5cNT zUW6Np4+((Zg@-tx^o7PIB_$;!)cHN!4yW;HcwHSXB4LsVx$WyXI&!pHH_X4(EK)6y zPe|qYFkP%ssFugeqR(qTU$2!Rz|+m48ARatA-wBNs@OLO){0mL1i~5)hlIhbQ%NB# z?7K5wFkf%0(O`(`x;K3=UZ4<7=IeF2kBzI5QXhjHE7A3)*m4}67$G1O0V)iP`ADX) z#jkYxwi}tZZ{iyp8-s#^roZd+S&iod@lH-oI5;@)UuxIRADmk|I-ZQ>$;u7y&(*!; zkg70*Lqb3Fw|IJ_o2J1@q`p7WOrc7G1cbsuU*vXrdiqTz zOT>9oah%9WK}B3%UOtW2c0EynN>EUcn%X2*%q}b{s_p6zcC?5vTkPl z0N$L$-KeN73M3ROTNwf=lx#K~h-aMmrW9A&-``(cTpWn_EIcwYLBBla;qGcAg^Qkr z#rEcO!)b6dCtCDwe`#&)L!**;jjR^Ed9hZu8YEQc?>y{w3yop8^aFijxu)00D;a|B ziEK9+W`l{t$sB>Es0DJKUtaLr?ax>YnRgp=eBeX?T0@3zVK%4zpC1;Po^;W9 zGLgitp2Dw^d6TVi&6krGFBGp@4=3dne+-NvWMO?e^k;aH5juknz97??r`SOI+-k$is|A1>$RQWxBp zeA^!`)3EbV#0$mgB?~nT41As*+=tR{jMTzP8ymZJTo_rCavR^WKDxGeT9mxY2}cmS zHu8MD*_xt(P<&11wi+)|%VXg1yTATz=sm2;g5|>Ldw0o`Hms1ytoy^mC_Ya;1S8C@ zyHj+bJ+D!T>^6r~F3ZwB76l^q9O4QqMk6t9I+V;2pUi7J*B48@A(J;&_u)4%XaqEZ z`*V%vMY6@Vx3GLkeO5i;{kBxL5^~UmU_td6#rMZUvOaYvo&RhlgglWXQZ598)cSY% z!^Q7+Pxoi5@>*;2wU#Tqoofa{5T!wM1Gh6QrN$0j69 zRhjhW=H{NP^+uBlYA+I_DkifVEi^jvrrG}aL9SPCv+1D2!h2g4qy7kM}<&6 zGslC&VidaF&ZAMn!Ns*0PA#xQW!$daS@*xQon0qw!NML&5D;`5?%1|oq0wx=V@ajj=#eVvA$9_flm!0%(V7}4yF?DTm`O?vmQ zT$~QwRky_W#&qTAeks^s)37;fSgCMyF&dRy_6q zhMD!WY!;q#dsI!I?kbZb|6;ZOR{Sqg311Qjg^Soc3S>pm(9jTgM8+z&gE^=bM*6KE zXAz;brQda9rs#^6Eew#Xrn-Nat&+4pnoRR*_)bQ9ITpCTzh7@VuWtM^7r$<`be6Q9 z)6IJaSvPH1=7P1R+gRod1wx5Brwl>10RB^XaB@=fNg+;{NCSzdY`n4eZQi#LtpXIa zN+Y?RyC=T$`XFLg{RN(jUg2GHf63V#MYYvZw#|h2R~gdf#)WaXb`66Y>-5jl@c1Fp zwVBx%h+?51>w%I}W@ctU6uG}Y8v%|`o9`yDBO%VN*;P^IW3!jts(R*~%VALbz;21C zZoQ3e66;$g&7zddOuL9`+1awF>RJ#WgnrJL*CZqzHTS%Ehg( zo3<;&9g?!iq+%fu;d-B^Hs-3ny`Yb09GI&zX_=VtXJ&LuY&7T=Lhjb;$W!sy#7I?v zAio7}8d-mHC`D3X7H*XfwdR`$hj~GBN0+O&^=A0@5M}vi%ls+rEA#%sF*t>7@?|gX zwkH$3wsCnrL=Y6T$i=^Udx-OfBPjDu3OCs9>Dd2ehpO0`=RaNmb z4fa`z*TD<^S9a{CInB8Ya=3oF*9N^cE(0Tj@mDxQ~BgMWon3wRbFP_dUxCe-sYZk z?O{@edU>Co(rSL!j+^J}ywQsEADs=NvAaRpi|aU$_dd|sR1#U=$`8iJ z<2CIPI{9A_p`|6KcJRI6$K=_)+poN8WR+AgMdUMo7!Z*9BC;Zb7d_uO!n!F-kful@ zZ%N3N56lyO5(Q%P+R*S1Fyz(M)qC%>xLZs=Zw9`z`PzoeX0`&)C1sS|O=mS74+Etg zB(s?6CfB{s58hWz_|XdIN5}AFgp9aJA>MAIO>kn{Fu*G|iqkr3YZK7o;IQVCv!)ac zT;O;u-SoYDQhr);CY`d~qH$lVu$EWD5#%i`r+bJT+Dv4bPgfo@U3EOcd^k-_*W1Tu za6*BwzfuKzK)Lt3qR?z_`um2pYTv^-{t-n2nmgQE5ze$G!L!#Pl`kAU8*hT}P#>Cr zzhlI~6>x_jv;5UGul*mzK{}<>zNvp|ELNP0i|2w?8?i@3m#@rUJWCmF6?AWI;_E$F zzr<-6WTZQAC=Daw0)zSg4hAWYrEYuM(h<883@YZ)Y@@>*bt}pA_JhO@>HMlX-ALM; zY_#`mX`jvEOhbfhYNOD3?=uD=3t8@h;|Jrh95}I1s4kvYdtce<_4M`*YAwzt@`^3& zl_@3=4||IW_!{kS!K|rg%IlvVhzjgpRT@i}pY{D&q>)%Clfg?$<3^2srPc@&To4xG z?fU$N021)?BZwVkF=od<1Cba>adD~nc7J6qG+7UX&=pts@SX(=rtL5(A*T%A-#;wK zOPmJLpkVTyG`=o4M(vN+_?(Hg>I;FaLF3kQr~MfYJ?%0bwesEJOj44`cs713Y7OFe zt5@%LqrE3tZYgSXbsAM(V~!b6B}xB{ zIls?jj=MX8k@PS5-QxMIDzV-1XUB~K@3lzhs~z$kH2T7A?#m!2Yu+@*LXc?;7+1|5 zOf$4hsr8WIZ!nOUImd_PYNZVubLuh^%&B4fs(LJAKt3aaT&MC=o!mcD{kk)892Zqc zvVMjFkYM7_ zV#6A%DD!kOou^&#wfY-;vkg&MMg7um4-rFja+uR*#_yT0jy&+VqIt04)O3DUhGMtC zK_np1*cF3{&op|vJ(lOh^IG%p+F)+Ta2Itaj?tO(++#Xw$XruXOPyT(Q)Bmo(!!VC zp=S8VE=bVxzc#B?qM5Vt5e{kH`nbsd_k_vnWUcz~>Zf-uG4z~iQ>CT2@tUNo)Uw=G zu#vE0MbH%Jxq6MclHTE5okBTcY*EzWky@OT_MtM*hO8;?ORX(tg`1zx=p-Wg=F^YA zjYoor3;_ya&sWY6s2v&}PAL6JQ-aR7R%E(ATk-8abjaL?yA)TZ54-j&1Zy1B8CajW zttUSx^7HdMP1)m-{d(I%aWEV!+0x)~h$P$-V}QY#c5+ex@?)&qzfafN%%&%TLl;-- zNA$&%6cHW&t|&p?VEBY<9haQ=y3nOtk!lu zJP}kEPE#tA_HL1>RGgx}8jJEO9?U+bQsM0WR@d;8GOw|FdpPtpw`)BSwp$A2V4BW} z8bUz>O_0z*9d2`wav^cT}!T#eU6+aHn^LQvOR( zk({q*%idI2*?bXblh&dZiKI9DxLSh^d2jmHM>f0cNDO}Yf)0FS$-AuEfK(dJ-XFK! zHzA7z<>>;q(g#tOj?}kzPv)1Lf#3DdY?oepy?&rPeDQ&kYr)u<(=%J)Uyq{Vb-pb* zC>=r2ul0mAfA@|DoACDLhF0I3>ooou- z0_h6A4+;AiEau{o{WSp9p+n|Q)Dub+3%0{`%L0!+@($DYo zDeAdxheDh#voPLx{yF|@(S4jV>%5EJN62~^944O^4po@=6nuGn@1lm9YBIf+Z{s%$1Zc}W z{ma#D+Jb-?YjhFnqcm9>UHI&BKIZyB#jBQzb)0luI?f zDaOus!lh(GWCu~YPyIin>xKRUXB5&s!+nQ@Bbzn z9#jJ+nQ!(_7&KMe?@!_9uJ>z3$_-of4za>V`!xs{97i57(fTRv5EOEyYU7j32-37J z*Ft6R$QTA^2?v7c4?;~K|N46@T^#2VmP(x=P*Qe2T!~7Pgghf5$juvumRO7&?5-Xy zLA>#7vko1da?IxAG`yv=#+>?1H$epEXnDNpSm!cL@Q~-^(9l7o%iiKi5Mi}DxusvX zo1BuuZ`y}-u@Uo0IZe4uIzl<{h*+_dj)St7npn9kUqUJ?s@twA5 zgv-8LX@V*09=kf5^kGd-MZ-2Q&&PfAGm zJ4X`9m2Hg!$jXo7HdD#LcX=qszwFs*UK31@sc*}RL#v(EDZko9W)@Mc``s-qgIAX& zyjy-is=gB05t{BWKr^vd8hT7|3>=Jh(aA<1P8)?u1!(3D#zdcfc>Mf?pcw?ttk%9c zGo51c@%e;`#;5##C0{!n;y~{r9k=7}M#H>`x5^{D>o=Q1+oF`g4m=+l7X1G8SaM_O2%Bz;2P#=lz-D{|5~TiUfX0Pvgm&6jj%@E8i292Kkk-B?-c0U zHAN%>=*wp7SH{G|ME4;~ut>a!-k+k!9uf_!n}@5chuVD$a;py9;NWtc16tm+shJl)Y^!*C;IADR{bTceiV;yIL&} zRmr^d7kui=WdXoro=l|m#J5O~(l%2I3zZa3S{9bb@knCYKh95`VYd2ltT*k1vSW!v zM}CIwhHn{_)>(er(8#~2XK0DUk~C&<#uFN?P>0tHh3us??Lq(K&Df$Im-{(WoXyIrcjpZ%)c7)Gmr$SEV!L-lb%z1-je1Y-MbM_)x3{2Yc?FXY~K$VGVGU6NvA>?n|A zc^^im+3i@>=)Rzl_Gk>_3Ab{mpo z>9(#;W?3pMY-c|_s-3rZddM-GkfD)fb}LqUU8>_lqC8p%CpH63w7SOHe7$iPBttMV zcn@p~LypGirotlPQRHw7<8W$&UBcqd!{Xet7o$i8>%Gi22kP2whi-wm&vvU=gS{?N z>+Lcot8FFbdA|=NuoU)r@72&5@ra`pD=;%F4r!~C)aKg~41Tb0dz=m7`U^qQXX)7p zAx_(E-POHzb(#ysb!3N#S;7HPOizwGG28DBTMp*x^qZU#UXTo~2ExmQwFFJR<_N=! zb@0OT(yGmfk#UUG#+DC$Y+A?!V1eyyHH*8&pFaSf+MjndJvsz6YH;w~_V772K?E&R ziS@-UM?%T(FVW>h-Mo%X!mK`+l6OUn~bd?CxDxI#golg(? z+)qP;%=i^Yoy=~Wj7D6DjIS7nuphUf<2FbNsPij>vNjXht;Y7-eA@-Pq8izC^O~z;G{j$Q6g~E3G-j;yhoPqxMIV;^5aqKFrNLfGh*0UUcd(& zrgw4igVH%j{C9)gC_YM%e{lr)J}yZ5rBFXimsu@=;P}Vy?f{9*Bj!9v;Urnd8Cj|0 zI|EtLycyl1ScT`SSC*XJ(t1JpVR4TwQW~gx&+XpiBuJ11YW1*CLmOd#O`#jqEs#^o;Urq71erhn#9L1hzrP+%g18v%x2r|+vhpH-9>m_ zqI>uPF@tM#MxAek$bvB#T*F?au5x&HqG7VAU5ksVXCBwwD$X(BCgPVVfDpL!?%nzC zQ8WT|;sW~|u4UZa>F-<3uI&rJQB|~ys99rwWiL}6n!|M)ZHE)KS&xXM}J9-I($GyBS@r0WyBkMPMxOwI^}q! z3wy&zD}w?LE)2)8`s?z@%KS)NWo2qp(q|G0j|@U8xr%rwrrz^#ceEE5=Sg;YzH{QB^~Kw5A3l|REc0yoDn)Gj^>283)e;=B0@$6F zp42D=w;M$ga(-*G-fqaZQjF9daorLm9{Zt|^*R17#57+N&+VG{TGi4aJ7gRK-3K7C zj3xKwZgt&LCL&srW690nN6dy`AwtjguXOK5lpS<>In-%VGJg8 z#x%9xYl$T3kWWgUYbpqaZsPi(6?E$pc`^_P8;8C`!{fM=@+-%B=|dc!%@;;$8Fw|& zO=4j_gMu!V8$&B}G#Kl6#Mo7QKTgD%FkwC*G>lT2+c9I8TB~4`;@euBh_KDU1lv(`|MOMChGwcm zUZQ?_v_uD|(7##r4ePDxz+kiM)81s*Q7;=(_9#bi+e#E=bV~KlXY8p0lb-Xi!|QmSqb)ls%)`JC=l8cA+zp@U}B5EN?>YU)~{vpB-dS+fjoCU|Ko!K|Cm zSL>suzkx5G&T$xoD-x1GuiEU@%rJ&CXC#-ciuekx;6Vd)$nc>1;PK07a|VGQD0t-Hp4dgz4+JR)VuHD@#FnF0++!sq@wz2UL$xvvF8E{hVfC{iYA0 zuCLo+PS)TUccah}R@zO|2!aY(L4ulj_r^26rc?F%Q>uP5A9+T)cT>SIz*`Zm-l0N} z2~A6(?y5)*7w3g~EV7XVf{+5PnvC=BknRp@Be_)7n}Z0Ux$eBS101y_pRpo)+{)!_ z#jp_MKd!$s0+FJ#Ny&WAQBq`6boD~_&xj+qVcwxZ0;-^3gb#&PwfS%=sNaW^PogZ} zFY6cef6|Q#No`C7{*p89X)QP4AN=B0A7SDK2H8p7_=}{!Qr=IFb8@qY=j* zg_@z+H}*j)*>%qYM*pI9D{otbgaC-7;Dwzvy7n17=O1_ z8)jSgLW$O3!&0X7yzCc`WB;dl20<5wI~VM2b%*dbH<3QB6siz*b|_2*_mkKThk0@W zUzOnRIe_k8486qXwDd5yQ+TKyC`0XFPO8r#j%!T$Ih-m4Srl3+8c|s{_NQ1{ur`;z ziiB<*5_CHDSl)$o#YuEz294(duwow26sHKMs#EEg)F8%3=wmR@$7rwx!DF?|?}0rS z!2x^7kqyG+n0kmPP&0Rd z?r8i!4smDMW~flfT%nQ?u`jHDvTVYAtC!vb9R^KRB@og1nx0Q8qB5*OXJ>$F*D_#* zE-5I{3>G@_Z*KqwjQl!U9R`(?0m%8B6pTWzy$@GrRW<>l{%xtqAayFSV)D$xHse93 zLIx#hK+aExxR+8b$bS{a1Qhn(08E8C#u){jiU2wl9y;F%+8jRCqTyeuzCbH?M1)SI z`(Q6hco&d_Awbr^ngg(ZI^eeFy(NH3^|w#*90QCLoGbVTx)xZlmM;jO)3$@$l%!;z z7lJbf=>&@jsQSkN_d%5{GJus3Y}$Jrpa^!X=XN-dS~O{>mV2NSi9E1k7_pXDK<fqeKO*I%vwgcd&(Ky(?&)@<13KB(3mpgTYMzA?;b zjFk;)SMbnXhD8M<2@d|gOdMJ_{R4fOY)gHvWaM9~QiY1{0EV5Yu~h}I3IZ9h@Srk4 zRV86bm=0AkEOcu=LOPWskPoP!+x`>Em01K^93$B>mmBe4Q&9j3#N62zXzn+@sj&d?;46gHTg|e-3>Dwo|DCa&Q}=%=dSFFu;XCT7eZG zi}3^oCWShnfcAPe6Hi zNusR%T`wVKGzyJ6&e*9XU70D}w7(1AQh)~keVJm{*AUiFRxGQ%8OK)ygGQIPqR zovqrX&d%Vk02Qm&ekl{jzWt$ox{z9dQGSp%1D5ok_5wV1SkpOm#kP|3I2936UK`|t z;|Z1addsnWc}+%AJtY)n{nppYccEwgR1g`k0YNC^ac8He)z#J0fJfnZW-fp9r}b|6 zXJBs>=}T7DZ*LCVyn|8kOEil?J7-wHbr*D9zL^bf+RoRPXcT^X^*KCr(T?TQ-RD!T zP5}_N7%)Yym(O?X6|5varjp5EsFiOwbj>Bh2qIqhfW=Ko zk1X$N63CP#^W4pg{?=f($Vj~=SS&3SO@@Xyr;E!ler_QEA&pJ^cx3@WhXp$D#CY+l z^8L?G=jZ1I3Q2bJ^-7CgjFaE>8x)dQg}u&qW@}^>70u=(#Pt#Fmio$roml=yb$561 zd#Vs$nKdacKa8QFsM@DL7#A7e6uF>ax;?Ld;#Wq+$S*^`tHtQ{lO8F~6VG)@^l6nOqjX_?CR~%3sPG7#K)MNPw178n=~tyWhk0^>uP`ayb4=b(T28 z0^%*ePGh`1`k(AHO+FR|h8TN#uM6T=?;V~%Ux3dMJ;~vE)4%Yu>o{%a=Vy6cC0ctp zIC`odrN+DV9ZeeL@_*uJ!mBG~tA4#-5rR|oh>Grbq}Z=OjgJ<6d=>f#>I$gK!SY() z*igz6@df+@yrhl9%un(0@le(WOOn)o;|(~Zq`pV3)MUOcmH>X&^hg%2##8GQu+;@S zJN4$BlJ~FVlaF%u6}px1QTneDqyZ8lW@?T6w!KmJ4NH%| z?~dBZrToA7ZfDiQQ(PClV}M9}JeY3~J?*0|IbxD`ayqTGnz%feFKqMa9?jVfaM8Jd z!!z3+?R~oEx?1n==;&CDqmMvCQwR@Fr=>0L>XJIy9bGl1x5Z||&v@ks`jogKnB;;U z$1{%)n#IEMD0;$f`|I!g@iQ6L8zvr=>9xwV9$-5VIT=zCz9`VqNyatxZ<~5~BE?UC z7mQVS?N32Z`Gzv2zkilBZHeY1uq5Gk{)r-ti#VAmf6o(9PZVjX);?g>_&?rQTp*BU z2TsWLjpSnb-tKG_C&$vF248?;HlRLEET>QT(YfS5n4<5<@T?S#GXR+AWdZ zSyAP+-x5)Lp{S9+vxW^;RKYkNWGgKgQOtTI37td+zj{?UAAG-kwLI0S3xl< z3(HwFK7NJ4@Xr5XO89EQM91H6D|Z@1OR0|;IHkwB*cg6cQ(I{7|qNb@Bf&Q zB{5XV9ZS&_BAgo5t>|BZYb?uVDd$UUW(s+Z&s05SyS%a!>EW}V zPG3ja!Ft({UNlValcp23`(kLypTd~JIZkvir-E{0B;uu3r2Ry0@cjBoBO~F$!_j|8 zlCXdr#EuHO$3y}y475dwR>!KWa*B%aJio~O@7t^<+@9_JK8c}N@t)R~vWS|s&OugY zj9TYRrT!+1@pLodPv&zhE+3RB%Jx{URuj~7u~$tOt74K3|0JFr@DIp{(Z#j3r-%8L z_MMt~qRH)N5RbWXi0O-CXcZFgk2~+}7VW~rBIy`G-?=ihAan)3*Cj=L38f=d^=j*= z{jS;j$`CM|&AG00zfw@Te-?xJ2-4T*pG16b_h+is+U^d$59)qTDp5-OE`Qqq5`dJH zCeO31hucdoU522S#&S7nNZB4i%;I9v3?2VuIXgZ6sC(z{q>r<((4xVlT5Bl3)9-{5 zutZr1N6`nRT>{t+tUjGbp*73gQoK-!J}af^zWdEPR|3I^;sJwIr_*PR=|c2zg=Ze? ziYBlVoSm7+$6HH&`n)&6PcNAq2~N^IPc4(ut@hVR8jsO=cKVMkvT++pNRT2~0wE-cuP8n^9KanYOdkMw4 zV<^jF=$d<@nH3|AhiSmPPVZoSRQuHInroEwd_RD~dGC7z*(-(z*3_xQu?1Je!H-Ak1(gnZ&0 zj)a)^MBC^fsi0fyiM(5lVEY;uCt3S!A?a6!pa%ETyJ@EA?-F;sw)k92w4ba~)QjRV z#Ehz_B>7>zuCWsz%Vu8I+s|t&CR_LuJfis{HV0;sVsQhS)$UZOEZJ-EO4(?#-Dy=i zVd017z4AQv2jAO)>)ok+wR4j?e$X`xe#DFD9^i^>!jQkCNDU#1T^Zp`>qPWNgn{H4 zi;pIAnxO`tPEJl9BX7W)1yxI?q+X2CcPkgx%;>JWgkx9Vqmy04)`=9^!x@R2UOS`Q z6Tu_aW&|vY;SU3_S=|`G*?5{FpQ`4&RHm*x8jS;*#b>gUM6==+uAUh4!+!mfC0+?K^q)rHoY%e( z@o6-;APi39+A8VKrsPUU5-%`CT~4>0RU3_scSnPF!~cK@ zphb=N`^)`VB#alYm6Z<{nrfQ+Rcs8N@={UB{tq(eg4Iau;>N0AO-?hB`S#X`MV`Z& zH|9AhNq`$J{xugeDu~X=Aclk_R(H=-?Dr23XvT$eZdwqrumwFKW?1%>vFODgexo>a zX;Lug#v4*tP}Y-m<=P(|&Ke0SkZTATN1dF4!1yD61O*s8afzAV*)U)H=!%=x4GCc} zqcqW2RY5AM5a$Pl#35m)drOoNr)6`85#Nx7WXyYX8{Vhu#f1_ zatxXKKYUFS6O#>s_9|PGM1rOY6&r0`B}B3TVzU^W(l_Q_QZEP-lnP~q@&O%iwzKMm zqY(P&SeEZ>&2rP>n+p#P2U3AHps;07y1@jmzVY%Bpf#;L;}YbvmNZ^#=B}uq3k)1u z4lkPm%SyLP3i*(t{E1!=%bJ_slCKG#5{XDz)<5ypmFfLbz-JyiFQc%AF&b7@WhDeu zpf~`hP>eFaZH`Z5WMp)jie9(7msVmN2&f;P)QpKCT1dWl*=swdKa!waV(e7esb@?)}DAMPy9VZ?KzbchAy4X>82hSw+EQ4PR%)YzQiyQo49X z0Y5g86;@XJhuSwdY<#)CLEB#MSV{ulRoLO***^wSz4%YcW&zKZ^#60XzbB;PztA zYPQ++L({Ix<+|PI?S?mvLwnTOaZm73^pAGgXo9JA+j6(bHfzpy0a{v5(2a9e}<46*I>U{h(Q;v4VF3Of|kV+*X; z*~(&Kvp+n!SfKgjn}_}^T`Oz(rteyj3o5dgZ6)$&ep^y|xqk_AoH-!eWc z;eNpm*w{{aet_n=*fcTxeaVjgH`^j>=Et2&2bPJ*6pWmxsK+5GE%L|dhBQpulrzmE z8S%qn8gTGq#4-W`z9uEf4&Gioh-T6K-hvU-9a&lsa^00!!nm855pXw^Pa`woaQDHf5=VwQS@6sB7X!iz zsK5Fe0!AhH{CTPVRZBn&#~vtQU!wco% ziI>ZF;&aNC2mZjqPnE(0&51{8^O{PBEaa(NFUCZwa_2X~362E8)UQ@OLUWTuNpQfy zq5%gh8;_81VjR%qwc4wk*Nl0jy9&M)DD62P=0FnCgxP)nBulwQp7&3xcp4Th#m=t( z@pQ~%D$!152!FYN!)k{iUZ;rPB#O*`erh2J3w#quCxQ?TWbH?mVlpqMHLeP17Wqte zGYE+bblTQ5OvqFx!oS`O5E2Dj>(NhEvSbf@L*IBY4}&b8Pp_~%B8CaIx!5T--L-Qz zwW+j%g})@|cPB@WQ-B4X=XCW*J(-`2$J}=-sdS5-q7>2HL1}4CVBHs^QWapDRVBS5+>;nMAgzHuikJl8WGs8 zA#YGde!SQ9|BpGU7odt#LfP|9JVlcgOX^D4(#kw5fMQzu<_*0|k>fnQ&xf2B9Kuo@ zUq$yYK!^lb6_%1vOwiHzbBqp{Yc7yQfV2{sA(HqcaMRhzY28|NHg06(wVI>O zR1kUW?3ZY^$W4lU_WvmXxJIKq2wKAZTB5N$bs0X$9A^uhu6x0KBM(`r>hWD&J%n6i zTjMdaWx6fp23m^W#u1Ql&rd7@|66VKw)$h7F9+M*MN60ViFu@%b$lI>p17Ppx_Qqw z{y|X!1pe6BGW{fyCo?R*CNnWUwNJ}R1tj7OxzVB|c>l4l$zqKfyTxX3X%5_k+@%v$ z<*ypFwN_Vy(py8Ta~--1C%7hSajwL!l;@ruJ-`FDyl#cz#LV-|Y4M`57Vc2oKLLj| z*g;sg*EQH5MFSxK%Y{_}H!>_!VsotEL{(cA{K-8zoyHN!_Z!^i;!NriyV?s z2X%TD!Lssn@fGr;r77oic~_+{Z?AD`+o@XeSR$KQ-j9hdI`HFC{1n4y^BbkH3bjtY z5^sx#=0=E;VE!j!o$t>ECgSab8x(8}*MUXx*j(zZx27A(tRP@o&V3TSd@)Uyt>NJ@ zLQZ6bi&SgL%l%z!@f%H43g7h8Gx~TQqT%^^t8N&5#B+5i9YUDJFKqAo@_=U1zzc*N z=&&sRUsToak4OF&unmHxc&0zDwv~phH5sWTi~2Rc$w!(C9})|?mo~$R4tZ?S=Lsgh z`3(rqdVpoIF_4%S)Za;&LDd+t#)sf2K*E!)(3K|k8tNlZpl^cuh`v6a_YVGg-wF!C zZ2hR2tj;^K-n~Al&rVN5#2hlXeS}kb_+!`6SLV96prq!(8JIpQ7Q4WlNLQodwLNd) zZSHU3ZA+uIw1No@LVRebbKubJG*GBPtB2S|rU zUaEnMIM=3~sVM;X8^AOBZqT%w@wGhG^V{g~@Y4BGhtWdrsOXWvb}A52p;mYhlrxt#wd%)$N2mFy+PYQ!r3fk|(qL z@r4a=5)8?;vV1VveD~Sxet(+(Pb#b1^1oD8A%yMDXu_TzOqVyz>%Atvl~Tsx#n|8M!QegAVGp^9US&hB<|j&6!EZ(rM+NMBc0 zQ!_pTM@{pjR$o!OW{QSN_#wVWqAhL;c$|A@G{; zrpS3QB5wO!&xmWGWM)8kD{CXDRwZDd1}rm-?fK|anUs80C49Ltbh~QRx^Ym|jlHbU z>58yK#Kg@fT^TuLDmp@19sqg!N0~0R%#fWE2D}+VKTlX&pUYW`Hx-5~?#R;H>x^je zja!c)(xIE-bV!bBHQc%^yrni*1PRJyI(@T*vFY^up(X(_QpuQ)=>CX);9>?TvRUC zUdyiG8^_670TH*4SHNHAt3&ktX0M>yPWIM|ga4Bg_Z_Otri$@x)r#QH{ocm%Z zcLymEGI%q5A_y`Nmw1x3i*x02Qmwygj@7D9Zc^A)&9Ly6SUa)A)qI(KX7st%yz!RH z>>0=zprs}^XSgHwug>iv5%b*J-?i?B4f6-&KF2?UP!`z9Bt}sttTafS{xV=!1BTC7 zh)PW7YzRmi{G1gFmwzP;kAE3#R4M9(r3|fo|NM??W0Z;xyY$h9r!z|&Qu$xZ(*QA( zQxDVVRzcoo>$M&hz}smDmsZ0fBKAge0-GbMQUIDTp(3gjHn#T1a_k2Yk~vrOi+oYk zb+@!`>l%T5?b1bJvl@L;f|i6Mor2L1wbUWbbvALbaFkKIBkQA8V^v1WBk}JyDDP8h zLw83o(kevb1dRAW-TDaKiI3yg8#(!_-);%qUHPmh*#(+6SG&;&nRTEb4#0S;q8&Y- z9eSYciia;c9`B(fQ}6G;v!Lwas@S>2N5$1HqYeG;l1H15qHw}uBN)hZoavsgZXIz? zSRU+)wZCKAk^{U)YYhO2LCVp}UvWA=M>ZXPCW}WS8ej?UA2|3EPg2@#UX{WEHqqI| z;;qDN{?LHI;97u#gr4@<)*bnCA@iY#TH&DkCbxqgQbD?YA636b;h-O>KT;laFHC_$ zg8&lw&m8Xb;wdGjIm{QYgpTV48*FqHU^lwL0yWq2cXa@0({0yd+!2IQ4U_(tj+^`A zwN=N#JdKi#dD>fBxCZ_*wc6}kx^Cw*OT?|Q;3CV0lmY~o3VY<>PtvjNve`qLO)Zfq8*x1MC#{z#S^rmm3zMXEP z10}*HFy_&oR8?h7E8`WtZ_~mm{%Ux02ULw`?{%>IJ!P@`um?KP$OF|ox>N@9R zo8s&A71$pG^1=am`|$Aa7Muo^z*Td7VB6rJp?#%ejZX91{arE9`k^8{U6hOKP3zSk zZ?l2;9e_^UX1+fL@c$B^LEYTku;{rE3qIoWONM-i^a&}^$VUlw2;W{Plzds;!$_>` zgM>K_gFW1d!&(sRiSM|llj4vj6uI~N;7`Vb=Wyz~XWJvgX*~EAhmP@%H17L~CSv~l1|MK30c z1`=MXF(-~o9i;uv4}0sjJ(Ii7E7*{FjN>bS{V7^^>XFpS(aGG4mX2<7+V3Hn)YZ&_ zWG-t^O4@bTiA64Me?N=Y?mACDnhbw1p=O2!W1QaY)Ht)mr0RJ4-O9tRurjiz59A(J z#aAN^0#ERj4)om40InvNI+WHxLHCVQy7?=PyIfe!%#I5|5?*3sx->1|rz`jyay-1N zxIgLD^Lk@#y$de!0~DMZGxsIPZoyR(IR%A0mpqxUtA!_r7WhX49;yf;0Xo!4?V5D^ zVmaIrOBrcL1dZ3Y5yl+-exxk%5uJg@L0h<7bV(8Mybm7f%5OOCYHKQE?q^e~uD8Ht zad7pU;J}8#KXI5s`&2VxXT86@=YDNxXlUbL-aV7oRz}glCVtqMc9>-j)|Qvc4C@og zHsApvW2AELjOM_}#m&qx*_Bu^*%ijYhu3s%I3=ixvE{@lqv#bxk`JXmOzX3~jxIso!nZQXtx$&H>LFvf>X;j z%CfN5Y3u3~mR^-i5A$_gKt)|xO)by*ab{;=z^w9hOI))S?S|cx=LN|&0$2uY+xU8E z1p&Z#r6)Os=^D~-XlYps)BJV5H7?Rk8b6cv~ zfD1iN!TU??{@}|W@Vb)N-mx~IE0X$YREU5aC;l755KQuFV+UsBmTVLjUU#uP01Yh# z)e6GUS7Yd6`*jh*;}=uK90>&7j}`^@@>E0~mfxMe6+gF#)?Kk+JASJ)G(B$dFw2sN zOCN>lxj**w&|Irk8s)s{gQHQ0+TLND{-?t>Bv(3Sd74n*8;JHBAli#LmvG;dSWj8w zwY?1=lu{UHxZlemFN_EjKycP`^%BxNIFB*R!8&r;*diRtx^mT<+lMl{P5xzeqj~;! zr}cklb`$xSz1V6aa%|_R={D7{S2NpW>@4A4A$q3w@Kw-x@;I{XCNxmu17meWZypNX z8x#~g3+(TB&h(py_pR@Iu@(L6`|iH$Uc>mCpBmnpu@UTP@10P~9yM*Xf%_?AfT88T z>G!`ld+V?&gSTB2Q6yCw1*AI_>F$({MI%Z|3DU4Y6r{VPyQRBBy1PRf7TpbJmcRY& zy|3$>@B8EUkJnTi%NAY)Q~G%ik=#6$@;m^EGs}7_^mJ>MnJHgKP=B4s_#Z;svwM!N zl{Gb&fI|wruG5tk5Nm5|1%*N2a0U>9t>0^N{tEPWbq@QJ^xK58eZLAiY~Mi*`fq<} z6d47Wrj=qY)BjP4@5Z+&(&~NwS~?O%>NAcPB=w7dF)DKsl|ld=`4b>@QkI$X@KW5f zDnfGk5jB|pdIpo zb@_{K5PLZDGVyetN=~QKa+dWdP5P3rBf~PU+1n{`J(8TA?xPIgHU(Vt#sWtPy=R=SH=VePQBKG8^MV&<%$FyYjBO+0K) zohoP`4LXqszr$}^{B=Dx2CRft-@ACyDW;k*yO zIM#ia#<%qv`2}h1r`t{e!ja@Z_^iJ1sLP!!14WQsfg0eX>;>{m1$l|U7go& z;&X67zILN)use0JtC8Dp-1$YpYCD)4!dM19^ZIWKEI8l>xpmO|2e^B1y*0Cw%3r5iycft$vk>CRKa^Irnl;N$J-qMQ4j@NfgNH60zXH5>!!MK) z*RQFOZOi=`!`*ptTWe{PS3z+SYYJFAMH`Nq<{^>djz8^M&Nn|FJtZHc0Ak~H+&}r< zZXBL0EE{R+t;eQ?d*T&YB}P1Zb5f)go)6299`Ab#KZ0YBwgx3+ah}(;5lMKTD48pU z%V$bBNt+un_*A3*B*DRdvzeoZ3K^PTE9 zTKA9H7)xq7xR0VKe&2Qp&2JAnDUVryZX+^^ZAe1oE3~6+be1G^T6BBNF6E%bNyhv5 zkz3Lio8?3OhuC1cOkoT#O*%{{N%5D2Y%v7|FMf|Ae=Q#OdMssKzxNyk7Y>6GHeiv7 z@Ai`nSLo!vb{I<^7ZWhKPRpnDH80Xv5r|yu`(#{;o}wY}apmoVv`hoH9-?ka>a4U5CCx^-Zk&QiTu&Ta9z~#hOY> zBmeAFtI~ZxGWVI=CTDG4aw^n{TQ!hGvy^ zOYruO=w^aP*3ED6qZT4a%h6~3j6h{bnjiMv{Ej}ndXkhj%ca=ZFt zAFn!N5$O1wFV%h}P5Ln=wwzc!hJR00PO%e)Ti?-0=B)oixS=;k4AsHCh@aZl)tf7% zj~XEs?W%BS)bIYiDMc(I3N9uYs9$JAC*DlDnOU!l2;CWd=`K0s&mSZnqdwy-*>&@w z#+&D3F5F2KUe!4Eme>3R(K?MCzeKKC@BQ~GGRYKZKW*Gd9QylFx7uWTf``WF1)XZS z@6Vx#fme?Ls$W9+#Xb_YxKp0_Lt2)SUY)q(_fIzCbh8wIruN73CD9)48o|G33RuN| z>n}3z5it4$*|yr1&>jsYrWGj6gbd;=#S}QDTnPXhdptH%{sc$U_ogI}``u^7XlP zink_VTgugHhYErh;wiv@UV4$q;yg1@j4>}&`%|}IoyAP6keGP_-{ShVjj!>Tm+c8x z)SQ)FpXVUkwsAfC=7Dmc9&TQWQ6?1l^=}pe*jW5(BpxF`z5zij@+G;;?2flrC3d7o z^ru>O1Rnm_6%3s5bWwdL!;946ZgTC02*a-@mN7Plj+u`e?cd+yS|=}05?&d;nXZ=4_c|Q z6#|NG1PD);*@rOFh58=%Qi`P_2mpsuteCVk4#GDNGXtGR;GFPIiS}=V7yBcC@Q#Im zalVCH&Q2zefIv74(S-j2kWy-%!2ghw1`S8Tq-zlZhp9lMQJ@~DQBhnDM)mShF3uNa z;dlgu!5`;Y_`<2*7{SxheF@rWK^keA1#|3+1So`#V2+4TBVEB-0}AO1f|lLkg;-Gc zELgq?KZ*rSbJK>=Abjf+z9~Z|Q)*cU=<&hlfP?$DY^3QJUQG|Eru<(uq7|%7@M;J_ zHTH1xJVb7;;f1I{A%#c4yuVTvWMrUT0`zgzLqyQ@A)huKCa^9LAYgOhE!&Htqrhu5 z1jyFM;0MEa%uFbt3M4R2a65!kk&wY4af3^FINS`f4`$?|U`z&4$7RIf1yJ5-r^0J2 zf9!x=3$O9}cYKy7m~?-cgpNBRzvx@j5qB`Ux-!)4pPu92k{@;DBulFM;tL zUl^2VK_8bfdIYL`gRA`#OE?t)FEodz=fq#eFz>skrf9PZNTdnMPcp+eWD=9jr{TyZh)Oxnk0f3cA9XK zH#6KqObK*uM3gA$Con30_(bq#*PaFqh!ZQ(8lu2EjWPT^6akUC>>DpC7kr=%f8c)y z7Gpgbm(he@WV|&5kXf1CVY7cqpEh=CU;@7vFRD7+1gt>( zGGKxs%D9X){K@)(QK0@NjLMa&Ao>EBfIwDp2>;9oK4ZW?4-bF;1u6j2kEqn}3jVTJ zDA9l)0Pd*hQ}_?K8MTFRK$F0qk@g5QiI9lQ{2Lf8N|GCi2{#&n#SecTw3+s7+B)M-e(px?QO4j*;@HNrOBmIPX*^5T69p9~0JX3RtsLC0N% zlU`!MTdfhT7^VegyiHZWK!&$^iNuTm)=p8>T%1qvu|@C@NB;pD33~)<7lt?TZE56t z8mN=~8}C~*c%7*@+S0hda0DgVp9rJkv}<^(5ZsRRdm;4Gh^kHV1H=}x#ErPaO*v8Y zATZZ69y_FaII!ZK4cxTm2vl%q{9E-paB2H>)m8eC2QH237>1W0{4 z18`Y-I)&@R@|P%9gC@Im?TLK#z~+3BKG)!QPODMCsnM>?A34LFiXzA&P~|Aqm31FO z*z!HyR9%@Ujg(Tv?Q=f6Ue(*4Xl^cL@3jso(_xG%RcAWz%ln&4qQ@y%r5larczJRK zltv#j;ym#ZO_7xoib0niZINV6`eL=#k2E;wC{Wt2E@#H|X0(4fHDXx1=bF#6a0vo~oq2Eazt< zGb~cju$qsIF1NXxdK4g%u;KMdM6+6i+5vGsbRObHSq}j0#KVs! zeki!y@^2H9Qrs7E|G3opi8e6tc<%{xd5$y0YL05MU69Q1drwruDumRc|;NCN3A^~!w3;b(uSNp9wVqHB}(9zKWAY{}W}hJk%wxuz9D#b6^>J^J5CSkx!R=)!3+)-YI%Bvc9zk0c74>P55xYi z-Co!X2}Q+vN?X(KlsKAc6n-s$;W3JbJH-p^X2$Cb>o zD~7Ryad?s0v;Ou!I{2!wy&JUKR>QF|Y$5MnM6MI)#v1}>Vn zFNO4bjH$>n0{rT|NuQvVepz>%zK})1aVXm#x-(#%E4vt$k&Ps+u+Z2!*6wGCzVlW1 zJyWB4E&g7jD;P3mt|b(o_|2n-mdO%Y46LYKkI|9M>S@bYFA$E`r2;5Sw~aVcJ3Bi% z`8uQVT;UH1>0tkwT}*jJ*bB)kl?ty2=9en7PNDA&tHe6Ps8o3kX;6&RA(tN1H;6 zzTEx}xsM^B-47R5pI`4)FU?llD2@Wi7~$v|h0E!Pl<_|>`sLB8+vyg0HF6MOa{yV* zo~C3VPym~NbfuUZd}opnk1}sD#>75iV7t?b`N@W2P$e8!e>!Bm<2YvfVTqBdVxp($ z`>J^$*ZQ7-_sQ`R?k-so38#v;;nm63f~6-A1%YRuW+uSE~1-TqF87CbO~iX*XxNp$jjuFxc**7>iMlZo+N{4eJ{hyhf&@-yBt z0?9G-*!~*7MwjIX3DYSJUpOAq2Eez6)5Nw{;2OLj&|w8aHP@m_X=Bb?X}(o9OHF`- z3ba>j?Cl4DDvsMFC-!X%16$l1%4H5^s+Z`xVM_jxiBG+4DaIsnUwge`C+Rd)i8qD| zfAvM#o^F2y*zrONFHt$!;sJrShXP-O5 zf}QpS$~;a&VkHI24FCKKeBHZf+uIx4*`_sV{feZ(%2i3i6!ne?XORb@ih$TeCmTd6 zbYD58|4uDt+vxgyPfkOt%%}&%FEfavdF`dCh|pSldPn6uk3pce`17Rnn^)W~z;viu zBc-e^#L)pa#S_i=F?5uugC-sK2KRRf0%+%FtZ6w4TLt%fcKZrDlWEEy%Re~oCi!00 z$Qq~b8o0AT?_dXn9I`;`G*l+OMmns9U9T-(oCWn5nOvMqUh}`l+^2ZRR?lV3Rm=UA z^-HYE`87{-T_hJNk}A$ij$2%{Cs+eLusvRz9Z~xxQ76>LAG2|qi0G3kqcF%@AOPFv zLvCrhr*0qb0dt@Xe{?mzvygBi45$rP{z8-2F(`MK^0K(*Cw~1J2Qsp38@VUIqCzVg zSK>^avk8^)D+yYkBj^jC2xpLAbY6Wn^O+4`>U~K)G_BcbUh~@L>eZhEt)sh>|3cy; zO^EVav*A?7*KLz}UeTj^Vb^+VG%y%UhS%?W&~HU8m{7~G!@a#4Z*j{Oep@&oUZnbV{^6Y6OA{Kw%`S9T1V=w?uz`|1zZYu8t*+&oRR_9(wm7C$Wi^`OcR^ zUkscv--y1|?;$*|62L9CEM2!c+*JK@K##b7QHXqBZ(kr^5#Q3}ipd5ug0vpJI`MFF zrM(T>;57LRA|>Fuop zbQV39DX{WAn@jr&A1bm{X05Wd8$e}QY=pdjA2h>6*v=o|^B%_V(7Af7ANq{UEblUA@Of|#T6LfUW) zwk}?PYHq_;?`!OLSsLK05}>7TA{(YS+&B8}`wr=&3?P8c=eS#Q&~&5kw#VV1>NgA+ zNr1s+YGSgncI#r%e4lUCL7?lgY@A}9`HH;_HPqQb-QDH#o$Y6ZE1>dh&5dybdvBH- z$@40~bE!;-rS6t_K|4P|G~j9FM?0t2^G=s*{@9R0Gv8nO3W6e))=j>o=D4FY_;$}o zzKJf1^!;^{B!h1U%|Njkuyz2OkrTJv9l-ksQ-nN0j1za=8PmST4sz zCm~idZe<`;I2P)=d6*mN*s!SB96o^#^m+JQGOpoN9`W+`fc~K9|3b)}^3&0f1odEg zIyS*w6jt2Ssi-*s>3buABJze@60vQt{jB{`o+z*M3Io3&^k z*o6vS{oQwqeU`*;?1kNICAei@*IqofzM|E!hMd_&33J;IY!JGWV{J6@u5Z=nv_FnQ zl6~*`Nmd5yZkQmMX_tv5#=!aPoYT_8%bfs4sEtX#aJu5f{ca!FhHbvRspHiu`8c;I zMr+ZofwBJ%{T9*Ki_LD0)l_5O_V`ignBEGF=a+h|+z3)Sl5+d+m|;QpAAxu`(8&by z^sUgJAqJ^TN|KKE;T+HnCezaLT<G#v^<+TQ3VeJPr?dwI{K zRb$7uOY{aq50ivfqXHa?qNG2oLab38j3g(mgQ}d(5bC^-haE%TN=;QsqyDwMHIH=k0oMh9S zXgI3ckyQM3c6TjM*TEoZVmdasD)nF|Q6{uwz4U_!;&BDr_8IvR+IT+G#*93nciPf@ z&at1mQw%U}m(~0#jskpoS=PstQk;XHdp4}ijhVuFLO*J(#X6g>#G6fA`7P{5SOFk| z(M-8s)b}S|#xAE@RAJDMnCHF&KygoAqd;PruRPqeTSXnJ<9q}Z2%CVMKNx19w&4#* z7Q0urFx5~6nYk|tbJ)*Z1vri-2viaz^L9Mei|Y4f<>cHhmrY3s&k&E3MHVG|8N0+Mo*ai3b+Ex29(?b;8*g30+P}Yr@ z!qgg{#r|Z08-Q^JZ!nOX0&?hHZFo3tXTN^g+E!6lH3`ve7b)JcD#67=K|neu=Rs4Y z|4&L_ttzCFRf}_XkH~xruh`N3dg%TIbTAaFfeeY!pz%Jfrw#>|S>I{~@-puJcPv!# zccSgZ**mt0O7s$k$qcTAJ7`ngh7=h6ANi5L6QLCi`5uY7XGF*ZP3{kxq^4%Wdrd&7 z&2rObE{Vr&>*CU;AXfhM#89=t+poQ!$|rI28SlkRtmc{`t?j;J=OiR3$~ymidsic1 zXz)7jo#}ICRaMpXd;@O&hrFgwkbK7Xy1hSa1_owbw=x@Ik|TYOxtN@HysVoP)Wc$~ z?Pob1Izs=Ea0bsE>fHANHzE(kVx84196SG9^k0n3+RE=cJ5JiXN(c%3u--q@B=qTM zbLjkNQAXgzU@CMnhvzWL8PDbZx1x($&GKD%@l}+hZI7Zt{LRfVbJ?4ZH!KF6OH)m< zt)@6Mo;^7$HbLeFl=+c3v~rU+0>b{C4j2a)g^g!E{oYXYO&Z6s|SrP?9?=u_!#)GGImp>3K_swKx$Dbk*G9 z-@^>6v0*WbInbrE7KB%f>h~}-xuq%wY``Hj1 zd9?95UWoO2?vv|Qr0R;g_f@(6`beu!%KP)l?3Jg3_m=xnUOfZ(F{;&J&;m{v$6BKU zy1~(G_1_bM&0@%yNBggHj&$CuB~C{lUJkfJW)1(L#N&Er@tARcAF@a|y|w#;;x%)M z`+79iA|ex|l}~f?VH8I%8MWhUrXv&~%#Rb>wyxa--7oq{&V9aJiI8cPe0ap{cE0rwWcAs)ts?YcwS8xZL%PJS4acBAAuO|KgutUy=j#I?Onfhse3jV_i;fF7 zS(1i7`P0=+Rs4K&W&1|9JOk!}I#m`$T9=(ULf4J&cq3M$71l?ZvdmKo zWY`WPiyQ1Wc{UIwI2znmR_S4A6EUXHgE`S%Qt+_<B0?L!**v4f5$(La%Af zlX~Ei<0V1P9mDX4OePTj^{%f5wB`S3&w|^*?oxB4HN(f4cygLy z6DKmZ{~C{fR3w6J_h+EkV%bLk(j;*MmCkENA~W9^Hx?4s}Z zUCuBt%nUw(8FLl#eKjhVaBs6q$okSM`P@MfwxE|%f2YUBmf(9&A%uxNvAROqR4Bl@ zz>nXvgK76_R0$tIW$41g!pN#GePMS(JTc9N9rJNR!8OczWp*L^S1pv~wZ?r_D5W-; zA~a)g%dQIIDdM?mKJ=lg7AU;qkT8OcUXpqp$>tpUebgxITr64#`p6Xn1nYOpuPsLl zUDY|(O@mAf{!}LI3brg_>dZ8YIt&e-Exx6Ft)n+yEr8H%Ny0#7@TL6f%Jy3u?N%r* zqmV}rl{=X`q1;sQCe|hp)QBnY$Z$V1k+~!N^=7Y`(Ii_x>YSdPD7ZTrZ%~n`w_hBEbZa9(8W4wQD&ESE8j^?1*S8hn>#7-Z=fT` zqqgWekfPh&i4n0`T3Y>!QAAHgO2Nl*12`Q*?#u zFuuDMv2Nn!fB1Ajwq4`P3p;_v!Wnarf0L0~pMK)=nTl#V))5wgk!kYK8@YT0gYg8G zV3Z)p^)zJEv74{_CQ2jv-Gc*Iza*heG#9y(ek)A#7n`Br>a_6sj}T+9x-Hb?{r2iX z!nVcBe?u)5dZK%GY`kYTA$03-S>ZUC(X2q?zHr7mAao&+jt&k|qnFR2`xu4ftIHbfl1+S(M|fj2ZZ^(Fz*j4-&V7Uj80r#QWd^=79q=bmYC~Unka*is|5(oE zsZPo5#0VFM^-{^{tB%TETBjzDiVG|`8K)s_!OE17Gv17uDPfrS##OQCzN-K60dyM8 z&V?>J(x` zF%QsX)~-nTyOrP3&`4TiJoRDJce4xP>}0ZTZ@;mue#X1K40@1J8%lUgXn%ou*EisHd>q+pk8!V+o)pJ^ zxEhIYP?b8h(62AM{`HzV|D$es(Tj$gk)gii!$tqX5BFP;A->e>V?aV|;J>>pM|KN_B)A0qaqds9yfe)l_Usv`pLv>ARqv}D!hTwAVnTWU0Q>y{w2RUvB-D2y7_VaIK0$PZkO~eY|3~hQ7i*H`W#^Q zrvLW)dL;7F?eGQPxVm0=O!SjJ_}ZuOE+wKbYe(IW=(s-;bu*<^|7LLcQ{x`3+$aQQ z`+yK9AKCVkHjg1u*wziV+#cygGXuNj<+y~=*YB1hs8m$)t_z3XFG3_`So;%_^Do-T z;fzac_=0R71mU<2PFRN4kd}VE&y^}ZdBrhPqES5FC1?QNg-qIefvnJrWJCXu(Wiz& z*kCK+x&gT(W|wX-U^V(fEVG9rj7=~4V~6PW7dLx`-f0X?N)9sUn9Bb;&LZ)_GGxCY zR7i>{{W=9HjdZ&?O~2~asnf3+oWGsrYY651)%@`f7RNSVVOpg#D#q(pq?L+idB@#- zTM*qPqEX9j!8+YiZmd^QBzL-}%#n#Szz^Bi)Ylt(5jT*VoBwb6PC2W;b?Id!4L-!9 z+axo;^lW;ySk%4wyxgGx_GX_S>@ND}1M&&$CoQ++HXeeR1GOp5$~S{DDGddcfq3rs z-CcbSzgVsLZwM8WxTlHG0%h0oJ^hM2dOz7&@2^F_-b}OoK2*<%yEVK_TW-$UcvAP- ziS)#x2va&`IGREIQsx)(^Fy(o$D+%f7yGiu+rt2R>`A)q@cbXM6g@z?#3nOMuHiUs z^4Y`nmziDip3TG&tk~N%oq||_k!a%Ci|6GW3^D4e9#p_qh4Y14ek*_Y&PlM}^uemu z19qsq=vF=OtGKU_1-?_~Mar(%8tz;gcvxM9GN{VPzZGCT6_&>HJpkIBp5OYj|8#1E zZJ2m5SSq3xGx`NDi-3H4=CuGpTATmQ7t-LYTJ78L=fi4U<6+;6M-eptp|q~U&k(>& zUOcG`zLcbThpX!Hl*VEM6&&^KaoJtYFYWaQ%yZ4){7>{bP#)>ZGvMJn3=b-noZ<)8 zh*0Q-<>dsUg6s2LD3()psO;A46r-|G_iTFhtv^`bxE)k#`3t%;Xm4lj)HCiSIAWd< z#|@Nm#%uAlaRZ;rXDheMs*u?%BT!MN# z7XYtGC+EM$8-M5UcTSjPW}mj1opU6nOa!eX8a)_3EPlxJ`18c3K(qCLi1l;-Nw}C` zeHQ!p^7d1<1Uz<|H*vBAhH`x|^Ffu?3%s@Y$UYW1=S>@&Dd9B#L=P@mlMc$AIgJ3} zrHBzi*$O-+f=4j6>B!3QIjt{W6S6<|7XN4KQC6F4G*X}swQq&D&zq+nZF;@W*X@LR zM)_=RzA)SG%3O{m`_uB!?}Le`baus4Xjy49pb~E#@_O|!kI~3tHsslVavrX-V$?P< zb|Gc{Yw(;kVO+p)P1I(B%DkO`k$^uOGdGPU2V_mEW^po+@Pkr5OInF8Gb!V>`sJaj z-{{9T^Kg0R&XGq)$y?QUnAqM&_HS$o7fZldmD94Z#(MuXQ6*}(+ES5gQG$csBgyjO z<#Czy;}8ZsVh|+1d2yv$#2exIOgR!LU^g}V9s7y~VR7x7Q*jL+b7w*7B{MD$S|B!7 zrX4GoWOYDn+rbnh5{u_`_zV()R;Q+t@$u;_tbu!)0&Jq=2IVz1%eqerfx_5Ht=6X3 zf2GgCP*kO$fDfd?k!;?=@6h=46^qsf7B!DO-T3T<9>M)m4;fwz|KNW3WG|Tdyq!eb zWOg+h7zg(JoS_DaN<~pI&!wTxZ}4FzC+s|Nvglg;1I|y}yyvHb-71{#U-4KBxFGWu zrrg(EVBPqOS#ul9mKlV-3Su5w)#@G}T{L-j#})TVBbO$U_KgRo^#4iS!&Q|f@TH)b zT_&mabZ#W+$EaBwNUmc&kc{)s_2dt+wTf)u^3Xf(+1xCYPXeyg9`p%zqyn9~oBFkn z6rB3ohD#egf?Q+QmN42))*!#vDTBZMTJdgAQuZ9I27vnsa9EFajh{{SC6`}jKR4h#aX@i zlfi-X{j=hb#HLf?tkqUh10wgS-zr0)^)?M8tpR@1&RKy_o#(G?edBR`Mq0FHHZ_Ed zR(ubRe)iSS`ko$nx|M)yp}527duK8I`?SdWMr4IxzLYpy-=V+LL&>n=HJh>K`I6Ny z=8c($X04rBV+Tz~*l`_qFif1P`I1cm{Q6jQx%w3b&Px!>?+nBw@{BG!cU;Xdg zL}mf=JX9cE4%ST7hWv?xp5;ZeO1sXz0c0T|Mmcni z!8WMpJ@>uR< z2i(6#*^mxQO5i*_-@}}fef7{v5 z|HS2+@1CLpnXV|exA-m|4FHntPgsyqgBUVpwJyC6g5T~pX>*ky)C=70;Fq1_b%ir^ifw<- zp#~A(JRfnYF2=@Potwd)oN34m&%?w>USUKrLvhH@BK0Py?|Epl3JJY`Mw9c#(}xQU zqA~c1hi%h}sB6?twJ22UR!prea;cwaX=i0)iT&l};&I+}P+pW)fmTm89sf)1=YBMb zZvwM=m|{rELV7xqzQK%9;mLR~_7(doD%eZ+Wa)KF{~8GXnF;>ZuU$R3KrsMbboNAr zqu!DIl;Q@iweBE~{}+M2>OJ%dZMx=IPslfz z@dw=J3n_BV$+R#^hOhOKd5x#Rkjm=@KAVwd*UzE30_e6fe@s|!K~`E4N+)A7xcLEk zwC)v`zNR-ELe1jK$7Vf0ok*<g1zz4e0(GexnZzf@a@-(O+K5`DSkNF7hJ&Rpq8cC=QQfh zoFVNw&dt+@jg_2pn1`OfMZ8TV_s}l~eEk=%`FPCF31@%JGQO<}XqI|}6bc|Pnapb* ze*5yh5?Z<@fgQ4w)$y;NCk$A#?v(KKPWMUj5F1-ow8Ha$;-jNat5l;JyYJNl6xGjX zSGGamf2*;dHa4Ur00#rWV=>sI9u03ev+dyX|M1MTz2GneQeyLW4_x4IL`~{H`s8MA zFhQm)PhVZ)U3c$}2Uqg-i~86R#kD;%3z+F;n6NAz{myswo@Vw(j9u}e$VRTK`#_o) zY0d<_YIgVDvRD6L%lPu!k&i~!YoLiReDMaf181b0r;AOJyE9l&?Wn^{s>yWEgettt zD+Q_6A8evPOpC*>%2vTAi+K&5X7u-|X_>Z6-KY?D?i#i`mN#w5Qa7bHF9l^jGzEHo zP!S&!6O)`=)I_}UpJ-Wv+fo}(Rx=7%$;dH$o$;`a(9WNgK!dXsjFLO3+2RB?0D?*Y z`|_%YvAjBPN{l2fywg@CHzLaghOe~%&@y*3FSdL=T!O1kB*Gv+7O7*&gJZD1m*M|^ zNC*%rPz-_>&x9NCh+%gX4}|b;2un?U!(zYbt^j=0CkEc*3sSvu^0m1!I`pXUW95yf z(L6R$GHe`jD%Yy-@eAU7^5suq^!P{VQ+RC{ajd<6r%Q*}&4yh;)@(pgExXq47S&1( zV*eb)ooXZ0t3x#h#?X=K2ZjDovY~H3!7d|<=-*w7VO!d=w*#xnTW#~s96~D&SF`ht z$hUW7!w90Zidw1Sk)M^@+L_d5P`%kW;DQ1j;?G4$gwvyuX>8AZXrJW1V*cQ_>%0eG zI5=jjfZ?d04}I)?tYMP?BWjwwjzjLZ@ZEXRYcngjqkP! z5{~)nNFfjOj;JzgJyXGzUD1X@sl*X44%wLl58@6K#fS!MBtOMm2gR=oZS3>{XBrH57S(r7#_vR* z@EY=3^(yWVK96JN4V3d|4N&GGkl!kvoq{G*%JHj9 zFRx{E-yG-0>&4m&={Pz!09}Exbeb$|+!|}mH^wT_GVscB*TqSZjF9qtUoa`1{r$Xt z;&Zj+%&vxShxIz&BHbzBUiW^g2iMw2+w)@Rr;JZTT-HYukO#doBN?FY3o>ty>je#* zZjYsST${@Vkz7ayZVY4=Ug}`nNK*V~A}k?%P;yX-_k2N($F5y|&rX8NEWInQLfkPdR-D3@drN2`ty1ub~5P ze2;dwv6++?zc#mWe4gs=T(0t;t*!V#0#;pscm+5y92{uMlDYVz=L3{yeyy}izvg^) zFpA#XfN_br#WKUDzM^>GvyTA)Y?~&qEfjOYNHqp(y+a z4S?!Ynm5}1*#K@=50I7osf`HGl&FiMkpVfjYz{vd(!GHCGowMoyX)GTPXC-!dx?5t znJ-B{K4SR3f(KA5o$9n%5RvEtdwKzq$gaIS9G%HRIu|5b>C#cbBU@L&2bi5!rJy2b zYB=Ngi7gUmxlcojW%<}>?-1J;%?vY(+=qJd zYpJP;vodLxd@F)$Wd4`jf|xJ2=9kMDotyBz3Qm=4*}0CX1ek`A0Vms?Es7r*c&$z0 z>wZZZy9HSI-+0WSwmx5W9Gh4MiUxVF^(H@aSj~NP-&~~ZQo!ZN#mm??!@w`@@45a& zK&?G~ny+@9y^V6OiSY0W|!=>c!8AJAaRyfmFir^-i(sHF&5cQ3Vwon_O~g(VT_aVKYp( z#?@v}-cy0t^DJuULM;WhKX^GXi`$5%xrAS8Ctd2I%l^9D7GEP=drp%jxt=S#Zl!Y^ zNScOmWj>rLMW^O$VgFnQVsx|49#qmKu&=pL~h5 zh+uv%CnF)U@ztO7g0GBjiolV{_vgF>qfOJ@zJp$|)pW()i@*&45&|e4As|;OD5$?r zC=OTm>|?HG(ya+=s>$eTwB4&rvgn%9zTESiGA-U+T;1r!V;pr#Vx&0L+cY#@DNs14 zHW%fbOP=CL{lG{Nen{luG{=8NL zC3gb=Jpgc!n}>%7(0b_%@yv25&$izfQD?v-nBla%9MDR)f4>hHQ7~fsxBGgWaooF> zI%V~ilz1V+)=anDY@lahT3E$xFF9Fvi7V<`N4SXXQ3Ot9@pezRo#T)a%5CdOWoKMUhe!yNQuOZ zm7_*p1BNS+cFAxV$m}B58FB~2fW|jdJS9cjJ3bA~M`skwkLDbNiw+%VHM8KuMbbrn zJUwQ9L@6KuJ^b7HaDUNEF90&4sVWBN>(*i?)mGT7N=+{QC~i6>7GNXseoeaHo8yrB-X?6V58IKS0ovH}>hm98YFLJ~6_ zC)h^TU*Ck_?+e)-ht7Zh(}l(u%c@!xq}L<|IVa^k`l_*C_IrNS6E8ZHtvZNRH8ha9 zP0UnUL0DfzvMS)XX9|y)(*pNJP!$@agbx4cjdYVv3G5jRSsVk%X@D2IKG|(QD_NjE z(pbP+aeFkv?AJa*d3WkZLVHDw@Q@-v*SquY3;|fb{QBL=oxHB zm-3l?-&Kxwm3RW96w+&A%fj#VM*zl|g8npuw|L0Z{&+ijrXES+dK z#-r}W%WcOlYWb1A*CsTLXGY-hgQ>3lh+=C_!35-7bn<;hBpLtd?mGAs%1UobKoE-? z=@Tf6*3;Q>y2`}j=yBTGWz%@}-To(#j$QuayE8RaZaGu->YYhuR+e&n|6Av+vE!aU zh#tiFGgBW|XaiK4y)AEshut`>dXwKQ59r*S#TdAayzl+AEc1KX61Td+0n6q65f2%L zNCTS9hou%wLYOyqfml=+PMA&2}93Nr#?7Vqv=c9N&kOcOaCB%<{K}Ok@NjN@0H8_btS~ z;SpH(>Z}Y5pQlTf!IQqfJ9wCPG4;$-kY(;m_ij32VJk}D+MlWS90U*aayj9+5#VB| zRG&U0#3dqPtkxyJxj0Ax_!9pJpj+0*3;1tZ%8C@NF z2Dz7fo_M;wy~NjB!nUmK$J^A8=74QZrtia5VuOJ4%0YBEFXp3N?L13I29I}vH}Ut+ zv(&oDJV^kIb#K#kG*BN(P(MCDk*Azx9n1hA@gapO3f8q$V2YQ1I#}Mj@;yF&(Zj4! zu0q?XTpciBxZ!rvea$Yij-T~g4O8nqCqrewM&Q8vqL#8Kz1EE{!}!IFn(dZ$G1Xb! zt5VO0fD$=6Yr}A(+l54+2U+=O7MVlack$aVZF@9C^+^@VOo{v71&|D&974=i=cS+O z*F{{>R8&;pnkUt|*g*5-)vH&5PweDs?Iv!X%QmKUoxL4V_tsJGCtaJqR&oSTlwTMgKI^$2SZW!nx!*#c0S{m zc+AIGHIJSdoB?rGfZ6uL-rjDu-*>M}_)LL@iuqzD%EvFzg4)P1wr^EszM^N9Vy}&L zWOUEo*oaB1f)3gfQG0AA{@>R#d_~=kSODqY=V0Cqz0o_%=yL!&cOW2m@s!nC&SYt1`K7ZJ^;R^ zZ68M^hl>1lK&krpR=o@?9S|%R#H%NFU+d)p^2om8)#=thkJ%N}t#~l&@u!G&O_fUn z9#Ne|Le)i;%EX>tqV~ohxo6Voqd6wa$R-S7HSbqE*Nk<29ZRmRk_lGg#vSVq`B!U2 zmEaIxL7+e0`UAQ7;l3GKxNTo26Bb5Cj!fMnnl5n*kuCr}s<1pBv>LfYDMezPMz*gK zldxc|W*`kIB5<0e1SB6p>U8ZYd9%4}_1ZGEgxYUV=8Dcc4kMNOkL6F(Y-)PgTu+5S zehim`#uxH&$JjFy6i;K7bq_1KxvB#`1$_GPMk-hxV@3UC`fLoKAiUqo!x6py-a>VA zyG6?LgvZNLoia_0DAftv~IPcn7^p~7~e3M+!Z?_m|p2*cX9VqzACsa)o8w4^*8@#ioG4!TWo;Uhf z`;KT%jMY{(V0Xt*tX$YOhPwwY-jXpCZ4G;m_lvo?fTy0 z0(lzsYs357APZg^KfZ)vxzkG8tuQ84?`8G+z|bd#AsFh2?FDbdE14hPTt|kf(R!aE zJ>v70vyJO!7H36pL5Nn{#bklJHCJDzn4j%5eu?+3f~fJwywrF%o~%p1`>)YI0jnwg z>_W8ds;Sd4zZGXt`)S@@e$%JTh~z^NB1`$ZFK~{qP3}GMc|DsG{pv*%EMPQ4Dl{l4 z2qZEQdboYUMhK-|ua58V@0-Gf;iW&T_F#b&y1ToiOH$s+diGj-@AsT<2fyKcU(9RFF~^u=#_x~N-t(E!*68jp!g$-| zG9Dn1u?r_2_MdpJhwy+C<&7g54(U86B0ik+fnAO`qHvrX#=q1+77?GrV5lfxMbvN; ztJv-VXPwf9<+v#vlqDH;(pyApo-TaQkKs=nWa=kSYOu@0t@&G(T5I8-5?OB6HeSO{ zXm?q5xjsY_1^5@N8T)6&Mc57Bea);fu_(31?5#4jaDg(NM)G&w#&9oj@S)6-ujt6u75r6PpMRHb5oLG? zla@q8zX6 zoXNchK(AJ>D~<)R#eOJL7E75-z?$(%{-^{a0ZF|eHw>XpWq)VXjx@J!1Aht}Lq zFoe^I{n&`tFn7ixWEXndrf4f2WgYFQ61g7LC

    VjYe1C9X`K&O+!z=znhs9byBf_ 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 literal 0 HcmV?d00001 From df8c6a7df60d790d55e7d3ceb8fed2a2d9ce4cce Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 9 Dec 2022 22:49:17 +0800 Subject: [PATCH 0140/1057] Add solution and test-cases for problem 1026 --- .../README.md | 33 +++++----- .../Solution.go | 49 ++++++++++++++- .../Solution_test.go | 59 +++++++++++++++--- .../tmp-tree-1.jpg | Bin 0 -> 9640 bytes .../tmp-tree.jpg | Bin 0 -> 20693 bytes 5 files changed, 117 insertions(+), 24 deletions(-) create mode 100644 leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/tmp-tree-1.jpg create mode 100644 leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/tmp-tree.jpg diff --git a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/README.md b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/README.md index c9b5c9d4e..2116999ea 100644 --- a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/README.md +++ b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/README.md @@ -1,28 +1,31 @@ # [1026.Maximum Difference Between Node and Ancestor][title] -> [!WARNING|style:flat] -> 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, find the maximum value `v` for which there exist **different** nodes `a` and `b` where `v = |a.val - b.val|` and `a` is an ancestor of `b`. + +A node `a` is an ancestor of `b` if either: any child of `a` is equal to `b` any child of `a` is an ancestor of `b`. -**Example 1:** +**Example 1:** +![example1](./tmp-tree.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [8,3,10,1,6,null,14,null,null,4,7,13] +Output: 7 +Explanation: We have various ancestor-node differences, some of which are given below : +|8 - 3| = 5 +|3 - 7| = 4 +|8 - 1| = 7 +|10 - 13| = 3 +Among all possible differences, the maximum value of 7 is obtained by |8 - 1| = 7. ``` -## 题意 -> ... - -## 题解 +**Example 2:** +![example2](./tmp-tree-1.jpg) -### 思路1 -> ... -Maximum Difference Between Node and Ancestor -```go ``` - +Input: root = [1,null,2,null,0,3] +Output: 3 +``` ## 结语 diff --git a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution.go b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution.go index d115ccf5e..639528bbb 100644 --- a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution.go +++ b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + if root == nil { + return 0 + } + ans := -1 + maxAncestorDiff1026(root, &ans) + return ans +} + +func check1026(ans *int, others []int) (int, int) { + root, m, n := others[0], others[0], others[0] + for idx := 1; idx < len(others); idx++ { + diff := others[idx] - root + if diff < 0 { + diff = -diff + } + if *ans == -1 || diff > *ans { + *ans = diff + } + if others[idx] > m { + m = others[idx] + } + if others[idx] < n { + n = others[idx] + } + } + return m, n +} +func maxAncestorDiff1026(root *TreeNode, ans *int) (int, int) { + other := []int{root.Val} + if root.Left != nil { + + leftMax, leftMin := maxAncestorDiff1026(root.Left, ans) + other = append(other, leftMax, leftMin) + } + + if root.Right != nil { + rightMax, rightMin := maxAncestorDiff1026(root.Right, ans) + other = append(other, rightMax, rightMin) + } + + return check1026(ans, other) } diff --git a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution_test.go b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution_test.go index 14ff50eb4..c2fafbb81 100644 --- a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution_test.go +++ b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/Solution_test.go @@ -10,12 +10,57 @@ 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: 8, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{ + Val: 6, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 7}, + }, + }, + Right: &TreeNode{ + Val: 10, + Right: &TreeNode{ + Val: 14, + Left: &TreeNode{ + Val: 13, + }, + }, + }, + }, 7}, + {"TestCase2", &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 3, + }, + }, + }, + }, 3}, + {"TestCase3", &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 0, + Right: &TreeNode{ + Val: 4, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 1, + }, + }, + }, + }, + }, 4}, } // 开始测试 @@ -30,10 +75,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/tmp-tree-1.jpg b/leetcode/1001-1100/1026.Maximum-Difference-Between-Node-and-Ancestor/tmp-tree-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85104e117a6cc28f429b289c534ee27dd7bd8ec7 GIT binary patch literal 9640 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 Date: Sat, 10 Dec 2022 14:01:24 +0800 Subject: [PATCH 0141/1057] Add solution and test-cases for problem 1339 --- .../README.md | 31 ++++++------ .../Solution.go | 43 ++++++++++++++++- .../Solution_test.go | 45 +++++++++++++++--- .../sample_1_1699.png | Bin 0 -> 16286 bytes .../sample_2_1699.png | Bin 0 -> 17201 bytes 5 files changed, 95 insertions(+), 24 deletions(-) create mode 100644 leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/sample_1_1699.png create mode 100644 leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/sample_2_1699.png diff --git a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/README.md b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/README.md index 929008fc1..ea04ff88f 100644 --- a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/README.md +++ b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/README.md @@ -1,28 +1,29 @@ # [1339.Maximum Product of Splitted 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, split the binary tree into two subtrees by removing one edge such that the product of the sums of the subtrees is maximized. + +Return the maximum product of the sums of the two subtrees. Since the answer may be too large, return it **modulo** 109 + 7. + +**Note** that you need to maximize the answer before taking the mod and not after taking it. -**Example 1:** +**Example 1:** +![example1](./sample_1_1699.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,4,5,6] +Output: 110 +Explanation: Remove the red edge and get 2 binary trees with sum 11 and 10. Their product is 110 (11*10) ``` -## 题意 -> ... +**Example 2:** +![example2](./sample_2_1699.png) -## 题解 - -### 思路1 -> ... -Maximum Product of Splitted Binary Tree -```go ``` - +Input: root = [1,null,2,3,4,null,null,5,6] +Output: 90 +Explanation: Remove the red edge and get 2 binary trees with sum 15 and 6.Their product is 90 (15*6) +``` ## 结语 diff --git a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution.go b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution.go index d115ccf5e..ae2781d7a 100644 --- a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution.go +++ b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +const mod1339 = 1000000007 + +func Solution(root *TreeNode) int { + sum := treeSum(root) + ans := -1 + splitTree(root, sum, &ans) + return ans % mod1339 +} + +func treeSum(root *TreeNode) int { + if root == nil { + return 0 + } + + left := treeSum(root.Left) + right := treeSum(root.Right) + root.Val += left + right + return root.Val +} + +func splitTree(root *TreeNode, sum int, ans *int) { + if root == nil { + return + } + if root.Left != nil { + splitTree(root.Left, sum, ans) + } + + if root.Right != nil { + splitTree(root.Right, sum, ans) + } + diff := sum - root.Val + s := diff * root.Val + if *ans == -1 || s > *ans { + *ans = s + } } diff --git a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution_test.go b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution_test.go index 14ff50eb4..c30b8ba70 100644 --- a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution_test.go +++ b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/Solution_test.go @@ -10,12 +10,43 @@ 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, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + }, + Right: &TreeNode{ + Val: 5, + }, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + }, + }, 110}, + {"TestCase2", &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + }, + Right: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 5, + }, + Right: &TreeNode{ + Val: 6, + }, + }, + }, + }, 90}, } // 开始测试 @@ -30,10 +61,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/sample_1_1699.png b/leetcode/1301-1400/1339.Maximum-Product-of-Splitted-Binary-Tree/sample_1_1699.png new file mode 100644 index 0000000000000000000000000000000000000000..04f0d2ec0467e7be61f73a33451cc760cfe87918 GIT binary patch literal 16286 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 RU3hDRlAOA1q4d)?{|BGP*i`@k literal 0 HcmV?d00001 From bebcae11aa82c8fdc71231be6c36ac096799e3b2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 11 Dec 2022 14:06:53 +0800 Subject: [PATCH 0142/1057] Add solution and test-cases for problem 124 --- .../README.md | 33 ++++++++++++ .../Solution.go | 51 ++++++++++++++++++ .../Solution_test.go | 1 + .../exx1.jpg | Bin 0 -> 6990 bytes .../exx2.jpg | Bin 0 -> 13062 bytes 5 files changed, 85 insertions(+) create mode 100644 leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/README.md create mode 100644 leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/exx1.jpg create mode 100644 leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/exx2.jpg diff --git a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/README.md b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/README.md new file mode 100644 index 000000000..adc7c83e3 --- /dev/null +++ b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/README.md @@ -0,0 +1,33 @@ +# [124.Binary Tree Maximum Path Sum][title] + +## Description +A **path** in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence **at most once**. Note that the path does not need to pass through the root. + +The **path sum** of a path is the sum of the node's values in the path. + +Given the `root` of a binary tree, return the maximum **path sum** of any **non-empty** path. + +**Example 1:** +![example1](./exx1.jpg) + +``` +Input: root = [1,2,3] +Output: 6 +Explanation: The optimal path is 2 -> 1 -> 3 with a path sum of 2 + 1 + 3 = 6. +``` + +**Example 2:** +![example2](./exx2.jpg) + +``` +Input: root = [-10,9,20,null,null,15,7] +Output: 42 +Explanation: The optimal path is 15 -> 20 -> 7 with a path sum of 15 + 20 + 7 = 42. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/binary-tree-maximum-path-sum +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution.go b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution.go index 103b1afe1..6ef8f0860 100644 --- a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution.go +++ b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution.go @@ -29,3 +29,54 @@ func max(x, y int) int { } return y } + +func maxPathSum_2(root *TreeNode) int { + ans := 0 + ansInit := false + maxPathSum124(root, &ans, &ansInit) + return ans +} +func maxPathSum124(root *TreeNode, ans *int, ansInit *bool) (int, int) { + if root == nil { + return 0, 0 + } + + ll, lr := maxPathSum124(root.Left, ans, ansInit) + rl, rr := maxPathSum124(root.Right, ans, ansInit) + lmax := ll + if lr > lmax { + lmax = lr + } + + rmax := rr + if rl > rmax { + rmax = rl + } + + returnL, returnR := root.Val, root.Val + l := lmax + root.Val + r := rmax + root.Val + if !*ansInit || l > *ans { + *ans = l + *ansInit = true + } + if !*ansInit || r > *ans { + *ans = r + *ansInit = true + } + if r := l + rmax; !*ansInit || r > *ans { + *ans = r + *ansInit = true + } + if !*ansInit || root.Val > *ans { + *ans = root.Val + *ansInit = true + } + if l > root.Val { + returnL = l + } + if r > root.Val { + returnR = r + } + return returnL, returnR +} diff --git a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution_test.go b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution_test.go index 4a5b2b76a..63ed6d830 100644 --- a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution_test.go +++ b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/Solution_test.go @@ -15,6 +15,7 @@ type SolutionFuncType func(node *TreeNode) int var SolutionFuncList = []SolutionFuncType{ maxPathSum_1, + maxPathSum_2, } // Test case info struct diff --git a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/exx1.jpg b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/exx1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38574c4e9b90ebe51706d79243c8a6fcdd88f7e2 GIT binary patch literal 6990 zcmb7p2UJttwr)a4N{-UPBKMs-kp6 z0-^URL69El56^q=+;QGL_g>%JW6ZI~+)Uf*PFyYk=(HYaJ^%oL008jn z09;N3Q~|_9zvZ_kz7i5LlHWo>Mn+0TNpbBOB?TqrHEIy`H7Z&vN=h1f8d?w?9X;JO z>gx>G=@_og>3%x_{vJt8LUA>aj*61%%KHB)mmL6l3IG~-pBTssAfg8n(*rL*1Gugp zk{Cb?yb{3w5i)WL5>iTHAknp}>#B4BATbG$h=iDoh>V=_>J}h?h?sSxg zJIpFJj7%(i`ks_`Z%EvK<`vEg=2tZ^jF3~a_4ZH7t**Ut!uTJ~|8J1rR{DR2{HJva zKuvrVfS#BhpbR*K($mq?1OJl>Wq>j%>J=BKCaJS)&k-7>DjYeIHID#@F@xTq&x1#W z+8*PUjIdId6ZEuDVbfZJ)2v>cIsd|mTE*d*VxZSVn;LUE(&S;Co2j6=dC2}qHYgD{ zC3!)m@N|NJAy0$CE7xFZ%B0LKJ-%^TS>I*8Cugr* zCp7I}R6;z7M7@>{h)(Bu$DgMw)E4W+Dw|e;oect6!jWT3H^EybJH<3*7TKiR=N> zW$^a4%DIRTv|Q!nrRQ0}4SgRpPNSOo@Zs03xAY_DH5C$CEfpT-3=TL6PNG6;?y0Gf zsQrmDnm0L(tyTB=`M1N-Bg^3D!meYoQ*-N(Rij-}Wmsta)G=|-aTJr6NYOaE`X%76 zjehIVpyEmet66Ik)}svhTLtNz{&=i~9QVD5u?>Gs{e#o|I~A_1yC|Q7OMpw;V;29m znhlvXW1aP6?WV*;NavQ+xF@Ms|d^S*Ue%uy>m8E9GU=1!cv=NJLx7_ig^Y zL3t#=xUBciIW}#r5oZqk=~9>TRuQ7cBCTO|l;+);#oD7NoMPl6{CINg33{N0c1k3B zMB67mYwy{vEv=6Oe*F5#p_73bM$7rcv>0~NW%Q69BV-$}T4@_i>vTe=VG94{G-{-d zEhu9uev3U53~76k2TuTZGktQ9$(c|DO^~p?`%ggnci_6RJr`@Sx>I^iRWEQb{4CQ9 z+y6S})-C)r_^wt+*b(R?t-?6Lkj*PIxGw>6X%|-uOQo}AwpfHYc5`dYlavXaVTO6DSIZk;Fywh2#&2J_SnYx; z+7M>%L3!M8uIW#mzlm^|ttdhLU3&=#=;XWv7@Td6E4B27O<`QeQ-R0ZKgxeOM@e&8 zYP$Hp`&9EF0`#IsVM>qC%W;(Yp~?j^Sn1JBOOEVZG~1nal|sd5Tg2GJSJ!4k5RzUY z4sSS@czJkviT*%|Nqt>+t(nHV5#nA-k`f355- z*&aK-=dw#YZKy88@%L?BNO3;5bWW&;22akcOnyD;MW@gX)F%F;bAx*4dde|g*nT-$ zPhaRzo3G6cGS>kBFj-A}uVw9%V2f`psD*WXm^3^oYO`HL6*MUfgJC! z9{e&x!Y0S87pHW=%hnhiErPuvu$&v++n{51A(EObaUth~|7a76p9teF!nd_!=ZkyE zCpR!86R7ed>a;^u4#i8rT1q#!6`gav;UW1bx^ZKO{dvDgS=wSqQwTJgwLzw;lW zlAfUR*8?Sko}VdZ$_4>|BvQP1>1#tZbR=WllyfaKC5fAyvr|;C4UJYEx~|;;At8>i z6ppU7?C^J5VkyR$^z9+GbBaSys8Lq?&>KIimk+kYs+aC$Qy?=0uk&XG`s;27-=niI z1K+$}zp2zZuGBT3=}YWd*>UjsIvO>I%9O}$v<_4JV(1Uo5P5w}uM5eZ@o%@8EFXLA zhtqskWws%To}w_<)7I3adKN{IAq%_F6~^{WDU2%PpYQzVNp009Wg0OtXpfr@f>p%X z{8DzcIa5tuHdL6OxYl=HbJxjkg}ISodIkt)ZX%TCVp2ECcH!Htaj439@~v{^x7Foo z%%`U*4<7>{q9R#|Yl(39D?r3r>!12u49flQD}xx#-m!g`E7Mytb-#SHx#$ii7gd9@ z|3XbK`Hz|)3Ebx=mwR5(fP+}3I~X1uVo7TvZ+~4rYd+G}@Bb0-+9AItS2yS%M zg?(4e6Z4xPOB~@yO2!S?I92E@XlbU7;KR$jOcXuDjo8W1{MCI8%n{&5A`|o znh;vzDzWqL0o~kQVxwe5cNe4Q%}v;7!bi6-wKO=RdeMsR!$>aMlBTHaXC*By9-$Af zd3JL{=0LCRV$W}{_)fM8>T?>eFixVrxjdb|#p`g&!eFBq<7lH8t)bZTZl*b@XJwDz z^qB+Zi>Ll z0e%WJ)zJJ6n}~5DI6Mp-F%CI2GBIeC3K0(;ulB{A{+`=?X{qE-^Pygj_zv=`xlQK4 zg4{iM=q$$n)Tg4j(Z3K)W49B$wu#TCO%cW+U2d((B4@$$2Xjx`h)=Vw2GMP2k3i3r z@RJn(IT7rYbf0a3+=qXE*~XN zDN&7;VL zQ2^lJGrYAwi--mhTi1a}z{2@Vh8nBmBc1((RjCS_9vkZj4c66p{laHlP>Z_{qLy=b z;EQJ}io#KRIn5+XjjvnAh6BUi1D4EA&{2>^{?fpX@4D zydRwY*4Pp9+R3r<7%JKB(6g@<6@V7e&q~~0KSmdp^+bK1TcFsd-GZAx_u0i>FpM0E z_H99}E#Ek>@|__P{%TS9+&Ie*zE1TD!gw!ynn8~^yw{Vn&$aaMK|8h)+HM6?bW7{C zZIFpsc;U6db#FV(B*!ROA$*2#U2pS8LC=4=gI)V$RG;GL^ev@)g@3gY3NaIC?#QDt z?$2^!QWCA_VdeSY9Og7#6aEVn$J4@T<1O|V;6Ef9#oXOT}HCy;3ESIC>qOqrm`EW8y96LJPcq|R>i!+*=WqXhjQf;1`DVFZoCanFxCB@hcq(UV z?Wjh6{NJ9lSU!p5Bp<%Y+|o%~L}6}?8%-X%q79+mgKi_39A>ok$Aeeqo8KJK{9k)BEolf`Ss2{>FdrbchM` z{O&$9!!zbsD^R;B;OOlPmB7)q=NLL1=GRQ~LscEB=QaEtC5`h&W)ST{>q#?Xd+S`d z!f*8Sq~@b(CshZVWo6#|1>khyH+$VKRi+CoLw*=&Pf@{ZfTkEv@;$H=isw2&ilEba zcXl_k_2Hvnm9dX++_G|S@>^QOgNnLKX5?Hk;YCRdH#p4J8wR_Z2O_ld7)Nuke3kHc z?F0a1>uz7wWjm0#;? zU33}Exq0ZTt%ro~HNDR%x&@|al-52>5UBqM?-rMoG50luFO+{Mw%gH~$5q;hdYs3u z^L%Rc@G*T>nXQ}W>&HThU34rjYPAngwM%0UvDMUBBCzttgy9P%TRRd}k3B@a6F_5A z4z^D-9ZYQD#AZ;c>gIY9_YcTh(>DrX!L&sp?kSuM8Q=RKCW`O`3gz}-$Wl%qzWz1x z?qR=Vk-loux;ORK7qL3WitO zz@~AQ&vn8t*KVw3{LXvt#R|-*4n=Y&Nd=F*0P+&R*r-s~wBWa=2o=R$ER_#iDy*@d zzhSX9)tdH2N;fnOH5n_a=uORU`L*5KgV?r* z(Bo7?xs~K?J1~*vL495hm|;MH`is=IgnOq)94S*;uk*_){cppc`CBr^Ul=>z2{5mWrHAP=LYjiNu1Op&!6**?&9v;j~FXR z#NC}{{aZbp&;4sX`{1qFtuOpqfTD_7LH1F40W0nhUG7JLB$4+HR;y}fh3ZzmPb2J- z=WoB{+h$uAE+x?nt$zRt25&dKMFF^LX( zmZFL0CY_Y;1|VX@ToUWIMAoBaB@zQv@`jBAKn7-cG9Nt$zOACCh(qg!XKBDAK^tcQ z=7Lc_%ixX5k790zF5-v%I*+4WG6i!-EH?fs0 zT=ATHwz^8PX}>A^1`LrOD3VBPi6?(qXOi+RchzNc9vLH zF_XTuuyq5;ei0Wt8bzt@#y!;prv(z`%AE%Eh`IEGUwJtHYxoKYZA5GitIr-r!&1Rg z5T5JZB*w)Zjb9(|W9U_^R87m7{y7;P^ zTbzp3u#of4Sqtvvhe?vYImvPCK0$A|%jO^GiQ>Rax{TVSFab5rTZv)ZVC4rvKlr_vettDe>cIU9*ckoO`t&J59=bUUEbt)!F?-=JY9 z6Y{PgdN~f^Qkol~C2f@P_tek9S4r(yJCT)!>_8q`&@ILGiHx}Wo4Uomp?bkG-Ij4K zXVRzl&oZT2=0o})no;ZbsOcnsSpE_a`bNi=a{C8xfdH~6=K<&mu9+mk`%7L&S6X^U z`%FiFf8CntjNDWgJy|t(L$bjYcN@@7(|jNV)Klr}E-Rhm9!EAy`4}5prX_OLrMyIn ziSbS1N0IKF0r(TP^}yrfM7`tp>y`1A{8GUpqf&`z=b)Hb#_ATY@#@ZK$#V*@c+KLR z+bA=Yy6@4ZY((rdRMb+ZXfo*mcD?bU<9g&-zg-iTZH%3Xg>J&F#+vMYb0v(xs~BKn zkF6v3%C}fe^L&41e{=mT{l$7O!xe+JO@=8-TDz4#tg^>Wj8e*A*+ZRK4|6{y_)9U; z_TrN2vM-v8Rl_TFuDns2oI?O8$VavRxOqko2wNqa4T96m%VP;;wWSiGHT&dGQ^NvA zQyRYBj>!s5)0iU;Kk@jDamTsbnn9H}*n?Kw)+gZ*L!DtV!Hl5+znQl9d})cL<`K@P zoE316K<~zVF^``#9#>R6Ze3rW6nx#-7|QY2r%rIP#==Q6?L*EU!+;r6$cUQ0VwtggAYE4oSp`|psH{426hYBdWZn`WKO1`-~ybn%l?IC zsfs8>&98+C>vDdzdABBy9c+$NV4Z^<^llYRz-hBW)OJGM#$7|}uo_C@NiB7fXH&sJ z1kh*C0dnSgn8F-*#z{^~f3y9nbQ-DZnoA1}|Z<&va z%23(Wlj7fIoR*6wWsQXck_nnDdnVYr(0N{W$UU#!A&%soow4Hg88H7%rQ@iPb@_II zqGt0|VC`p+E0l4@>uGV!Np2!yD){^(PlSWx6-TT2Y1Oo~rbC7sace0C4f#KJ=rp=h zwTIWXZP{i@mZU=nsLWwQ+cehe%7lv{1@+y!0n=ip&n+6L4*U09WCxqtq`vMO=)rg+ znD>^bVn|o~kRf(a8JB=UPX4OG{-2!shuk!GCMR7b9Jh{Q5)e1uWpRD~eiQPvFK|0` zd3FYgn6qF(vRCY!ann^V`oZ`GCq$U1V3y*qh&e6+WE7d~3JF{e^?Av$x-r-I>guI2 zvrmGp$m{ONv!AEc4vrp*Dh;>5H5sNl z74OQz(_THb&49efnWZNmOZnAfyiUOD$QV01KEupdFOJ|=_8F(;$V*8h>0|OCL1Cew){pm ziYejSqzJm_h2$H_N9bG6o*t7WyoK1EUj0`{>D&IFd$(ks)11tU`PlBR4t2m>nTPq^g<4tg8 z_yU_F#IQEi66oCQEBhs2ikBk4y_?wTn$<5!F}0Iy<+9)u)v$^Qjcs}64f literal 0 HcmV?d00001 diff --git a/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/exx2.jpg b/leetcode/101-200/0124.Binary-Tree-Maximum-Path-Sum/exx2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3859725f8f602cbd0432a3d3c39d58efeb960d2 GIT binary patch literal 13062 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 Date: Sun, 11 Dec 2022 21:13:04 +0800 Subject: [PATCH 0143/1057] Add solution and test-cases for problem 2367 --- .../README.md | 34 +++++++++++-------- .../Solution.go | 22 ++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md index 080678717..dc4787fa8 100755 --- a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md +++ b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/README.md @@ -1,28 +1,32 @@ # [2367.Number of Arithmetic Triplets][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed, strictly increasing** integer array `nums` and a positive integer `diff`. A triplet (`i, j, k`) is an **arithmetic triplet** if the following conditions are met: + +- `i < j < k`, +- `nums[j] - nums[i] == diff`, and +- `nums[k] - nums[j] == diff`. + +Return the number of unique **arithmetic triplets**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,1,4,6,7,10], diff = 3 +Output: 2 +Explanation: +(1, 2, 4) is an arithmetic triplet because both 7 - 4 == 3 and 4 - 1 == 3. +(2, 4, 5) is an arithmetic triplet because both 10 - 7 == 3 and 7 - 4 == 3. ``` -## 题意 -> ... - -## 题解 - -### 思路1 -> ... -Number of Arithmetic Triplets -```go +**Example 2:** +``` +Input: nums = [4,5,6,7,8,9], diff = 2 +Output: 2 +Explanation: +(0, 2, 4) is an arithmetic triplet because both 8 - 6 == 2 and 6 - 4 == 2. +(1, 3, 5) is an arithmetic triplet because both 9 - 7 == 2 and 7 - 5 == 2. ``` - ## 结语 diff --git a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go index d115ccf5e..7085ab214 100644 --- a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go +++ b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, diff int) int { + count := 0 + + bucket := make([]int, 201) + for i, n := range nums { + bucket[n] = i + 1 + } + + for idx := 0; idx <= len(nums)-3; idx++ { + next := nums[idx] + diff + if !(next <= 200 && bucket[next] > 0) { + continue + } + nextNext := next + diff + if !(nextNext <= 200 && bucket[nextNext] > 0) { + continue + } + count++ + } + return count } diff --git a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go index 14ff50eb4..ba8e6d774 100644 --- a/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go +++ b/leetcode/2301-2400/2367.Number-of-Arithmetic-Triplets/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + diff int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 4, 6, 7, 10}, 3, 2}, + {"TestCase2", []int{4, 5, 6, 7, 8, 9}, 2, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.diff) 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.diff) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 661af7b9a999f41809133fb68ab24692783bd557 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 13 Dec 2022 00:05:48 +0800 Subject: [PATCH 0144/1057] Add solution and test-cases for problem 2148 --- .../README.md | 26 +++++++++---------- .../Solution.go | 18 +++++++++++-- .../Solution_test.go | 15 ++++++----- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md index 06f107fad..cd1264899 100755 --- a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/README.md @@ -1,28 +1,26 @@ # [2148.Count Elements With Strictly Smaller and Greater Elements ][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums`, return the number of elements that have **both** a strictly smaller and a strictly greater element appear in `nums`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [11,7,2,15] +Output: 2 +Explanation: The element 7 has the element 2 strictly smaller than it and the element 11 strictly greater than it. +Element 11 has element 7 strictly smaller than it and element 15 strictly greater than it. +In total there are 2 elements having both a strictly smaller and a strictly greater element appear in nums. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Elements With Strictly Smaller and Greater Elements -```go ``` - +Input: nums = [-3,3,3,90] +Output: 2 +Explanation: The element 3 has the element -3 strictly smaller than it and the element 90 strictly greater than it. +Since there are two elements with the value 3, in total there are 2 elements having both a strictly smaller and a strictly greater element appear in nums. +``` ## 结语 diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go index d115ccf5e..b05294f47 100644 --- a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + max, min := nums[0], nums[0] + check := make(map[int]int) + for _, n := range nums { + if n > max { + max = n + } + if n < min { + min = n + } + check[n]++ + } + if len(check) > 2 { + return len(nums) - check[max] - check[min] + } + return 0 } diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go index 14ff50eb4..fbb73cc91 100644 --- a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements-/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2}, 0}, + {"TestCase2", []int{11, 7, 2, 15}, 2}, + {"TestCase3", []int{-3, 3, 3, 90}, 2}, + {"TestCase4", []int{1, 2, 3, 4}, 2}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2f1e01b0151d74a6bf8cef3eba8cee86001fe675 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 13 Dec 2022 20:41:40 +0800 Subject: [PATCH 0145/1057] Add solution and test-cases for problem 931 --- .../0931.Minimum-Falling-Path-Sum/README.md | 29 +++++------ .../0931.Minimum-Falling-Path-Sum/Solution.go | 47 +++++++++++++++++- .../Solution_test.go | 20 +++++--- .../failing1-grid.jpg | Bin 0 -> 23202 bytes .../failing2-grid.jpg | Bin 0 -> 9979 bytes 5 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 leetcode/901-1000/0931.Minimum-Falling-Path-Sum/failing1-grid.jpg create mode 100644 leetcode/901-1000/0931.Minimum-Falling-Path-Sum/failing2-grid.jpg diff --git a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/README.md b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/README.md index c82ea9608..7d60104c1 100644 --- a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/README.md +++ b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/README.md @@ -1,28 +1,29 @@ # [931.Minimum Falling Path 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 `n x n` array of integers `matrix`, return the **minimum sum** of any **falling path** through `matrix`. + +A **falling path** starts at any element in the first row and chooses the element in the next row that is either directly below or diagonally left/right. Specifically, the next element from position (`row, col`) will be (`row + 1, col - 1`), (`row + 1, col`), or (`row + 1, col + 1`). + +**Example 1:** -**Example 1:** +![example1](./failing1-grid.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[2,1,3],[6,5,4],[7,8,9]] +Output: 13 +Explanation: There are two falling paths with a minimum sum as shown. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./failing2-grid.jpg) -### 思路1 -> ... -Minimum Falling Path Sum -```go ``` - +Input: matrix = [[-19,57],[-40,-5]] +Output: -59 +Explanation: The falling path with a minimum sum is shown. +``` ## 结语 diff --git a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution.go b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution.go index d115ccf5e..5607f65b5 100644 --- a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution.go +++ b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matrix [][]int) int { + rows, cols := len(matrix), len(matrix[0]) + dp := make([][]int, 2) + dp[0], dp[1] = make([]int, cols), make([]int, cols) + visited := make([]bool, cols) + loop := 1 + for col := 0; col < cols; col++ { + dp[0][col] = matrix[0][col] + } + + for row := 1; row < rows; row++ { + for col := 0; col < cols; col++ { + down := dp[1-loop][col] + matrix[row][col] + if !visited[col] || dp[loop][col] > down { + dp[loop][col] = down + visited[col] = true + } + if col < cols-1 { + downRight := dp[1-loop][col] + matrix[row][col+1] + if !visited[col+1] || dp[loop][col+1] > downRight { + dp[loop][col+1] = downRight + visited[col+1] = true + } + } + if col > 0 { + downLeft := dp[1-loop][col] + matrix[row][col-1] + if !visited[col-1] || dp[loop][col-1] > downLeft { + dp[loop][col-1] = downLeft + visited[col-1] = true + } + } + } + + for col := 0; col < cols; col++ { + visited[col] = false + } + loop = 1 - loop + } + ans := dp[1-loop][0] + for i := 1; i < cols; i++ { + if dp[1-loop][i] < ans { + ans = dp[1-loop][i] + } + } + return ans } diff --git a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution_test.go b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution_test.go index 14ff50eb4..1eeb1fc65 100644 --- a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution_test.go +++ b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {2, 1, 3}, + {6, 5, 4}, + {7, 8, 9}, + }, 13}, + {"TestCase2", [][]int{ + {-19, 57}, + {-40, -5}, + }, -59}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/failing1-grid.jpg b/leetcode/901-1000/0931.Minimum-Falling-Path-Sum/failing1-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c89ba8b3cacc91f81032c5157cfb1d08495e5f0e GIT binary patch literal 23202 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 Date: Wed, 14 Dec 2022 21:16:23 +0800 Subject: [PATCH 0146/1057] Add solution and test-cases for problem 1768 --- .../1768.Merge-Strings-Alternately/README.md | 39 ++++++++++++------- .../Solution.go | 16 +++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 50 insertions(+), 25 deletions(-) diff --git a/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md b/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md index 121be8f0e..b34bfa2bc 100755 --- a/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md +++ b/leetcode/1701-1800/1768.Merge-Strings-Alternately/README.md @@ -1,28 +1,41 @@ # [1768.Merge Strings Alternately][title] -> [!WARNING|style:flat] -> 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 `word1` and `word2`. Merge the strings by adding letters in alternating order, starting with `word1`. If a string is longer than the other, append the additional letters onto the end of the merged string. + +Return the merged string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word1 = "abc", word2 = "pqr" +Output: "apbqcr" +Explanation: The merged string will be merged as so: +word1: a b c +word2: p q r +merged: a p b q c r ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Merge Strings Alternately -```go +``` +Input: word1 = "ab", word2 = "pqrs" +Output: "apbqrs" +Explanation: Notice that as word2 is longer, "rs" is appended to the end. +word1: a b +word2: p q r s +merged: a p b q r s ``` +**Example 3:** + +``` +Input: word1 = "abcd", word2 = "pq" +Output: "apbqcd" +Explanation: Notice that as word1 is longer, "cd" is appended to the end. +word1: a b c d +word2: p q +``` ## 结语 diff --git a/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go index d115ccf5e..e353c706a 100644 --- a/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go +++ b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(word1 string, word2 string) string { + sb := strings.Builder{} + a, b := 0, 0 + for ; a < len(word1) || b < len(word2); a, b = a+1, b+1 { + if a < len(word1) { + sb.WriteByte(word1[a]) + } + if b < len(word2) { + sb.WriteByte(word2[b]) + } + } + return sb.String() } diff --git a/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go index 14ff50eb4..73e381393 100644 --- a/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go +++ b/leetcode/1701-1800/1768.Merge-Strings-Alternately/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a, b string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abc", "pqr", "apbqcr"}, + {"TestCase2", "ab", "pqrs", "apbqrs"}, + {"TestCase3", "abcd", "pq", "apbqcd"}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.a, c.b) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 520688f70823de6879c89762f38201935b318ef8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 15 Dec 2022 15:05:19 +0800 Subject: [PATCH 0147/1057] Add solution and test-cases for problem 1143 --- .../1143.Longest-Common-Subsequence/README.md | 35 ++++++++++++------- .../Solution.go | 25 +++++++++++-- .../Solution_test.go | 20 +++++------ 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/leetcode/1101-1200/1143.Longest-Common-Subsequence/README.md b/leetcode/1101-1200/1143.Longest-Common-Subsequence/README.md index f448750b0..8f1fc38d9 100644 --- a/leetcode/1101-1200/1143.Longest-Common-Subsequence/README.md +++ b/leetcode/1101-1200/1143.Longest-Common-Subsequence/README.md @@ -1,28 +1,37 @@ # [1143.Longest Common Subsequence][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two strings `text1` and `text2`, return the length of their longest **common subsequence**. If there is no **common subsequence**, return `0`. + +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"`. + +A **common subsequence** of two strings is a subsequence that is common to both strings. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: text1 = "abcde", text2 = "ace" +Output: 3 +Explanation: The longest common subsequence is "ace" and its length is 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Common Subsequence -```go ``` +Input: text1 = "abc", text2 = "abc" +Output: 3 +Explanation: The longest common subsequence is "abc" and its length is 3. +``` + +**Example 3:** +``` +Input: text1 = "abc", text2 = "def" +Output: 0 +Explanation: There is no such common subsequence, so the result is 0. +``` ## 结语 diff --git a/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution.go b/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution.go index d115ccf5e..86038bccb 100644 --- a/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution.go +++ b/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(text1 string, text2 string) int { + l1, l2 := len(text1), len(text2) + dp := make([][]int, 2) + for idx := 0; idx < 2; idx++ { + dp[idx] = make([]int, l2+1) + } + loop := 1 + for row := 0; row < l1; row++ { + for col := 1; col <= l2; col++ { + if text1[row] == text2[col-1] { + dp[loop][col] = dp[1-loop][col-1] + 1 + continue + } + _max := dp[1-loop][col] + if dp[loop][col-1] > _max { + _max = dp[loop][col-1] + } + dp[loop][col] = _max + } + + loop = 1 - loop + } + return dp[1-loop][l2] } diff --git a/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution_test.go b/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution_test.go index 14ff50eb4..0cdd81ceb 100644 --- a/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution_test.go +++ b/leetcode/1101-1200/1143.Longest-Common-Subsequence/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + t1, t2 string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abcde", "acd", 3}, + {"TestCase2", "abc", "abc", 3}, + {"TestCase3", "abc", "def", 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.t1, c.t2) 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.t1, c.t2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bb24e2eb7aeb15f50bafc305c17f95c2d3032a79 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 17 Dec 2022 15:42:59 +0800 Subject: [PATCH 0148/1057] Add solution and test-cases for problem 150 --- .../README.md | 48 +++++++++++++++++++ .../Solution.go | 33 ++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 86 insertions(+), 9 deletions(-) create mode 100644 leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/README.md diff --git a/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/README.md b/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/README.md new file mode 100644 index 000000000..2b7c2eeea --- /dev/null +++ b/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/README.md @@ -0,0 +1,48 @@ +# [150.Evaluate Reverse Polish Notation][title] + +## Description +Evaluate the value of an arithmetic expression in [Reverse Polish Notation](http://en.wikipedia.org/wiki/Reverse\_Polish\_notation). + +Valid operators are `+`, `-`,`*`, and `/`. Each operand may be an integer or another expression. + +**Note** that division between two integers should truncate toward zero. + +It is guaranteed that the given RPN expression is always valid. That means the expression would always evaluate to a result, and there will not be any division by zero operation. + +**Example 1:** + +``` +Input: tokens = ["2","1","+","3","*"] +Output: 9 +Explanation: ((2 + 1) * 3) = 9 +``` + +**Example 2:** + +``` +Input: tokens = ["4","13","5","/","+"] +Output: 6 +Explanation: (4 + (13 / 5)) = 6 +``` + +**Example 3:** + +``` +Input: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"] +Output: 22 +Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 += ((10 * (6 / (12 * -11))) + 17) + 5 += ((10 * (6 / -132)) + 17) + 5 += ((10 * 0) + 17) + 5 += (0 + 17) + 5 += 17 + 5 += 22 +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/evaluate-reverse-polish-notation/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution.go b/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution.go index d115ccf5e..5405d5cb2 100644 --- a/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution.go +++ b/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +import "strconv" + +func Solution(tokens []string) int { + stack := make([]int, len(tokens)) + idx := 0 + for _, n := range tokens { + if !(n == "+" || n == "-" || n == "*" || n == "/") { + nn, _ := strconv.Atoi(n) + stack[idx] = nn + idx++ + continue + } + a, b := stack[idx-2], stack[idx-1] + idx-- + var c int + if n == "+" { + c = a + b + } + if n == "*" { + c = a * b + } + if n == "/" { + c = a / b + } + if n == "-" { + c = a - b + } + + stack[idx-1] = c + } + return stack[0] } diff --git a/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution_test.go b/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution_test.go index 14ff50eb4..767ae85cc 100644 --- a/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution_test.go +++ b/leetcode/101-200/0150.Evaluate-Reverse-Polish-Notation/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"2", "1", "+", "3", "*"}, 9}, + {"TestCase2", []string{"4", "13", "5", "/", "+"}, 6}, + {"TestCase3", []string{"10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"}, 22}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 59732861c36afb1de90d28b19c638382d09ad9d8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 18 Dec 2022 11:29:18 +0800 Subject: [PATCH 0149/1057] Add solution and test-cases for problem 739 --- .../701-800/0739.Daily-Temperatures/README.md | 26 +++++++++---------- .../0739.Daily-Temperatures/Solution.go | 15 +++++++++-- .../0739.Daily-Temperatures/Solution_test.go | 14 +++++----- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/leetcode/701-800/0739.Daily-Temperatures/README.md b/leetcode/701-800/0739.Daily-Temperatures/README.md index 5c216ad48..4d5130306 100644 --- a/leetcode/701-800/0739.Daily-Temperatures/README.md +++ b/leetcode/701-800/0739.Daily-Temperatures/README.md @@ -1,28 +1,28 @@ # [739.Daily Temperatures][title] -> [!WARNING|style:flat] -> 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 `temperatures` represents the daily temperatures, return an array `answer` such that `answer[i]` is the number of days you have to wait after the ith day to get a warmer temperature. If there is no future day for which this is possible, keep `answer[i] == 0` instead. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: temperatures = [73,74,75,71,69,72,76,73] +Output: [1,1,4,2,1,1,0,0] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Daily Temperatures -```go +``` +Input: temperatures = [30,40,50,60] +Output: [1,1,1,0] ``` +**Example 3:** + +``` +Input: temperatures = [30,60,90] +Output: [1,1,0] +``` ## 结语 diff --git a/leetcode/701-800/0739.Daily-Temperatures/Solution.go b/leetcode/701-800/0739.Daily-Temperatures/Solution.go index d115ccf5e..7978d1dd1 100644 --- a/leetcode/701-800/0739.Daily-Temperatures/Solution.go +++ b/leetcode/701-800/0739.Daily-Temperatures/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(temperatures []int) []int { + ans := make([]int, len(temperatures)) + // 用下表跳? + for idx := 0; idx < len(temperatures)-1; idx++ { + next := idx + 1 + for ; next < len(temperatures) && temperatures[next] <= temperatures[idx]; next++ { + } + if next < len(temperatures) { + ans[idx] = next - idx + } + } + + return ans } diff --git a/leetcode/701-800/0739.Daily-Temperatures/Solution_test.go b/leetcode/701-800/0739.Daily-Temperatures/Solution_test.go index 14ff50eb4..3ce1ad946 100644 --- a/leetcode/701-800/0739.Daily-Temperatures/Solution_test.go +++ b/leetcode/701-800/0739.Daily-Temperatures/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{73, 74, 75, 71, 69, 72, 76, 73}, []int{1, 1, 4, 2, 1, 1, 0, 0}}, + {"TestCase2", []int{30, 40, 50, 60}, []int{1, 1, 1, 0}}, + {"TestCase3", []int{30, 60, 90}, []int{1, 1, 0}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d7d849773f5d21c41eb87ee0da2662a78c126fde Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 19 Dec 2022 20:32:34 +0800 Subject: [PATCH 0150/1057] Add solution and test-cases for problem 1971 --- .../README.md | 33 +++++--- .../Solution.go | 80 +++++++++++++++++- .../Solution_test.go | 30 +++++-- .../validpath-ex1.png | Bin 0 -> 4410 bytes .../validpath-ex2.png | Bin 0 -> 7545 bytes 5 files changed, 120 insertions(+), 23 deletions(-) create mode 100644 leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/validpath-ex1.png create mode 100644 leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/validpath-ex2.png diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md index c87b94d64..8e927c589 100755 --- a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md +++ b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/README.md @@ -1,28 +1,33 @@ # [1971.Find if Path Exists in Graph][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is a **bi-directional** graph with `n` vertices, where each vertex is labeled from `0` to `n - 1` (**inclusive**). The edges in the graph are represented as a 2D integer array `edges`, where each `edges[i] = [ui, vi]` denotes a bi-directional edge between vertex ui and vertex vi. Every vertex pair is connected by **at most one** edge, and no vertex has an edge to itself. + +You want to determine if there is a **valid path** that exists from vertex `source` to vertex `destination`. + +Given `edges` and the integers `n`, `source`, and `destination`, return `true` if there is a **valid path** from `source` to `destination`, or `false` otherwise. -**Example 1:** +**Example 1:** + +![example1](./validpath-ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, edges = [[0,1],[1,2],[2,0]], source = 0, destination = 2 +Output: true +Explanation: There are two paths from vertex 0 to vertex 2: +- 0 → 1 → 2 +- 0 → 2 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./validpath-ex2.png) -### 思路1 -> ... -Find if Path Exists in Graph -```go ``` - +Input: n = 6, edges = [[0,1],[0,2],[3,5],[5,4],[4,3]], source = 0, destination = 5 +Output: false +Explanation: There is no path from vertex 0 to vertex 5. +``` ## 结语 diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go index d115ccf5e..f31b08b25 100644 --- a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go +++ b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution.go @@ -1,5 +1,81 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, edges [][]int, source int, destination int) bool { + graph := make(map[int]map[int]struct{}) + for _, e := range edges { + if _, ok := graph[e[0]]; !ok { + graph[e[0]] = make(map[int]struct{}) + } + if _, ok := graph[e[1]]; !ok { + graph[e[1]] = make(map[int]struct{}) + } + + graph[e[0]][e[1]] = struct{}{} + graph[e[1]][e[0]] = struct{}{} + } + + visited := map[int]struct{}{} + visited[source] = struct{}{} + found := false + var dfs func(int, *bool) + dfs = func(source int, found *bool) { + if *found { + return + } + for rel := range graph[source] { + if _, ok := visited[rel]; ok { + continue + } + if rel == destination { + *found = true + return + } + visited[rel] = struct{}{} + dfs(rel, found) + delete(visited, rel) + } + } + dfs(source, &found) + return found +} + +func Solution1(n int, edges [][]int, source int, destination int) bool { + if source == destination { + return true + } + graph := make(map[int]map[int]struct{}) + for _, e := range edges { + if _, ok := graph[e[0]]; !ok { + graph[e[0]] = make(map[int]struct{}) + } + if _, ok := graph[e[1]]; !ok { + graph[e[1]] = make(map[int]struct{}) + } + + graph[e[0]][e[1]] = struct{}{} + graph[e[1]][e[0]] = struct{}{} + } + + queue := []int{source} + + visited := map[int]struct{}{} + visited[source] = struct{}{} + + for len(queue) > 0 { + nq := make([]int, 0) + for _, item := range queue { + for rel := range graph[item] { + if rel == destination { + return true + } + + if _, ok := visited[rel]; !ok { + visited[rel] = struct{}{} + nq = append(nq, rel) + } + } + } + queue = nq + } + return false } diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go index 14ff50eb4..0c005999c 100644 --- a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go +++ b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/Solution_test.go @@ -10,21 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + n int + edges [][]int + source, destination int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{ + {0, 1}, + {1, 2}, + {2, 0}, + }, 0, 2, true}, + {"TestCase2", 6, [][]int{ + {0, 1}, + {0, 2}, + {3, 5}, + {5, 4}, + {4, 3}, + }, 0, 5, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.edges, c.source, c.destination) 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.n, c.edges, c.source, c.destination) + } + got = Solution1(c.n, c.edges, c.source, c.destination) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.n, c.edges, c.source, c.destination) } }) } diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/validpath-ex1.png b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/validpath-ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..5f149cf43f8ee1c017d3737e70fadb98537daa6d GIT binary patch literal 4410 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 literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/validpath-ex2.png b/leetcode/1901-2000/1971.Find-if-Path-Exists-in-Graph/validpath-ex2.png new file mode 100644 index 0000000000000000000000000000000000000000..6461b4fb13db76f5094958b03f6f40fe1de92446 GIT binary patch literal 7545 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 Date: Tue, 20 Dec 2022 21:32:59 +0800 Subject: [PATCH 0151/1057] Add solution and test-cases for problem 841 --- .../801-900/0841.Keys-and-Rooms/README.md | 32 +++++++++++-------- .../801-900/0841.Keys-and-Rooms/Solution.go | 22 +++++++++++-- .../0841.Keys-and-Rooms/Solution_test.go | 18 +++++++---- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0841.Keys-and-Rooms/README.md b/leetcode/801-900/0841.Keys-and-Rooms/README.md index e40ff1bba..e32b54a99 100644 --- a/leetcode/801-900/0841.Keys-and-Rooms/README.md +++ b/leetcode/801-900/0841.Keys-and-Rooms/README.md @@ -1,28 +1,32 @@ # [841.Keys and Rooms][title] -> [!WARNING|style:flat] -> 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` rooms labeled from `0` to `n - 1` and all the rooms are locked except for room `0`. Your goal is to visit all the rooms. However, you cannot enter a locked room without having its key. + +When you visit a room, you may find a set of **distinct keys** in it. Each key has a number on it, denoting which room it unlocks, and you can take all of them with you to unlock the other rooms. + +Given an array `rooms` where `rooms[i]` is the set of keys that you can obtain if you visited room `i`, return `true` if you can visit **all** the rooms, or `false` otherwise. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: rooms = [[1],[2],[3],[]] +Output: true +Explanation: +We visit room 0 and pick up key 1. +We then visit room 1 and pick up key 2. +We then visit room 2 and pick up key 3. +We then visit room 3. +Since we were able to visit every room, we return true. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Keys and Rooms -```go ``` - +Input: rooms = [[1,3],[3,0,1],[2],[0]] +Output: false +Explanation: We can not enter room number 2 since the only key that unlocks it is in that room. +``` ## 结语 diff --git a/leetcode/801-900/0841.Keys-and-Rooms/Solution.go b/leetcode/801-900/0841.Keys-and-Rooms/Solution.go index d115ccf5e..b1518d6ab 100644 --- a/leetcode/801-900/0841.Keys-and-Rooms/Solution.go +++ b/leetcode/801-900/0841.Keys-and-Rooms/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(rooms [][]int) bool { + visitedRomms := make([]bool, len(rooms)) + visitedRomms[0] = true + canVisitAllRooms841(rooms[0], rooms, visitedRomms) + for i := 0; i < len(rooms); i++ { + if !visitedRomms[i] { + return false + } + } + return true +} + +func canVisitAllRooms841(keys []int, rooms [][]int, visited []bool) { + for _, k := range keys { + if visited[k] { + continue + } + visited[k] = true + canVisitAllRooms841(rooms[k], rooms, visited) + } } diff --git a/leetcode/801-900/0841.Keys-and-Rooms/Solution_test.go b/leetcode/801-900/0841.Keys-and-Rooms/Solution_test.go index 14ff50eb4..f779ce25f 100644 --- a/leetcode/801-900/0841.Keys-and-Rooms/Solution_test.go +++ b/leetcode/801-900/0841.Keys-and-Rooms/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs [][]int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1}, {2}, {3}, {}, + }, true}, + {"TestCase2", [][]int{ + {1, 3}, + {3, 0, 1}, + {2}, + {0}, + }, false}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 97491bc75080a455dd798bf370536e627082a07b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 21 Dec 2022 20:08:54 +0800 Subject: [PATCH 0152/1057] Add solution and test-cases for problem 886 --- .../0886.Possible-Bipartition/README.md | 30 ++++++++------- .../0886.Possible-Bipartition/Solution.go | 37 ++++++++++++++++++- .../Solution_test.go | 23 ++++++------ 3 files changed, 64 insertions(+), 26 deletions(-) diff --git a/leetcode/801-900/0886.Possible-Bipartition/README.md b/leetcode/801-900/0886.Possible-Bipartition/README.md index 54729714c..030467cdc 100644 --- a/leetcode/801-900/0886.Possible-Bipartition/README.md +++ b/leetcode/801-900/0886.Possible-Bipartition/README.md @@ -1,28 +1,32 @@ # [886.Possible Bipartition][title] -> [!WARNING|style:flat] -> 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 want to split a group of `n` people (labeled from `1` to `n`) into two groups of **any size**. Each person may dislike some other people, and they should not go into the same group. + +Given the integer `n` and the array `dislikes` where `dislikes[i] = [ai, bi]` indicates that the person labeled ai does not like the person labeled bi, return `true` if it is possible to split everyone into two groups in this way. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, dislikes = [[1,2],[1,3],[2,4]] +Output: true +Explanation: group1 [1,4] and group2 [2,3]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Possible Bipartition -```go ``` +Input: n = 3, dislikes = [[1,2],[1,3],[2,3]] +Output: false +``` + +**Example 3:** +``` +Input: n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]] +Output: false +``` ## 结语 diff --git a/leetcode/801-900/0886.Possible-Bipartition/Solution.go b/leetcode/801-900/0886.Possible-Bipartition/Solution.go index d115ccf5e..f4d79983c 100644 --- a/leetcode/801-900/0886.Possible-Bipartition/Solution.go +++ b/leetcode/801-900/0886.Possible-Bipartition/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, dislikes [][]int) bool { + dislike := make([][]bool, n+1) + for i := 0; i < n+1; i++ { + dislike[i] = make([]bool, n+1) + } + for _, pair := range dislikes { + dislike[pair[0]][pair[1]] = true + dislike[pair[1]][pair[0]] = true + } + + var dfs func(int, int) bool + color := make([]int, n+1) + dfs = func(i, nodeColor int) bool { + color[i] = nodeColor + for rel := 1; rel < len(dislike[i]); rel++ { + if dislike[i][rel] && color[rel] == nodeColor { + return false + } + if dislike[i][rel] && color[rel] == 0 { + if !dfs(rel, 3-nodeColor) { + return false + } + } + } + return true + } + + for p := 1; p <= n; p++ { + if color[p] == 0 { + if !dfs(p, 1) { + return false + } + } + } + return true } diff --git a/leetcode/801-900/0886.Possible-Bipartition/Solution_test.go b/leetcode/801-900/0886.Possible-Bipartition/Solution_test.go index 14ff50eb4..667cd6881 100644 --- a/leetcode/801-900/0886.Possible-Bipartition/Solution_test.go +++ b/leetcode/801-900/0886.Possible-Bipartition/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 + dislikes [][]int + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{{1, 2}, {1, 3}, {2, 4}}, true}, + {"TestCase2", 3, [][]int{{1, 2}, {1, 3}, {2, 3}}, false}, + {"TestCase5", 5, [][]int{{1, 2}, {2, 3}, {3, 4}, {4, 5}, {1, 5}}, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.dislikes) 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.dislikes) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 343bf8b1e8c400e7903492c2f6e81ee994c4a850 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 22 Dec 2022 22:31:56 +0800 Subject: [PATCH 0153/1057] Add solution and test-cases for problem 834 --- .../0834.Sum-of-Distances-in-Tree/README.md | 40 ++++++++++++------ .../0834.Sum-of-Distances-in-Tree/Solution.go | 40 +++++++++++++++++- .../Solution_test.go | 23 +++++----- .../lc-sumdist1.jpg | Bin 0 -> 12169 bytes .../lc-sumdist2.jpg | Bin 0 -> 2417 bytes .../lc-sumdist3.jpg | Bin 0 -> 4432 bytes 6 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist1.jpg create mode 100644 leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist2.jpg create mode 100644 leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist3.jpg diff --git a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/README.md b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/README.md index be4276f8f..f197e5067 100644 --- a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/README.md +++ b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/README.md @@ -1,28 +1,42 @@ # [834.Sum of Distances in Tree][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is an undirected connected tree with n nodes labeled from `0` to `n - 1` and `n - 1` edges. + +You are given the integer `n` and the array `edges` where `edges[i] = [ai, bi]` indicates that there is an edge between nodes ai and bi in the tree. + +Return an array `answer` of length `n` where `answer[i]` is the sum of the distances between the ith node in the tree and all other nodes. -**Example 1:** +**Example 1:** + +![example1](./lc-sumdist1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 6, edges = [[0,1],[0,2],[2,3],[2,4],[2,5]] +Output: [8,12,6,10,10,10] +Explanation: The tree is shown above. +We can see that dist(0,1) + dist(0,2) + dist(0,3) + dist(0,4) + dist(0,5) +equals 1 + 1 + 2 + 2 + 2 = 8. +Hence, answer[0] = 8, and so on. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./lc-sumdist2.jpg) -### 思路1 -> ... -Sum of Distances in Tree -```go +``` +Input: n = 1, edges = [] +Output: [0] ``` +**Example 3:** + +![example3](./lc-sumdist3.jpg) + +``` +Input: n = 2, edges = [[1,0]] +Output: [1,1] +``` ## 结语 diff --git a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution.go b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution.go index d115ccf5e..5b5d91eac 100644 --- a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution.go +++ b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +// 借鉴官方算法 +func Solution(n int, edges [][]int) []int { + adj := make(map[int]map[int]struct{}) + for u := 0; u < n; u++ { + adj[u] = make(map[int]struct{}) + } + for _, e := range edges { + adj[e[0]][e[1]] = struct{}{} + adj[e[1]][e[0]] = struct{}{} + } + + ans := make([]int, n) + count := make([]int, n) + for i := 0; i < n; i++ { + count[i] = 1 + } + var dfs func(int, int) + var dfs1 func(int, int) + dfs = func(node, parent int) { + for child := range adj[node] { + if child != parent { + dfs(child, node) + count[node] += count[child] + ans[node] += ans[child] + count[child] + } + } + } + dfs1 = func(node, parent int) { + for child := range adj[node] { + if child != parent { + ans[child] = ans[node] - count[child] + n - count[child] + dfs1(child, node) + } + } + } + dfs(0, -1) + dfs1(0, -1) + return ans } diff --git a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution_test.go b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution_test.go index 14ff50eb4..d84d342b3 100644 --- a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution_test.go +++ b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/Solution_test.go @@ -10,30 +10,33 @@ 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}, {2, 3}, {2, 4}, {2, 5}}, []int{8, 12, 6, 10, 10, 10}}, + {"TestCase2", 1, [][]int{}, []int{0}}, + {"TestCase3", 2, [][]int{{1, 0}}, []int{1, 1}}, + {"TestCase4", 4, [][]int{{2, 0}, {3, 1}, {2, 1}}, []int{6, 4, 4, 6}}, + {"TestCase5", 5, [][]int{{0, 4}, {1, 3}, {1, 2}, {0, 2}}, []int{7, 7, 6, 10, 10}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.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/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist1.jpg b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f375fc7ac32fea5701ae97081f38ec59808f88bb GIT binary patch literal 12169 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 literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist2.jpg b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14d562976a959f4fe2661ecbf6926cb7eb7d2710 GIT binary patch literal 2417 zcmb`G2~g9=9>+Hc5E2L^fl|&G4xgY!1rZU;5ovRvf&@^mih*D-$Q2S%5kwKhA}B{d z4!KOY6cIT~tx%;Pf(5zd5advfU@etH5c2-9YMnMMXM7yvM+0r41IpJrp@d5~^TrtSas;{se2K!Rfd@DJc}=#;%g7gsl;#QP+M zcSz7D{+k)vcd=KpI{;mVf3yDIEELlx#2X5F3w16BIvgsN39&NkPd+7KuRr;UggH)h z8z?3hVtv+M*y}GG$_?T|F^?tj-a#A*4?+C3{|TPtEQur)%lia4J3_My)HOi}paTln z3-SL|pWibu9{{rj01($cdtT`P)I2$+fofek>w zC6bH?NK!IV63NQQNXwvP(P)$`3Wb(elt;@c$e~ae97aJAi^XBl@^~dYRtaLPWD}Sq z6CouFC1T}Ja*+E!O56Z&vVa7v5ilJ9$H5Rdn79#WK(7Huz&>4HGRw-Kq@jXwCp7I_VBdU>8>alJ!A3RW4$6>oNmZS;)YlFTP6YK z&*%4)V~S#Ld$d<2Uzkse@%};~yX8@=-UWr7Svi+Va}I4Vs@1$WvhM+VwN|v+(>sWK zXWB`}<}i}ucV?KNla>+iNJ~HV`#ld1al1oL=*&9xGsU1qYvS7IDi7mV@M36meEW_i z!leTvvuORcj9;pxO=eRy43Ncr#Hi8705<8naE7ms*)?E-4bOh@Q{_mesl`H7-#6^1 zMqM3Kl*Hw$-kW_Eucj9wdo~jqnb`f~wpKdTrqcs*_dK_q`Uz%qCnGGvV)po5wD$13 zZbBhvfUIPMnsL)a6jQ9yDRN#XlX+jQi3T%Nruun`nfZNVm*w@Z7z&xfrmPK}V=Btg ziup<5;aoX^Z%%ANShtUpVw>v+UcvTmQ-yu@Lp@Tw;;|jkDlYa^)r|^zSTc9`xa0B} zf%EOP{vj0MbWOzUP{?r5N=(O$x_|u~mDI4poW9+m?tXgH@38UaFa1gfLVIk>57nl0 zdU6s;v6u0x{+@ihG)@0XW+-aQO!L{J@y2c?zvBFdqg%GJ<~Ogr*k>AlayO;8w$Y3q z>zl6i;D^9U{wX_YVzFV zW)?FPO*61~Yo}0Ga0?mR%|6ohfxZ;RI-zgaPlF}I3AFXqL@8-Q)D6}_ z+xM{BD`k?yzqfx`pMF>jG}SGo(`!4LUb-30pEcv8-s@g|y3`=uxFAGm8Q6w}b|nh> zGG?619&;!B+`y%j>ESG@JL;=X^)Lp>w^}me<>(9auTe=&6p*J@v-4%*?>x zoq5d-N}1u0gKJHZ-yeDD(!0=(67uqQ9=qPyn^YEbiJq%CqK=+gK7)R(yPIG4;fZsV z`Bncm26yIY;uW*;Y&6{bl8>Q$GwqNuEJV$+t|Fe{P?X}wNhibw(zWT+zbkb#QiD4l z8E$$mYmK6=!fp@41h+CB6N5P335)WMy^|IzbM0n|i>_>AcLqgNi0%>tH!hRvrK@0@ z^2dpLPvjEJ#xBq=o=?iRKMLN^Iu*+uvnP@IWdur0?_}lJvtzDtZehDAG1DH!w6$%P z%7PW#D_V!yo{@@^C)fSs1O2we3ZL*82`QG5U;A>DUa@VySwF1df+j2zC-CTnyB=wE zrX{niIL!w|JNMr=7$sM4LrK-x{m6*w?7Z)M+F^^9HqGJ5)mcjx;viz{D>NQ7S*bOeqPA6K(QX^6(W^EIDEX zwdISpF?m&5*%M`(eEwmjyX#wyuiQbpC`_&JC_Qa$Yo;OQeL^U#wok7OQui2&=>}d`EV!d-TZ z*!adM9I7E+jmW(kAv~&-y}s7cm(V5JSyAJ39jhuJT~g1AjOF(GOHr;M^BM>~tOw!q yVc9D)0|;`wI%40eQ86>FqH|c9WzTxO{p2Wx?jQ^&@eszRz-B_(G=m`9A>#%4f&` literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist3.jpg b/leetcode/801-900/0834.Sum-of-Distances-in-Tree/lc-sumdist3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd6b37e20f53228b4a1cd2ff3f57dba9063ad155 GIT binary patch literal 4432 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 Date: Sat, 24 Dec 2022 13:13:51 +0800 Subject: [PATCH 0154/1057] Add solution and test-cases for problem 790 --- .../0790.Domino-and-Tromino-Tiling/README.md | 31 ++++++++++-------- .../Solution.go | 24 ++++++++++++-- .../Solution_test.go | 15 +++++---- .../lc-domino.jpg | Bin 0 -> 13375 bytes .../lc-domino1.jpg | Bin 0 -> 47917 bytes 5 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 leetcode/701-800/0790.Domino-and-Tromino-Tiling/lc-domino.jpg create mode 100644 leetcode/701-800/0790.Domino-and-Tromino-Tiling/lc-domino1.jpg diff --git a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/README.md b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/README.md index 7ffd16a5a..036e642b5 100644 --- a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/README.md +++ b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/README.md @@ -1,28 +1,31 @@ # [790.Domino and Tromino Tiling][title] -> [!WARNING|style:flat] -> 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 two types of tiles: a 2 x 1 domino shape and a tromino shape. You may rotate these shapes. + +![shape](./lc-domino.jpg) + +Given an integer n, return the number of ways to tile an `2 x n` board. Since the answer may be very large, return it **modulo** 109 + 7. + +In a tiling, every square must be covered by a tile. Two tilings are different if and only if there are two 4-directionally adjacent cells on the board such that exactly one of the tilings has both squares occupied by a tile. -**Example 1:** +**Example 1:** + +![example1](./lc-domino1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3 +Output: 5 +Explanation: The five different ways are show above. ``` -## 题意 -> ... -## 题解 +**Example 2:** -### 思路1 -> ... -Domino and Tromino Tiling -```go ``` - +Input: n = 1 +Output: 1 +``` ## 结语 diff --git a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution.go b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution.go index d115ccf5e..4ca5ff11a 100644 --- a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution.go +++ b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +const mod790 = 1000000007 + +func Solution(n int) int { + if n == 1 { + return 1 + } + if n == 2 { + return 2 + } + dp := make([][]int, n+1) + for i := 0; i < n+1; i++ { + dp[i] = make([]int, 3) + } + dp[1][0], dp[1][1], dp[1][2] = 1, 0, 0 + dp[2][0], dp[2][1], dp[2][2] = 2, 1, 1 + + for i := 3; i <= n; i++ { + dp[i][0] = (dp[i-1][0] + dp[i-2][0] + dp[i-1][1] + dp[i-1][2]) % mod790 + dp[i][1] = (dp[i-1][2] + dp[i-2][0]) % mod790 + dp[i][2] = (dp[i-1][1] + dp[i-2][0]) % mod790 + } + return dp[n][0] } diff --git a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution_test.go b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution_test.go index 14ff50eb4..3e4a88e21 100644 --- a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution_test.go +++ b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 1}, + {"TestCase2", 8, 258}, + {"TestCase3", 9, 569}, + {"TestCase4", 15, 65501}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/lc-domino.jpg b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/lc-domino.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47f0c8f6f082db8212c6e5788c1f0a1de5b258a1 GIT binary patch literal 13375 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 literal 0 HcmV?d00001 From 393fc0c85500539ce36eff8733f6684631f62cb1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 12 Jan 2023 22:28:28 +0800 Subject: [PATCH 0174/1057] Add solution and test-cases for problem 1519 --- .../README.md | 46 +++++++++++++----- .../Solution.go | 36 +++++++++++++- .../Solution_test.go | 28 +++++++---- .../q3e1.jpg | Bin 0 -> 20503 bytes .../q3e2.jpg | Bin 0 -> 12266 bytes .../q3e3.jpg | Bin 0 -> 14860 bytes 6 files changed, 85 insertions(+), 25 deletions(-) create mode 100644 leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e1.jpg create mode 100644 leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e2.jpg create mode 100644 leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e3.jpg diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md index 5d2e6883d..03df15fd8 100755 --- a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md +++ b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/README.md @@ -1,28 +1,48 @@ # [1519.Number of Nodes in the Sub-Tree With the Same Label][title] -> [!WARNING|style:flat] -> 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 tree (i.e. a connected, undirected graph that has no cycles) consisting of `n` nodes numbered from `0` to `n - 1` and exactly `n - 1` edges. The **root** of the tree is the node `0`, and each node of the tree has a **label** which is a lower-case character given in the string `labels` (i.e. The node with the number i has the label `labels[i]`). + +The `edges` array is given on the form `edges[i] = [ai, bi]`, which means there is an edge between nodes ai and bi in the tree. + +Return an array of size `n` where `ans[i]` is the number of nodes in the subtree of the ith node which have the same label as node `i`. + +A subtree of a tree `T` is the tree consisting of a node in `T` and all of its descendant nodes. + + + +**Example 1:** -**Example 1:** +![example1](./q3e1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], labels = "abaedcd" +Output: [2,1,1,1,1,1,1] +Explanation: Node 0 has label 'a' and its sub-tree has node 2 with label 'a' as well, thus the answer is 2. Notice that any node is part of its sub-tree. +Node 1 has a label 'b'. The sub-tree of node 1 contains nodes 1,4 and 5, as nodes 4 and 5 have different labels than node 1, the answer is just 1 (the node itself). ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./q3e2.jpg) -### 思路1 -> ... -Number of Nodes in the Sub-Tree With the Same Label -```go ``` +Input: n = 4, edges = [[0,1],[1,2],[0,3]], labels = "bbbb" +Output: [4,2,1,1] +Explanation: The sub-tree of node 2 contains only node 2, so the answer is 1. +The sub-tree of node 3 contains only node 3, so the answer is 1. +The sub-tree of node 1 contains nodes 1 and 2, both have label 'b', thus the answer is 2. +The sub-tree of node 0 contains nodes 0, 1, 2 and 3, all with label 'b', thus the answer is 4. +``` + +**Example 3:** + +![example3](./q3e3.jpg) +``` +Input: n = 5, edges = [[0,1],[0,2],[1,3],[0,4]], labels = "aabab" +Output: [3,2,1,1,1] +``` ## 结语 diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go index d115ccf5e..8be80cc3e 100644 --- a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go +++ b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, edges [][]int, labels string) []int { + ans := make([]int, n) + graph := make(map[int][]int) + for _, e := range edges { + if _, ok := graph[e[0]]; !ok { + graph[e[0]] = make([]int, 0) + } + if _, ok := graph[e[1]]; !ok { + graph[e[1]] = make([]int, 0) + } + graph[e[0]] = append(graph[e[0]], e[1]) + graph[e[1]] = append(graph[e[1]], e[0]) + } + var dfs func(int, int) []int + dfs = func(node, parent int) []int { + rels := graph[node] + total := make([]int, 26) + total[labels[node]-'a']++ + for _, next := range rels { + if next == parent { + continue + } + next := dfs(next, node) + for i, n := range next { + if n != 0 { + total[i] += n + } + } + } + ans[node] = total[labels[node]-'a'] + return total + } + dfs(0, -1) + return ans } diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go index 14ff50eb4..3ec203296 100644 --- a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go +++ b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/Solution_test.go @@ -10,30 +10,38 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + edges [][]int + labels string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 7, [][]int{ + {0, 1}, {0, 2}, {1, 4}, {1, 5}, {2, 3}, {2, 6}, + }, "abaedcd", []int{2, 1, 1, 1, 1, 1, 1}}, + {"TestCase2", 4, [][]int{ + {0, 1}, {1, 2}, {0, 3}, + }, "bbbb", []int{4, 2, 1, 1}}, + {"TestCase3", 5, [][]int{ + {0, 1}, {0, 2}, {1, 3}, {0, 4}, + }, "aabab", []int{3, 2, 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.n, c.edges, c.labels) 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.labels) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e1.jpg b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e12a06f3bde71850d8677039f1775609ba8dafa GIT binary patch literal 20503 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 TI`OC8a|9n^carS=!v4!Sq literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e3.jpg b/leetcode/1501-1600/1519.Number-of-Nodes-in-the-Sub-Tree-With-the-Same-Label/q3e3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..508ac40e21da99b4fc7bf79677600033d55c696c GIT binary patch literal 14860 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 literal 0 HcmV?d00001 From 29e86471dd1f7c8afe5465ff23ba3839b48eec03 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 13 Jan 2023 20:33:06 +0800 Subject: [PATCH 0175/1057] Add solution and test-cases for problem 2246 --- .../README.md | 32 ++++++----- .../Solution.go | 51 +++++++++++++++++- .../Solution_test.go | 23 ++++---- .../graph2drawio.png | Bin 0 -> 9469 bytes .../testingdrawio.png | Bin 0 -> 11593 bytes 5 files changed, 80 insertions(+), 26 deletions(-) create mode 100644 leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/graph2drawio.png create mode 100644 leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/testingdrawio.png diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md index ec1c8c4d9..1aa7b76dd 100755 --- a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md +++ b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/README.md @@ -1,28 +1,32 @@ # [2246.Longest Path With Different Adjacent 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 a **tree** (i.e. a connected, undirected graph that has no cycles) **rooted** at node `0` consisting of `n` nodes numbered from `0` to `n - 1`. The tree is represented by a **0-indexed** array `parent` of size `n`, where `parent[i]` is the parent of node `i`. Since node 0 is the root, `parent[0] == -1`. + +You are also given a string `s` of length `n`, where `s[i]` is the character assigned to node `i`. + +Return the length of the **longest path** in the tree such that no pair of **adjacent** nodes on the path have the same character assigned to them. -**Example 1:** +**Example 1:** + +![example1](./testingdrawio.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: parent = [-1,0,0,1,1,2], s = "abacbe" +Output: 3 +Explanation: The longest path where each two adjacent nodes have different characters in the tree is the path: 0 -> 1 -> 3. The length of this path is 3, so 3 is returned. +It can be proven that there is no longer path that satisfies the conditions. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./graph2drawio.png) -### 思路1 -> ... -Longest Path With Different Adjacent Characters -```go ``` - +Input: parent = [-1,0,0,0], s = "aabc" +Output: 3 +Explanation: The longest path where each two adjacent nodes have different characters is the path: 2 -> 0 -> 3. The length of this path is 3, so 3 is returned. +``` ## 结语 diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go index d115ccf5e..fb094e286 100644 --- a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go +++ b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution.go @@ -1,5 +1,52 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(parent []int, s string) int { + nodes := len(s) + tree := make(map[int][]int) + + for i := 1; i < nodes; i++ { + if _, ok := tree[i]; !ok { + tree[i] = make([]int, 0) + } + if _, ok := tree[parent[i]]; !ok { + tree[parent[i]] = make([]int, 0) + } + + tree[i] = append(tree[i], parent[i]) + tree[parent[i]] = append(tree[parent[i]], i) + } + + max := 1 + var dfs func(int, int) int + dfs = func(node, parent int) int { + total := make([]int, 0) + for _, rel := range tree[node] { + if rel == parent { + continue + } + next := dfs(rel, node) + if s[rel] != s[node] { + total = append(total, next) + } + } + if len(total) == 0 { + return 1 + } + ans := 0 + sort.Slice(total, func(i, j int) bool { + return total[i] > total[j] + }) + for i := 0; i < len(total) && i < 2; i++ { + ans += total[i] + } + if ans+1 > max { + max = ans + 1 + } + return total[0] + 1 + } + dfs(0, -1) + + return max } diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go index 14ff50eb4..e94ab4f4b 100644 --- a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go +++ b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/Solution_test.go @@ -10,30 +10,33 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + parent []int + s string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{-1, 0, 0, 1, 1, 2}, "abacbe", 3}, + {"TestCase2", []int{-1, 0, 0, 0}, "aabc", 3}, + {"TestCase3", []int{-1, 0, 1}, "aab", 2}, + {"TestCase4", []int{-1}, "a", 1}, + {"TestCase5", []int{-1, 137, 65, 60, 73, 138, 81, 17, 45, 163, 145, 99, 29, 162, 19, 20, 132, 132, 13, 60, 21, 18, 155, 65, 13, 163, 125, 102, 96, 60, 50, 101, 100, 86, 162, 42, 162, 94, 21, 56, 45, 56, 13, 23, 101, 76, 57, 89, 4, 161, 16, 139, 29, 60, 44, 127, 19, 68, 71, 55, 13, 36, 148, 129, 75, 41, 107, 91, 52, 42, 93, 85, 125, 89, 132, 13, 141, 21, 152, 21, 79, 160, 130, 103, 46, 65, 71, 33, 129, 0, 19, 148, 65, 125, 41, 38, 104, 115, 130, 164, 138, 108, 65, 31, 13, 60, 29, 116, 26, 58, 118, 10, 138, 14, 28, 91, 60, 47, 2, 149, 99, 28, 154, 71, 96, 60, 106, 79, 129, 83, 42, 102, 34, 41, 55, 31, 154, 26, 34, 127, 42, 133, 113, 125, 113, 13, 54, 132, 13, 56, 13, 42, 102, 135, 130, 75, 25, 80, 159, 39, 29, 41, 89, 85, 19}, "ajunvefrdrpgxltugqqrwisyfwwtldxjgaxsbbkhvuqeoigqssefoyngykgtthpzvsxgxrqedntvsjcpdnupvqtroxmbpsdwoswxfarnixkvcimzgvrevxnxtkkovwxcjmtgqrrsqyshxbfxptuvqrytctujnzzydhpal", 17}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.parent, 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.parent, c.s) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/graph2drawio.png b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/graph2drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..04dc12e80c2dc6c64e5ad798614cb47ce9f570de GIT binary patch literal 9469 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 U|5)h<|DWj?T1#KE9AO{vKPV+hzW@LL literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/testingdrawio.png b/leetcode/2201-2300/2246.Longest-Path-With-Different-Adjacent-Characters/testingdrawio.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e077758dba1753d507dffbdc6a78f2dc61c3ae GIT binary patch literal 11593 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 Date: Mon, 16 Jan 2023 15:38:24 +0800 Subject: [PATCH 0176/1057] Add solution and test-cases for problem 1061 --- .../README.md | 52 +++++++++++++++++++ .../Solution.go | 46 ++++++++++++++++ .../Solution_test.go | 39 ++++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/README.md create mode 100644 leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution.go create mode 100644 leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution_test.go diff --git a/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/README.md b/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/README.md new file mode 100644 index 000000000..9f7ad2140 --- /dev/null +++ b/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/README.md @@ -0,0 +1,52 @@ +# [1061. Lexicographically Smallest Equivalent String][title] + +## Description +You are given two strings of the same length `s1` and `s2` and a string `baseStr`. + +We say `s1[i]` and `s2[i]` are equivalent characters. + +- For example, if `s1 = "abc"` and `s2 = "cde"`, then we have `'a' == 'c'`, `'b' == 'd'`, and `'c' == 'e'`. + +Equivalent characters follow the usual rules of any equivalence relation: + +- **Reflexivity**: `'a' == 'a'`. +- **Symmetry**: `'a' == 'b'` implies `'b' == 'a'`. +- **Transitivity**: `'a' == 'b'` and `'b' == 'c'` implies `'a' == 'c'`. + +For example, given the equivalency information from `s1 = "abc"` and `s2 = "cde"`, `"acd"` and `"aab"` are equivalent strings of `baseStr = "eed"`, and `"aab"` is the lexicographically smallest equivalent string of `baseStr`. + +Return the lexicographically smallest equivalent string of `baseStr` by using the equivalency information from `s1` and `s2`. + +**Example 1:** + +``` +Input: s1 = "parker", s2 = "morris", baseStr = "parser" +Output: "makkek" +Explanation: Based on the equivalency information in s1 and s2, we can group their characters as [m,p], [a,o], [k,r,s], [e,i]. +The characters in each group are equivalent and sorted in lexicographical order. +So the answer is "makkek". +``` + +**Example 2:** +``` +Input: s1 = "hello", s2 = "world", baseStr = "hold" +Output: "hdld" +Explanation: Based on the equivalency information in s1 and s2, we can group their characters as [h,w], [d,e,o], [l,r]. +So only the second letter 'o' in baseStr is changed to 'd', the answer is "hdld". +``` + + +**Example 3:** + +``` +Input: s1 = "leetcode", s2 = "programs", baseStr = "sourcecode" +Output: "aauaaaaada" +Explanation: We group the equivalent characters in s1 and s2 as [a,o,e,r,s,c], [l,p], [g,t] and [d,m], thus all letters in baseStr except 'u' and 'd' are transformed to 'a', the answer is "aauaaaaada". +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/lexicographically-smallest-equivalent-string +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution.go b/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution.go new file mode 100644 index 000000000..bef68bd0f --- /dev/null +++ b/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution.go @@ -0,0 +1,46 @@ +package Solution + +import "strings" + +type UnionFind1061 struct { + Father []int +} + +func (uf *UnionFind1061) FindFather(x int) int { + if uf.Father[x] != x { + uf.Father[x] = uf.FindFather(uf.Father[x]) + } + return uf.Father[x] +} + +func (uf *UnionFind1061) Union(x, y int) { + x = uf.Father[x] + y = uf.Father[y] + if x < y { + uf.Father[y] = x + } else { + uf.Father[x] = y + } +} + +func Solution(s1, s2, baseStr string) string { + uf := &UnionFind1061{ + Father: make([]int, 26), + } + for i := 0; i < 26; i++ { + uf.Father[i] = i + } + for i := 0; i < len(s1); i++ { + x := s1[i] - 'a' + y := s2[i] - 'a' + x1 := uf.FindFather(int(x)) + y1 := uf.FindFather(int(y)) + uf.Union(x1, y1) + } + sb := strings.Builder{} + for _, b := range baseStr { + f := uf.FindFather(int(b - 'a')) + sb.WriteByte(byte(f) + 'a') + } + return sb.String() +} diff --git a/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution_test.go b/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution_test.go new file mode 100644 index 000000000..e90a656d9 --- /dev/null +++ b/leetcode/1001-1100/1061.Lexicographically-Smallest-Equivalent-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + s1, s2, baseStr string + expect string + }{ + {"TestCase1", "parker", "morris", "parser", "makkek"}, + {"TestCase2", "hello", "world", "hold", "hdld"}, + {"TestCase3", "leetcode", "programs", "sourcecode", "aauaaaaada"}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.s1, c.s2, c.baseStr) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.s1, c.s2, c.baseStr) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From af12dffcf390f42ad8a75a3ef06906c714ed9ec6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 17 Jan 2023 11:21:09 +0800 Subject: [PATCH 0177/1057] Add solution and test-cases for problem 926 --- .../README.md | 33 ++++++++++------- .../Solution.go | 36 +++++++++++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/README.md b/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/README.md index a4fc3b6d6..b86d202ca 100644 --- a/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/README.md +++ b/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/README.md @@ -1,28 +1,35 @@ # [926.Flip String to Monotone Increasing][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +A binary string is monotone increasing if it consists of some number of `0`'s (possibly none), followed by some number of `1`'s (also possibly none). + +You are given a binary string `s`. You can flip `s[i]` changing it from `0` to `1` or from `1` to `0`. + +Return the minimum number of flips to make `s` monotone increasing. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "00110" +Output: 1 +Explanation: We flip the last digit to get 00111. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Flip String to Monotone Increasing -```go ``` +Input: s = "010110" +Output: 2 +Explanation: We flip to get 011111, or alternatively 000111. +``` + +**Example 3:** +``` +Input: s = "00011000" +Output: 2 +Explanation: We flip to get 00000000. +``` ## 结语 diff --git a/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution.go b/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution.go index d115ccf5e..7f978403e 100644 --- a/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution.go +++ b/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + endWithZero, endWithOne := 0, 0 + if s[0] == '0' { + endWithOne = 1 + } + if s[0] == '1' { + endWithZero = 1 + } + + for idx := 1; idx < len(s); idx++ { + if s[idx] == '1' { + // 前一个以0结尾,目前也想以0结尾,那就需要将1修改为0 + wantEndWithZero := endWithZero + 1 + if endWithOne > endWithZero { + endWithOne = endWithZero + } + endWithZero = wantEndWithZero + continue + } + + // 如果当前是0,那么就需要考虑,是否需要调整为1 + // 以0结尾,那么直接从前一个弄过来 + wantEndWithOne := endWithOne + if wantEndWithOne > endWithZero { + wantEndWithOne = endWithZero + } + wantEndWithOne++ + endWithOne = wantEndWithOne + } + + if endWithOne > endWithZero { + return endWithZero + } + return endWithOne } diff --git a/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution_test.go b/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution_test.go index 14ff50eb4..0eec706d5 100644 --- a/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/Solution_test.go +++ b/leetcode/901-1000/0926.Flip-String-to-Monotone-Increasing/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", "00110", 1}, + {"TestCase2", "010110", 2}, + {"TestCase3", "00011000", 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1c7afba8147e24fafc131ce3522c278daa408bcb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 18 Jan 2023 10:29:50 +0800 Subject: [PATCH 0178/1057] Add solution and test-cases for problem 918 --- .../README.md | 34 ++++++----- .../Solution.go | 58 ++++++++++++++++++- .../Solution_test.go | 21 ++++--- 3 files changed, 91 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/README.md b/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/README.md index 21b5e3c83..7b44f6e94 100644 --- a/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/README.md +++ b/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/README.md @@ -1,29 +1,37 @@ # [918.Maximum Sum Circular 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 +Given a **circular integer array** `nums` of length `n`, return the maximum possible sum of a non-empty **subarray** of `nums`. + +A **circular array** means the end of the array connects to the beginning of the array. Formally, the next element of `nums[i]` is `nums[(i + 1) % n]` and the previous element of `nums[i]` is `nums[(i - 1 + n) % n]`. + +A **subarray** may only include each element of the fixed buffer `nums` at most once. Formally, for a subarray `nums[i], nums[i + 1], ..., nums[j]`, there does not exist `i <= k1`, `k2 <= j` with `k1 % n == k2 % n`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,-2,3,-2] +Output: 3 +Explanation: Subarray [3] has maximum sum 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Sum Circular Subarray -```go +``` +Input: nums = [5,-3,5] +Output: 10 +Explanation: Subarray [5,5] has maximum sum 5 + 5 = 10. ``` +**Example 3:** + +``` +Input: nums = [-3,-2,-3] +Output: -2 +Explanation: Subarray [-2] has maximum sum -2. +``` + ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] diff --git a/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution.go b/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution.go index d115ccf5e..5ecab0f08 100644 --- a/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution.go +++ b/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +const min918 = -30000 + +func Solution(nums []int) int { + ans := min918 + l := len(nums) + if l == 1 { + return nums[0] + } + // 首先计算没有首尾相连的情况 + sub := make([]int, l) + copy(sub, nums) + for i := 0; i < l; i++ { + if i != 0 { + if sub[i-1]+sub[i] > sub[i] { + sub[i] = sub[i-1] + sub[i] + } + } + if sub[i] > ans { + ans = sub[i] + } + } + + // lr记录到i时候,连续数组的最大和例如1,-1,2, lr[0] = 1, lr[1] = 1, lr[2] = 2 + // rl 同理 + // sum就是对数组加和,我们最后只需要对rl[i]+lr[i-1]与最大结果比较即可 + lr := make([]int, l) + rl := make([]int, l) + sum := make([]int, l) + sum[0] = nums[0] + lm := nums[0] + for i := 1; i < l; i++ { + sum[i] = sum[i-1] + nums[i] + if sum[i] > lm { + lm = sum[i] + } + lr[i] = lm + } + total := sum[l-1] + if total > ans { + ans = total + } + + rm := nums[l-1] + for i := l - 1; i > 0; i-- { + sum[i] = total - sum[i-1] + if rm < sum[i] { + rm = sum[i] + } + rl[i] = rm + } + for i := l - 1; i > 0; i-- { + if lr[i-1]+rl[i] > ans { + ans = lr[i-1] + rl[i] + } + } + return ans } diff --git a/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution_test.go b/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution_test.go index 14ff50eb4..8ea3abe51 100644 --- a/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/Solution_test.go +++ b/leetcode/901-1000/0918.Maximum-Sum-Circular-Subarray/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{1, -2, 3, -2}, 3}, + {"TestCase2", []int{-3, -2, -3}, -2}, + {"TestCase3", []int{5, -3, 5}, 10}, + {"TestCase4", []int{1}, 1}, + {"TestCase5", []int{1, 2, 3, 4}, 10}, + {"TestCase6", []int{1, 2}, 3}, + {"TestCase7", []int{1}, 1}, + {"TestCase8", []int{1, -2, 3}, 4}, + {"TestCase9", []int{-2, 2, -2, 9}, 9}, + {"TestCase10", []int{8, -15, -29, -19}, 8}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c84a81b5de8c4dd792589d6b882b43dfc209b983 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 20 Jan 2023 13:45:28 +0800 Subject: [PATCH 0179/1057] Add solution and test-cases for problem 491 --- .../0491.Increasing-Subsequences/README.md | 22 +++++-------- .../0491.Increasing-Subsequences/Solution.go | 31 +++++++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0491.Increasing-Subsequences/README.md b/leetcode/401-500/0491.Increasing-Subsequences/README.md index ec1b3fb6f..312642787 100644 --- a/leetcode/401-500/0491.Increasing-Subsequences/README.md +++ b/leetcode/401-500/0491.Increasing-Subsequences/README.md @@ -1,28 +1,22 @@ # [491.Increasing 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 an integer array `nums`, return all the different possible non-decreasing subsequences of the given array with at least two elements. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: nums = [4,6,7,7] +Output: [[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]] -## 题意 -> ... +``` -## 题解 +**Example 2:** -### 思路1 -> ... -Increasing Subsequences -```go ``` - +Input: nums = [4,4,3,2,1] +Output: [[4,4]] +``` ## 结语 diff --git a/leetcode/401-500/0491.Increasing-Subsequences/Solution.go b/leetcode/401-500/0491.Increasing-Subsequences/Solution.go index d115ccf5e..9a1b72b06 100644 --- a/leetcode/401-500/0491.Increasing-Subsequences/Solution.go +++ b/leetcode/401-500/0491.Increasing-Subsequences/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) [][]int { + ans := make([][]int, 0) + l := len(nums) + visited := make(map[[15]int]struct{}) + var dfs func(int, [15]int, int, map[[15]int]struct{}) + dfs = func(start int, path [15]int, idx int, visited map[[15]int]struct{}) { + if start >= l { + return + } + for next := start + 1; next < l; next++ { + if nums[next] < nums[start] { + continue + } + path[idx] = nums[next] + if _, ok := visited[path]; ok { + continue + } + visited[path] = struct{}{} + dst := make([]int, idx+1) + copy(dst, path[:idx+1]) + ans = append(ans, dst) + dfs(next, path, idx+1, visited) + } + } + for i := 0; i < l-1; i++ { + path := [15]int{nums[i], -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, -101} + dfs(i, path, 1, visited) + } + return ans } diff --git a/leetcode/401-500/0491.Increasing-Subsequences/Solution_test.go b/leetcode/401-500/0491.Increasing-Subsequences/Solution_test.go index 14ff50eb4..6af381712 100644 --- a/leetcode/401-500/0491.Increasing-Subsequences/Solution_test.go +++ b/leetcode/401-500/0491.Increasing-Subsequences/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, 6, 7, 7}, [][]int{{4, 6}, {4, 6, 7}, {4, 6, 7, 7}, {4, 7}, {4, 7, 7}, {6, 7}, {6, 7, 7}, {7, 7}}}, + {"TestCase2", []int{4, 4, 3, 2, 1}, [][]int{{4, 4}}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4f2f54a372afa7b15dd140ecc365f4ef4c9768da Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 20 Jan 2023 21:42:57 +0800 Subject: [PATCH 0180/1057] Add solution and test-cases for problem 1310 --- .../1310.XOR-Queries-of-a-Subarray/README.md | 36 +++++++++++-------- .../Solution.go | 23 ++++++++++-- .../Solution_test.go | 24 +++++++------ 3 files changed, 56 insertions(+), 27 deletions(-) diff --git a/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/README.md b/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/README.md index bf16c281d..f7e9c3d43 100644 --- a/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/README.md +++ b/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/README.md @@ -1,28 +1,36 @@ # [1310.XOR Queries of a 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 `arr` of positive integers. You are also given the array `queries` where `queries[i] = [lefti, righti]`. + +For each query i compute the **XOR** of elements from lefti to righti (that is, `arr[lefti] XOR arr[lefti + 1] XOR ... XOR arr[righti]` ). + +Return an array `answer` where `answer[i]` is the answer to the ith query. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]] +Output: [2,7,14,8] +Explanation: +The binary representation of the elements in the array are: +1 = 0001 +3 = 0011 +4 = 0100 +8 = 1000 +The XOR values for queries are: +[0,1] = 1 xor 3 = 2 +[1,2] = 3 xor 4 = 7 +[0,3] = 1 xor 3 xor 4 xor 8 = 14 +[3,3] = 8 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -XOR Queries of a Subarray -```go ``` - +Input: arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]] +Output: [8,0,4,4] +``` ## 结语 diff --git a/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution.go b/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution.go index d115ccf5e..b8529691d 100644 --- a/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution.go +++ b/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, queries [][]int) []int { + l := len(arr) + ans := make([]int, len(queries)) + xor := make([]int, len(arr)) + xor[0] = arr[0] + for i := 1; i < l; i++ { + xor[i] = xor[i-1] ^ arr[i] + } + for i, q := range queries { + left, right := q[0], q[1] + if left == right { + ans[i] = arr[right] + continue + } + if left == 0 { + ans[i] = xor[right] + continue + } + ans[i] = xor[right] ^ xor[left-1] + } + return ans } diff --git a/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution_test.go b/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution_test.go index 14ff50eb4..848b6d538 100644 --- a/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution_test.go +++ b/leetcode/1301-1400/1310.XOR-Queries-of-a-Subarray/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + arr []int + queries [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 4, 8}, [][]int{{0, 1}, {1, 2}, {0, 3}, {3, 3}}, []int{2, 7, 14, 8}}, + {"TestCase2", []int{4, 8, 2, 10}, [][]int{ + {2, 3}, {1, 3}, {0, 0}, {0, 3}, + }, []int{8, 0, 4, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.arr, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2b1a22f361b034ae7d7066a35bcf4bf837288940 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Jan 2023 10:21:23 +0800 Subject: [PATCH 0181/1057] Add solution and test-cases for problem 93 --- .../1-100/0093.Restore-IP-Addresses/README.md | 36 +++++++++++++++++ .../0093.Restore-IP-Addresses/Solution.go | 39 +++++++++++++++++++ .../Solution_test.go | 13 +++++-- 3 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 leetcode/1-100/0093.Restore-IP-Addresses/README.md diff --git a/leetcode/1-100/0093.Restore-IP-Addresses/README.md b/leetcode/1-100/0093.Restore-IP-Addresses/README.md new file mode 100644 index 000000000..4f2639931 --- /dev/null +++ b/leetcode/1-100/0093.Restore-IP-Addresses/README.md @@ -0,0 +1,36 @@ +# [93. Restore IP Addresses][title] + +## Description +A **valid IP address** consists of exactly four integers separated by single dots. Each integer is between `0` and `255` (**inclusive**) and cannot have leading zeros. + +- For example, `"0.1.2.201"` and `"192.168.1.1"` are **valid** IP addresses, but `"0.011.255.245"`, `"192.168.1.312"` and `"192.168@1.1"` are **invalid** IP addresses. + +Given a string `s` containing only digits, return all possible valid IP addresses that can be formed by inserting dots into `s`. You are **not** allowed to reorder or remove any digits in `s`. You may return the valid IP addresses in **any** order. + +**Example 1:** + +``` +Input: s = "25525511135" +Output: ["255.255.11.135","255.255.111.35"] +``` + +**Example 2:** + +``` +Input: s = "0000" +Output: ["0.0.0.0"] +``` + +**Example 3:** + +``` +Input: s = "101023" +Output: ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/restore-ip-addresses/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1-100/0093.Restore-IP-Addresses/Solution.go b/leetcode/1-100/0093.Restore-IP-Addresses/Solution.go index 5fdc6e5b0..e69a9a2db 100644 --- a/leetcode/1-100/0093.Restore-IP-Addresses/Solution.go +++ b/leetcode/1-100/0093.Restore-IP-Addresses/Solution.go @@ -1,6 +1,7 @@ package Solution import ( + "fmt" "strconv" "strings" ) @@ -35,3 +36,41 @@ func dfs(s string, temp []string, result *[]string) { temp = temp[:len(temp)-1] } } + +func Solution(s string) []string { + ans := make([]string, 0) + var dfs func(int, int, string) + dfs = func(start, dot int, prefix string) { + if start >= len(s) { + return + } + if dot == 0 { + diff := len(s) - start + if diff != 1 && s[start] == '0' { + return + } + now := s[start:] + + now1, _ := strconv.Atoi(now) + if now1 >= 0 && now1 <= 255 { + ans = append(ans, prefix+now) + } + return + } + if s[start] == '0' { + dfs(start+1, dot-1, prefix+"0.") + return + } + + for end := start; end <= start+2 && end < len(s); end++ { + now := s[start : end+1] + now1, _ := strconv.Atoi(s[start : end+1]) + if now1 >= 0 && now1 <= 255 { + dfs(end+1, dot-1, prefix+fmt.Sprintf("%s.", now)) + } + } + } + + dfs(0, 3, "") + return ans +} diff --git a/leetcode/1-100/0093.Restore-IP-Addresses/Solution_test.go b/leetcode/1-100/0093.Restore-IP-Addresses/Solution_test.go index a60e9c633..bcc7ca686 100644 --- a/leetcode/1-100/0093.Restore-IP-Addresses/Solution_test.go +++ b/leetcode/1-100/0093.Restore-IP-Addresses/Solution_test.go @@ -13,7 +13,9 @@ func TestSolution(t *testing.T) { inputs string expect []string }{ - {"TestCase", "25525511135", []string{"255.255.11.135", "255.255.111.35"}}, + {"TestCase1", "25525511135", []string{"255.255.11.135", "255.255.111.35"}}, + {"TestCase2", "101023", []string{"1.0.10.23", "1.0.102.3", "10.1.0.23", "10.10.2.3", "101.0.2.3"}}, + {"TestCase3", "0000", []string{"0.0.0.0"}}, } // 开始测试 @@ -24,14 +26,19 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution(c.inputs) + if !reflect.DeepEqual(got, 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 0b9fc3e207918ac4f5af5488f308fbe5b565e081 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Jan 2023 13:11:04 +0800 Subject: [PATCH 0182/1057] Add solution and test-cases for problem 1441 --- .../README.md | 60 +++++++++++++++++++ .../Solution.go | 20 +++++++ .../Solution_test.go | 40 +++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/README.md create mode 100644 leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution.go create mode 100644 leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution_test.go diff --git a/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/README.md b/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/README.md new file mode 100644 index 000000000..c879fe823 --- /dev/null +++ b/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/README.md @@ -0,0 +1,60 @@ +# [1441. Build an Array With Stack Operations][title] + +## Description +You are given an integer array `target` and an integer `n`. + +You have an empty stack with the two following operations: + +- `"Push"`: pushes an integer to the top of the stack. +- `"Pop"`: removes the integer on the top of the stack. + +You also have a stream of the integers in the range `[1, n]`. + +Use the two stack operations to make the numbers in the stack (from the bottom to the top) equal to `target`. You should follow the following rules: + +- If the stream of the integers is not empty, pick the next integer from the stream and push it to the top of the stack. +- If the stack is not empty, pop the integer at the top of the stack. +- If, at any moment, the elements in the stack (from the bottom to the top) are equal to `target`, do not read new integers from the stream and do not do more operations on the stack. +Return the stack operations needed to build `target` following the mentioned rules. If there are multiple valid answers, return **any of them**. + +**Example 1:** + +``` +Input: target = [1,3], n = 3 +Output: ["Push","Push","Pop","Push"] +Explanation: Initially the stack s is empty. The last element is the top of the stack. +Read 1 from the stream and push it to the stack. s = [1]. +Read 2 from the stream and push it to the stack. s = [1,2]. +Pop the integer on the top of the stack. s = [1]. +Read 3 from the stream and push it to the stack. s = [1,3]. +``` + +**Example 2:** + +``` +Input: target = [1,2,3], n = 3 +Output: ["Push","Push","Push"] +Explanation: Initially the stack s is empty. The last element is the top of the stack. +Read 1 from the stream and push it to the stack. s = [1]. +Read 2 from the stream and push it to the stack. s = [1,2]. +Read 3 from the stream and push it to the stack. s = [1,2,3]. +``` + +**Example 3:** + +``` +Input: target = [1,2], n = 4 +Output: ["Push","Push"] +Explanation: Initially the stack s is empty. The last element is the top of the stack. +Read 1 from the stream and push it to the stack. s = [1]. +Read 2 from the stream and push it to the stack. s = [1,2]. +Since the stack (from the bottom to the top) is equal to target, we stop the stack operations. +The answers that read integer 3 from the stream are not accepted. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/build-an-array-with-stack-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution.go b/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution.go new file mode 100644 index 000000000..73501fbc6 --- /dev/null +++ b/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution.go @@ -0,0 +1,20 @@ +package Solution + +const ( + push = "Push" + pop = "Pop" +) + +func Solution(target []int, n int) []string { + ans := make([]string, 0) + start := 0 + for input := 1; input <= n && start < len(target); input++ { + if target[start] > input { + ans = append(ans, push, pop) + continue + } + ans = append(ans, push) + start++ + } + return ans +} diff --git a/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution_test.go b/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution_test.go new file mode 100644 index 000000000..2139d0918 --- /dev/null +++ b/leetcode/1401-1500/1441.Build-an-Array-With-Stack-Operations/Solution_test.go @@ -0,0 +1,40 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + target []int + n int + expect []string + }{ + {"TestCase1", []int{1, 3}, 3, []string{"Push", "Push", "Pop", "Push"}}, + {"TestCase2", []int{1, 2, 3}, 3, []string{"Push", "Push", "Push"}}, + {"TestCase3", []int{1, 2}, 4, []string{"Push", "Push"}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.target, c.n) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.target, c.n) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 2fc4e079a18d21fbc18ea8643da605e8854f2ce8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Jan 2023 16:06:36 +0800 Subject: [PATCH 0183/1057] Add solution and test-cases for problem 921 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 14 +++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/README.md b/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/README.md index 4973d1c76..f95802235 100644 --- a/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/README.md +++ b/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/README.md @@ -1,28 +1,30 @@ # [921.Minimum Add to Make Parentheses Valid][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +A parentheses string is valid if and only if: + +- It is the empty string, +- It can be written as `AB` (`A` concatenated with `B`), where A and B are valid strings, or +- It can be written as `(A)`, where `A` is a valid string. + +You are given a parentheses string `s`. In one move, you can insert a parenthesis at any position of the string. + +- For example, if `s = "()))"`, you can insert an opening parenthesis to be `"(()))"` or a closing parenthesis to be `"())))"`. +Return the minimum number of moves required to make `s` valid. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "())" +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Add to Make Parentheses Valid -```go ``` - +Input: s = "(((" +Output: 3 +``` ## 结语 diff --git a/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution.go b/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution.go index d115ccf5e..799952c44 100644 --- a/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution.go +++ b/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + stack := make([]byte, len(s)) + i := -1 + for _, b := range []byte(s) { + if i == -1 || !(b == ')' && stack[i] == '(') { + i++ + stack[i] = b + continue + } + i-- + } + return i + 1 } diff --git a/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution_test.go b/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution_test.go index 14ff50eb4..491940d8a 100644 --- a/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution_test.go +++ b/leetcode/901-1000/0921.Minimum-Add-to-Make-Parentheses-Valid/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "())", 1}, + {"TestCase2", "(((", 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 10b120356b812590ab49c94706e753745cfd920f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 21 Jan 2023 19:17:13 +0800 Subject: [PATCH 0184/1057] add problems 2401-2500 --- cmd/main.go | 1 + .../2401.Longest-Nice-Subarray/README.md | 32 +++++++++++++++ .../2401.Longest-Nice-Subarray/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2402.Meeting-Rooms-III/README.md | 32 +++++++++++++++ .../2402.Meeting-Rooms-III/Solution.go | 5 +++ .../2402.Meeting-Rooms-III/Solution_test.go | 39 +++++++++++++++++++ .../2404.Most-Frequent-Even-Element/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2409.Count-Days-Spent-Together/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2413.Smallest-Even-Multiple/README.md | 32 +++++++++++++++ .../2413.Smallest-Even-Multiple/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2401-2500/2418.Sort-the-People/README.md | 32 +++++++++++++++ .../2418.Sort-the-People/Solution.go | 5 +++ .../2418.Sort-the-People/Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2420.Find-All-Good-Indices/README.md | 32 +++++++++++++++ .../2420.Find-All-Good-Indices/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2421.Number-of-Good-Paths/README.md | 32 +++++++++++++++ .../2421.Number-of-Good-Paths/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2424.Longest-Uploaded-Prefix/README.md | 32 +++++++++++++++ .../2424.Longest-Uploaded-Prefix/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2427.Number-of-Common-Factors/README.md | 32 +++++++++++++++ .../2427.Number-of-Common-Factors/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2401-2500/2429.Minimize-XOR/README.md | 32 +++++++++++++++ .../2401-2500/2429.Minimize-XOR/Solution.go | 5 +++ .../2429.Minimize-XOR/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 +++++++++++++++++++ .../2439.Minimize-Maximum-of-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 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2451.Odd-String-Difference/README.md | 32 +++++++++++++++ .../2451.Odd-String-Difference/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2453.Destroy-Sequential-Targets/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2454.Next-Greater-Element-IV/README.md | 32 +++++++++++++++ .../2454.Next-Greater-Element-IV/Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2456.Most-Popular-Video-Creator/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2469.Convert-the-Temperature/README.md | 32 +++++++++++++++ .../2469.Convert-the-Temperature/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2483.Minimum-Penalty-for-a-Shop/README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../README.md | 32 +++++++++++++++ .../Solution.go | 5 +++ .../Solution_test.go | 39 +++++++++++++++++++ .../2485.Find-the-Pivot-Integer/README.md | 32 +++++++++++++++ .../2485.Find-the-Pivot-Integer/Solution.go | 5 +++ .../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 +++++++++++++++++++ .../2490.Circular-Sentence/README.md | 32 +++++++++++++++ .../2490.Circular-Sentence/Solution.go | 5 +++ .../2490.Circular-Sentence/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 +++++++++++++++++++ .../2401-2500/2498.Frog-Jump-II/README.md | 32 +++++++++++++++ .../2401-2500/2498.Frog-Jump-II/Solution.go | 5 +++ .../2498.Frog-Jump-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 +++++++++++++++++++ 250 files changed, 6309 insertions(+) create mode 100755 leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md create mode 100644 leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go create mode 100644 leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go create mode 100755 leetcode/2401-2500/2402.Meeting-Rooms-III/README.md create mode 100644 leetcode/2401-2500/2402.Meeting-Rooms-III/Solution.go create mode 100644 leetcode/2401-2500/2402.Meeting-Rooms-III/Solution_test.go create mode 100755 leetcode/2401-2500/2404.Most-Frequent-Even-Element/README.md create mode 100644 leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution.go create mode 100644 leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution_test.go create mode 100755 leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md create mode 100644 leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go create mode 100644 leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go create mode 100755 leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/README.md create mode 100644 leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution.go create mode 100644 leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution_test.go create mode 100755 leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/README.md create mode 100644 leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution.go create mode 100644 leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution_test.go create mode 100755 leetcode/2401-2500/2409.Count-Days-Spent-Together/README.md create mode 100644 leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution.go create mode 100644 leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution_test.go create mode 100755 leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md create mode 100644 leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go create mode 100644 leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go create mode 100755 leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md create mode 100644 leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go create mode 100644 leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go create mode 100755 leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/README.md create mode 100644 leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution.go create mode 100644 leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution_test.go create mode 100755 leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md create mode 100644 leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go create mode 100644 leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go create mode 100755 leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md create mode 100644 leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go create mode 100644 leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go create mode 100755 leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md create mode 100644 leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go create mode 100644 leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go create mode 100755 leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md create mode 100644 leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go create mode 100644 leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go create mode 100755 leetcode/2401-2500/2418.Sort-the-People/README.md create mode 100644 leetcode/2401-2500/2418.Sort-the-People/Solution.go create mode 100644 leetcode/2401-2500/2418.Sort-the-People/Solution_test.go create mode 100755 leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md create mode 100644 leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go create mode 100644 leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go create mode 100755 leetcode/2401-2500/2420.Find-All-Good-Indices/README.md create mode 100644 leetcode/2401-2500/2420.Find-All-Good-Indices/Solution.go create mode 100644 leetcode/2401-2500/2420.Find-All-Good-Indices/Solution_test.go create mode 100755 leetcode/2401-2500/2421.Number-of-Good-Paths/README.md create mode 100644 leetcode/2401-2500/2421.Number-of-Good-Paths/Solution.go create mode 100644 leetcode/2401-2500/2421.Number-of-Good-Paths/Solution_test.go create mode 100755 leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/README.md create mode 100644 leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution.go create mode 100644 leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution_test.go create mode 100755 leetcode/2401-2500/2424.Longest-Uploaded-Prefix/README.md create mode 100644 leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution.go create mode 100644 leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution_test.go create mode 100755 leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md create mode 100644 leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go create mode 100644 leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go create mode 100755 leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/README.md create mode 100644 leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution.go create mode 100644 leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution_test.go create mode 100755 leetcode/2401-2500/2427.Number-of-Common-Factors/README.md create mode 100644 leetcode/2401-2500/2427.Number-of-Common-Factors/Solution.go create mode 100644 leetcode/2401-2500/2427.Number-of-Common-Factors/Solution_test.go create mode 100755 leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/README.md create mode 100644 leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution.go create mode 100644 leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution_test.go create mode 100755 leetcode/2401-2500/2429.Minimize-XOR/README.md create mode 100644 leetcode/2401-2500/2429.Minimize-XOR/Solution.go create mode 100644 leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go create mode 100755 leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/README.md create mode 100644 leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution.go create mode 100644 leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution_test.go create mode 100755 leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md create mode 100644 leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go create mode 100644 leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go create mode 100755 leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/README.md create mode 100644 leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution.go create mode 100644 leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution_test.go create mode 100755 leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md create mode 100644 leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go create mode 100644 leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go create mode 100755 leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/README.md create mode 100644 leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution.go create mode 100644 leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution_test.go create mode 100755 leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/README.md create mode 100644 leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution.go create mode 100644 leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution_test.go create mode 100755 leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md create mode 100644 leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go create mode 100644 leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go create mode 100755 leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md create mode 100644 leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go create mode 100644 leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go create mode 100755 leetcode/2401-2500/2440.Create-Components-With-Same-Value/README.md create mode 100644 leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution.go create mode 100644 leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution_test.go create mode 100755 leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/README.md create mode 100644 leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution.go create mode 100644 leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution_test.go create mode 100755 leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/README.md create mode 100644 leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution.go create mode 100644 leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution_test.go create mode 100755 leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/README.md create mode 100644 leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution.go create mode 100644 leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution_test.go create mode 100755 leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md create mode 100644 leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go create mode 100644 leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go create mode 100755 leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/README.md create mode 100644 leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution.go create mode 100644 leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution_test.go create mode 100755 leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/README.md create mode 100644 leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution.go create mode 100644 leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution_test.go create mode 100755 leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md create mode 100644 leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go create mode 100644 leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go create mode 100755 leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/README.md create mode 100644 leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution.go create mode 100644 leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution_test.go create mode 100755 leetcode/2401-2500/2451.Odd-String-Difference/README.md create mode 100644 leetcode/2401-2500/2451.Odd-String-Difference/Solution.go create mode 100644 leetcode/2401-2500/2451.Odd-String-Difference/Solution_test.go create mode 100755 leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/README.md create mode 100644 leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution.go create mode 100644 leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution_test.go create mode 100755 leetcode/2401-2500/2453.Destroy-Sequential-Targets/README.md create mode 100644 leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution.go create mode 100644 leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution_test.go create mode 100755 leetcode/2401-2500/2454.Next-Greater-Element-IV/README.md create mode 100644 leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution.go create mode 100644 leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution_test.go create mode 100755 leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/README.md create mode 100644 leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution.go create mode 100644 leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution_test.go create mode 100755 leetcode/2401-2500/2456.Most-Popular-Video-Creator/README.md create mode 100644 leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution.go create mode 100644 leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution_test.go create mode 100755 leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/README.md create mode 100644 leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution.go create mode 100644 leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution_test.go create mode 100755 leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/README.md create mode 100644 leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution.go create mode 100644 leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution_test.go create mode 100755 leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md create mode 100644 leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go create mode 100644 leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution_test.go create mode 100755 leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md create mode 100644 leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go create mode 100644 leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go create mode 100755 leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md create mode 100644 leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go create mode 100644 leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go create mode 100755 leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/README.md create mode 100644 leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution.go create mode 100644 leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution_test.go create mode 100755 leetcode/2401-2500/2465.Number-of-Distinct-Averages/README.md create mode 100644 leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution.go create mode 100644 leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution_test.go create mode 100755 leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md create mode 100644 leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go create mode 100644 leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go create mode 100755 leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/README.md create mode 100644 leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution.go create mode 100644 leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution_test.go create mode 100755 leetcode/2401-2500/2468.Split-Message-Based-on-Limit/README.md create mode 100644 leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution.go create mode 100644 leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution_test.go create mode 100755 leetcode/2401-2500/2469.Convert-the-Temperature/README.md create mode 100644 leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go create mode 100644 leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go create mode 100755 leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/README.md create mode 100644 leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution.go create mode 100644 leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution_test.go create mode 100755 leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/README.md create mode 100644 leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go create mode 100644 leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go create mode 100755 leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/README.md create mode 100644 leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution.go create mode 100644 leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution_test.go create mode 100755 leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/README.md create mode 100644 leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution.go create mode 100644 leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution_test.go create mode 100755 leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/README.md create mode 100644 leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution.go create mode 100644 leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution_test.go create mode 100755 leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/README.md create mode 100644 leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go create mode 100644 leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go create mode 100755 leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/README.md create mode 100644 leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution.go create mode 100644 leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution_test.go create mode 100755 leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/README.md create mode 100644 leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution.go create mode 100644 leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution_test.go create mode 100755 leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/README.md create mode 100644 leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution.go create mode 100644 leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution_test.go create mode 100755 leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md create mode 100644 leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go create mode 100644 leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go create mode 100755 leetcode/2401-2500/2484.Count-Palindromic-Subsequences/README.md create mode 100644 leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution.go create mode 100644 leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution_test.go create mode 100755 leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md create mode 100644 leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go create mode 100644 leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go create mode 100755 leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/README.md create mode 100644 leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution.go create mode 100644 leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution_test.go create mode 100755 leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/README.md create mode 100644 leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution.go create mode 100644 leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution_test.go create mode 100755 leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/README.md create mode 100644 leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution.go create mode 100644 leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution_test.go create mode 100755 leetcode/2401-2500/2490.Circular-Sentence/README.md create mode 100644 leetcode/2401-2500/2490.Circular-Sentence/Solution.go create mode 100644 leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go create mode 100755 leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/README.md create mode 100644 leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go create mode 100644 leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go create mode 100755 leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md create mode 100644 leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go create mode 100644 leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go create mode 100755 leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/README.md create mode 100644 leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution.go create mode 100644 leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution_test.go create mode 100755 leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/README.md create mode 100644 leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution.go create mode 100644 leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution_test.go create mode 100755 leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/README.md create mode 100644 leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution.go create mode 100644 leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution_test.go create mode 100755 leetcode/2401-2500/2498.Frog-Jump-II/README.md create mode 100644 leetcode/2401-2500/2498.Frog-Jump-II/Solution.go create mode 100644 leetcode/2401-2500/2498.Frog-Jump-II/Solution_test.go create mode 100755 leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/README.md create mode 100644 leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution.go create mode 100644 leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution_test.go create mode 100755 leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/README.md create mode 100644 leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution.go create mode 100644 leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution_test.go diff --git a/cmd/main.go b/cmd/main.go index c7079ab11..1f121363d 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -31,6 +31,7 @@ func main() { //leetcode.MakeDirFromTo(problems, 2101, 2200) //leetcode.MakeDirFromTo(problems, 2201, 2300) //leetcode.MakeDirFromTo(problems, 2301, 2400) + //leetcode.MakeDirFromTo(problems, 2401, 2500) // leetcode.MakeDir(problems) diff --git a/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md b/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md new file mode 100755 index 000000000..dfcb6ca72 --- /dev/null +++ b/leetcode/2401-2500/2401.Longest-Nice-Subarray/README.md @@ -0,0 +1,32 @@ +# [2401.Longest Nice Subarray][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Nice Subarray +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-nice-subarray/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2401.Longest-Nice-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2402.Meeting-Rooms-III/README.md b/leetcode/2401-2500/2402.Meeting-Rooms-III/README.md new file mode 100755 index 000000000..44a18eb34 --- /dev/null +++ b/leetcode/2401-2500/2402.Meeting-Rooms-III/README.md @@ -0,0 +1,32 @@ +# [2402.Meeting Rooms III][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Meeting Rooms III +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/meeting-rooms-iii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2402.Meeting-Rooms-III/Solution.go b/leetcode/2401-2500/2402.Meeting-Rooms-III/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2402.Meeting-Rooms-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2402.Meeting-Rooms-III/Solution_test.go b/leetcode/2401-2500/2402.Meeting-Rooms-III/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2402.Meeting-Rooms-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2404.Most-Frequent-Even-Element/README.md b/leetcode/2401-2500/2404.Most-Frequent-Even-Element/README.md new file mode 100755 index 000000000..efc650c8e --- /dev/null +++ b/leetcode/2401-2500/2404.Most-Frequent-Even-Element/README.md @@ -0,0 +1,32 @@ +# [2404.Most Frequent Even Element][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Most Frequent Even Element +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/most-frequent-even-element/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution.go b/leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution_test.go b/leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2404.Most-Frequent-Even-Element/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md b/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md new file mode 100755 index 000000000..cff395077 --- /dev/null +++ b/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md @@ -0,0 +1,32 @@ +# [2405.Optimal Partition of 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 +> ... +Optimal Partition of String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/optimal-partition-of-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2405.Optimal-Partition-of-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/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/README.md b/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/README.md new file mode 100755 index 000000000..b18dd9b42 --- /dev/null +++ b/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/README.md @@ -0,0 +1,32 @@ +# [2406.Divide Intervals Into Minimum Number of 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Divide Intervals Into Minimum Number of Groups +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divide-intervals-into-minimum-number-of-groups/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution.go b/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution_test.go b/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2406.Divide-Intervals-Into-Minimum-Number-of-Groups/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/README.md b/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/README.md new file mode 100755 index 000000000..7600e2f33 --- /dev/null +++ b/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/README.md @@ -0,0 +1,32 @@ +# [2407.Longest Increasing 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 Increasing Subsequence II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-increasing-subsequence-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution.go b/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution_test.go b/leetcode/2401-2500/2407.Longest-Increasing-Subsequence-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2407.Longest-Increasing-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/2401-2500/2409.Count-Days-Spent-Together/README.md b/leetcode/2401-2500/2409.Count-Days-Spent-Together/README.md new file mode 100755 index 000000000..b5d49cd00 --- /dev/null +++ b/leetcode/2401-2500/2409.Count-Days-Spent-Together/README.md @@ -0,0 +1,32 @@ +# [2409.Count Days Spent Together][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Days Spent Together +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-days-spent-together/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution.go b/leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution_test.go b/leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2409.Count-Days-Spent-Together/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md new file mode 100755 index 000000000..0746f9499 --- /dev/null +++ b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/README.md @@ -0,0 +1,32 @@ +# [2410.Maximum Matching of Players With Trainers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Matching of Players With Trainers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-matching-of-players-with-trainers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2410.Maximum-Matching-of-Players-With-Trainers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md new file mode 100755 index 000000000..6b276380b --- /dev/null +++ b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/README.md @@ -0,0 +1,32 @@ +# [2411.Smallest Subarrays With Maximum Bitwise OR][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Subarrays With Maximum Bitwise OR +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-subarrays-with-maximum-bitwise-or/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2411.Smallest-Subarrays-With-Maximum-Bitwise-OR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/README.md b/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/README.md new file mode 100755 index 000000000..7dd20f6d7 --- /dev/null +++ b/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/README.md @@ -0,0 +1,32 @@ +# [2412.Minimum Money Required Before Transactions][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Money Required Before Transactions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-money-required-before-transactions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution.go b/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution_test.go b/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2412.Minimum-Money-Required-Before-Transactions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md b/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md new file mode 100755 index 000000000..c16d14f57 --- /dev/null +++ b/leetcode/2401-2500/2413.Smallest-Even-Multiple/README.md @@ -0,0 +1,32 @@ +# [2413.Smallest Even Multiple][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Smallest Even Multiple +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/smallest-even-multiple/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2413.Smallest-Even-Multiple/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md new file mode 100755 index 000000000..0ae8f0b7f --- /dev/null +++ b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/README.md @@ -0,0 +1,32 @@ +# [2414.Length of the Longest Alphabetical Continuous Substring][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Length of the Longest Alphabetical Continuous Substring +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/length-of-the-longest-alphabetical-continuous-substring/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-Substring/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2414.Length-of-the-Longest-Alphabetical-Continuous-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/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md new file mode 100755 index 000000000..638f92e4a --- /dev/null +++ b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md @@ -0,0 +1,32 @@ +# [2415.Reverse Odd Levels of Binary Tree][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Reverse Odd Levels of Binary Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reverse-odd-levels-of-binary-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md new file mode 100755 index 000000000..f06f2e380 --- /dev/null +++ b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/README.md @@ -0,0 +1,32 @@ +# [2416.Sum of Prefix Scores of Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Prefix Scores of Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-prefix-scores-of-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2416.Sum-of-Prefix-Scores-of-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2418.Sort-the-People/README.md b/leetcode/2401-2500/2418.Sort-the-People/README.md new file mode 100755 index 000000000..d71a8387a --- /dev/null +++ b/leetcode/2401-2500/2418.Sort-the-People/README.md @@ -0,0 +1,32 @@ +# [2418.Sort the People][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sort the People +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-the-people/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2418.Sort-the-People/Solution.go b/leetcode/2401-2500/2418.Sort-the-People/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2418.Sort-the-People/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2418.Sort-the-People/Solution_test.go b/leetcode/2401-2500/2418.Sort-the-People/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2418.Sort-the-People/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md new file mode 100755 index 000000000..4e5d0c596 --- /dev/null +++ b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/README.md @@ -0,0 +1,32 @@ +# [2419.Longest Subarray With Maximum Bitwise AND][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Subarray With Maximum Bitwise AND +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-subarray-with-maximum-bitwise-and/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2419.Longest-Subarray-With-Maximum-Bitwise-AND/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2420.Find-All-Good-Indices/README.md b/leetcode/2401-2500/2420.Find-All-Good-Indices/README.md new file mode 100755 index 000000000..349679a31 --- /dev/null +++ b/leetcode/2401-2500/2420.Find-All-Good-Indices/README.md @@ -0,0 +1,32 @@ +# [2420.Find All Good Indices][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find All Good Indices +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-all-good-indices/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2420.Find-All-Good-Indices/Solution.go b/leetcode/2401-2500/2420.Find-All-Good-Indices/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2420.Find-All-Good-Indices/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2420.Find-All-Good-Indices/Solution_test.go b/leetcode/2401-2500/2420.Find-All-Good-Indices/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2420.Find-All-Good-Indices/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2421.Number-of-Good-Paths/README.md b/leetcode/2401-2500/2421.Number-of-Good-Paths/README.md new file mode 100755 index 000000000..8bc080d29 --- /dev/null +++ b/leetcode/2401-2500/2421.Number-of-Good-Paths/README.md @@ -0,0 +1,32 @@ +# [2421.Number of Good Paths][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Good Paths +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-good-paths/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2421.Number-of-Good-Paths/Solution.go b/leetcode/2401-2500/2421.Number-of-Good-Paths/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2421.Number-of-Good-Paths/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2421.Number-of-Good-Paths/Solution_test.go b/leetcode/2401-2500/2421.Number-of-Good-Paths/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2421.Number-of-Good-Paths/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/README.md b/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/README.md new file mode 100755 index 000000000..24deedc53 --- /dev/null +++ b/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/README.md @@ -0,0 +1,32 @@ +# [2423.Remove Letter To Equalize 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 +> ... +Remove Letter To Equalize Frequency +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-letter-to-equalize-frequency/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution.go b/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution_test.go b/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-Frequency/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2423.Remove-Letter-To-Equalize-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/2401-2500/2424.Longest-Uploaded-Prefix/README.md b/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/README.md new file mode 100755 index 000000000..51145617a --- /dev/null +++ b/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/README.md @@ -0,0 +1,32 @@ +# [2424.Longest Uploaded Prefix][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Longest Uploaded Prefix +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-uploaded-prefix/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution.go b/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution_test.go b/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2424.Longest-Uploaded-Prefix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md new file mode 100755 index 000000000..01b852845 --- /dev/null +++ b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/README.md @@ -0,0 +1,32 @@ +# [2425.Bitwise XOR of All Pairings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Bitwise XOR of All Pairings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/bitwise-xor-of-all-pairings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2425.Bitwise-XOR-of-All-Pairings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/README.md b/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/README.md new file mode 100755 index 000000000..355edc38a --- /dev/null +++ b/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/README.md @@ -0,0 +1,32 @@ +# [2426.Number of Pairs Satisfying Inequality][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Pairs Satisfying Inequality +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-pairs-satisfying-inequality/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution.go b/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution_test.go b/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2426.Number-of-Pairs-Satisfying-Inequality/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2427.Number-of-Common-Factors/README.md b/leetcode/2401-2500/2427.Number-of-Common-Factors/README.md new file mode 100755 index 000000000..5277a19c1 --- /dev/null +++ b/leetcode/2401-2500/2427.Number-of-Common-Factors/README.md @@ -0,0 +1,32 @@ +# [2427.Number of Common 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Common Factors +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-common-factors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2427.Number-of-Common-Factors/Solution.go b/leetcode/2401-2500/2427.Number-of-Common-Factors/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2427.Number-of-Common-Factors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2427.Number-of-Common-Factors/Solution_test.go b/leetcode/2401-2500/2427.Number-of-Common-Factors/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2427.Number-of-Common-Factors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..ae3b4d00f --- /dev/null +++ b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Sum of an Hourglass +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-sum-of-an-hourglass/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2428.Maximum-Sum-of-an-Hourglass/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2429.Minimize-XOR/README.md b/leetcode/2401-2500/2429.Minimize-XOR/README.md new file mode 100755 index 000000000..4debd8e0d --- /dev/null +++ b/leetcode/2401-2500/2429.Minimize-XOR/README.md @@ -0,0 +1,32 @@ +# [2429.Minimize XOR][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize XOR +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-xor/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2429.Minimize-XOR/Solution.go b/leetcode/2401-2500/2429.Minimize-XOR/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2429.Minimize-XOR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go b/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2429.Minimize-XOR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/README.md b/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/README.md new file mode 100755 index 000000000..2ee1f4c17 --- /dev/null +++ b/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/README.md @@ -0,0 +1,32 @@ +# [2430.Maximum Deletions on a String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Deletions on a String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-deletions-on-a-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution.go b/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution_test.go b/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2430.Maximum-Deletions-on-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md new file mode 100755 index 000000000..f8042d1af --- /dev/null +++ b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md @@ -0,0 +1,32 @@ +# [2432.The Employee That Worked on the Longest Task][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +The Employee That Worked on the Longest Task +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-employee-that-worked-on-the-longest-task/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/README.md b/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/README.md new file mode 100755 index 000000000..6526ad009 --- /dev/null +++ b/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/README.md @@ -0,0 +1,32 @@ +# [2433.Find The Original Array of Prefix Xor][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find The Original Array of Prefix Xor +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-original-array-of-prefix-xor/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution.go b/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution_test.go b/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2433.Find-The-Original-Array-of-Prefix-Xor/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md new file mode 100755 index 000000000..80b5e18cc --- /dev/null +++ b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/README.md @@ -0,0 +1,32 @@ +# [2434.Using a Robot to Print the Lexicographically Smallest String][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Using a Robot to Print the Lexicographically Smallest String +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/using-a-robot-to-print-the-lexicographically-smallest-string/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-String/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2434.Using-a-Robot-to-Print-the-Lexicographically-Smallest-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/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/README.md b/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/README.md new file mode 100755 index 000000000..df92f7779 --- /dev/null +++ b/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/README.md @@ -0,0 +1,32 @@ +# [2435.Paths in Matrix Whose Sum Is Divisible by K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Paths in Matrix Whose Sum Is Divisible by K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/paths-in-matrix-whose-sum-is-divisible-by-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution.go b/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution_test.go b/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2435.Paths-in-Matrix-Whose-Sum-Is-Divisible-by-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/README.md b/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/README.md new file mode 100755 index 000000000..1a1866e36 --- /dev/null +++ b/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/README.md @@ -0,0 +1,32 @@ +# [2437.Number of Valid Clock 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 +> ... +Number of Valid Clock Times +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-valid-clock-times/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution.go b/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution_test.go b/leetcode/2401-2500/2437.Number-of-Valid-Clock-Times/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2437.Number-of-Valid-Clock-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/2401-2500/2438.Range-Product-Queries-of-Powers/README.md b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md new file mode 100755 index 000000000..b9971c545 --- /dev/null +++ b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/README.md @@ -0,0 +1,32 @@ +# [2438.Range Product Queries of Powers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Range Product Queries of Powers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/range-product-queries-of-powers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2438.Range-Product-Queries-of-Powers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md new file mode 100755 index 000000000..a742001e7 --- /dev/null +++ b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md @@ -0,0 +1,32 @@ +# [2439.Minimize Maximum of Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimize Maximum of Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimize-maximum-of-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2440.Create-Components-With-Same-Value/README.md b/leetcode/2401-2500/2440.Create-Components-With-Same-Value/README.md new file mode 100755 index 000000000..42a875a0f --- /dev/null +++ b/leetcode/2401-2500/2440.Create-Components-With-Same-Value/README.md @@ -0,0 +1,32 @@ +# [2440.Create Components With Same Value][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Create Components With Same Value +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/create-components-with-same-value/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution.go b/leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution_test.go b/leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2440.Create-Components-With-Same-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/README.md b/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/README.md new file mode 100755 index 000000000..bb3914d48 --- /dev/null +++ b/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/README.md @@ -0,0 +1,32 @@ +# [2441.Largest Positive Integer That Exists With Its Negative][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Largest Positive Integer That Exists With Its Negative +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/largest-positive-integer-that-exists-with-its-negative/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution.go b/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution_test.go b/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2441.Largest-Positive-Integer-That-Exists-With-Its-Negative/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..6b4e36963 --- /dev/null +++ b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/README.md @@ -0,0 +1,32 @@ +# [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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Number of Distinct Integers After Reverse Operations +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-number-of-distinct-integers-after-reverse-operations/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm 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 new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2442.Count-Number-of-Distinct-Integers-After-Reverse-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/2401-2500/2443.Sum-of-Number-and-Its-Reverse/README.md b/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/README.md new file mode 100755 index 000000000..441c5ae1b --- /dev/null +++ b/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/README.md @@ -0,0 +1,32 @@ +# [2443.Sum of Number and Its Reverse][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Sum of Number and Its Reverse +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sum-of-number-and-its-reverse/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution.go b/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution_test.go b/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2443.Sum-of-Number-and-Its-Reverse/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md new file mode 100755 index 000000000..caa10f3ef --- /dev/null +++ b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md @@ -0,0 +1,32 @@ +# [2444.Count Subarrays With Fixed Bounds][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 With Fixed Bounds +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-subarrays-with-fixed-bounds/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/README.md b/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/README.md new file mode 100755 index 000000000..8ac0fb095 --- /dev/null +++ b/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/README.md @@ -0,0 +1,32 @@ +# [2446.Determine if Two Events Have Conflict][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Determine if Two Events Have Conflict +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/determine-if-two-events-have-conflict/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution.go b/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution_test.go b/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2446.Determine-if-Two-Events-Have-Conflict/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/README.md b/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/README.md new file mode 100755 index 000000000..0069dec68 --- /dev/null +++ b/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [2447.Number of Subarrays With GCD 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 +> ... +Number of Subarrays With GCD Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-subarrays-with-gcd-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution.go b/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution_test.go b/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2447.Number-of-Subarrays-With-GCD-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/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md new file mode 100755 index 000000000..7e3f5dd1c --- /dev/null +++ b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md @@ -0,0 +1,32 @@ +# [2448.Minimum Cost to Make Array 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 Cost to Make Array Equal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cost-to-make-array-equal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-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/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/README.md b/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/README.md new file mode 100755 index 000000000..4e0ec3f17 --- /dev/null +++ b/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/README.md @@ -0,0 +1,32 @@ +# [2449.Minimum Number of Operations to Make Arrays Similar][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Arrays Similar +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-make-arrays-similar/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution.go b/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution_test.go b/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2449.Minimum-Number-of-Operations-to-Make-Arrays-Similar/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2451.Odd-String-Difference/README.md b/leetcode/2401-2500/2451.Odd-String-Difference/README.md new file mode 100755 index 000000000..c97e6eb8f --- /dev/null +++ b/leetcode/2401-2500/2451.Odd-String-Difference/README.md @@ -0,0 +1,32 @@ +# [2451.Odd String 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 +> ... +Odd String Difference +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/odd-string-difference/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2451.Odd-String-Difference/Solution.go b/leetcode/2401-2500/2451.Odd-String-Difference/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2451.Odd-String-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2451.Odd-String-Difference/Solution_test.go b/leetcode/2401-2500/2451.Odd-String-Difference/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2451.Odd-String-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/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/README.md b/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/README.md new file mode 100755 index 000000000..1344a7445 --- /dev/null +++ b/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/README.md @@ -0,0 +1,32 @@ +# [2452.Words Within Two Edits of Dictionary][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Words Within Two Edits of Dictionary +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/words-within-two-edits-of-dictionary/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution.go b/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution_test.go b/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2452.Words-Within-Two-Edits-of-Dictionary/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2453.Destroy-Sequential-Targets/README.md b/leetcode/2401-2500/2453.Destroy-Sequential-Targets/README.md new file mode 100755 index 000000000..d9ee70c1c --- /dev/null +++ b/leetcode/2401-2500/2453.Destroy-Sequential-Targets/README.md @@ -0,0 +1,32 @@ +# [2453.Destroy Sequential Targets][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Destroy Sequential Targets +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/destroy-sequential-targets/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution.go b/leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution_test.go b/leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2453.Destroy-Sequential-Targets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2454.Next-Greater-Element-IV/README.md b/leetcode/2401-2500/2454.Next-Greater-Element-IV/README.md new file mode 100755 index 000000000..921b72568 --- /dev/null +++ b/leetcode/2401-2500/2454.Next-Greater-Element-IV/README.md @@ -0,0 +1,32 @@ +# [2454.Next Greater Element IV][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Next Greater Element IV +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/next-greater-element-iv/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution.go b/leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution_test.go b/leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2454.Next-Greater-Element-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/README.md b/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/README.md new file mode 100755 index 000000000..4c2cac4f1 --- /dev/null +++ b/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/README.md @@ -0,0 +1,32 @@ +# [2455.Average Value of Even Numbers That Are Divisible by Three][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Average Value of Even Numbers That Are Divisible by Three +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/average-value-of-even-numbers-that-are-divisible-by-three/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution.go b/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution_test.go b/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2455.Average-Value-of-Even-Numbers-That-Are-Divisible-by-Three/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2456.Most-Popular-Video-Creator/README.md b/leetcode/2401-2500/2456.Most-Popular-Video-Creator/README.md new file mode 100755 index 000000000..e4c09b0ce --- /dev/null +++ b/leetcode/2401-2500/2456.Most-Popular-Video-Creator/README.md @@ -0,0 +1,32 @@ +# [2456.Most Popular Video Creator][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Most Popular Video Creator +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/most-popular-video-creator/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution.go b/leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution_test.go b/leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2456.Most-Popular-Video-Creator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/README.md b/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/README.md new file mode 100755 index 000000000..615a931d0 --- /dev/null +++ b/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/README.md @@ -0,0 +1,32 @@ +# [2457.Minimum Addition to Make Integer 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 Addition to Make Integer Beautiful +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-addition-to-make-integer-beautiful/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution.go b/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution_test.go b/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-Beautiful/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2457.Minimum-Addition-to-Make-Integer-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/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/README.md b/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/README.md new file mode 100755 index 000000000..25234652f --- /dev/null +++ b/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/README.md @@ -0,0 +1,32 @@ +# [2458.Height of Binary Tree After Subtree Removal 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 +> ... +Height of Binary Tree After Subtree Removal Queries +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/height-of-binary-tree-after-subtree-removal-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution.go b/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution_test.go b/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-Queries/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2458.Height-of-Binary-Tree-After-Subtree-Removal-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/2401-2500/2460.Apply-Operations-to-an-Array/README.md b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md new file mode 100755 index 000000000..41b22c020 --- /dev/null +++ b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/README.md @@ -0,0 +1,32 @@ +# [2460.Apply Operations to an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Apply Operations to an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/apply-operations-to-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution_test.go b/leetcode/2401-2500/2460.Apply-Operations-to-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2460.Apply-Operations-to-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/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md new file mode 100755 index 000000000..8a47ee375 --- /dev/null +++ b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/README.md @@ -0,0 +1,32 @@ +# [2461.Maximum Sum of Distinct Subarrays With Length K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Sum of Distinct Subarrays With Length K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-sum-of-distinct-subarrays-with-length-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2461.Maximum-Sum-of-Distinct-Subarrays-With-Length-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md new file mode 100755 index 000000000..c355bf575 --- /dev/null +++ b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md @@ -0,0 +1,32 @@ +# [2462.Total Cost to Hire K Workers][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Total Cost to Hire K Workers +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/total-cost-to-hire-k-workers/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/README.md b/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/README.md new file mode 100755 index 000000000..369a3daf6 --- /dev/null +++ b/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/README.md @@ -0,0 +1,32 @@ +# [2463.Minimum Total Distance Traveled][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Total Distance Traveled +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-total-distance-traveled/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution.go b/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution_test.go b/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2463.Minimum-Total-Distance-Traveled/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2465.Number-of-Distinct-Averages/README.md b/leetcode/2401-2500/2465.Number-of-Distinct-Averages/README.md new file mode 100755 index 000000000..77f29fa95 --- /dev/null +++ b/leetcode/2401-2500/2465.Number-of-Distinct-Averages/README.md @@ -0,0 +1,32 @@ +# [2465.Number of Distinct Averages][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Distinct Averages +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-distinct-averages/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution.go b/leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution_test.go b/leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2465.Number-of-Distinct-Averages/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md new file mode 100755 index 000000000..1ada0fd7c --- /dev/null +++ b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md @@ -0,0 +1,32 @@ +# [2466.Count Ways To Build Good Strings][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Ways To Build Good Strings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-ways-to-build-good-strings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/README.md b/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/README.md new file mode 100755 index 000000000..3d363ec2f --- /dev/null +++ b/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/README.md @@ -0,0 +1,32 @@ +# [2467.Most Profitable Path in 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 +> ... +Most Profitable Path in a Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/most-profitable-path-in-a-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution.go b/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution_test.go b/leetcode/2401-2500/2467.Most-Profitable-Path-in-a-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2467.Most-Profitable-Path-in-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/2401-2500/2468.Split-Message-Based-on-Limit/README.md b/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/README.md new file mode 100755 index 000000000..4647c66d7 --- /dev/null +++ b/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/README.md @@ -0,0 +1,32 @@ +# [2468.Split Message Based on Limit][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Split Message Based on Limit +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/split-message-based-on-limit/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution.go b/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution_test.go b/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2468.Split-Message-Based-on-Limit/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2469.Convert-the-Temperature/README.md b/leetcode/2401-2500/2469.Convert-the-Temperature/README.md new file mode 100755 index 000000000..0c7801377 --- /dev/null +++ b/leetcode/2401-2500/2469.Convert-the-Temperature/README.md @@ -0,0 +1,32 @@ +# [2469.Convert the Temperature][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Convert the Temperature +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/convert-the-temperature/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2469.Convert-the-Temperature/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/README.md b/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/README.md new file mode 100755 index 000000000..924f91ac1 --- /dev/null +++ b/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/README.md @@ -0,0 +1,32 @@ +# [2470.Number of Subarrays With LCM 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 +> ... +Number of Subarrays With LCM Equal to K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-subarrays-with-lcm-equal-to-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution.go b/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution_test.go b/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-Equal-to-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2470.Number-of-Subarrays-With-LCM-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/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/README.md b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/README.md new file mode 100755 index 000000000..98ad794c6 --- /dev/null +++ b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/README.md @@ -0,0 +1,32 @@ +# [2471.Minimum Number of Operations to Sort a Binary Tree by Level][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Sort a Binary Tree by Level +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-number-of-operations-to-sort-a-binary-tree-by-level/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/README.md b/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/README.md new file mode 100755 index 000000000..8f3b4f79c --- /dev/null +++ b/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/README.md @@ -0,0 +1,32 @@ +# [2472.Maximum Number of Non-overlapping Palindrome 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 +> ... +Maximum Number of Non-overlapping Palindrome Substrings +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-non-overlapping-palindrome-substrings/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution.go b/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution_test.go b/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-Substrings/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2472.Maximum-Number-of-Non-overlapping-Palindrome-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/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/README.md b/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/README.md new file mode 100755 index 000000000..c76962be6 --- /dev/null +++ b/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/README.md @@ -0,0 +1,32 @@ +# [2475.Number of Unequal Triplets in Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Number of Unequal Triplets in Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-unequal-triplets-in-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution.go b/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution_test.go b/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2475.Number-of-Unequal-Triplets-in-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/README.md b/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/README.md new file mode 100755 index 000000000..2f026ed54 --- /dev/null +++ b/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/README.md @@ -0,0 +1,32 @@ +# [2476.Closest Nodes Queries in a 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Closest Nodes Queries in a Binary Search Tree +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-nodes-queries-in-a-binary-search-tree/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution.go b/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution_test.go b/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-Tree/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2476.Closest-Nodes-Queries-in-a-Binary-Search-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/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/README.md b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/README.md new file mode 100755 index 000000000..a5039754c --- /dev/null +++ b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/README.md @@ -0,0 +1,32 @@ +# [2477.Minimum Fuel Cost to Report to the Capital][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Fuel Cost to Report to the Capital +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-fuel-cost-to-report-to-the-capital/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/README.md b/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/README.md new file mode 100755 index 000000000..0465104a4 --- /dev/null +++ b/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/README.md @@ -0,0 +1,32 @@ +# [2478.Number of Beautiful 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 +> ... +Number of Beautiful Partitions +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-beautiful-partitions/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution.go b/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution_test.go b/leetcode/2401-2500/2478.Number-of-Beautiful-Partitions/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2478.Number-of-Beautiful-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/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/README.md b/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/README.md new file mode 100755 index 000000000..7749fbe3b --- /dev/null +++ b/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/README.md @@ -0,0 +1,32 @@ +# [2481.Minimum Cuts to Divide a Circle][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Minimum Cuts to Divide a Circle +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-cuts-to-divide-a-circle/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution.go b/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution_test.go b/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2481.Minimum-Cuts-to-Divide-a-Circle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/README.md b/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/README.md new file mode 100755 index 000000000..b9d6ee003 --- /dev/null +++ b/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/README.md @@ -0,0 +1,32 @@ +# [2482.Difference Between Ones and Zeros in Row and Column][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Difference Between Ones and Zeros in Row and Column +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/difference-between-ones-and-zeros-in-row-and-column/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution.go b/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution_test.go b/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2482.Difference-Between-Ones-and-Zeros-in-Row-and-Column/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md new file mode 100755 index 000000000..6b8b35371 --- /dev/null +++ b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md @@ -0,0 +1,32 @@ +# [2483.Minimum Penalty for a Shop][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Penalty for a Shop +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-penalty-for-a-shop/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/README.md b/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/README.md new file mode 100755 index 000000000..405e33f2e --- /dev/null +++ b/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/README.md @@ -0,0 +1,32 @@ +# [2484.Count 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Palindromic Subsequences +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-palindromic-subsequences/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution.go b/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution_test.go b/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2484.Count-Palindromic-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md new file mode 100755 index 000000000..13dc85303 --- /dev/null +++ b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md @@ -0,0 +1,32 @@ +# [2485.Find the Pivot Integer][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Find the Pivot Integer +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-the-pivot-integer/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/README.md b/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/README.md new file mode 100755 index 000000000..8b894acd1 --- /dev/null +++ b/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/README.md @@ -0,0 +1,32 @@ +# [2486.Append Characters to String to Make Subsequence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Append Characters to String to Make Subsequence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/append-characters-to-string-to-make-subsequence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution.go b/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution_test.go b/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2486.Append-Characters-to-String-to-Make-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/README.md b/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/README.md new file mode 100755 index 000000000..b5c627140 --- /dev/null +++ b/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/README.md @@ -0,0 +1,32 @@ +# [2487.Remove Nodes From 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Remove Nodes From Linked List +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/remove-nodes-from-linked-list/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution.go b/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution_test.go b/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2487.Remove-Nodes-From-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/README.md b/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/README.md new file mode 100755 index 000000000..96e8c4abc --- /dev/null +++ b/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/README.md @@ -0,0 +1,32 @@ +# [2488.Count Subarrays With Median K][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Count Subarrays With Median K +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/count-subarrays-with-median-k/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution.go b/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution_test.go b/leetcode/2401-2500/2488.Count-Subarrays-With-Median-K/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2488.Count-Subarrays-With-Median-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/2401-2500/2490.Circular-Sentence/README.md b/leetcode/2401-2500/2490.Circular-Sentence/README.md new file mode 100755 index 000000000..b03d52c8d --- /dev/null +++ b/leetcode/2401-2500/2490.Circular-Sentence/README.md @@ -0,0 +1,32 @@ +# [2490.Circular Sentence][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Circular Sentence +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/circular-sentence/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2490.Circular-Sentence/Solution.go b/leetcode/2401-2500/2490.Circular-Sentence/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2490.Circular-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go b/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2490.Circular-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/README.md b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/README.md new file mode 100755 index 000000000..0f5f2e43f --- /dev/null +++ b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/README.md @@ -0,0 +1,32 @@ +# [2491.Divide Players Into Teams of Equal Skill][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Players Into Teams of Equal Skill +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divide-players-into-teams-of-equal-skill/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2491.Divide-Players-Into-Teams-of-Equal-Skill/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md new file mode 100755 index 000000000..1a267c7a6 --- /dev/null +++ b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md @@ -0,0 +1,32 @@ +# [2492.Minimum Score of a Path Between Two Cities][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Score of a Path Between Two Cities +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-score-of-a-path-between-two-cities/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/README.md b/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/README.md new file mode 100755 index 000000000..aa8b520f4 --- /dev/null +++ b/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/README.md @@ -0,0 +1,32 @@ +# [2493.Divide Nodes Into the Maximum Number of 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 + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Divide Nodes Into the Maximum Number of Groups +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/divide-nodes-into-the-maximum-number-of-groups/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution.go b/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution_test.go b/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2493.Divide-Nodes-Into-the-Maximum-Number-of-Groups/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/README.md b/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/README.md new file mode 100755 index 000000000..a5d52a45d --- /dev/null +++ b/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/README.md @@ -0,0 +1,32 @@ +# [2496.Maximum Value of a String in an Array][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Value of a String in an Array +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-value-of-a-string-in-an-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution.go b/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution_test.go b/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2496.Maximum-Value-of-a-String-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/README.md b/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/README.md new file mode 100755 index 000000000..9288ca85b --- /dev/null +++ b/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/README.md @@ -0,0 +1,32 @@ +# [2497.Maximum Star Sum of a Graph][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Maximum Star Sum of a Graph +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-star-sum-of-a-graph/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution.go b/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution_test.go b/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2497.Maximum-Star-Sum-of-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2498.Frog-Jump-II/README.md b/leetcode/2401-2500/2498.Frog-Jump-II/README.md new file mode 100755 index 000000000..7cd0d60ba --- /dev/null +++ b/leetcode/2401-2500/2498.Frog-Jump-II/README.md @@ -0,0 +1,32 @@ +# [2498.Frog Jump 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 +> ... +Frog Jump II +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/frog-jump-ii/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2498.Frog-Jump-II/Solution.go b/leetcode/2401-2500/2498.Frog-Jump-II/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2498.Frog-Jump-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2498.Frog-Jump-II/Solution_test.go b/leetcode/2401-2500/2498.Frog-Jump-II/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2498.Frog-Jump-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/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/README.md b/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/README.md new file mode 100755 index 000000000..109ede1eb --- /dev/null +++ b/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/README.md @@ -0,0 +1,32 @@ +# [2499.Minimum Total Cost to Make Arrays Unequal][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. 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 Total Cost to Make Arrays Unequal +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-total-cost-to-make-arrays-unequal/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution.go b/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution_test.go b/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2499.Minimum-Total-Cost-to-Make-Arrays-Unequal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/README.md b/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/README.md new file mode 100755 index 000000000..4f490aefc --- /dev/null +++ b/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/README.md @@ -0,0 +1,32 @@ +# [2500.Delete Greatest Value in Each Row][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +Delete Greatest Value in Each Row +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/delete-greatest-value-in-each-row/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution.go b/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution_test.go b/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2500.Delete-Greatest-Value-in-Each-Row/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 6fdc8581093e8febb90b4b46aa9d0dc88a936503 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 25 Jan 2023 15:20:19 +0800 Subject: [PATCH 0185/1057] Add solution and test-cases for problem 2359 --- .../README.md | 38 +++++++++++------- .../Solution.go | 36 ++++++++++++++++- .../Solution_test.go | 20 ++++----- .../graph4drawio-2.png | Bin 0 -> 8361 bytes .../graph4drawio-4.png | Bin 0 -> 6820 bytes 5 files changed, 67 insertions(+), 27 deletions(-) create mode 100644 leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/graph4drawio-2.png create mode 100644 leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/graph4drawio-4.png diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md index d96f028a6..c441d72ea 100755 --- a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md +++ b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/README.md @@ -1,28 +1,36 @@ # [2359.Find Closest Node to Given Two 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 +You are given a **directed** graph of `n` nodes numbered from `0` to `n - 1`, where each node has **at most one** outgoing edge. -**Example 1:** +The graph is represented with a given **0-indexed** array `edges` of size `n`, indicating that there is a directed edge from node `i` to node `edges[i]`. If there is no outgoing edge from `i`, then `edges[i] == -1`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +You are also given two integers `node1` and `node2`. + +Return the **index** of the node that can be reached from both `node1` and `node2`, such that the **maximum** between the distance from `node1` to that node, and from `node2` to that node is **minimized**. If there are multiple answers, return the node with the **smallest** index, and if no possible answer exists, return `-1`. + +Note that `edges` may contain cycles. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./graph4drawio-2.png) -### 思路1 -> ... -Find Closest Node to Given Two Nodes -```go ``` +Input: edges = [2,2,3,-1], node1 = 0, node2 = 1 +Output: 2 +Explanation: The distance from node 0 to node 2 is 1, and the distance from node 1 to node 2 is 1. +The maximum of those two distances is 1. It can be proven that we cannot get a node with a smaller maximum distance than 1, so we return node 2. +``` + +**Example 2:** +![example2](./graph4drawio-4.png) +``` +Input: edges = [1,2,-1], node1 = 0, node2 = 2 +Output: 2 +Explanation: The distance from node 0 to node 2 is 2, and the distance from node 2 to itself is 0. +The maximum of those two distances is 2. It can be proven that we cannot get a node with a smaller maximum distance than 2, so we return node 2. +``` ## 结语 diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go index d115ccf5e..01af86986 100644 --- a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go +++ b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(edges []int, node1 int, node2 int) int { + + var canReach func(int, int, map[int]int) + canReach = func(startNode, l int, path map[int]int) { + if _, ok := path[startNode]; ok { + return + } + path[startNode] = l + next := edges[startNode] + if next == -1 { + return + } + canReach(next, l+1, path) + } + node1Path := make(map[int]int) + node2Path := make(map[int]int) + canReach(node1, 1, node1Path) + canReach(node2, 1, node2Path) + + min, nodeIndex := -1, -1 + + for n1, dis1 := range node1Path { + if dis2, ok := node2Path[n1]; ok { + max := dis1 + if dis2 > max { + max = dis2 + } + if min == -1 || min > max || (min == max && n1 < nodeIndex) { + min = max + nodeIndex = n1 + } + } + } + return nodeIndex } diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go index 14ff50eb4..99ccfbf42 100644 --- a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go +++ b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + e []int + n1, n2 int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 2, 3, -1}, 0, 1, 2}, + {"TestCase2", []int{1, 2, -1}, 0, 2, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.e, 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 %v", + c.expect, got, c.e, c.n1, c.n2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/graph4drawio-2.png b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/graph4drawio-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1f48a74b4ae0a4e49b18a237f000387386474695 GIT binary patch literal 8361 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 E1NFzZbpQYW literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/graph4drawio-4.png b/leetcode/2301-2400/2359.Find-Closest-Node-to-Given-Two-Nodes/graph4drawio-4.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c1dc615a3c26e42cfb69217f87cfb1ede2ea10 GIT binary patch literal 6820 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 N?6HoRn<(F;{{RTY=I{Uj literal 0 HcmV?d00001 From c1eb648b29ebc7cdd9615e02ffa7b604cf570b48 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 26 Jan 2023 21:36:59 +0800 Subject: [PATCH 0186/1057] Add solution and test-cases for problem 787 --- .../README.md | 44 ++++++++---- .../Solution.go | 65 +++++++++++++++++- .../Solution_test.go | 24 ++++--- ...heapest-flights-within-k-stops-1drawio.png | Bin 0 -> 15168 bytes ...heapest-flights-within-k-stops-2drawio.png | Bin 0 -> 15254 bytes ...heapest-flights-within-k-stops-3drawio.png | Bin 0 -> 23339 bytes 6 files changed, 107 insertions(+), 26 deletions(-) create mode 100644 leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-1drawio.png create mode 100644 leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-2drawio.png create mode 100644 leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-3drawio.png diff --git a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/README.md b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/README.md index 0cfbfab2e..01dc03a78 100644 --- a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/README.md +++ b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/README.md @@ -1,28 +1,46 @@ # [787.Cheapest Flights Within K Stops][title] -> [!WARNING|style:flat] -> 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 cities connected by some number of flights. You are given an array `flights` where `flights[i] = [fromi, toi, pricei]` indicates that there is a flight from city fromi to city toi with cost price1. + +You are also given three integers `src`, `dst`, and `k`, return **the cheapest price** from `src` to `dst` with at most `k` stops. If there is no such route, return `-1`. -**Example 1:** +**Example 1:** + +![example1](./cheapest-flights-within-k-stops-3drawio.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, flights = [[0,1,100],[1,2,100],[2,0,100],[1,3,600],[2,3,200]], src = 0, dst = 3, k = 1 +Output: 700 +Explanation: +The graph is shown above. +The optimal path with at most 1 stop from city 0 to 3 is marked in red and has cost 100 + 600 = 700. +Note that the path through cities [0,1,2,3] is cheaper but is invalid because it uses 2 stops. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./cheapest-flights-within-k-stops-1drawio.png) -### 思路1 -> ... -Cheapest Flights Within K Stops -```go +``` +Input: n = 3, flights = [[0,1,100],[1,2,100],[0,2,500]], src = 0, dst = 2, k = 1 +Output: 200 +Explanation: +The graph is shown above. +The optimal path with at most 1 stop from city 0 to 2 is marked in red and has cost 100 + 100 = 200. ``` +**Example 3:** + +![example3](./cheapest-flights-within-k-stops-2drawio.png) + +``` +Input: n = 3, flights = [[0,1,100],[1,2,100],[0,2,500]], src = 0, dst = 2, k = 0 +Output: 500 +Explanation: +The graph is shown above. +The optimal path with no stops from city 0 to 2 is marked in red and has cost 500. +``` ## 结语 diff --git a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution.go b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution.go index d115ccf5e..894fc5f7a 100644 --- a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution.go +++ b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution.go @@ -1,5 +1,66 @@ package Solution -func Solution(x bool) bool { - return x +type node787 struct { + node int + cost int +} + +// 感觉dijkstra算法呢 +func Solution(n int, flights [][]int, src int, dst int, k int) int { + stops := 0 + dist := make([]int, n) + for i := 0; i < n; i++ { + dist[i] = -1 + } + edges := make(map[int][]node787) + for _, flight := range flights { + from, to, cost := flight[0], flight[1], flight[2] + if _, ok := edges[from]; !ok { + edges[from] = make([]node787, 0) + } + edges[from] = append(edges[from], node787{to, cost}) + } + queue := []node787{{src, 0}} + for stops <= k && len(queue) > 0 { + nextQ := make([]node787, 0) + for _, item := range queue { + for _, canReach := range edges[item.node] { + nextCost := item.cost + canReach.cost + if dist[canReach.node] == -1 || dist[canReach.node] > nextCost { + dist[canReach.node] = nextCost + nextQ = append(nextQ, node787{canReach.node, dist[canReach.node]}) + } + + } + } + queue = nextQ + stops++ + } + return dist[dst] + + // minCost := -1 + // //return dijkstra(edges, src, dst, n, steps) + // visited := make([]bool, n) + // visited[src] = true + // var dfs func(int, int, int) + // dfs = func(src, steps, cost int) { + // if steps < 0 { + // return + // } + // if src == dst { + // if minCost == -1 || minCost > cost { + // minCost = cost + // } + // return + // } + // for _, rel := range edges[src] { + // if visited[rel.node] { + // continue + // } + // visited[rel.node] = true + // dfs(rel.node, steps-1, cost+rel.cost) + // visited[rel.node] = false + // } + // } + // dfs(src, steps, 0) } diff --git a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution_test.go b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution_test.go index 14ff50eb4..a3f2ef46a 100644 --- a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution_test.go +++ b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + flights [][]int + src, dst, k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{{0, 1, 100}, {1, 2, 100}, {2, 0, 100}, {1, 3, 600}, {2, 3, 200}}, 0, 3, 1, 700}, + {"TestCase2", 3, [][]int{{0, 1, 100}, {1, 2, 100}, {0, 2, 500}}, 0, 2, 1, 200}, + {"TestCase3", 3, [][]int{{0, 1, 100}, {1, 2, 100}, {0, 2, 500}}, 0, 2, 0, 500}, } // 开始测试 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.flights, c.src, c.dst, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v %v", + c.expect, got, c.n, c.flights, c.src, c.dst, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-1drawio.png b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-1drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..7992cac5d8fa0818da662dbaf109d33c74ca872d GIT binary patch literal 15168 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 OB29G+{Eg~^@c#oDKh(4U literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-2drawio.png b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-2drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..661b29206f94d04e4fdbbabf793998368c931e71 GIT binary patch literal 15254 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 ae{J85uP=7>?gA)&lgb&*f3k>I{Qn0H2f20t literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_2_1684.png b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_2_1684.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8a42c0f24ec358b7ba646632f899fff1da864e GIT binary patch literal 15342 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 literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_3_1684.png b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_3_1684.png new file mode 100644 index 0000000000000000000000000000000000000000..1a0ab1a69322249120613396361578dd7e4fe65f GIT binary patch literal 14262 zcmc(GcR1C5`1fg&G8!oBkfIO`WOal@l9i6V$=;iTvLh>GCp$Uz-mA#S-usZfj=gzq z-`{in{(t^@x~@8LKIc8}@w#8H`+Sm-5+f#}B0?Y##IM9($RQACd*J_g!n5#i_Ofmk zyqvL?6B9;cwb9JO59jrT-UuNOxj~l?wJyNVmn_7UtPzN7Hm85jjJ-!XAP`Sqzj`4g z@1VXsIxj~(7|lLW=25w-*-tA!TAPI&JxV&37qwkNT}>;OeiuL2&~W{xNzKjA#5Y?t zO_->2?p}G{Ab$2y`^M+<*F2uL`Z_kWzKv_|<9iWq@;pk;PjcQxTa-(~J!~a2tgk#Q z%GhOtAC~dq90TU`Mdbh6i|_B|W(hGdF(Dx#D=RA-o6UUv_Qb?Q^=j9+`1tXmp|YHu znqv|K;`t;QDr;bS+fGkUPf;;4CMKr1c&8F|o<@5`@zzJbho~*RNkaJw1_j_sYDK_&~n2M-?fXKMrn1qrTZ z1p5DNZ?AUR^1Cgrqr*6S9zlPW5J@81R6jl*uOYUc5)crOlamt}8QIHh!GaOWGEVD4vzNW;bHZrdJ}8wC-?5nEe{uCFX|`ArQdsG zV{e~7#I2mUJyd9nL}4_!5H;b#yB5KLfg}sBH=UkkEbAK?E$nYCa+c|FiEF%hLrnXC zD!{vU`+N8N94{*iiz2b6S5i{a)RYeTgE7yuXDR)0FRo_|J~nrLJv#BTApo8OwebXsd^|NfJJ9aO-;cP9HttG`85Chjd^>I`lk9DSP=m zuKp?tvy0zd(?Jt5GBLem3e7#6%*M$XhPt4rWxmOKdozJhuAr>!r#y>`i%WV-!ZFj+ zr^UIsvf2G_dmd5+Y>L1iJG&xBz87w8Ct&}7|GwGQ48~?0dhj_Rfnn&f+0U>tuoVuD z?9ov*^zbka$6)*L?%liCixKt~7SEFy_csYIT}sc)tmKr#W@jtBdnfBzX}26Lk;2Ez zt5uD7)oE17*_P0Mbab%O*ZOK;eEej4S!LguYEF(%OU3j9OqrLLS5xyGO?aP=FWQ?4 zi@3yxLZ$wbRa5(Gq}9{kKVE80U~h14etFpiKOrO|Ll$5;$dpl7RJ4C^(Csr^Q-c^j zFZY}=xS)X3@2UV(%eVOWh?eP1#o=sqv0XA%3kwTN%SWu9JtHHMYLu+c-S1J1l-mc9 z3$Jf%)RQ;MC@V`;io3d^GD`WuYnz)BnQL)($eBXtn?jj;SO@dYdZ075wzdL3eah8K zAoV2Gdcelk!5`YVT$ouqe)xr}ooLa-+`PN$%EfaTLPoc5-=?vCYNDm3WngfRwdStu z%=e(n<*_7YCML;g*H+w}aw2kbA5nczO->$gCAj`OaJD_3;KBv)pWHVz3>d;Ltk#__HXwo+B8rj;0qiP!)8F(iSY-FTZd#0UEG^ul>(m8^h{yqZ(LxtI`3CAB`WP(nc zzT^{B5IAhFg@%S=DQfWehs$*aoOx6)K3vmsa^hq46#Dda@tO`Hvd(FL^L}`s;QCNW+VYxalH2Q$*w(D-W!!0IYm(FZZl!&C(K^ zEvbN6+N6<%MX()&fo7u;xf|zc^OqcTb?>BIrn!pp3=atj`SPWXhy+%)IkZuZznP`# z;J}mJf^ei`>Fw>Ut*yl(C}mVtmvWlaAO}5Mj=Z_Fyevz$w795K7!1LV$0f=SmNhh_ ztgheZxP9-@qem501|Ksb!otF$qMC?Eg5TD%T)lb~Gjk@U>2Nxx1C3T>Wo8!ZXi=_} zpbD6Qyo8-_Z(I_Bta-x*Tb)RV6H(lh!0%uDA{_*|*=njGU~Ehs?U5|gNJdWn8jb+x)!R{s|-CfK+?ODis& zb!Vd;);0`!5D^h!1xLMM9QSkIa7hIPn}hlK*pe%CJ|1D=;iFY9F>-{Ea`p8a$HxVqK8@(5*V}Y_!)s+? z^0{~WeHEVUbx>LK@$qrYQ}aCc>*}~EJU*Btzq3;oT~D5%<;_TG`lqSMachD6zm4*2 z{`BdUD3LzEE5C6$1z-YcelxP9)BDTcXHT%BF_?zEg~pXe&ZoKLOPu{H{~v!I8BZ+ zkogyRP&A=EBkEl`F5k|KiIkpKK3S%!^O<@fDhgn;)AISr*7kPMv>YA|>%#|xUx9G; zJ3nzF0I4&h_LiJW3GKuLBif^oMRE0k%n`K|rKP16eWnwwcKMNE`YP^ z*ROAG)Ya8(%(g!h5HK<_YOS75uBtj-87;S|X>DuEdoxk@`0?Y!q$DMVn^eczgY;_; zqa=Hb2}kv0CMztb8rs@OGBQs=1OyAGWfhfb*P$NGhcd|}cFR-&Z*+8Y!X@rj`tik? z85oFX_je}|UA_!+8lIPwUSH^CZDb3)qL7l2;jcaii4N`da_ZA?u{q>|A7y1j(ZxFu zs!UCn0iOYMQc_oMD{^mnBF%GWZbSn>?53f&f3)abF0OZT9kV)L@``0f42mA+j!pe{7vv@!fP-?WbrM6$j{=#iScrw_Ok(d9qAo#sC z0i6L@|Hp=}zdtK0D>V&`s*(~fgde!xldkrHl*Gi_DAc#(88FEkD!dQwT+Di&Ak)Eo z#bqLAD2w~))5?kp2?+^B;>nzf3e3^It?T$V<)rW5Yueja=jMES`v3=Y;BZ>v;)JR1 z5XKPspE<7o>vBH7>Er_NfL0;wVbu*9n%MAguk6N&vo`oYx{uKVy%`GGw;36g&S=Z2 zsJxCRh0KpFLQ-*eKiN=hB*2M0zkmP!CaRHYM>7B-v5%LRl3UamMANRWu3x`AI}MUy z=_3(S1PU+2E(ds&y1sHvuc#0pB@HSqUhbDWNoi+0DEz_xlnfv$e4hKijx7vm$ z_Jl~gqQXLQGP2;WUmJ`*Y?zvu5EgvCTm#7YooumCNWZG<;jS!uMEBRtO&cj=vvz=K zsi|G(#;e^pIx3&g$A0}v0cf0A`kUfNuUmRq86Oe0r*ZIDl(Nnz4rb$h&&O+VmP5V5 z;rNi36>+|=zhBHUAvZUq_at6DJ5Bn*{ySk|VHK6(!56I>i6xLYXsD@QyGe?zc65*( zToC`;*4E}jip)|g-^Sxa!X@;+_2LD>&>QRP;FPoT^Gb4ZR!&aMu3G0jNu8UUno8YH zQ1P}IwOhJ+dVBl(Lyv9wK5Wg*&Zf_nXs*b5)WSC3S5f@yOcH}|0%N0HUp5+PYinz2 z(jPSs5A!oJdhA3|k%b2#1<`1uVn|DB{cQSLf&xc)rBPb40X2N;VrU6Rl3s z;Ns-8h-;mKn$qsAf`V8!854@YSYAP)yVLz6BTqw9(<=vuU9ee27ua+zAQ=g|FhMwt zwe{&1Na<8cz5V?f0;r4giLx?KuWM;BTnH>FDS>(vEP&`XoM2^TrLd%eFJ227#`}XK z;jk8NY2Jp9PubvRtr6m5lWyMk@83_Wp>wKSo}~PW>grYYt8@WZ6p1aWyu2>JhO{4pOqt2I%!^MXB=W;W1-kBo{~&OY`f#NLLtUdz55&(m`62%fz_Vk-@DEe zH({zUn+wV!BsDJyk%wEGn=_xeucZ z7`*P|D6{b@)17dJ+WT+bycsRAJU8y@Q4eKkZFhHQcXA3M&=X(V_+QWvmyjUJIMY@P zoXPIm6u2jBOB3RtnVA{Xqu7gNNKaDKm(bAr7@6~0FfGt8v=kI}R#tUJ2!>l%E=tgW zg~MZaJxSZ-S$ZKOzhSx#11iYKOw7;oK7HB<&wb@UNH3kE+@M^SY)XP`)r&aW^5+j8DnRCI;%Dm``-!hyxx>u-b{0239~Bw- z1Dyf90|5a+z{{zQ4jBan1w+I8M`!L{+m8WLfmE|CZt*T7Bjd)qaEWPvGzOcm7`Dbw zj>g~0$=x6l6%!-qu76}diO5e@y!C5z1)(+$#JDb3Rp|(Ntb3A3A4Gm`M#-vfq|prUSA)D^PLZI z9n7S(r>762Kl2O{ynpZB_Z>V0O@Ls7OpDmeOyIaWb?*Dp(9-5+PV@jzLr&xcHd0+J zIQ`i_jXf?p8qAT1knp?59YH}iXXlusvo+iR3cr2(_8*_};RZeCA%Fl*;YzoYst3$6 zS1#5=CKM4CE_qKG91A=PpYs3GQa*GyX=pGzD{5J!=Xbln2Ne|uPJNJ={wg6d9`N>C z1K+?vbrltzm|Z@&1PO`t?QJ?FQa`3<{@=_@S!wAh-x6I8xXbC{$hAw{Uz&7*&4cw~ zF9s8O21(B@8Q!6yq||Q|C4=k-yw$VTm5H!ZYg1j=azbzDJ-m5%cnGY^!;_o%ByeZ_=XU=T~7Nz@m5NJ<;`oKy3_;C+i^5s*zB7+OqJe=$UcJ}v$mG98#u?olT z?Zr4XV%uwNqav;5l7)e2xruv=?WVUfyZ+h*v6HrArT?0?$t59QMiBG8RoF1lOGo(} zf0p}GH}iQfw}zTl0WLAj_+&kz`tWe0J(3emm_?0xudi=d!pq6|%Sek2xD<7hY93ju z)^U}--rij0Nh@n>urWo3&%VCCJFDaQXR#taw-V?ki^pB9^XRlqozra#gcCxz0>g+o zNFuu%ew#YvR%<1P(RFd73#;<$z7durdHB^49DVOKsy=|NSD%bUdCT3#mEjl#1>;dG zN({+Q&Bwso^Xv3F%6H7&4yXepypGM9&h+*5-4n6{zEt@pUtHj}uwi(w<^^kJp=al5 zP1<@yKC{iq5A~GcCUe8D`g>X$QmfHrJ^3+@OL~2@H2)zfA1`#TM{ZtH{p| zYNSV#z{c9x7+r>%$KGg6bo9dcB)LN6qkm1;f$b6ysQCW<1G%PGzSJbv$HG14hEpol zyCM6^C$tpl?r*!>3Rt<;#|$NP8yk`JK2bhCKGs)Ke$|WCHv*ct;NIK&4y|Ftv_Z+Y z*?Jtp+g_x+2(?L85z)zD`HqP^%jn@6RH2Y8(1htlMSub#$TctcOHKA`xTQS(k!&t! zfXrs^)u)c|W~)0N#9hH7li0EpTjLOy&rwg1Fy$A>P9>2`WipkBO9BS*;lp6^i2Yar z;bFyIs#ab%8FjnDaLVJ|m6U%Hu6S~qe|k4a~aaQPGkx=S_6zLIruNV+94Ya zB~ICo{S+?if3vnc;6YH>TwX!9@My;@wu%Zx=;D4f&EXcZDI+1E%83C`rRYZ6fa&9K zTM$KUu~+L_l_ti15i>DiV^yt>SXKWNC_zm{MTf%t@q0ZO`xamy0A-~!5qn0=S}P2$ zyEp>FEi!LMQ!VqMxxCuj&j$uxQV_fwlAoHKzHCz;wNXcKI+Z+3C39oK%_`1$_eXX% zxbjsPUSYg)Mm8OgW=2X)E$`N7x&7m)&*Tl| z(k^v5>GR1e?=2J^rODZ#DLqM_P)W!h2X9`gVx3LIF|x5?D=K2iXCdtYF4$dnx}3Mt;$0JE z(|2bZNUmHlF)+})z+7R)Ldyb#^GrNWuFvM$WPDoQm`o2J+Vm>r(pa<@YxL(4!Oa&R z)JuT*k#o0+G_OADi^dBXoWGlp5cZ?QU{_pHvbCv6%PV}BiBt|mfpZ4vl8eSp7xvHX z$IJgKZtG^21to?R+qh$3XlUq&pE$!h@faN_)9yrgwN1FFtnx?4p9Y1`6iT%#rZ$7$ zd;X;GY#6Gk(N@OH724fdY!uZOx!)*BGtCKx02P|0N@HyQy=}?&?`NPMfQ`+K8o$X7 zX4zNz12lS%5f>{~S41iki@icjtmoC!;cr04!}ocMQGUO;^U?h}I&ICOaw8e7t2fRY zg`Y!S+32GF9#c=i`im$(*m4^DCo?mk-Z5BkT(C*R!J)*$_={5dSgt{spM60SYDLAxh8h<=KK3enE7D0q_@(7jT$eW#B@;vR;K@5jT-QCzA|G4g0MWXpVE zagfhqIm`;5rdK$NaUQqO`CFH4ug%a+HtRFQj7PF8 zyeal2?0cGp^N5y+DJ$S=vE#VfMTC4WmD3vB0Yd|s53r-SfUtaF3KDRDp8ori)+cun zmnxnACdtYE75*9?P7WxVh~X|1lf-_vgcV~CYrL0jk@kV; zo6#M0t9%#nN0{Jvx8tbe!O4oSH&@5iLrVw#i#7SXUWT1CZqd8qLB?+gt&A*LOBaz{k zIl?U;r0aLL?eIHl&1V*>b}060{I+==F;f{uBd(6DOD@GZj=wd2S>4T?@4;VfEenJU=s&3MT5JqX!ik?L%Qq!lZ*7Z|fX+vRj&XmHc9yStd1FCD}8( zxIN!bY4VGxk+;0lTY}+So5&zmu}Pc4!SMKs(0g#809B!mV~5%yo}B1H3YkjP5&MG& zDf&=;Jj)OjVW~WOArMRqU7#=dhN=6M*gTvu1po;p(v`4>b_}u3!W2ac~R)&b`UK9T(t9g8G zW#t>O0jQr8kM_z0sl2acW&E(Wv-9@!1j-pC0hX+}aH)$V&Qqf2`(CA8)4& z*S)<(Kboo4zD)mgc@|NtbtykpKFlvrWL~_8{q`+yKOdCfLS+}AppeLTQY1=MpuE1P zM_yJ|7WkZ)7!`H(F#ynm94{J1SPv%@V^_YApWNz(G>pev@Cmf)frMB&XH|+ZGi$5( zEfK~I{MTIW;NYN1==D8L6B~LdM)?KiUwbJ-e-hig(;KiROtu;g16_#WyQ+Vp@meTH z{b?M5hSew@L>wWH{*AUmBn?eZUmrwgIc6cDJ78ISSG5rHypfFaXIygQx@%5=sHmNyyJ<+j8ax|CrBi|v&MM6t20j*a1w(qpdz zTfBloLar{5|3|sj0Xp+tuxs1^Vn)5(?hP=MR4-=S>z9^ZbERXKY;7=#{K-GLEL2jq zyU^D%SI_>S- za4ky2!hG2Z591$^-iWy9nO?yc0vl5^_vr|JEkoI1cie;}n%BD|vl4?~d@bIC9@nz&l;(N=; zPRr@@#SAnwtM*bo_qowe%KaP2@NKI5ANNNxk4~&-09>Rrtd1$jp#+4RwR) zH;_Qk(V|3r_TVu_eC~5PDB6x2sg-^EXK;$2W#Zlr z;#RpmJ(4ODO6hFJ4-&_A0vfE2Oxk;fN<@dgbC>d^#w?rB+-F^Q!_ldCbEfc%N-^4G zt|XD3bu`re%fum0B&}OkL+sw(L$SD`#G!w1&^WcO(=tNyvK<9SyLRxa);ajFXttn3uFP&+(n6n{JxF zHQ}K?q@hj!z%SzC+l?%4SZC8`K1sEm@IoJJYcT-gj+GtR1=(9RpJY-u$f`@nyIE$6lRUdC}==F&1 zrN1z9m1X}DqRDawe-+|)V|YzX$Pb0!zFXZ2+3L?+_BZil_5|XWev^!NBj`n?s8LmA z*KYDi8X5hBfoA^wb8vR%U}MXnLLfZ<#p3EKu0_^rY69WM!pb^tQ2RI^fgqXk#ML*4 z*C0+I0__7}7O@u*2pq4&hk9g@DnH!DyTT%Clx4G^B)1%nVzN0 zDJ&l2AC-tol8+eWLqFpg=g&v!<qd<122c(CRzNbef(z51G zJ1?F&t0NFOtg=3&A5*KOUcGVzjrNo_slCr;()ObuJyWNb;+4Aw5H9S!vo@a<^7UbF z2UpE^6_u3M@OYVYd2CTUfEnnoY6i{9V>5FVdt)ngkkv7A_*b(*I=jk~(bjFSAiLXR z_>kCGwvqE;aHzmsFE1}+FWyh$RMNkPMY0!(lNJ?+{1yTLQ`XbIeI9|>rtiWhbkEy6B6hgzvO(D|$kytt_I|=s-M-JbnB#P6vY-0T(~>H2H`8&){G(^aoB` zY3?2>KekDCml#V!@q~~EZm~M$u$p1tM;I_!C=sCa@%Q%+v%0sKLzO%;b?hy{ij3}8 z`gNham`~)g#)mmLE**NS&`{k|jgH<`1~te zNOZPvvg&jCJH}z?RUCM3gG|z3ldBXkXE`=5J27soeZEW>s}CV9>Zn9 zGL>j@#4pVj-`3bBzP0vF<#_uGT2M7HDsKa0k3eL-f^kw)nRs|2$zv@^kkFb5w}cdQ zh5nAl$<$XVZwh@0XN#qqro^K9RJWU5|3wQrr7Hg<$bI-2@qrfB4u^PJ=DKG{Yj_@h zX_{t_f<8DRq_uTPh>#P6OkP#I?3=-riT`~}y+|H_OoQE1MB4j;ucU-H&1)jJudav~p` zE+x}CFLzAl*EU39ZZe(S;Ff7nhp}W|_Ry4ZQjJEzVM(DP;oP z#xA^&u!zW$$B&^g6JjgWh>DWqm#(zhU8?-)dJ_8*ylJRj_aTH2hB5pj9-g_GnZ8bj zKNfG9LUAN2vpM!9Dm^h{&w5QlZY~Yn8<{XBMIiXEneWmY74Facje*dFEeeI0>&JDf zwqN{2twASe^e?I9qJM{GL?1W$ZB{!k&zL?x+Eb8v|e~CZ)WItP7UH#m-b0(q0etv%U z967nU^QdBf_X3gmp2g1 z+m}~>UWWCKjE|^kw|`@xAe-n3&EyX12&0pKF<1A{nov*rDQiNeXB$sq_$1 zj?LUz=zcH1X1ELbX39S;%ZwIKd7)r5O}p9I)sh zUlqme^|B9$Nagq$=R%*@y9)vrL(U*PZ#Uo{adO(!zM=?i3X6+d1{Ow& z0n{)9Gcy2CPpJYxJ5|msDl3bAECKTDkr1>}{0@Y|aa+@Z*m^Ov*TXMyte|LZ2*^~? zx?Q8i`0hR`qHrq5Rht$70?xM)2(k}zb&b&R0(K02uZk`xA{rvE$?28|QaXVW%c+Z^ z#8$IyaZqWdB_{*HJGe%7D>$(!9LFb;Ak3IS!v?H9b!4|38L!F(dncE!63zks?oJ*# zG`2|xN=gcv zYX7Ta;8*MuEcId%63w7Qf)M@RbnFw&bz-irRX#ohOblQd7F-I~Q9wZg8U&>^1G0XN zo~qC;G$MrwK!e698boCM>cr`2Yfpl+v4s2mw?u6kDil-<&=v_G|G$B=8WV6+d-_;- z9ue`c1kVuB0-fFP%zs0$HwocH(&eF`w$|2m|8Iz&(1iIvRR|{)@qZJ0UAl?d4zhb{ z-yc1+=yp_nl2%eNH}^02==3`ts*!Q^1S!N*iCMMWZ_pP_liQo{N6evzw>$dDGT4PJT_-Qhbw}QA$Vxba5@eN#q#l|s>JZc8Ru~2y;Bf(_w-Fl65Q0k&1ATg zD6>M}%Xa3y9uk;6*wO@+$1^CZurqPY#{WD0i|)U6kRh}f_)e$$#elI1?B@;)Q#ya) zBUK7b_Ylu1G(zxPCBb=|{pecM2nlZ74^zzx+d{P7nwXebN;4$0ny3)+(yhh|H zUp}egf>s~%rmz7p+BAP@_}S^qmyPRvEM+x#@wL#>Ito3t5SZi`$9Z@E*g?ucwABqk zz)MS~lT&(e-gr2TL)cZ4W?%bY&(z69E+NEpCF?(Q@gYBl8w0?n2Y(qUa!K$Qw@=DC z+`50mi&T;e5aR>}ON?Z^?DEdz0>xF_`YC(7k@LsuK<|Gr3Q!4orx@kGQ6w`zTYOWD zGhhGCoyP+T105YQ=YQX1bBk5j{PX^)B*lH)NW-E@i_&7;{Jqt7y#ts9!K`h%%Oil2 zF?>sW*~vf5Lh7Jf04bmxnww}{@pYLRo{04=#CdQAh7|<#D+B#m^nY=Q#1`*Vi-$=g zJTdWt$CGp_u?mt($Td%cdjBJd02+lD@J61yBsiVfi6n^_zK7$+A>>PARAS9TFIflG zPtUy6f)M%Q$>=Y)pN|%YcKu`%LjIad=BmNxK3L-@P~7(Y@s)GD{` zFT8o$YCLELZ`Rxb$gp{8?ysg3nYzLpnTI+t8XyioC#n}VkPE2*e#TtE<(oeVM zxJHW9wYD#WsL&~NTFl)*7Zv4FdA&@1YMY}EMF&D(|LyKW>gYvT!?zg(;peRTq`sRC zMb3XSV(-&Kll*JXlFng1jc1gaK6oMSojwR8_uRu4tcMzmz#MOIu$?6+1m}-S&u}ey zk>a9|)&7WmK^pM(Tlmli;~eSThr`bX=%As2>VC=%Z~+M$CD74+5`_0OA8h#TkFg4x zwk~}$sVSy~53sjDQ*LYL8g5~`Zu4hn$qzU#;*Cn3*XM5Vz~lq)T_?ncjB9sJzmtZD nCBU6V0ve+K*O$4S@e`z<^TW_}5#3YcL%b4|dXXip>HdEJ)cgRi literal 0 HcmV?d00001 From 5420eb3062ed4fcf1b3ef0dd6f8b6bc8b22cd130 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 25 Feb 2023 22:23:44 +0800 Subject: [PATCH 0217/1057] Add solution and test-cases for problem 1247 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 28 ++++++++++++++-- .../Solution_test.go | 20 ++++++------ 3 files changed, 55 insertions(+), 25 deletions(-) diff --git a/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/README.md b/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/README.md index d02606aa0..84ab7a482 100644 --- a/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/README.md +++ b/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/README.md @@ -1,28 +1,34 @@ # [1247.Minimum Swaps to Make Strings Equal][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given two strings `s1` and `s2` of equal length consisting of letters `"x"` and `"y"` **only**. Your task is to make these two strings equal to each other. You can swap any two characters that belong to **different** strings, which means: swap `s1[i]` and `s2[i]`. + +Return the minimum number of swaps required to make `s1` and `s2` equal, or return `-1` if it is impossible to do so. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s1 = "xx", s2 = "yy" +Output: 1 +Explanation: Swap s1[0] and s2[1], s1 = "yx", s2 = "yx". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Swaps to Make Strings Equal -```go +``` +Input: s1 = "xy", s2 = "yx" +Output: 2 +Explanation: Swap s1[0] and s2[0], s1 = "yy", s2 = "xx". +Swap s1[0] and s2[1], s1 = "xy", s2 = "xy". +Note that you cannot swap s1[0] and s1[1] to make s1 equal to ``` +**Example 3:** + +``` +Input: s1 = "xx", s2 = "xy" +Output: -1 +``` ## 结语 diff --git a/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution.go b/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution.go index d115ccf5e..b37d88f37 100644 --- a/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution.go +++ b/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s1 string, s2 string) int { + // 寻找diff的情况 + if len(s1) != len(s2) { + return -1 + } + zero, one := 0, 0 + for i := 0; i < len(s1); i++ { + if s1[i] != s2[i] { + if s1[i] == 'x' { + // xy + zero++ + } else { + // yx + one++ + } + } + } + if (one+zero)&1 == 1 { + return -1 + } + ans := one / 2 + ans += zero / 2 + if one&1 == 1 { + ans += 2 + } + return ans } diff --git a/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution_test.go b/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution_test.go index 14ff50eb4..48683d76e 100644 --- a/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution_test.go +++ b/leetcode/1201-1300/1247.Minimum-Swaps-to-Make-Strings-Equal/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s1, s2 string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "xx", "yy", 1}, + {"TestCase2", "xy", "yx", 2}, + {"TestCase3", "xx", "xy", -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 77839291c35dbf89ff8eb95f9b488abb632e413c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Feb 2023 14:24:44 +0800 Subject: [PATCH 0218/1057] Add solution and test-cases for problem 662 --- .../README.md | 41 +++++++++----- .../Solution.go | 37 ++++++++++++- .../Solution_test.go | 52 +++++++++++++++--- .../maximum-width-of-binary-tree-v3.jpg | Bin 0 -> 20225 bytes .../width1-tree.jpg | Bin 0 -> 12923 bytes .../width3-tree.jpg | Bin 0 -> 8644 bytes 6 files changed, 108 insertions(+), 22 deletions(-) create mode 100644 leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/maximum-width-of-binary-tree-v3.jpg create mode 100644 leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/width1-tree.jpg create mode 100644 leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/width3-tree.jpg diff --git a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/README.md b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/README.md index 99f690878..ebd4e96b2 100644 --- a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/README.md +++ b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/README.md @@ -1,28 +1,43 @@ # [662.Maximum Width of 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, return the **maximum width** of the given tree. + +The **maximum width** of a tree is the maximum **width** among all levels. + +The **width** of one level is defined as the length between the end-nodes (the leftmost and rightmost non-null nodes), where the null nodes between the end-nodes that would be present in a complete binary tree extending down to that level are also counted into the length calculation. + +It is **guaranteed** that the answer will in the range of a **32-bit** signed integer. + +**Example 1:** -**Example 1:** +![example1](./width1-tree.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,3,2,5,3,null,9] +Output: 4 +Explanation: The maximum width exists in the third level with length 4 (5,3,null,9). ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./maximum-width-of-binary-tree-v3.jpg) -### 思路1 -> ... -Maximum Width of Binary Tree -```go ``` +Input: root = [1,3,2,5,null,null,9,6,null,7] +Output: 7 +Explanation: The maximum width exists in the fourth level with length 7 (6,null,null,null,null,null,7). +``` + +**Example 3:** + +![example3](./width3-tree.jpg) +``` +Input: root = [1,3,2,5] +Output: 2 +Explanation: The maximum width exists in the second level with length 2 (3,2). +``` ## 结语 diff --git a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution.go b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution.go index d115ccf5e..efeb3dff4 100644 --- a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution.go +++ b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} +type treeNodeWithIndex struct { + node *TreeNode + index int +} + +func Solution(root *TreeNode) int { + if root == nil { + return 0 + } + queue := []*treeNodeWithIndex{{node: root, index: 0}} + ans := 0 + for len(queue) > 0 { + nextQ := make([]*treeNodeWithIndex, 0) + + left, right := queue[0], queue[len(queue)-1] + if diff := right.index - left.index + 1; diff > ans { + ans = diff + } + for _, item := range queue { + i := item.index * 2 + if item.node.Left != nil { + nextQ = append(nextQ, &treeNodeWithIndex{node: item.node.Left, index: i}) + } + if item.node.Right != nil { + nextQ = append(nextQ, &treeNodeWithIndex{node: item.node.Right, index: i + 1}) + } + } + + queue = nextQ + } + return ans } diff --git a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution_test.go b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution_test.go index 14ff50eb4..c4a397bfc 100644 --- a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution_test.go +++ b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/Solution_test.go @@ -10,12 +10,50 @@ 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, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 6}, + }, + }, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 9, + Left: &TreeNode{Val: 7}, + }, + }, + }, 7}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + }, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 9, + }, + }, + }, 4}, + {"TestCase3", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 5}, + }, + Right: &TreeNode{Val: 2}, + }, 2}, } // 开始测试 @@ -30,10 +68,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/maximum-width-of-binary-tree-v3.jpg b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/maximum-width-of-binary-tree-v3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e24d37f7958b96e1426ed44e2577dcf9a1d1ef24 GIT binary patch literal 20225 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/width1-tree.jpg b/leetcode/601-700/0662.Maximum-Width-of-Binary-Tree/width1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29cc5a6c1f4d95bcfbf564bee4f362aae385992d GIT binary patch literal 12923 zcmb7q1yCH_w(bx#!4sUpAtb?qyM+V|A-F>b?(P~$&@lL5VQ^oA|fVwg7@^cKV^8vE&Z5;kw?{p zlFT>O&uKV^9O z6uLLh1M5%%8tdd%UnjwWTwHl=(3p!Hkbo$>Q8-WdhIcrG{EN|<|IHpk)bwZXT+}Y(3rpCwd>vB+^>n>AJ~L(|JFaWGg+u8dx#Bc)XNQ+%Lb2yR zY?%ueK}mfW*Gb0c5!QLY>M-b_5ykmSF_34< zEv!0vA>L2Wua_0l4pOj=bk>su+7VK(%&1I#i{m^t~BaP z$t`eog$=py2IsQgTefw}@K<$ekXb6O`iWUGP3^-Thh(x}L&tZaIJYYFX}aV~TBE;fep_L;#5tB?kz?wK5{yZWuPl3uBU$|iQ|I4_-$SrjI7qzO z;HS0kd44VkCnZz$a+HZjWrt#`j@J6iebAI7nh5O7Ku1EY}3%Zd-weD$D2Tb zU^B(d2l~NdU4kvvQ>! z79|76N?(xx^9L>O0XNw3foG8e_kgI0fN+L;fa&}lQSLpUH<|91--(g_r4ovqzIhR0 zoR`>~s-L-KABtk6{hapl{c(5T?^bHzdw|!g8hHvs%iBUY+_2~bL(_UMXn1sa+$XLr z`)5}P3e&Cv;^k@*R=_)5g#Z#_Vg~%1p%Kz91}7GHp0b-@&CZQC~1o>~eKuNz_;JnV+C?RQBQ?z-U>WO!erz zv7%egH)K9&tul9>tjtU#Fc0sy+fFJ!wg%f$TZNU*5^ZjkJg=rt;wvpVw?dNdi(bC8blCf7&xU%_5phN~4nny{X6c9h9MOkSUeh2|RXG;+ zU50)r58zy*bAS927twWeQTu=+cOR{uC+VH|Y-a29(>PQtk?Wglmg_xvA)`MeW*#rE zuy=_gmRy_s6pb}0$ybtBv~OBEG{xc>xw+3f&$5<%d{6pJmq2CF7V#^5;fUZtkxaWzGTE?$F4rEU7_(|)VDksv zbn<2}I^Gs|hJkHo<B`-P#8gQ-^YYCzyR7p#mn z)N8D;^DbWQbGDs3KfWVYIkdeg$921B)pd5hlSrH_^goho9>U}X|LmK_h-V0JhEw1b z)5=K)51W#g7kVf8aDCAwx%gbZR^;cikk1pz8yU~5Oiu2etLADW#Fl1}^j-M8_W)@7 zlJHFxI%J(dh>^Sdi95MUn7N1D{?p2}$zA!P8spuQbCH+6eoo5NW+uCL<`!Hr=%dh&O+ z;BXd4%hmDa=ucB%RHb4aYr{r?ie^m5Wq|iCukgt9x};^tdg$4u>62nLt$+_<``g%~ z&(R6Q%gGd+dg>c;&DUZgtXKjsR$`8**H`vuwTk}Nm={Gi3xZ2ZRZCo_qZZH0K&3f- z--obHo5~M0{6sAH8~pr)QgQwDse|!?`})`6ZH93|*BxkZS&0cL;Wet6%KYYW=Htb= zT?)JfkUl*IU4-^F6RJGC$`M5uV}1I5?$q~S)}@n82{EthQ6$0gzTA_wbXgp5RTHhZ z^xvQPH96*wGk+S#BG~&~h0p{w4v&&z@!+ zXEQhK@KhK&Vvuw$<|23`jNJ1Z9pV3RGfU|9rQL%dmH_ z7PaP=d#bD)k)){Zu z+#Swe4{cRQP*r*2iYPxSR8?_H2{!9?!M_}Q zC5kByZ1B(fQs#B{&b-E#q1!E@zsYVy-vtjVhtX(8?OK~ z4GEy#U^8cUz+Laz135*>vQMHe-&I)4H0$iu1JE|d_A2-?)w=XscTR^^<_7D*sSA{$ z{N+@R>fdZNL+6$)f7Sdf&g$G^_6mjAy0y@e@v@i=U(5V3xlGQHnwGjbWh-FGkg~*(OyP*VAYWGhQKUZ2+v?p+n$&$Kh<-1@ zGqraBOD-M>`8Gm%G5&tmpvTfmoGjhDHdX3rJ&pbGp#U$Q(ca0_dw?JjiS5^_0R8+w zI}><0w^;KPucG_~8(^V7G|eV-#kiMxdcQ!kOy_XZ(Dm7*7s3d(CsF?CqIz~qo0&Q; z%Ce2lm&tz3Ol8pG*sEl$#yE&dU>qi~ZU3+IRjItnH38ADD+i4EwK8m7w`oh-UWK^u zs$BErNK<9iEU*q5O{Sctwi1)dsKiS>?>pOGjh%U|>hJ)z>b|a(GZ~e`s%L$#XnZO@ zNRII}c#USAt?q1lI$mPhMLG^O&S=aYhx2hc>+m5=OI&LDb8^#+$;JYs3uDM;HIKRm zFfQJn64D#UAgnR|hZWGYVvsTad_RGyr&f#ubLek&O-tZ{myW1HQ5!k?{v z+_$f|*Z%i}OCiZ=b%x)Ga4&(Y!AR?3uWNcI6U3Jz6-%{_2C-Nl+d>y5)Fl%kV99h;n3-Jzbja6R%gb2uLxcxX~5oUX( zf*e(WC$ITviL^TZwuTAG>vIKqs&G?xxF#FqW>x7}<^L=%iai5SpbYjT3gG~Pl~`<- z{JvUi=(%%h9(Di3HglQ3Jm-j*8a%8u29+@F8JzDf9R>HIF`!YmuCtb$*dc*I!;(7!1bQv^D`zn0x{WEnC^@ z3<}``JOBhO^mpM=JvOpMn`^PA&(?g>lc$|~_(el#G!40=Tn7>;=JtFCutTfKX+<$; z^U0KRsiD*3i?3{~+(I-slCMw#l+SYx3i341hZa`I}2~a&5eHd(^&GSB;V~ zF15I?DSHe61^+Pr?WBaY02}F=cs7LiBxyxS8yacv{;!i1E&Y#vC zp#_LiLv9Wpm>Htx`&5a^pFC)4A3v_HaX56q zm1>l}AvWWutmy1(Kc7c7Me1#Iy2_-`F)?A(%yQB=XMW2Q?WON)%p@fxq0SvAT<#+^ z68uRCbe=HazSv|4o$Lna?I9Ex!P4BTL&;D5Y8M(#g##jsdTjI^XD|@Qv3twzYLmN{ z`E%pb{IFK@gz_g(9K%YXeZJExEmT9y5C@i-1I)Cbd=+aUl6oJQ8MjC2FH4Hm?&!9@ zDuJ5s82%S=-KA=v+q^rlLXHo$+~K%oT9O^uD=c#{5o1(K9{Z=%LCgr^NgXi}F)`YI zI>kg~@@DI?Zky(al(}dbQYOL#v!Z%(3F&hV8p+C%(Oj_nYe{Pf;(#&d;iu6H%mLuEOJ)X5KJ;Hs@X{=xGwgXdjA?%YPr_6`2_=@O(-JE0uFSEP6XFkawG)<81SR_S9eY5 ziIxa6rI}7z1AKPYjjDDS*CVV1cz5Ops;9|*me`92$QW#`3y_mRN)W}&a9L(&4nVT} z&yt4i2}48%`dw|~3Ruov=zAOpZ+oWhUw-lJl zHeQ}f^y^*3l81pFcGx=$xVrx2;?`u2E!sUGLEGVfpio$#`%A(fglS0;w}Lf&PF-#` zO?uPcFoh&o255_{%sT*RKyZhcY{G!N-B$ul!Y`IW9R(&}yL$j0;+=D)anW*lPVx6M zKS$t!+@_OQO`kYwL3;1WmV2&x1(ag=N1=wxUb0@rv|WwsTY1`pI}y_$*UqhYIUeo- z2P5H+q4Vt5DN_=V$(ql{(W9$Zmg&E@&kVzLi{;CH7Zk-E!F;F!%4q=K4kJDT-RcTE z1&gsasko@~_1X%2rX$tY5c(<8mDI{I(mZNim$5=IJ8Rz$E;3I|TRf+HnK9mtnO$n} zew{4k`TqMJ;8=;`I83!EE#0ETAo}G~w@;5j^ZmF@883;Sm*+)}wO_n=E7VkKC0^wd z;8cxvev5gQVBJM|{J^}$$w&7fL)80{ZI$aDfD#mVgtqB?0~YP-Wv0b_(sjD-cFr+i zMiH8@NOFnAkyY2BjYZ=#%H{D|;#RE8H(f?%$w?O@l$W}IK4DZ2z~7f}f=<-#T!u|v zv*_iXmNsHmrB(?Fjm&6}!+Q?|h%1~jA1N@$E3jZY{hga&RX(tWXo5Gt!PQRs(>n&L z!TVUIpQ3Yb1KMyf33F{Hj%%GZv6%FQW&<-CR8a zKbDA>Jy;X+*YnzKH5!wn1Tz%rvyIxWRaxz^=_YQRX{&96?L+mMwn{5C<1Ul+-2y(C zpr@Ju3Fe{!?PMYkp{HssK+T7%t&13f2j`)r%Gm9NfooDnqDVf=us`$pnY`MG8R$RNcXuHWm z5Q1ZJ-;${W>54Bh)z@Uu!;0MHPnzOXb+iIce;;n6&Uk4z&pc+v-}>F!6XV$-88~{x z(u*wplfGBmbpEl5u3e}7!3saQNS&BseUhPpeY{>|m`}IDCez7D=v^YU;y-2n|9}K8 zjuMe5&?aq$nO-Vb!%ORj!#w}*ypTgN?gp5^t*Ta#qep>_;@p z%JdS;vce0Y@6f;C)03qd&A(I3%HU@;6_HCeJGK$Xn5o2P?Kfu`Ha#K6|FNHX1Gq&_n}h9;J9C+&mGfA6 z(zv>miFVs_97@{GX+5C1V9jl!OclNn{ouP714eaPIGkaj+KzQ4Mk8!Jgg5bFDIySQCp}caRp=}E;HIrUB@P9Gl&;L8MP>7b? zrqa|t`Y_#{9j!v1R>(U6awOcg<{IJJsGz>qTC#P(7LdF9;arue)Xnn+ByD0@ES2Tg z1i9u%MejXt!h|irCh+oAqk>+GZ1{eZQcWoDf{wdIu%S>VQ1rEdo}aH-8062s*Xxiq zs*#)DHUCP)c>5NU-XW#lS?@N;ZfoZKa~C!hjBkfDqX05&T-EG3Q?5=P*Aa27IK^m3fLqMADz-&PKQ)`Gs#)cGH5{S&3x zuuIyR=MfH(gk5mlsFQv6*s>7^QSds$Jp}0ve z-@b8RIea^JNl!c8FDNxGVRbr@%7@+3GObY+dhPQ2I6W^$u-W;B=b{VkDbK3ndr}&E zag@PD&xJ$`uEjq~JeXe{eHHhpYG4hOBQcbe@j5vc$}xRJHnbxPq z2?~+(&G{*14o3n?g=-h8_kd8!I&1N!mxP)5R{sKVql$VeOUdw~43EVijfq-Oq<9ll zTVaqP>1Vie`(FoisK*ghLC{u@6|$%Ie2i4?^Ux#R{7EO_mX zKIPG?>R_CgpFm(R#bPKK&N4_Kv?dxoXb}4oVD~rpj5TVWCrUuK9(eWbV3lgbiCjd; zeD69yl8_y)&Ud~*aSwPM>*eHU26|KSw{lIv*Z+Z;o^BZzZ&tn}vzw~03FV@^(4i6i zD)?ejtnOK8?D!>r-XSu{DzESO&+`=H>U59sjhXpHh+>b&+cTHH$QX5vWancy@gcI1 zN%DlwR}~=nwdg7tCSz(8aDwj$NEnAbN`L*YO7VEOJXZ9c@jF4`4;TX7S6zG)9Lb=$ zWh14HJa5|fk@@A$tZ}osaHvfsbi^8$f7Dwhe{u!-Ou8PG2L64G0U@<>;7w zp4O(zjh$~7%>K%F3-ygg70jU6dT4QcIW^i_HAhEg^LnU%pzRN@U0!BQ{&%tZ&>}M} zy-po8#0>kX7&^Ci(H5X9>A+^fcaxLC?^z4+e zd8?T_8*)@am%>YOFRPSTQROUZGy1C+B0pDTx{xG#pT$EZWPp?xyEH1>Ei9&4an=oP zz!#;@;m~0HAxG!P#;b)_AhftVjll2gF9>t^EoAVc?>DA>#YO$Hsd2PQKZ|m$zz;Um zu@=WtM-xNKd@k7HdBM2KZ~KU=Z*`=1RyBfC&pb0xpAbg&UDJ<@6o58>A^0{bi#jp<7_;!N+Y=3TvSxdkzM%GT;Un3;>l4Seg zmqRIc?WWdvg!lyHTk(Ql9eRi!^ zTEoNYRYSRb{Spqo5uC0up2F>rRV@3QdXd3s!Z>(3*$b{zv%)`R-ACkiOkSnwr;1w< zXa`;NE=+hdVGh2~8e;5LKrqe<-Rr_egUP#S8~$F43xEC(sayEG4L0m>BF127{N*v9 z^C69l3P4EAoeYGYR-_?)*<5zHwpPgfX6NL;4C>HQn&1^*JnWHQ>E%VIR}{fJ2?eqqQ%%YY8i@-m@F$mK+kX6 zyKjrv;Ul8p^fml=vQcMMhuRjQ;+hHG2L6xr6@;cuU)}lY3acUy^m)gD^^(82^c+ih z2$vj^Wj2gSKTCFLGq%fW5evPQg$&(Qm{ zWCmBp%k>(?vsR}d|4ix>!x=yBB#mNT5ARU*vbq{F`C;^)(>h(?B*p=79`HySr}B{rIly2E_Wh?jhS!* zpa2(9k7La@^q^AS#<^YK^&a%?tlKckMSPjL>Z3q1bCq=0nqHc0fZ=;PM_^-EY0$cG zTj$7?bFmI*xyks=^#>k3(cRFs-&a1}+DDIRejxb{*2D{|QWk*2LiD7YiQ1(UdDj%9 zg%0XU8zs7Vb>ePLHWqAhbQ)xvEKX*gCGugNdP^8(R)AnpPpsE9#Ll~?CxUuUZ1XG2 zUzLb->Z+=UaS@nRh-dft8i*1}V-Rm>GyE4r@i4<)jn*TgMwOca`uWMA(2I^N#xp_g-8;<=) zLOVh$hY1LL5xOxZ4f$YPRI8ouKQeH1vU0l zdS?PSz~L@_ta@(`mg}fdqb}CNA_hcTY?-J%v!XF`ryCw0#Ch(^TIFj2b}}y> z>g3Xlr!C%g6jVe_t$UvTFiV7IPNJO|D@|0nS|$q$l#k`dn`%?kw>tkaVzVlt_Z(|{ zdg6LrU1CopuZfUpu&=F|fZ~pIXPEuj#MY=a^5<0^Y#$7uQp%O$3WvN7D6FOho!cJ!_P*-t$Pk3HP&Hi-G)>J(FnUT+KC757<1L_3pLV zI6Z!2%Y<|<#0&4UEst*GHh!5V>|a@v`-RqiXxYUSw` zvt*SdHboxVX5?4tbACKPMe3q01W$MZgOm(LTGqcxNAF6|Eom*oiEE$iS@2!*x-E6D zd#ewjmMt4_?g4G=1EyU^oQ~$YFV&}dT84IpD(?XhLA4_j-GR*LeHlo=javy6P4*f- zYqacy@6qmtZtD{mu|_F=)T8PJ&1-bWmZLV3!8P93IQ->S`NpSf9Zu)VAVpPE-3OQj z@4KAMpR>jy6Q=D3hi06`0#Z~*2Zt-l01_n@@?8|mtg4?Z1Ah61Ib{hzQyrPu9i%+X z^DfHCtb6G~0UMbf}u_T;OImp;vfQg50tUvjo%B`0!i-EpSdQMN)$zz_N*^aC6UX zSD=?4_Q$c4F}Vfuqtg3xK?0mT&1>21b*<}+{8`-g?`i8-o3@)K<=MrNIcYfpJ$OT6 z;_=*V;JR{}aQa{z;}lWU^ci?JS)MZm^kcWORH$@-8Cq-T{^al-%WpgN<(Sk=b$qrA zY6(^$0vK(-n8FJ5HbdWeT43^IYanu6Mw45P9f2q9MXk!gNp{^)wH>mgC08&X>2st zJkm1aQ)eyx!vrygGm2v(PMwGxC}b9k~}=`k)jER65i08re~Q zXiaMaUqxH2cEy?E8f>diZNiW1aY0FTtG;vS>F2Cs+mtJv{4@(bx7zr*&vu3lcfzWpx>5Z^d1j*5>E#ad(T_rqY9ri zZiE)-{V+x7@=!ODibe0NRhCS=jzvE|NDCL27%QN%tc(7=f$6!58!FYOR8f6KN|G$_ zT9b@W_Kzqf<;ew` zL&l{z@o~L}cU6AZB%@bteSplF)=mC&Tk^3^pX!tN0Fu3|locYYE39>5z%Ee>SoOfR z9^aJ@(Q{kZuC#wKF#R6&s`O7x+4U&B8>j%uu3~!?KwHp>25=!n)4~bCLp2Tm@-JP6 z>xt5=t;enC(#V%Jtq5vkYif53FK-XG7%ZW2iq*z1sj#`el~VIiem$0H)kOC>M}ogz z#_8&Mw)M^qwCQPUz4WE+`fd*+H}iwn9!$J_dyN4u&R0Hg6n~W#yeMZ;-Fm1oTh8Oc zkpC?teqDIZ41IWT-G_^&%AT_OWC9(rE>g0lT#U$Y@lXNFk00(G%S%3w$c;y*|9*l6 zYVG&J01-KE{9P1#J&Q%IUX<=S+VCoviNk!FtWHM0MVPbb+!MiYvx09JFvuHeD2v)l zHm|OXz?bEgQU18#O?#|D5$t@EA1QqUZpxjl*2af95DKDb-|V~pGD}LLY)X57H`Jpb z%n60RKET#^iY;8WQVWM7D}dj=*1{DP9LP`z95$A`_=3j_=5JXe7+lk&d{stWJFmZW zzoko=Z&$H`#4hWWPxE8|y4(ZmnbKg8t{)QRdXZXcqr7ccmR=6weCVT;%&{l&(iomv zWSu9p*Kqt=Q!10h@ps}|naJ{593wg)@2I?)o3hhohzP=`QJ&dDA3@K^p6PnEZ#&%- zW5oX`he6lViR{K_ay(hVwf;S>b@Al*(Ynii#LOcZs^yK4m(yk;f^*MTPen49Vbiwk zDas@vwY;iowc}NprRKiA{$mCehLDY#fj8C9d!o!qu}awyJrdH1n&j9bzBQ%|x?N0F z2yZ*T7;XxQQk%aKC2F9q6$((^o}6r{Bxhw$vHOGGEn4*re~wH=rRCI-xW0K-vs-4y zPg_7n$Cf^Osrp`vfr2S>!_P+9+e*7+MSj`VJ>MS#w!^Jd{E!k}A=J%6c4}KY%P)JTekAaT}WK&;R zte2tBd8L}KW_by-v9YNIb`K~{!I#apEr;taR9T=3-AIS^n7q8OzO-R>+axzTD_F6lBmzPSd|i=0;QPZDD>PU^LW(}l^P6dy zjv!kWg78^e%9@$5_~hkvjhGu}aK;{;oDvgCVv$_bisTfrT!Q%0s6U2xa<-EVZ9kwW z`OF@dvdjDxk(=KJj*LJ?AhT^7ab5(&)Sg>rQ^8>kXX{YvH!yW0=jok2XwM14=ZlK6 zE*G$=eEbO4dJBhUc{zXX%M5>T{aXqF(7v(ssZa6bNTuN7R0i)?{z-_|KpSV`$bs;8 zIj%=)5BnKq4ZM!gyBygh#_XG|%4>&UQCfWcf8xFDHzIuypI(_b4vU03vzs<=I_c#4 z|45Uuq9w@ODyUkhw%_R%^As))r9ckls4^^HW|f$OUoiR|cXlpE=kNP=;@keEb;Le# z9pgB)CS&lr3)=K^PlFd}0$~Z1ZTEn3Au*!IMa7@oG<>xKVz8adD z)-Z97alHEmA~^Re|+Bp&;u}Ow*1RhR6sSSafV^_>mh3 zy+kfBVkHxS$0qABUzBQ*JF=(basC9i+*uaL?WgzcjwP4q+x%ADF25?k{k``>%-8x* z;hLxaxR-}L&{f|XzK4sOmz~oz5N#neX6i@*R#KFd7;(15{0a1Qb6DWtIR(-QR7Zay zdhbJ8uUA(|;YRKzQ0v5Dm`jUi|Kq}=At|KFW_JWaan~fw?E-vE|41ec&g-LB7L!>`rvx%L{+Rz3^m0fG-F62( z-7m6TbgjL!ozyM%&-R(N165oV<{?Z!mtOd9Q&(%wmYXz})>zp|9rzNr(pm{Z?Psu( z?Dxs<5^X$`NzqxJi%{W&MHxD$4^vrDAIcwj(KHcva&pj&Q|Ia#mQV+eDS2$dSw5%J zX8k(N5NTl*mmNgj1CFVNR%~ej9M(YO^e+x8NBGcg(&mTcRVH;8#qGJ=Ew)L4`HHe@e7e)CelC0AnE11rATQkd>x ziC7Mn$clNrI75U(AEfOT&RE8#&MO`^^Rn94$(o+Uzcnezg?>qB6|?M%iC(DblYAqjwyK5X(zA3fZra5*bm4f(&x7!;K&1Rx zrb$|f-%C>%cunr&?P}l!e4rMHv~Y6lkOuJOoB{J@i7G3L_d-~&N}fd304oItJCU+$ z*#7BLfp(Hw@N?*)0s%f&=n@IkkylHjY13HqnO|MRx9I5p{gu5=cD!U(q*D*RgDQCb zh240RovaUHYjYZpNLFm-yf)}jG}rkJ62%lCB>RN3c5P<2M&?R7UP5qq%pxXw<~oDO ziO`(&A$MoTrZa^9QjSo;x%wm4Vhuc zFu;(JEaCarJMZ29oOf>B^Lkfx?drYO>Q%k>?yuL^w==g(04hy24K)A`4gi4j=K|c$ z0aO5ZxPQrC8t;$XA-MCG5D^gI6A%-TkPs6Q6O)ipl97;7kP;J z$BF`w;r($#jYkbo1Y8!!#Sz6t{5w^*>pGn%Jcr@%;eXZ-R@UKz?yG9uBWw6X5~;wz zo#*j`FLqOwQj$uxQpKdfgbK+b@y!|HXUXk4bNv8j|KQip8x@-v;cd=jpBG5%2Bo05 zqFa@U$dJa*t+VhJl!W01z2n;%h@_xkVRuFHd47_FY*V{*q4W{;1o7%}fIg*hQdKB8 z+s54(o1xQcZKNdgSyyciVge?XgqQV=6jd{HgO6FxffSnMdUuNV?UQDAyMJ_9L6>Q5;Jm_Dy&c@2!*UUvQ8`QP zOhclJ6pNqTTXoA*wv(i_5bHncVrroWo1JnAA(??S&a=u71d>hH$R(yL z0e>DQEr@WYO(nH0L-eU&K+Bx%4l$qNnCbvfePMpC--(_7gEcs7PSnqmM_zlJ_nnu{ z%bwV_Rnv!xWWJS-Txi%iP)mn>y-8)iR_44V{J5QDVCv{h1X)9b84j;R2(jA5Myu$EfyD?*i_y=Ir<=&v3mu!auy09V-{yvxvHQs90y!nmKKfNpa2pGZr6CG(K(0gZ0iV^g5a6F&|yw z<~~;>HSaoGZg3kVWWJeur`D0Dqa%nV<&r!AeT=B{ZEDoCU5U$Mqj?APi`{(#nYmnQ~xG^G5?`?VP7n{}P3`h$2Bp^T=C3%vM;c{?$+PEx^E4 z0!j6Y2C3-)HMpT8njQJAYy?yKzO9&bdb-`f8j(;TKgwj56+EIZlRW z3LW=`_y?%GS<038MT zH)hDDMFWR+ychfnVyMB z-?T4zAW-`rYVZ}Vg#6;IWg8i7m=p^_r)*VSg770nollNTD ztW)QepO2&aMKdSz8^AMPtEV1EZ&Aja(p+2~<AJ)h_;(ocueNHp zO&6AJ4Y61G$@mnR3d1hStM8pgZRZH0l_hcXgdt`YqYba=7;vSYw*YW_kI&H{MM##^Qe59- z?g?`Rmh{=WHcdpPO#?^%WO&m!db4QvuuIJCLu}KzIla)o#n->bhD4<^4vje$yv*Z1 z%c4|fmf%nFIaD!8eTF=b)(S;w3m^aZJ?PF_uDu}9XtL=aXTHzS=3X{XJQ?r!wsk@gt5BA?P!+~pX^QU@0NxguBSFFJx7g_vqHy zYmILFeG-a8uG-iBuoKK@CDqTt(*`^FwwVY+%D;=0@5RAxHs2V zcR9&z`VM&c%V#MJ3ZMD?vd@@Hu@wUdGq2w@!pX?A(M%x)I8z35 zQ-mL7FW&JjIC)R#t{1;{lF-Bt^XQb9X`gzOhBf64l!rFUWuoZ4$K~*ZdKe8v_G~#o8zK zpWDEtjY&(M{?xo-&#QT^V)lLGo^foH)8A_|{D*t=H$_b$1tC$fYo>LI^jb&pgx^P| zfcB03zt&Oy&GfPZ6?o}p+$E^TzL##rn2(GLdRjK6knFnEI{CeOh@dy$oz-*6)-j*~ zhL>A}F)cj@IFGsQu;!Ih<>Jy`;pnZ$)`U^~+C%X%_Po<9Xg-G1LK zZ5j_jI6D0>*6~a0X60+^XF?IkFSX=~*VeNVdG5gzOJ?gDiiZWhoWycYxJqxZ}7ueT$_*zHGjwOGVN&vF%{rPy@K!{?k?`qf_f>%};;L1>HmDA@T;CmooZFr0)TR!dhG;}eQ7TaYO(Fd+9@>>w{b z372I=hT#1we|yIVI1T$E$3)i_9{h-sCAMidY#q$b!KdgW+l!Ph1()*pJ=w70|BhwF zlB&Y88)zHIJTQSSS-s*B2Qtvp$PkK=FUPJPAPUq6zh@xylX-V z;790*r}ZS)Fs;gW7wNXDGDHRekEMuY;SKfy+wL+mJFCG*X#Ynx3j+9zW%&V|bS`x#V0muTPj-Oh9 z^~FKDVo?k^q7&$jxg^svGy@j46^sWB{oH%zvk)jJp4)sl!@m2t){SA_eW8iiz(A#t zDbMxW6ta3ioIYBd|GBjseVjAH0B|_mQ7mcon`gsEM(C2nb;O<|ZYI$%w{60UoPFcW zcJ9rJdgG=`nT#Mg)M<(|@L+l7)O2{vFHNS!+}o|mr5*fel3$F^^JKKosg+3=+J-&<{>Ki3b0#&)F-h2X5N ze1wMFp{@Pr#7}JC1~3muZbh8v{?JE2_+9^;)s|vVdw@$^T`ues*hF5jexkx@oD1Cp z@KM3UmFAC6bHQ-&y*TT8p*i$H~qg!5-F zCtiCWm6FZySYnC{sVJ>1kO2Q`YH%i|p@?yB+~arpJ8(_K*slJvd#i1u8R48eL;Ffq zKBQFyIEo?c@9*Ld(26y8SazcLMI`Fs@IzIVVDlvE_?N0l;&v|x=r>IkCZqncQ6z#6 zUYV+1l%gHvYuA$_ASEdO%u3bJu7SU457#27KftTC%+>#DY~RH#W6rvEU>YA^vU_q0 z)4qFTP41YgD|vS>5O+vPzob5k#G)N6!T>j#5qkZn_@3E^gH`=%JRE@F8{} z)zIQy4*PFNQVtr{@OV9yj1r~$)~cK`TD2_0$+MRm0T(}+ppC3Q2yb6%rcl6EDj8tb zC8A%Vhy6-sS=}H%(LMy_ukF;t9};Ciup82a@m4Eh^}f}T1Kp8(%7oF%r5-4^(%*?i zy%kInLSCrfk&42}~kevJaN|ELk zu&&H-3y>Ysyai}X-U7BCm$PAr6aJiTU)}=d6mK|4kblo8THwVV?<{XQUcXBZmyG4q z&B@S)CK3|QP%WtZ^HIcm0IoFu`@lplXv!=R5XOc(?3Jk9%{P0)=$o)=`%SOULe+qA z=X^nWDS6gYu3<6a`c922vU)NF{=K53#U8S-rsZnBlgh>5fCUhcCUm_CgUvHp;M^oY17tU z4Bvb8^`|K5bqB(+sn-rxSygIF^`r~C(H24FEjmIjCSo`-*qn;HUYh1Bn>`>2?)rq&wdL^LcX#8+L zcCKFpsgBT(#%+jQDERO_D}fEukKx7vW1N6#ML48!OhB@S$>VS|-a+eMK&NMd(1ua;kbS zihJ@sq{JOATpD=+85&Yh$>=46gsNqwPPYw8+fJH$Gcs!|cTd#UyZsIy{i^7Wa#JaJ z5e4IU>a9?_?p+>WWHi=cNj7N!ZxIZ_n>ZMqO6p`s{xi|y=cYGd9-w}_%`q`pTkySp z)&HWBmXj@hIdQ$F33~=FN@T6{BziQ|9sV(C!_%#NEc8m3qrSx5$;gCS&(&yzD2d6H2=iAvq$j31x0L>1n#H&Aj{NWPbBo_Z{b& zEAQG4d&*L~mtbVmY1#tM9_tf4J`bbRI_IyozwDD+IzOS#*@H*TcpACJ$qZ+272_2)R|woIZqA0Y z)F4wgOE+JUIeD#??J0iQm!q&;F%R6+-0A;k2ELGdoZg++s+v3-9G}UO?;EsGKzH`C zalBuCIQlwHK@LqXnX)w6NAWXn#K$#6r@9=IYnL7g8A%3jv=}4iKG0|j+|T`hNCt{` z*rpJAm+Zz{U)(tlQ*Dt~%NN3+X1#9oCVCGMrEW@ebEPPC!n_pE<&iMf(U1mwnO+Hr z7~#AM$0dLi;5Gg6zi$lu9WDQF@1XfToTtWmreRTZV0%{8vF7=ZS7m9?E)BI%``#@e zO4q~i?&%(kYdYJkQvz(80Rp=p)d@{-eP2CtrSXoU741JdONf{{V|izzplY0=jL%0s zHr5Rk`rZZf>K&b`$@OFc>;PDr^%r^$Loj;w2uYiq=N-TTGk4q#5Lx@8N8j=~1Zxky z!eblcWCgM@K1hMR{SWx@KSNYMV{b6N^vW-{C$sfxUvT-zsp)A5XEdt)A)h}Y3ALBc z$W~kX!MmhAf_S~-*Ufu);spWzCbOQVESiTWln^ym%HNN9di2w-^Dk{)vI>+r4mWQ7 zcn~sRk+$^fhjtfsWz*vR>i$@h1^+ZT#}oow#bi(lk;{Mzkqza+T#BP|?(=cQb0|90 z)37Y7{~l{L-j?u-aLr*XPtQSQ#H=y4jmk9~2Mz(>j5x7Jj_Zj&byGB^3XwK4nOiSm zs6l&cUHcjuBXl??CmTedjCZJoIy6{LUCcDDe_G9~C+wE`NjDzWX);>3InM{^L}rAK zxc8RDCnZoxFBd<{p+${Pi^k`g%S6+)MF!UlSw%Qw_O6e<;J( zpQ`_(kD-vP+{`b^&or@5voSNsUG(iNPqs?BbK3IVDBkeGf_kA-$a6}HOepgRKmR%K z#v$+`37okml{9=@`%AuxV*<%A#dvNZOd+oO2vDu_len1gCw{mI^%p=N_s z_rq5t6I#AGn;5E7#%SPuV6fhi^_h1ojgzAyVoy^3MG`VOl)O1rVBYHyJ8rlI%^jER z%}03QKIWMf%n=2#QBQ~+;6?T6IW9@VqMx!!p5(}(r__WkVz*Bol9Pw!t@$=?iL)*~ z;NBFRxw1vbGIVz)wA=u_KF8wpK1*3(9ox@`xX9PB){V~aebm#NtN4i28#8z+Wh>M> z+ACbJ$pm0)@zn_*ZBz7Oa_}Ax?W%o(O5)+4W+0@MXvGA?!07$&?*xn{6@L;t^|Bzf z5AOctaIU(ob7HT2sWS%u&|4d6G4PciIBt^E4Vic<({kd&sswmT!|`|M{LzIZOd;qe$o`6Gm0U`1iOA0dd@QiarN-|(>7 zxAsZ!z(x~W$bBWIhWa7EJY?Vdbn%QUr7vyHbrgyAk_-E+H!(U^^A(@~vsWKrSmn~Q zb_lBujrGixsQBXXfX`hiz^?GTlFn(6Eh>!A0N8OvY4UEx*Vyo|k8Bm1Bf7Emt(0_j z!*8&D#7aEJiMA!XkEf^pM%|%ia{5~jB)!s;fVJvTB&)RJ5}|Mp&H%}^lD@kIM5&GxV4Ls%}zLb##Q{KJ!^bzbIl`@)8>s!Mo26!m46Y}o{6=8w);e!c*!%rkVj+h zuj_~MVQnuiN7|nds$*TfdrrTVEMr|Gs0i5)XszRfhRSz&2~i!geg!oP?m?`oA0`qI zdn$gOenz1MP=$6r{9*RHtB803&Z8!=r}$j9DkF-r3M z6ao2La}vm`DjiSRN*`FIEh@8Yn#=aWHqnE1Uo2`3Ddw$YOAU=c&Pa~{K71#?{*S^> z6aQsXtzx%IzGYi&wBqA*mj7?ra_?&aXs*Gyu~wg8c|%(yDmaob@O&#EH-Ox_5=lT_ z0G}RxZ3*)i+etk4chFuY_vcElJ3thPT~XLjBRW4Oh1Utl1-)5oO3!g_T&y=Scbro# zXL5KoASZFGDsLe~E7Y{bq9O$mUOY9Y@83n5Vf{}aldERD5KLfnWrhiemcNO=RrtN5 z96-ACvBETh@A=b-N*fG8*hgWaL&bP%qp2MWw9*M@@ zG%p<}J<2b7gEXiqOe(o+jzl-rJog{=odcqKHFR92Td#7Y3Vm9$$>+FR)%&Q?-uOxz z%~poTs~Tc`>aMqd2&Wi)o8HG3eeo=fi78*=j(n5wV4(2$wVYNmUN!&4(l7P}<9k~E xXC$PRUTQ$$P_yWphXqv8i)ZGi8Kn_2#c~Ir?-t!aRQ$gdWB*NuHT-t=e*rwFF3SJ_ literal 0 HcmV?d00001 From a37b7bbafc85e0570f0b17cefc188f7a76c72993 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 26 Feb 2023 21:38:06 +0800 Subject: [PATCH 0219/1057] Add solution and test-cases for problem 669 --- .../0669.Trim-a-Binary-Search-Tree/README.md | 27 ++++++------ .../Solution.go | 21 ++++++++- .../Solution_test.go | 40 +++++++++++++----- .../0669.Trim-a-Binary-Search-Tree/trim1.jpg | Bin 0 -> 15115 bytes .../0669.Trim-a-Binary-Search-Tree/trim2.jpg | Bin 0 -> 24980 bytes 5 files changed, 62 insertions(+), 26 deletions(-) create mode 100644 leetcode/601-700/0669.Trim-a-Binary-Search-Tree/trim1.jpg create mode 100644 leetcode/601-700/0669.Trim-a-Binary-Search-Tree/trim2.jpg diff --git a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/README.md b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/README.md index be99ee806..37db1e7fa 100644 --- a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/README.md +++ b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/README.md @@ -1,28 +1,27 @@ # [669.Trim a 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 and the lowest and highest boundaries as `low` and `high`, trim the tree so that all its elements lies in `[low, high]`. Trimming the tree should **not** change the relative structure of the elements that will remain in the tree (i.e., any node's descendant should remain a descendant). It can be proven that there is a **unique answer**. + +Return the root of the trimmed binary search tree. Note that the root may change depending on the given bounds. + +**Example 1:** -**Example 1:** +![example1](./trim1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,0,2], low = 1, high = 2 +Output: [1,null,2] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./trim2.jpg) -### 思路1 -> ... -Trim a Binary Search Tree -```go ``` - +Input: root = [3,0,4,null,2,null,null,1], low = 1, high = 3 +Output: [3,2,null,1] +``` ## 结语 diff --git a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution.go b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution.go index d115ccf5e..76ed03254 100644 --- a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution.go +++ b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, low int, high int) *TreeNode { + if root == nil { + return nil + } + if root.Val < low { + return Solution(root.Right, low, high) + } + if root.Val > high { + return Solution(root.Left, low, high) + } + + root.Left = Solution(root.Left, low, high) + root.Right = Solution(root.Right, low, high) + return root } diff --git a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution_test.go b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution_test.go index 14ff50eb4..aeafe94a2 100644 --- a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution_test.go +++ b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/Solution_test.go @@ -10,30 +10,50 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + l, h int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 2}, + }, 1, 2, &TreeNode{Val: 1, Right: &TreeNode{Val: 2}}}, + {"TestCase2", &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 0, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + }, + }, + Right: &TreeNode{Val: 4}, + }, 1, 3, &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + }, + }}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.l, c.h) 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.l, c.h) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/trim1.jpg b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/trim1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47592853a21aac2926d2920fc33d0efc46544e30 GIT binary patch literal 15115 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 <6GiLo?7C@9(QF@2=c_(%Q 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 bamX|KAPl#4?8t5xUgayx)as$!yad| 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 N1fH&bF6*2Ung9%1BliFR literal 0 HcmV?d00001 diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/grid1.png b/leetcode/401-500/0427.Construct-Quad-Tree/grid1.png new file mode 100644 index 0000000000000000000000000000000000000000..ac808285552a370be6362fbdbaf6629b2eb3a8a1 GIT binary patch literal 11892 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 literal 0 HcmV?d00001 diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/new_top.png b/leetcode/401-500/0427.Construct-Quad-Tree/new_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f134c4ce11a7c12432dfe645ff56be12ddd761b7 GIT binary patch literal 32742 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 Date: Wed, 1 Mar 2023 00:32:40 +0800 Subject: [PATCH 0221/1057] Add solution and test-cases for problem 652 --- .../0652.Find-Duplicate-Subtrees/README.md | 37 +++++++++------ .../0652.Find-Duplicate-Subtrees/Solution.go | 25 +++++++++- .../Solution_test.go | 44 +++++++++++++++--- .../0652.Find-Duplicate-Subtrees/e1.jpg | Bin 0 -> 19885 bytes .../0652.Find-Duplicate-Subtrees/e2.jpg | Bin 0 -> 7512 bytes .../0652.Find-Duplicate-Subtrees/e33.jpg | Bin 0 -> 25798 bytes 6 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 leetcode/601-700/0652.Find-Duplicate-Subtrees/e1.jpg create mode 100644 leetcode/601-700/0652.Find-Duplicate-Subtrees/e2.jpg create mode 100644 leetcode/601-700/0652.Find-Duplicate-Subtrees/e33.jpg diff --git a/leetcode/601-700/0652.Find-Duplicate-Subtrees/README.md b/leetcode/601-700/0652.Find-Duplicate-Subtrees/README.md index e9c91d213..b21f87ff3 100644 --- a/leetcode/601-700/0652.Find-Duplicate-Subtrees/README.md +++ b/leetcode/601-700/0652.Find-Duplicate-Subtrees/README.md @@ -1,28 +1,39 @@ # [652.Find Duplicate Subtrees][title] -> [!WARNING|style:flat] -> 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, return all **duplicate subtrees**. + +For each kind of duplicate subtrees, you only need to return the root node of any **one** of them. + +Two trees are **duplicate** if they have the **same structure** with the **same node values**. -**Example 1:** +**Example 1:** + +![example1](./e1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,4,null,2,4,null,null,4] +Output: [[2,4],[4]] ``` -## 题意 -> ... +**Example 2:** + +![example2](./e2.jpg) -## 题解 -### 思路1 -> ... -Find Duplicate Subtrees -```go ``` +Input: root = [2,1,1] +Output: [[1]] +``` + +**Example 3:** + +![example3](./e33.jpg) +``` +Input: root = [2,2,2,3,null,3,null] +Output: [[2,3],[3]] +``` ## 结语 diff --git a/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution.go b/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution.go index d115ccf5e..6d02b842c 100644 --- a/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution.go +++ b/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) []*TreeNode { + ans := make([]*TreeNode, 0) + marshalTree(root, map[string]int{}, &ans) + return ans +} + +func marshalTree(root *TreeNode, count map[string]int, ans *[]*TreeNode) string { + if root == nil { + return "$" + } + now := fmt.Sprintf("%d,%s,%s", root.Val, marshalTree(root.Left, count, ans), marshalTree(root.Right, count, ans)) + count[now]++ + if count[now] == 2 { + *ans = append(*ans, root) + } + return now } diff --git a/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution_test.go b/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution_test.go index 14ff50eb4..38c2e21eb 100644 --- a/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution_test.go +++ b/leetcode/601-700/0652.Find-Duplicate-Subtrees/Solution_test.go @@ -8,14 +8,44 @@ import ( func TestSolution(t *testing.T) { // 测试用例 + + n1 := &TreeNode{Val: 4} + n2 := &TreeNode{Val: 2, Left: n1} + + n3 := &TreeNode{Val: 1} + + n4 := &TreeNode{Val: 3} + n5 := &TreeNode{Val: 2, Left: n4} cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect []*TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 3, + Left: n2, + Right: &TreeNode{Val: 4}, + }, + }, []*TreeNode{n1, n2}}, + {"TestCase2", &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: n3, + }, []*TreeNode{n3}}, + {"TestCase3", &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 3}, + }, + Right: n5, + }, []*TreeNode{n4, n5}}, } // 开始测试 @@ -30,10 +60,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0652.Find-Duplicate-Subtrees/e1.jpg b/leetcode/601-700/0652.Find-Duplicate-Subtrees/e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4712e19cebcfc4e6638137918ac36a4da2a831de GIT binary patch literal 19885 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0652.Find-Duplicate-Subtrees/e2.jpg b/leetcode/601-700/0652.Find-Duplicate-Subtrees/e2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31ac435a95bb4d482e2b80dc17007ec30fb7f7bc GIT binary patch literal 7512 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0652.Find-Duplicate-Subtrees/e33.jpg b/leetcode/601-700/0652.Find-Duplicate-Subtrees/e33.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a216a2eed31e31ee2393bc1a6a23b0f5acd9049e GIT binary patch literal 25798 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 U?Xmp(U;ICR^Z$ Date: Thu, 2 Mar 2023 23:58:26 +0800 Subject: [PATCH 0222/1057] Add solution and test-cases for problem 443 --- .../401-500/0443.String-Compression/README.md | 40 +++++++++++++------ .../0443.String-Compression/Solution.go | 31 +++++++++++++- .../0443.String-Compression/Solution_test.go | 20 ++++++---- 3 files changed, 68 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0443.String-Compression/README.md b/leetcode/401-500/0443.String-Compression/README.md index b390862da..da4f3a3f4 100644 --- a/leetcode/401-500/0443.String-Compression/README.md +++ b/leetcode/401-500/0443.String-Compression/README.md @@ -1,28 +1,42 @@ # [443.String Compression][title] -> [!WARNING|style:flat] -> 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 characters `chars`, compress it using the following algorithm: + +Begin with an empty string s. For each group of **consecutive repeating characters** in `chars`: + +- If the group's length is `1`, append the character to `s`. +- Otherwise, append the character followed by the group's length. + +The compressed string `s` **should not be returned separately**, but instead, be stored **in the input character array** `chars`. Note that group lengths that are 10 or longer will be split into multiple characters in `chars`. + +After you are done **modifying the input array**, return the new length of the array. + +You must write an algorithm that uses only constant extra space. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: chars = ["a","a","b","b","c","c","c"] +Output: Return 6, and the first 6 characters of the input array should be: ["a","2","b","2","c","3"] +Explanation: The groups are "aa", "bb", and "ccc". This compresses to "a2b2c3". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -String Compression -```go ``` +Input: chars = ["a"] +Output: Return 1, and the first character of the input array should be: ["a"] +Explanation: The only group is "a", which remains uncompressed since it's a single character. +``` + +**Example 3:** +``` +Input: chars = ["a","b","b","b","b","b","b","b","b","b","b","b","b"] +Output: Return 4, and the first 4 characters of the input array should be: ["a","b","1","2"]. +Explanation: The groups are "a" and "bbbbbbbbbbbb". This compresses to "ab12". +``` ## 结语 diff --git a/leetcode/401-500/0443.String-Compression/Solution.go b/leetcode/401-500/0443.String-Compression/Solution.go index d115ccf5e..a519afc5d 100644 --- a/leetcode/401-500/0443.String-Compression/Solution.go +++ b/leetcode/401-500/0443.String-Compression/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(chars []byte) int { + length := len(chars) + if length == 0 { + return length + } + nowByte, sameCount := chars[0], 1 + targetIndex := 0 + for idx := 1; idx <= length; idx++ { + if idx < length && chars[idx] == nowByte { + sameCount++ + continue + } + chars[targetIndex] = nowByte + targetIndex++ + if idx < length { + nowByte = chars[idx] + } + if sameCount == 1 { + continue + } + for _, b := range fmt.Sprintf("%d", sameCount) { + chars[targetIndex] = byte(b) + targetIndex++ + } + sameCount = 1 + } + return targetIndex } diff --git a/leetcode/401-500/0443.String-Compression/Solution_test.go b/leetcode/401-500/0443.String-Compression/Solution_test.go index 14ff50eb4..73fad630d 100644 --- a/leetcode/401-500/0443.String-Compression/Solution_test.go +++ b/leetcode/401-500/0443.String-Compression/Solution_test.go @@ -9,13 +9,14 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []byte + expect1 []byte + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []byte{'a', 'a', 'b', 'b', 'c', 'c', 'c'}, []byte{'a', '2', 'b', '2', 'c', '3'}, 6}, + {"TestCase2", []byte{'a'}, []byte{'a'}, 1}, + {"TestCase3", []byte{'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'}, []byte{'a', 'b', '1', '2'}, 4}, } // 开始测试 @@ -26,14 +27,17 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + if !reflect.DeepEqual(c.inputs[:got], c.expect1) { + t.Fatalf("expect %v but got: %v", c.expect1, c.inputs[:got]) + } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a32b05998108ebb6057ef98da53cde47f0297e38 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 4 Mar 2023 16:49:41 +0800 Subject: [PATCH 0223/1057] Add solution and test-cases for problem 2444 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 25 +++++++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md index caa10f3ef..162c4b978 100755 --- a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md +++ b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/README.md @@ -1,28 +1,32 @@ # [2444.Count Subarrays With Fixed Bounds][title] -> [!WARNING|style:flat] -> 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 `minK` and `maxK`. + +A **fixed-bound subarray** of `nums` is a subarray that satisfies the following conditions: + +- The **minimum** value in the subarray is equal to `minK`. +- The **maximum** value in the subarray is equal to `maxK`. + +Return the **number** of fixed-bound subarrays. + +A **subarray** is a **contiguous** part of an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,5,2,7,5], minK = 1, maxK = 5 +Output: 2 +Explanation: The fixed-bound subarrays are [1,3,5] and [1,3,5,2]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Subarrays With Fixed Bounds -```go ``` - +Input: nums = [1,1,1,1], minK = 1, maxK = 1 +Output: 10 +Explanation: Every subarray of nums is a fixed-bound subarray. There are 10 possible subarrays. +``` ## 结语 diff --git a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go index d115ccf5e..e523d690d 100644 --- a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go +++ b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, minK, maxK int) int64 { + ans := int64(0) + preMin, preMax, edge := -1, -1, -1 + for i := 0; i < len(nums); i++ { + if nums[i] < minK || nums[i] > maxK { + edge = i + continue + } + if nums[i] == minK { + preMin = i + } + if nums[i] == maxK { + preMax = i + } + which := preMin + if preMax < which { + which = preMax + } + if diff := which - edge; diff > 0 { + ans += int64(diff) + } + } + return ans } diff --git a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go index 14ff50eb4..f74833612 100644 --- a/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go +++ b/leetcode/2401-2500/2444.Count-Subarrays-With-Fixed-Bounds/Solution_test.go @@ -9,19 +9,22 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []int + minK, maxK int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{35054, 398719, 945315, 945315, 820417, 945315, 35054, 945315, 171832, 945315, 35054, 109750, 790964, 441974, 552913}, 35054, 945315, int64(81)}, + {"TestCase2", []int{1, 3, 5, 2, 7, 5}, 1, 5, int64(2)}, + {"TestCase3", []int{1, 1, 1, 1}, 1, 1, int64(10)}, + {"TestCase4", []int{978650, 978650, 978650, 68071, 52201, 68071, 186141, 978650, 978650, 267135, 68071, 717241, 242895, 68071, 582505, 978650, 68071, 68071}, 68071, 978650, int64(57)}, + {"TestCase5", []int{1, 4, 10, 2, 4, 1, 2, 10, 2, 4, 1, 2, 4, 1, 21, 43, 12}, 3, 13, int64(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.minK, c.maxK) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2665bc004f9e92c66e3555a8803f57faad6e4d91 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Mar 2023 12:07:38 +0800 Subject: [PATCH 0224/1057] Add solution and test-cases for problem 1345 --- .../1301-1400/1345.Jump-Game-IV/README.md | 39 ++++++++++----- .../1301-1400/1345.Jump-Game-IV/Solution.go | 48 ++++++++++++++++++- .../1345.Jump-Game-IV/Solution_test.go | 14 +++--- 3 files changed, 79 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1345.Jump-Game-IV/README.md b/leetcode/1301-1400/1345.Jump-Game-IV/README.md index 49bf35c22..fb736b22c 100644 --- a/leetcode/1301-1400/1345.Jump-Game-IV/README.md +++ b/leetcode/1301-1400/1345.Jump-Game-IV/README.md @@ -1,28 +1,41 @@ # [1345.Jump Game IV][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array of integers `arr`, you are initially positioned at the first index of the array. + +In one step you can jump from index i to index: + +- `i + 1` where: `i + 1 < arr.length`. +- `i - 1` where: `i - 1 >= 0`. +- `j` where: `arr[i] == arr[j]` and `i != j`. + +Return the minimum number of steps to reach the **last index** of the array. + +Notice that you can not jump outside of the array at any time. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [100,-23,-23,404,100,23,23,23,3,404] +Output: 3 +Explanation: You need three jumps from index 0 --> 4 --> 3 --> 9. Note that index 9 is the last index of the array. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Jump Game IV -```go ``` +Input: arr = [7] +Output: 0 +Explanation: Start index is the last index. You do not need to jump. +``` + +**Example 3:** +``` +Input: arr = [7,6,9,6,9,6,9,7] +Output: 1 +Explanation: You can jump directly from index 0 to index 7 which is last index of the array. +``` ## 结语 diff --git a/leetcode/1301-1400/1345.Jump-Game-IV/Solution.go b/leetcode/1301-1400/1345.Jump-Game-IV/Solution.go index d115ccf5e..be8ebdee6 100644 --- a/leetcode/1301-1400/1345.Jump-Game-IV/Solution.go +++ b/leetcode/1301-1400/1345.Jump-Game-IV/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int) int { + length := len(arr) + if length <= 1 { + return 0 + } + // bfs + step := 0 + indices := make(map[int][]int) + visited := make([]bool, length) + for i := 0; i < length; i++ { + if _, ok := indices[arr[i]]; !ok { + indices[arr[i]] = make([]int, 0) + } + indices[arr[i]] = append(indices[arr[i]], i) + } + visited[0] = true + queue := []int{0} + + for len(queue) > 0 { + nextQ := make([]int, 0) + for _, index := range queue { + if index-1 >= 0 && !visited[index-1] { + visited[index-1] = true + nextQ = append(nextQ, index-1) + } + if index+1 < length && !visited[index+1] { + visited[index+1] = true + nextQ = append(nextQ, index+1) + } + for _, rel := range indices[arr[index]] { + if !visited[rel] { + visited[rel] = true + nextQ = append(nextQ, rel) + } + } + // 注意这里的超时点 + delete(indices, arr[index]) + } + step++ + if visited[length-1] { + return step + } + queue = nextQ + + } + return 0 } diff --git a/leetcode/1301-1400/1345.Jump-Game-IV/Solution_test.go b/leetcode/1301-1400/1345.Jump-Game-IV/Solution_test.go index 14ff50eb4..0a46dc1c6 100644 --- a/leetcode/1301-1400/1345.Jump-Game-IV/Solution_test.go +++ b/leetcode/1301-1400/1345.Jump-Game-IV/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{100, -23, -23, 404, 100, 23, 23, 23, 3, 404}, 3}, + {"TestCase2", []int{7}, 0}, + {"TestCase3", []int{7, 6, 9, 6, 9, 6, 9, 7}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1ea4f790d7c620032580a92bbe714bc9921bd26c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Mar 2023 16:49:43 +0800 Subject: [PATCH 0225/1057] Add solution and test-cases for problem 130 --- .../101-200/0130.Surrounded-Regions/README.md | 34 +++++++++++++++++ .../0130.Surrounded-Regions/Solution.go | 35 +++++++++++++++++- .../0130.Surrounded-Regions/Solution_test.go | 29 ++++++++++----- .../0130.Surrounded-Regions/xogrid.jpg | Bin 0 -> 39525 bytes 4 files changed, 86 insertions(+), 12 deletions(-) create mode 100644 leetcode/101-200/0130.Surrounded-Regions/README.md create mode 100644 leetcode/101-200/0130.Surrounded-Regions/xogrid.jpg diff --git a/leetcode/101-200/0130.Surrounded-Regions/README.md b/leetcode/101-200/0130.Surrounded-Regions/README.md new file mode 100644 index 000000000..662993217 --- /dev/null +++ b/leetcode/101-200/0130.Surrounded-Regions/README.md @@ -0,0 +1,34 @@ +# [130. Surrounded Regions][title] + +## Description +Given an `m x n` matrix board containing `'X'` and `'O'`, capture all regions that are 4-directionally surrounded by `'X'`. + +A region is **captured** by flipping all `'O'`s into `'X'`s in that surrounded region. + +**Example 1:** + +![example](./xogrid.jpg) + +``` +Input: board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]] +Output: [["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]] +Explanation: Notice that an 'O' should not be flipped if: +- It is on the border, or +- It is adjacent to an 'O' that should not be flipped. +The bottom 'O' is on the border, so it is not flipped. +The other three 'O' form a surrounded region, so they are flipped. +``` + +**Example 2:** + +``` +Input: board = [["X"]] +Output: [["X"]] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/surrounded-regions +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0130.Surrounded-Regions/Solution.go b/leetcode/101-200/0130.Surrounded-Regions/Solution.go index d115ccf5e..d6b7d6204 100644 --- a/leetcode/101-200/0130.Surrounded-Regions/Solution.go +++ b/leetcode/101-200/0130.Surrounded-Regions/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(board [][]byte) { + rows, cols := len(board), len(board[0]) + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + if row == 0 || row == rows-1 || col == 0 || col == cols-1 { + fillEdges(board, row, col) + } + } + } + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + if board[row][col] == '1' { + board[row][col] = 'O' + continue + } + if board[row][col] == 'O' { + board[row][col] = 'X' + } + } + } +} + +// 边上填充‘1’ +func fillEdges(board [][]byte, x, y int) { + if x < 0 || x >= len(board) || y < 0 || y >= len(board[0]) || board[x][y] != 'O' { + return + } + + board[x][y] = '1' + fillEdges(board, x+1, y) + fillEdges(board, x-1, y) + fillEdges(board, x, y-1) + fillEdges(board, x, y+1) } diff --git a/leetcode/101-200/0130.Surrounded-Regions/Solution_test.go b/leetcode/101-200/0130.Surrounded-Regions/Solution_test.go index 14ff50eb4..7b6282285 100644 --- a/leetcode/101-200/0130.Surrounded-Regions/Solution_test.go +++ b/leetcode/101-200/0130.Surrounded-Regions/Solution_test.go @@ -10,30 +10,39 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]byte + expect [][]byte }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]byte{ + {'X', 'X', 'X', 'X'}, + {'X', 'O', 'O', 'X'}, + {'X', 'X', 'O', 'X'}, + {'X', 'O', 'X', 'X'}, + }, [][]byte{ + {'X', 'X', 'X', 'X'}, + {'X', 'X', 'X', 'X'}, + {'X', 'X', 'X', 'X'}, + {'X', 'O', 'X', 'X'}, + }}, + {"TestCase2", [][]byte{{'X'}}, [][]byte{{'X'}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { + Solution(c.inputs) + if !reflect.DeepEqual(c.inputs, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + c.expect, c.inputs, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/101-200/0130.Surrounded-Regions/xogrid.jpg b/leetcode/101-200/0130.Surrounded-Regions/xogrid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aba1a86bfb42435c8df50aa3d7b4c24455b8c700 GIT binary patch literal 39525 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 K7zO+P-vj{srrdV` literal 0 HcmV?d00001 From f0802149d08d36664d46c81529c44ce65a68294d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 6 Mar 2023 20:23:49 +0800 Subject: [PATCH 0226/1057] Add solution and test-cases for problem 1539 --- .../README.md | 24 +++++++++---------- .../Solution.go | 16 +++++++++++-- .../Solution_test.go | 20 ++++++++-------- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md index 26341bc8c..e5e1d224f 100755 --- a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md +++ b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/README.md @@ -1,28 +1,26 @@ # [1539.Kth Missing Positive Number][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array `arr` of positive integers sorted in a **strictly increasing order**, and an integer `k`. + +Return the kth **positive** integer that is **missing** from this array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [2,3,4,7,11], k = 5 +Output: 9 +Explanation: The missing positive integers are [1,5,6,8,9,10,12,13,...]. The 5th missing positive integer is 9. ``` -## 题意 -> ... -## 题解 +**Example 2:** -### 思路1 -> ... -Kth Missing Positive Number -```go ``` - +Input: arr = [1,2,3,4], k = 2 +Output: 6 +Explanation: The missing positive integers are [5,6,7,...]. The 2nd missing positive integer is 6. +``` ## 结语 diff --git a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go index d115ccf5e..3f7bfde31 100644 --- a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go +++ b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, k int) int { + i := 1 + index := 0 + for ; index < len(arr) && k > 0; i++ { + if i != arr[index] { + k-- + continue + } + index++ + } + for ; k > 0; k, i = k-1, i+1 { + + } + return i - 1 } diff --git a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go index 14ff50eb4..809a12df9 100644 --- a/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go +++ b/leetcode/1501-1600/1539.Kth-Missing-Positive-Number/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 4, 7, 11}, 5, 9}, + {"TestCase2", []int{1, 2, 3, 4}, 2, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0f14769de1452fd639525ddff1fdf76d59ce09a3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 7 Mar 2023 22:59:25 +0800 Subject: [PATCH 0227/1057] Add solution and test-cases for problem 2187 --- .../README.md | 37 ++++++++++------- .../Solution.go | 41 ++++++++++++++++++- .../Solution_test.go | 20 ++++----- 3 files changed, 72 insertions(+), 26 deletions(-) diff --git a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md index 59c9c3f32..5793d5c64 100755 --- a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md +++ b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/README.md @@ -1,28 +1,37 @@ # [2187.Minimum Time to Complete Trips][title] -> [!WARNING|style:flat] -> 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 `time` where `time[i]` denotes the time taken by the ith bus to complete **one trip**. + +Each bus can make multiple trips **successively**; that is, the next trip can start **immediately after** completing the current trip. Also, each bus operates **independently**; that is, the trips of one bus do not influence the trips of any other bus. + +You are also given an integer totalTrips, which denotes the number of trips all buses should make **in total**. Return the **minimum time** required for all buses to complete **at least** `totalTrips` trips. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: time = [1,2,3], totalTrips = 5 +Output: 3 +Explanation: +- At time t = 1, the number of trips completed by each bus are [1,0,0]. + The total number of trips completed is 1 + 0 + 0 = 1. +- At time t = 2, the number of trips completed by each bus are [2,1,0]. + The total number of trips completed is 2 + 1 + 0 = 3. +- At time t = 3, the number of trips completed by each bus are [3,1,1]. + The total number of trips completed is 3 + 1 + 1 = 5. +So the minimum time needed for all buses to complete at least 5 trips is 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Time to Complete Trips -```go ``` - +Input: time = [2], totalTrips = 1 +Output: 2 +Explanation: +There is only one bus, and it will complete its first trip at t = 2. +So the minimum time needed to complete 1 trip is 2. +``` ## 结语 diff --git a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go index d115ccf5e..9c9cf414e 100644 --- a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go +++ b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(time []int, totalTrips int) int64 { + ans := int64(0) + sort.Ints(time) + + // giao + minTime, maxTime := int64(1), int64(time[len(time)-1]*totalTrips) + for minTime <= maxTime { + midTime := (maxTime-minTime)/2 + minTime + done := 0 + for i := 0; i < len(time); i++ { + t := midTime / int64(time[i]) + done += int(t) + if done >= totalTrips { + break + } + } + if done >= totalTrips { + ans = midTime + maxTime = midTime - 1 + } else { + minTime = midTime + 1 + } + + } + /* + for ; ; ans++ { + done := 0 + for i := 0; i < len(time); i++ { + tmp := ans / int64(time[i]) + done += int(tmp) + if done >= totalTrips { + return ans + } + } + } + */ + return ans } diff --git a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go index 14ff50eb4..b6724241a 100644 --- a/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go +++ b/leetcode/2101-2200/2187.Minimum-Time-to-Complete-Trips/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + trips int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3}, 5, 3}, + {"TestCase2", []int{2}, 1, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.trips) 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.trips) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0fa84a190ebbdb9bc704321215fb9a0da96e6dd8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 8 Mar 2023 22:29:33 +0800 Subject: [PATCH 0228/1057] Add solution and test-cases for problem 875 --- .../0875.Koko-Eating-Bananas/README.md | 32 ++++++++++-------- .../0875.Koko-Eating-Bananas/Solution.go | 33 +++++++++++++++++-- .../0875.Koko-Eating-Bananas/Solution_test.go | 17 +++++----- 3 files changed, 59 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0875.Koko-Eating-Bananas/README.md b/leetcode/801-900/0875.Koko-Eating-Bananas/README.md index 30927b5b8..f956b241a 100644 --- a/leetcode/801-900/0875.Koko-Eating-Bananas/README.md +++ b/leetcode/801-900/0875.Koko-Eating-Bananas/README.md @@ -1,28 +1,34 @@ # [875.Koko Eating Bananas][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Koko loves to eat bananas. There are `n` piles of bananas, the ith pile has `piles[i]` bananas. The guards have gone and will come back in `h` hours. + +Koko can decide her bananas-per-hour eating speed of `k`. Each hour, she chooses some pile of bananas and eats `k` bananas from that pile. If the pile has less than `k` bananas, she eats all of them instead and will not eat any more bananas during this hour. + +Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return. + +Return the minimum integer `k` such that she can eat all the bananas within `h` hours. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: piles = [3,6,7,11], h = 8 +Output: 4 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Koko Eating Bananas -```go ``` +Input: piles = [30,11,23,4,20], h = 5 +Output: 30 +``` + +**Example 3:** +``` +Input: piles = [30,11,23,4,20], h = 6 +Output: 23 +``` ## 结语 diff --git a/leetcode/801-900/0875.Koko-Eating-Bananas/Solution.go b/leetcode/801-900/0875.Koko-Eating-Bananas/Solution.go index d115ccf5e..70425a4a2 100644 --- a/leetcode/801-900/0875.Koko-Eating-Bananas/Solution.go +++ b/leetcode/801-900/0875.Koko-Eating-Bananas/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(piles []int, h int) int { + minSpeed := 1 + maxSpeed := -1 + for _, t := range piles { + if t > maxSpeed { + maxSpeed = t + } + } + + ans := 1 + for minSpeed <= maxSpeed { + midSpeed := (maxSpeed-minSpeed)/2 + minSpeed + cost := 0 + for _, t := range piles { + a := t / midSpeed + if t%midSpeed != 0 { + a++ + } + cost += a + if cost > h { + break + } + } + if cost <= h { + ans = midSpeed + maxSpeed = midSpeed - 1 + } else { + minSpeed = midSpeed + 1 + } + } + return ans } diff --git a/leetcode/801-900/0875.Koko-Eating-Bananas/Solution_test.go b/leetcode/801-900/0875.Koko-Eating-Bananas/Solution_test.go index 14ff50eb4..9ebf76553 100644 --- a/leetcode/801-900/0875.Koko-Eating-Bananas/Solution_test.go +++ b/leetcode/801-900/0875.Koko-Eating-Bananas/Solution_test.go @@ -10,18 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + h int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 6, 7, 11}, 8, 4}, + {"TestCase2", []int{30, 11, 23, 4, 20}, 5, 30}, + {"TestCase3", []int{30, 11, 23, 4, 20}, 6, 23}, } // 开始测试 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.h) 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 b7010e23b334246fa9a2bffb823a7fd8ae0421b8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 9 Mar 2023 22:37:15 +0800 Subject: [PATCH 0229/1057] Add solution and test-cases for problem 1609 --- .../1601-1700/1609.Even-Odd-Tree/README.md | 50 +++++++++---- .../1601-1700/1609.Even-Odd-Tree/Solution.go | 39 +++++++++- .../1609.Even-Odd-Tree/Solution_test.go | 69 ++++++++++++++++-- .../1609.Even-Odd-Tree/sample_1_1966.png | Bin 0 -> 17383 bytes .../1609.Even-Odd-Tree/sample_1_333_1966.png | Bin 0 -> 23614 bytes .../1609.Even-Odd-Tree/sample_2_1966.png | Bin 0 -> 10759 bytes 6 files changed, 137 insertions(+), 21 deletions(-) create mode 100644 leetcode/1601-1700/1609.Even-Odd-Tree/sample_1_1966.png create mode 100644 leetcode/1601-1700/1609.Even-Odd-Tree/sample_1_333_1966.png create mode 100644 leetcode/1601-1700/1609.Even-Odd-Tree/sample_2_1966.png diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/README.md b/leetcode/1601-1700/1609.Even-Odd-Tree/README.md index f4db288ec..a8b107c8d 100755 --- a/leetcode/1601-1700/1609.Even-Odd-Tree/README.md +++ b/leetcode/1601-1700/1609.Even-Odd-Tree/README.md @@ -1,28 +1,52 @@ # [1609.Even Odd 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 +A binary tree is named **Even-Odd** if it meets the following conditions: + +- The root of the binary tree is at level index `0`, its children are at level index `1`, their children are at level index `2`, etc. +- For every **even-indexed** level, all nodes at the level have **odd** integer values in **strictly increasing** order (from left to right). +- For every **odd-indexed** level, all nodes at the level have **even** integer values in **strictly decreasing** order (from left to right). + +Given the `root` of a binary tree, return `true` if the binary tree is **Even-Odd**, otherwise return `false`. -**Example 1:** +**Example 1:** + +![example1](./sample_1_1966.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,10,4,3,null,7,9,12,8,6,null,null,2] +Output: true +Explanation: The node values on each level are: +Level 0: [1] +Level 1: [10,4] +Level 2: [3,7,9] +Level 3: [12,8,6,2] +Since levels 0 and 2 are all odd and increasing and levels 1 and 3 are all even and decreasing, the tree is Even-Odd. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./sample_2_1966.png) -### 思路1 -> ... -Even Odd Tree -```go +``` +Input: root = [5,4,2,3,3,7] +Output: false +Explanation: The node values on each level are: +Level 0: [5] +Level 1: [4,2] +Level 2: [3,3,7] +Node values in level 2 must be in strictly increasing order, so the tree is not Even-Odd. ``` +**Example 3:** + +![example3](./sample_1_333_1966.png) + +``` +Input: root = [5,9,1,3,5,7] +Output: false +Explanation: Node values in the level 1 should be even integers. +``` ## 结语 diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go index d115ccf5e..d907b7dea 100644 --- a/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go +++ b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) bool { + if root == nil || root.Val&1 != 1 { + return false + } + queue := []*TreeNode{root} + next := 1 + for len(queue) > 0 { + nextQ := make([]*TreeNode, 0) + pre := -1 + + for _, item := range queue { + if item.Left != nil { + + if !((pre == -1 && item.Left.Val&1 != next) || (next&1 == 1 && item.Left.Val&1 == 0 && item.Left.Val < pre) || (next&1 == 0 && item.Left.Val&1 == 1 && item.Left.Val > pre)) { + return false + } + pre = item.Left.Val + nextQ = append(nextQ, item.Left) + } + if item.Right != nil { + if !((pre == -1 && item.Right.Val&1 != next) || (next&1 == 1 && item.Right.Val&1 == 0 && item.Right.Val < pre) || (next&1 == 0 && item.Right.Val&1 == 1 && item.Right.Val > pre)) { + return false + } + pre = item.Right.Val + nextQ = append(nextQ, item.Right) + } + } + + next = 1 - next + queue = nextQ + } + return true } diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go index 14ff50eb4..ea5038b8b 100644 --- a/leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go +++ b/leetcode/1601-1700/1609.Even-Odd-Tree/Solution_test.go @@ -10,12 +10,69 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs *TreeNode expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 10, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 12, + }, + Right: &TreeNode{ + Val: 8, + }, + }, + }, + Right: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 7, + Left: &TreeNode{ + Val: 6, + }, + }, + Right: &TreeNode{ + Val: 9, + Right: &TreeNode{Val: 2}, + }, + }, + }, true}, + {"TestCase2", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 3, + }, + Right: &TreeNode{ + Val: 3, + }, + }, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 7}, + }, + }, false}, + {"TestCase3", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 9, + Left: &TreeNode{ + Val: 3, + }, + Right: &TreeNode{ + Val: 5, + }, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 7}, + }, + }, false}, } // 开始测试 @@ -30,10 +87,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/sample_1_1966.png b/leetcode/1601-1700/1609.Even-Odd-Tree/sample_1_1966.png new file mode 100644 index 0000000000000000000000000000000000000000..20db22511086cacc7a1ff32fff50b5a9fa6501bb GIT binary patch literal 17383 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 Wh%!dE0eqYTK~Yv!rc&xd$o~M%%GZAY literal 0 HcmV?d00001 diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/sample_1_333_1966.png b/leetcode/1601-1700/1609.Even-Odd-Tree/sample_1_333_1966.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef6611180c0e434073e39889d020ce6d217179d GIT binary patch literal 23614 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 literal 0 HcmV?d00001 diff --git a/leetcode/1601-1700/1609.Even-Odd-Tree/sample_2_1966.png b/leetcode/1601-1700/1609.Even-Odd-Tree/sample_2_1966.png new file mode 100644 index 0000000000000000000000000000000000000000..772a9dc4f3dc49c039243a603d8f147ac6baa55e GIT binary patch literal 10759 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 Date: Fri, 10 Mar 2023 21:45:02 +0800 Subject: [PATCH 0230/1057] Add solution and test-cases for problem 382 --- .../0382.Linked-List-Random-Node/README.md | 37 ++++++++------ .../0382.Linked-List-Random-Node/Solution.go | 48 +++++++++++++++++- .../Solution_test.go | 20 +++----- .../getrand-linked-list.jpg | Bin 0 -> 5401 bytes 4 files changed, 74 insertions(+), 31 deletions(-) create mode 100644 leetcode/301-400/0382.Linked-List-Random-Node/getrand-linked-list.jpg diff --git a/leetcode/301-400/0382.Linked-List-Random-Node/README.md b/leetcode/301-400/0382.Linked-List-Random-Node/README.md index 6d1ec8288..fcd97dda6 100644 --- a/leetcode/301-400/0382.Linked-List-Random-Node/README.md +++ b/leetcode/301-400/0382.Linked-List-Random-Node/README.md @@ -1,28 +1,33 @@ # [382.Linked List Random Node][title] -> [!WARNING|style:flat] -> 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 singly linked list, return a random node's value from the linked list. Each node must have the **same probability** of being chosen. -**Example 1:** +Implement the `Solution` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `Solution(ListNode head)` Initializes the object with the head of the singly-linked list `head`. +- `int getRandom()` Chooses a node randomly from the list and returns its value. All the nodes of the list should be equally likely to be chosen. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./getrand-linked-list.jpg) -### 思路1 -> ... -Linked List Random Node -```go ``` - +Input +["Solution", "getRandom", "getRandom", "getRandom", "getRandom", "getRandom"] +[[[1, 2, 3]], [], [], [], [], []] +Output +[null, 1, 3, 2, 2, 3] + +Explanation +Solution solution = new Solution([1, 2, 3]); +solution.getRandom(); // return 1 +solution.getRandom(); // return 3 +solution.getRandom(); // return 2 +solution.getRandom(); // return 2 +solution.getRandom(); // return 3 +// getRandom() should return either 1, 2, or 3 randomly. Each element should have equal probability of returning. +``` ## 结语 diff --git a/leetcode/301-400/0382.Linked-List-Random-Node/Solution.go b/leetcode/301-400/0382.Linked-List-Random-Node/Solution.go index d115ccf5e..a96868653 100644 --- a/leetcode/301-400/0382.Linked-List-Random-Node/Solution.go +++ b/leetcode/301-400/0382.Linked-List-Random-Node/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math/rand" + "sort" + "time" +) + +type ListNode struct { + Val int + Next *ListNode +} +type Solution382 struct { + length int + head *ListNode +} + +func Constructor(head *ListNode) Solution382 { + s := Solution382{length: 0, head: head} + for walker := head; walker != nil; walker = walker.Next { + s.length++ + } + return s +} + +func (this *Solution382) GetRandom() int { + if this.head == nil { + return -1 + } + seed := rand.NewSource(time.Now().UnixNano()) + rr := rand.New(seed) + index := rr.Intn(this.length) + + walker := this.head + for ; walker != nil && index > 0; walker = walker.Next { + index-- + } + return walker.Val +} + +func Solution(count int, head *ListNode) []int { + s := Constructor(head) + ans := make([]int, count) + for i := 0; i < count; i++ { + ans[i] = s.GetRandom() + } + sort.Ints(ans) + return ans } diff --git a/leetcode/301-400/0382.Linked-List-Random-Node/Solution_test.go b/leetcode/301-400/0382.Linked-List-Random-Node/Solution_test.go index 14ff50eb4..aec9d858f 100644 --- a/leetcode/301-400/0382.Linked-List-Random-Node/Solution_test.go +++ b/leetcode/301-400/0382.Linked-List-Random-Node/Solution_test.go @@ -1,7 +1,6 @@ package Solution import ( - "reflect" "strconv" "testing" ) @@ -10,30 +9,25 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + count int + head *ListNode + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 6, &ListNode{Val: 1, Next: &ListNode{Val: 2, Next: &ListNode{Val: 3}}}, []int{1, 1, 2, 2, 3, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) - } + Solution(c.count, c.head) }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/301-400/0382.Linked-List-Random-Node/getrand-linked-list.jpg b/leetcode/301-400/0382.Linked-List-Random-Node/getrand-linked-list.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e822c19bb3656450129d47a5faa3997c485eb4d4 GIT binary patch literal 5401 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 B6pH`= literal 0 HcmV?d00001 From bfcc00a254b0aba03046897389549576ae0cc5df Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Mar 2023 22:30:44 +0800 Subject: [PATCH 0231/1057] Add solution and test-cases for problem 2265 --- .../README.md | 38 +++++++++++------- .../Solution.go | 27 ++++++++++++- .../Solution_test.go | 28 +++++++++---- .../g1.png | Bin 0 -> 27493 bytes .../g2.png | Bin 0 -> 3230 bytes 5 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/g1.png create mode 100644 leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/g2.png diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md index 6cd26ce10..5e63bbeb8 100755 --- a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md +++ b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/README.md @@ -1,28 +1,38 @@ # [2265.Count Nodes Equal to Average of Subtree][title] -> [!WARNING|style:flat] -> 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, return the number of nodes where the value of the node is equal to the **average** of the values in its **subtree**. + +**Note:** + +- The **average** of `n` elements is the **sum** of the `n` elements divided by `n` and **rounded down** to the nearest integer. +- A **subtree** of `root` is a tree consisting of `root` and all of its descendants. + +**Example 1:** -**Example 1:** +![example1](./g1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [4,8,5,0,1,null,6] +Output: 5 +Explanation: +For the node with value 4: The average of its subtree is (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4. +For the node with value 5: The average of its subtree is (5 + 6) / 2 = 11 / 2 = 5. +For the node with value 0: The average of its subtree is 0 / 1 = 0. +For the node with value 1: The average of its subtree is 1 / 1 = 1. +For the node with value 6: The average of its subtree is 6 / 1 = 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./g2.png) -### 思路1 -> ... -Count Nodes Equal to Average of Subtree -```go -``` +``` +Input: root = [1] +Output: 1 +Explanation: For the node with value 1: The average of its subtree is 1 / 1 = 1. +``` ## 结语 diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go index d115ccf5e..3d55a8e5b 100644 --- a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go +++ b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + children, ans := 0, 0 + dfs2265(root, &children, &ans) + return ans +} + +func dfs2265(root *TreeNode, children, ans *int) int { + if root == nil { + return 0 + } + + lc, rc := 0, 0 + left := dfs2265(root.Left, &lc, ans) + right := dfs2265(root.Right, &rc, ans) + r := left + right + root.Val + *children += lc + rc + 1 + if r/(lc+rc+1) == root.Val { + *ans++ + } + return r } diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go index 14ff50eb4..c01b93414 100644 --- a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go +++ b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/Solution_test.go @@ -10,12 +10,26 @@ 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: 4, + Left: &TreeNode{ + Val: 8, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 1, + }, + }, + Right: &TreeNode{ + Val: 5, + Right: &TreeNode{Val: 6}, + }, + }, 5}, + {"TestCase", &TreeNode{Val: 1}, 1}, } // 开始测试 @@ -30,10 +44,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/g1.png b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/g1.png new file mode 100644 index 0000000000000000000000000000000000000000..ee4beddd719093355ecc2c39091ef62b722f105b GIT binary patch literal 27493 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

      QdQZNOQ;ar%Pa-e&V8F7XY!?c7%4 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 literal 0 HcmV?d00001 diff --git a/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/g2.png b/leetcode/2201-2300/2265.Count-Nodes-Equal-to-Average-of-Subtree/g2.png new file mode 100644 index 0000000000000000000000000000000000000000..381b3fa5245c66767698d6a35f2879eba77a1f05 GIT binary patch literal 3230 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 Date: Mon, 13 Mar 2023 23:18:12 +0800 Subject: [PATCH 0232/1057] Add solution and test-cases for problem 449 --- .../README.md | 25 +++-- .../Solution.go | 99 ++++++++++++++++++- .../Solution_test.go | 27 +++-- 3 files changed, 125 insertions(+), 26 deletions(-) diff --git a/leetcode/401-500/0449.Serialize-and-Deserialize-BST/README.md b/leetcode/401-500/0449.Serialize-and-Deserialize-BST/README.md index f1e0f93e1..2d071673b 100644 --- a/leetcode/401-500/0449.Serialize-and-Deserialize-BST/README.md +++ b/leetcode/401-500/0449.Serialize-and-Deserialize-BST/README.md @@ -1,28 +1,25 @@ # [449.Serialize and Deserialize BST][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Serialization is converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment. + +Design an algorithm to serialize and deserialize a **binary search tree**. There is no restriction on how your serialization/deserialization algorithm should work. You need to ensure that a binary search tree can be serialized to a string, and this string can be deserialized to the original tree structure. + +**The encoded string should be as compact as possible**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [2,1,3] +Output: [2,1,3] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Serialize and Deserialize BST -```go ``` - +Input: root = [] +Output: [] +``` ## 结语 diff --git a/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution.go b/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution.go index d115ccf5e..9cba6b349 100644 --- a/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution.go +++ b/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution.go @@ -1,5 +1,100 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "sort" + "strconv" + "strings" +) + +type TreeNode struct { + Val int + Left, Right *TreeNode +} +type Codec struct { +} + +func Constructor() Codec { + return Codec{} +} +func (this *Codec) preOrder(root *TreeNode) []int { + if root == nil { + return nil + } + ans := make([]int, 0) + l := this.preOrder(root.Left) + r := this.preOrder(root.Right) + ans = append(ans, root.Val) + ans = append(ans, l...) + ans = append(ans, r...) + return ans +} + +// Serializes a tree to a single string. +func (this *Codec) serialize(root *TreeNode) string { + if root == nil { + return "" + } + pre := this.preOrder(root) + dst := make([]int, len(pre)) + copy(dst, pre) + sort.Ints(dst) + buf := strings.Builder{} + for i := 0; i < len(pre); i++ { + if i != 0 { + buf.WriteByte(',') + } + buf.WriteString(fmt.Sprintf("%d", pre[i])) + } + buf.WriteByte('#') + for i := 0; i < len(dst); i++ { + if i != 0 { + buf.WriteByte(',') + } + buf.WriteString(fmt.Sprintf("%d", dst[i])) + } + return buf.String() +} + +// Deserializes your encoded data to tree. +func (this *Codec) deserialize(data string) *TreeNode { + if data == "" { + return nil + } + builder := strings.Split(data, "#") + if len(builder) != 2 { + return nil + } + pre := strings.Split(builder[0], ",") + in := strings.Split(builder[1], ",") + return this.buildTree(pre, in) +} + +func (this *Codec) buildTree(pre, in []string) *TreeNode { + if len(pre) == 1 { + v, _ := strconv.Atoi(pre[0]) + return &TreeNode{Val: v} + } + + v := pre[0] + index := 0 + for ; index < len(pre) && in[index] != v; index++ { + } + + vv, _ := strconv.Atoi(v) + node := &TreeNode{Val: vv} + if index > 0 { + node.Left = this.buildTree(pre[1:index+1], in[:index]) + } + if index < len(pre)-1 { + node.Right = this.buildTree(pre[index+1:], in[index+1:]) + } + return node +} + +func Solution(tree *TreeNode) (*TreeNode, string) { + c := Constructor() + s := c.serialize(tree) + t := c.deserialize(s) + return t, s } diff --git a/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution_test.go b/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution_test.go index 14ff50eb4..ac53a8eff 100644 --- a/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution_test.go +++ b/leetcode/401-500/0449.Serialize-and-Deserialize-BST/Solution_test.go @@ -10,30 +10,37 @@ 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: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, "2,1,3#1,2,3"}, + {"TestCase2", nil, ""}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) - if !reflect.DeepEqual(got, c.expect) { + tree, str := Solution(c.inputs) + if !reflect.DeepEqual(tree, c.inputs) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + c.inputs, tree, c.inputs) + } + if !reflect.DeepEqual(str, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, str, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3ea2e96d74ea3b953964452a534aae3b1c24e3c2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 17 Mar 2023 00:17:07 +0800 Subject: [PATCH 0233/1057] Add solution and test-cases for problem 1031 --- .../README.md | 33 ++++++++------ .../Solution.go | 43 ++++++++++++++++++- .../Solution_test.go | 23 +++++----- 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/README.md b/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/README.md index 27d955fcc..39ab6f317 100644 --- a/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/README.md +++ b/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/README.md @@ -1,28 +1,35 @@ # [1031.Maximum Sum of Two Non-Overlapping Subarrays][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums` and two integers `firstLen` and `secondLen`, return the maximum sum of elements in two non-overlapping **subarrays** with lengths `firstLen` and `secondLen`. + +The array with length `firstLen` could occur before or after the array with length `secondLen`, but they have to be non-overlapping. + +A **subarray** is a **contiguous** part of an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,6,5,2,2,5,1,9,4], firstLen = 1, secondLen = 2 +Output: 20 +Explanation: One choice of subarrays is [9] with length 1, and [6,5] with length 2. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Sum of Two Non-Overlapping Subarrays -```go ``` +Input: nums = [3,8,1,3,2,1,8,9,0], firstLen = 3, secondLen = 2 +Output: 29 +Explanation: One choice of subarrays is [3,8,1] with length 3, and [8,9] with length 2. +``` + +**Example 3:** +``` +Input: nums = [2,1,5,6,0,9,5,0,3,8], firstLen = 4, secondLen = 3 +Output: 31 +Explanation: One choice of subarrays is [5,6,0,9] with length 4, and [0,3,8] with length 3. +``` ## 结语 diff --git a/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution.go b/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution.go index d115ccf5e..2b91ee41e 100644 --- a/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution.go +++ b/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +type windows struct { + start, end, sum int +} + +func Solution(nums []int, firstLen int, secondLen int) int { + ans := 0 + tsum, start := 0, 0 + firstWindows := make([]windows, 0) + for i := 0; i < len(nums); i++ { + tsum += nums[i] + if i == firstLen-1 { + firstWindows = append(firstWindows, windows{start, i, tsum}) + continue + } else if i >= firstLen { + tsum -= nums[start] + start++ + firstWindows = append(firstWindows, windows{start, i, tsum}) + } + } + tsum, start = 0, 0 + secondWindows := make([]windows, 0) + for i := 0; i < len(nums); i++ { + tsum += nums[i] + if i == secondLen-1 { + secondWindows = append(secondWindows, windows{start, i, tsum}) + continue + } else if i >= secondLen { + tsum -= nums[start] + start++ + secondWindows = append(secondWindows, windows{start, i, tsum}) + } + } + + for _, first := range firstWindows { + for _, second := range secondWindows { + if (first.end < second.start || second.end < first.start) && first.sum+second.sum > ans { + ans = first.sum + second.sum + } + } + } + return ans } diff --git a/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution_test.go b/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution_test.go index 14ff50eb4..3911a6b8b 100644 --- a/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution_test.go +++ b/leetcode/1001-1100/1031.Maximum-Sum-of-Two-Non-Overlapping-Subarrays/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs []int + first, second int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 6, 5, 2, 2, 5, 1, 9, 4}, 1, 2, 20}, + {"TestCase2", []int{3, 8, 1, 3, 2, 1, 8, 9, 0}, 3, 2, 29}, + {"TestCase3", []int{2, 1, 5, 6, 0, 9, 5, 0, 3, 8}, 4, 3, 31}, } // 开始测试 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.first, c.second) 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.first, c.second) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 103526781802712e1bee51975ed578c597feb802 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 18 Mar 2023 13:29:10 +0800 Subject: [PATCH 0234/1057] Add solution and test-cases for problem 1472 --- .../1472.Design-Browser-History/README.md | 42 ++++++++++++ .../1472.Design-Browser-History/Solution.go | 67 +++++++++++++++++++ .../Solution_test.go | 49 ++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 leetcode/1401-1500/1472.Design-Browser-History/README.md create mode 100644 leetcode/1401-1500/1472.Design-Browser-History/Solution.go create mode 100644 leetcode/1401-1500/1472.Design-Browser-History/Solution_test.go diff --git a/leetcode/1401-1500/1472.Design-Browser-History/README.md b/leetcode/1401-1500/1472.Design-Browser-History/README.md new file mode 100644 index 000000000..b28095e89 --- /dev/null +++ b/leetcode/1401-1500/1472.Design-Browser-History/README.md @@ -0,0 +1,42 @@ +# [1472. Design Browser History][title] + +## Description +You have a **browser** of one tab where you start on the `homepage` and you can visit another `url`, get back in the history number of `steps` or move forward in the history number of `steps`. + +Implement the `BrowserHistory` class: + +- `BrowserHistory(string homepage)` Initializes the object with the `homepage` of the browser. +- `void visit(string url)` Visits `url` from the current page. It clears up all the forward history. +- `string back(int steps)` Move `steps` back in history. If you can only return `x` steps in the history and `steps > x`, you will return only `x` steps. Return the current `url` after moving back in history **at most** `steps`. +- `string forward(int steps)` Move `steps` forward in history. If you can only forward `x` steps in the history and `steps > x`, you will forward only `x` steps. Return the current url after forwarding in history **at most** `steps`. + + +**Example 1:** + +``` +Input: +["BrowserHistory","visit","visit","visit","back","back","forward","visit","forward","back","back"] +[["leetcode.com"],["google.com"],["facebook.com"],["youtube.com"],[1],[1],[1],["linkedin.com"],[2],[2],[7]] +Output: +[null,null,null,null,"facebook.com","google.com","facebook.com",null,"linkedin.com","google.com","leetcode.com"] + +Explanation: +BrowserHistory browserHistory = new BrowserHistory("leetcode.com"); +browserHistory.visit("google.com"); // You are in "leetcode.com". Visit "google.com" +browserHistory.visit("facebook.com"); // You are in "google.com". Visit "facebook.com" +browserHistory.visit("youtube.com"); // You are in "facebook.com". Visit "youtube.com" +browserHistory.back(1); // You are in "youtube.com", move back to "facebook.com" return "facebook.com" +browserHistory.back(1); // You are in "facebook.com", move back to "google.com" return "google.com" +browserHistory.forward(1); // You are in "google.com", move forward to "facebook.com" return "facebook.com" +browserHistory.visit("linkedin.com"); // You are in "facebook.com". Visit "linkedin.com" +browserHistory.forward(2); // You are in "linkedin.com", you cannot move forward any steps. +browserHistory.back(2); // You are in "linkedin.com", move back two steps to "facebook.com" then to "google.com". return "google.com" +browserHistory.back(7); // You are in "google.com", you can move back only one step to "leetcode.com". return "leetcode.com" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-browser-history +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1472.Design-Browser-History/Solution.go b/leetcode/1401-1500/1472.Design-Browser-History/Solution.go new file mode 100644 index 000000000..630deca22 --- /dev/null +++ b/leetcode/1401-1500/1472.Design-Browser-History/Solution.go @@ -0,0 +1,67 @@ +package Solution + +type Op struct { + name string + url string + steps int +} + +type BrowserHistory struct { + index, length int + history []string +} + +func Constructor1472(homepage string) BrowserHistory { + return BrowserHistory{index: 0, length: 1, history: []string{homepage}} +} + +func (this *BrowserHistory) Visit(url string) { + if this.index == this.length-1 && this.length == len(this.history) { + this.history = append(this.history, url) + this.index = this.length + this.length++ + return + } + this.index++ + this.history[this.index] = url + this.length = this.index + 1 +} + +func (this *BrowserHistory) Back(steps int) string { + if this.length == 0 { + return "" + } + this.index -= steps + if this.index < 0 { + this.index = 0 + } + return this.history[this.index] +} + +func (this *BrowserHistory) Forward(steps int) string { + //a,b,c + this.index += steps + if this.index >= this.length { + this.index = this.length - 1 + } + return this.history[this.index] +} + +func Solution(homepage string, ops []Op) []string { + c := Constructor1472(homepage) + ans := make([]string, 0) + for _, op := range ops { + if op.name == "visit" { + c.Visit(op.url) + continue + } + if op.name == "back" { + ans = append(ans, c.Back(op.steps)) + continue + } + if op.name == "forward" { + ans = append(ans, c.Forward(op.steps)) + } + } + return ans +} diff --git a/leetcode/1401-1500/1472.Design-Browser-History/Solution_test.go b/leetcode/1401-1500/1472.Design-Browser-History/Solution_test.go new file mode 100644 index 000000000..e9a3f9162 --- /dev/null +++ b/leetcode/1401-1500/1472.Design-Browser-History/Solution_test.go @@ -0,0 +1,49 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + homepage string + ops []Op + expect []string + }{ + {"TestCase1", "leetcode.com", []Op{ + {name: "visit", url: "google.com"}, + {name: "visit", url: "facebook.com"}, + {name: "visit", url: "youtube.com"}, + {name: "back", steps: 1}, + {name: "back", steps: 1}, + {name: "forward", steps: 1}, + {name: "visit", url: "linkedin.com"}, + {name: "forward", steps: 2}, + {name: "back", steps: 2}, + {name: "back", steps: 7}, + }, []string{"facebook.com", "google.com", "facebook.com", "linkedin.com", "google.com", "leetcode.com"}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.homepage, c.ops) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.homepage, c.ops) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 423704904964e699f694c60c08bed8e78c93210d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 19 Mar 2023 23:41:30 +0800 Subject: [PATCH 0235/1057] Add solution and test-cases for problem 306 --- .../301-400/0306.Additive-Number/README.md | 33 +++++---- .../301-400/0306.Additive-Number/Solution.go | 69 ++++++++++++++++++- .../0306.Additive-Number/Solution_test.go | 35 ++++++++-- 3 files changed, 115 insertions(+), 22 deletions(-) diff --git a/leetcode/301-400/0306.Additive-Number/README.md b/leetcode/301-400/0306.Additive-Number/README.md index 0f4237ea8..981f8ffb4 100644 --- a/leetcode/301-400/0306.Additive-Number/README.md +++ b/leetcode/301-400/0306.Additive-Number/README.md @@ -1,28 +1,33 @@ # [306.Additive Number][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +An **additive number** is a string whose digits can form an **additive sequence**. + +A valid **additive sequence** should contain **at least** three numbers. Except for the first two numbers, each subsequent number in the sequence must be the sum of the preceding two. + +Given a string containing only digits, return `true` if it is an **additive number** or `false` otherwise. + +**Note**: Numbers in the additive sequence **cannot** have leading zeros, so sequence `1, 2, 03` or `1, 02, 3` is invalid. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: "112358" +Output: true +Explanation: +The digits can form an additive sequence: 1, 1, 2, 3, 5, 8. +1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8 ``` -## 题意 -> ... +**Except 2:** -## 题解 - -### 思路1 -> ... -Additive Number -```go ``` - +Input: "199100199" +Output: true +Explanation: +The additive sequence is: 1, 99, 100, 199. +1 + 99 = 100, 99 + 100 = 199 +``` ## 结语 diff --git a/leetcode/301-400/0306.Additive-Number/Solution.go b/leetcode/301-400/0306.Additive-Number/Solution.go index d115ccf5e..8d88f6063 100644 --- a/leetcode/301-400/0306.Additive-Number/Solution.go +++ b/leetcode/301-400/0306.Additive-Number/Solution.go @@ -1,5 +1,70 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(num string) bool { + if len(num) < 3 { + return false + } + if num[0] == '0' && num[1] == '0' { + return judge306(num, 0, 0, 1) + } + + for end := 1; end < len(num)-1; end++ { + if num[0] == '0' { + if judge306(num, 0, 0, end) { + return true + } + continue + } + for splitEnd := 0; splitEnd < end; splitEnd++ { + if num[splitEnd+1] == '0' && splitEnd != end-1 { + continue + } + if judge306(num, 0, splitEnd, end) { + return true + } + } + } + return false +} + +func judge306(num string, start, mid, end int) bool { + for end < len(num)-1 { + tmp := addStr(num, start, mid, end) + nextEnd := end + len(tmp) + if nextEnd >= len(num) { + return false + } + i, j := 0, nextEnd + for ; j > end; i, j = i+1, j-1 { + if num[j] != tmp[i] { + return false + } + } + start, mid, end = mid+1, end, nextEnd + } + return true +} +func addStr(num string, start, mid, end int) string { + buf := strings.Builder{} + i, j := mid, end + cf := uint8(0) + for ; i >= start || j > mid; i, j = i-1, j-1 { + a, b := byte('0'), byte('0') + if i >= start { + a = byte(num[i]) + } + if j > mid { + b = byte(num[j]) + } + tmp := a - '0' + b - '0' + cf + cf = tmp / 10 + tmp %= 10 + buf.WriteByte(tmp + '0') + } + if cf == 1 { + buf.WriteByte('1') + } + return buf.String() } diff --git a/leetcode/301-400/0306.Additive-Number/Solution_test.go b/leetcode/301-400/0306.Additive-Number/Solution_test.go index 14ff50eb4..dcf4772d1 100644 --- a/leetcode/301-400/0306.Additive-Number/Solution_test.go +++ b/leetcode/301-400/0306.Additive-Number/Solution_test.go @@ -10,12 +10,15 @@ 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", "112358", true}, + {"TestCase2", "199100199", true}, + {"TestCase3", "000", true}, + {"TestCase4", "101", true}, + {"TestCase5", "199001200", false}, + {"TestCase6", "123", true}, } // 开始测试 @@ -30,10 +33,30 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +func TestAddStr(t *testing.T) { + cases := []struct { + s string + start, mid, end int + exp string + }{ + {"1234", 0, 1, 3, "64"}, + {"12345", 0, 1, 4, "753"}, + {"99999", 0, 2, 4, "8901"}, + } + for i, c := range cases { + t.Run(c.s[c.start:c.mid+1]+"+"+c.s[c.mid+1:c.end+1]+" "+strconv.Itoa(i), func(t *testing.T) { + got := addStr(c.s, c.start, c.mid, c.end) + if !reflect.DeepEqual(got, c.exp) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.exp, got, c.s) + } + }) + } +} + +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b0b146bf0b4a028386103ea977f96e4f026e5ca4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 21 Mar 2023 21:49:57 +0800 Subject: [PATCH 0236/1057] Add solution and test-cases for problem 2348 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 15 +++++++- .../Solution_test.go | 14 +++---- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md index f0f309525..ce862db54 100755 --- a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md +++ b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/README.md @@ -1,28 +1,40 @@ # [2348.Number of Zero-Filled 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`, return the number of **subarrays** filled with `0`. + +A **subarray** is a contiguous non-empty sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,0,0,2,0,0,4] +Output: 6 +Explanation: +There are 4 occurrences of [0] as a subarray. +There are 2 occurrences of [0,0] as a subarray. +There is no occurrence of a subarray with a size more than 2 filled with 0. Therefore, we return 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Zero-Filled Subarrays -```go +``` +Input: nums = [0,0,0,2,0,0] +Output: 9 +Explanation: +There are 5 occurrences of [0] as a subarray. +There are 3 occurrences of [0,0] as a subarray. +There is 1 occurrence of [0,0,0] as a subarray. +There is no occurrence of a subarray with a size more than 3 filled with 0. Therefore, we return 9. ``` +**Example 3:** + +``` +Input: nums = [2,10,2019] +Output: 0 +Explanation: There is no subarray filled with 0. Therefore, we return 0. +``` ## 结语 diff --git a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go index d115ccf5e..4755b8549 100644 --- a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go +++ b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int64 { + ans := int64(0) + + zero := int64(0) + for _, n := range nums { + if n == 0 { + zero++ + ans += zero + continue + } + zero = 0 + } + return ans } diff --git a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go index 14ff50eb4..27776b363 100644 --- a/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/Solution_test.go +++ b/leetcode/2301-2400/2348.Number-of-Zero-Filled-Subarrays/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{1, 3, 0, 0, 2, 0, 0, 4}, 6}, + {"TestCase2", []int{0, 0, 0, 2, 0, 0}, 9}, + {"TestCase3", []int{2, 10, 2019}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8e7e7df82f942be31e75fca48514315e59b18d13 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 22 Mar 2023 22:22:47 +0800 Subject: [PATCH 0237/1057] Add solution and test-cases for problem 2492 --- .../README.md | 38 +++++++++++------ .../Solution.go | 40 +++++++++++++++++- .../Solution_test.go | 24 ++++++----- .../graph11.png | Bin 0 -> 10231 bytes .../graph22.png | Bin 0 -> 9605 bytes 5 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/graph11.png create mode 100644 leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/graph22.png diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md index 1a267c7a6..52e78b36b 100755 --- a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md +++ b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/README.md @@ -1,28 +1,38 @@ # [2492.Minimum Score of a Path Between Two Cities][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a positive integer `n` representing n cities numbered from `1` to `n`. You are also given a **2D** array `roads` where `roads[i] = [ai, bi, distancei]` indicates that there is a **bidirectional** road between cities ai and bi with a distance equal to distancei. The cities graph is not necessarily connected. + +The **score** of a path between two cities is defined as the **minimum** distance of a road in this path. + +Return the **minimum** possible score of a path between cities `1` and `n`. + +**Note**: -**Example 1:** +- A path is a sequence of roads between two cities. +- It is allowed for a path to contain the same road **multiple** times, and you can visit cities `1` and `n` multiple times along the path. +- The test cases are generated such that there is **at least** one path between `1` and `n`. + +**Example 1:** + +![example1](./graph11.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, roads = [[1,2,9],[2,3,6],[2,4,5],[1,4,7]] +Output: 5 +Explanation: The path from city 1 to 4 with the minimum score is: 1 -> 2 -> 4. The score of this path is min(9,5) = 5. +It can be shown that no other path has less score. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./graph22.png) -### 思路1 -> ... -Minimum Score of a Path Between Two Cities -```go ``` - +Input: n = 4, roads = [[1,2,2],[1,3,4],[3,4,7]] +Output: 2 +Explanation: The path from city 1 to 4 with the minimum score is: 1 -> 2 -> 1 -> 3 -> 4. The score of this path is min(2,2,4,7) = 2. +``` ## 结语 diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go index d115ccf5e..47ce44ae7 100644 --- a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go +++ b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(n int, roads [][]int) int { + score := -1 + edges := make(map[int]map[int]int) + for _, r := range roads { + from, to, distance := r[0], r[1], r[2] + if _, ok := edges[from]; !ok { + edges[from] = make(map[int]int) + } + if _, ok := edges[to]; !ok { + edges[to] = make(map[int]int) + } + edges[from][to] = distance + edges[to][from] = distance + } + var dfs func(int) + visited := make(map[string]struct{}) + dfs = func(city int) { + + for to, distnace := range edges[city] { + key := fmt.Sprintf("%d-%d", city, to) + if _, ok := visited[key]; ok { + continue + } + revKey := fmt.Sprintf("%d-%d", to, city) + visited[key] = struct{}{} + visited[revKey] = struct{}{} + + if score == -1 || score > distnace { + score = distnace + } + dfs(to) + } + } + + dfs(1) + return score } diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go index 14ff50eb4..f63f813f0 100644 --- a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go +++ b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/Solution_test.go @@ -10,30 +10,34 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + roads [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{ + {1, 2, 9}, {2, 3, 6}, {2, 4, 5}, {1, 4, 7}, + }, 5}, + {"TestCase2", 4, [][]int{ + {1, 2, 2}, {1, 3, 4}, {3, 4, 7}, + }, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.roads) 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.roads) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/graph11.png b/leetcode/2401-2500/2492.Minimum-Score-of-a-Path-Between-Two-Cities/graph11.png new file mode 100644 index 0000000000000000000000000000000000000000..e016a639f3044ec99280d4f7154955242bab2b8e GIT binary patch literal 10231 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 ZV%s%vkq Date: Thu, 23 Mar 2023 21:43:09 +0800 Subject: [PATCH 0238/1057] Add solution and test-cases for problem 1319 --- .../README.md | 37 +++++++---- .../Solution.go | 62 +++++++++++++++++- .../Solution_test.go | 23 ++++--- .../sample_1_1677.png | Bin 0 -> 11845 bytes .../sample_2_1677.png | Bin 0 -> 15397 bytes 5 files changed, 97 insertions(+), 25 deletions(-) create mode 100644 leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/sample_1_1677.png create mode 100644 leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/sample_2_1677.png diff --git a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/README.md b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/README.md index 438221a0a..ad12b6b8a 100644 --- a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/README.md +++ b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/README.md @@ -1,26 +1,37 @@ # [1319.Number of Operations to Make Network Connected][title] -> [!WARNING|style:flat] -> 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` computers numbered from `0` to `n - 1` connected by ethernet cables `connections` forming a network where `connections[i] = [ai, bi]` represents a connection between computers ai and bi. Any computer can reach any other computer directly or indirectly through the network. + +You are given an initial computer network `connections`. You can extract certain cables between two directly connected computers, and place them between any pair of disconnected computers to make them directly connected. + +Return the minimum number of times you need to do this in order to make all the computers connected. If it is not possible, return `-1`. -**Example 1:** +**Example 1:** + +![example1](./sample_1_1677.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, connections = [[0,1],[0,2],[1,2]] +Output: 1 +Explanation: Remove cable between computer 1 and 2 and place between computers 1 and 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./sample_2_1677.png) -### 思路1 -> ... -Number of Operations to Make Network Connected -```go +``` +Input: n = 6, connections = [[0,1],[0,2],[0,3],[1,2],[1,3]] +Output: 2 +``` + +**Example 3:** + +``` +Input: n = 6, connections = [[0,1],[0,2],[0,3],[1,2]] +Output: -1 +Explanation: There are not enough cables. ``` diff --git a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution.go b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution.go index d115ccf5e..173b5cfa5 100644 --- a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution.go +++ b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +type UnionFind1319 struct { + Father []int +} + +func (uf *UnionFind1319) FindFather(x int) int { + if uf.Father[x] != x { + uf.Father[x] = uf.FindFather(uf.Father[x]) + } + return uf.Father[x] +} + +func (uf *UnionFind1319) Union(x, y int) { + x = uf.Father[x] + y = uf.Father[y] + if x < y { + uf.Father[y] = x + } else { + uf.Father[x] = y + } +} +func Solution(n int, connections [][]int) int { + if len(connections) < n-1 { + return -1 + } + u := UnionFind1319{Father: make([]int, n)} + for i := 0; i < n; i++ { + u.Father[i] = -1 + } + + // 计算小团体 + // 计算没有任何连接的电脑个数 + + for _, conn := range connections { + if u.Father[conn[0]] == -1 { + u.Father[conn[0]] = conn[0] + } + if u.Father[conn[1]] == -1 { + u.Father[conn[1]] = conn[1] + } + af := u.FindFather(conn[0]) + bf := u.FindFather(conn[1]) + u.Union(af, bf) + } + ans := 0 + groups := make(map[int]int) + for i := 0; i < n; i++ { + if u.Father[i] == -1 { + groups[-1]++ + continue + } + groups[u.FindFather(i)]++ + } + singleGroups := len(groups) + v, ok := groups[-1] + if !ok { + return singleGroups - 1 + } + ans += v - 1 + singleGroups -= 1 + return ans + singleGroups } diff --git a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution_test.go b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution_test.go index 14ff50eb4..43e059758 100644 --- a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution_test.go +++ b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/Solution_test.go @@ -10,30 +10,33 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{ + {0, 1}, {0, 2}, {1, 2}, + }, 1}, + {"TestCase2", 6, [][]int{{0, 1}, {0, 2}, {0, 3}, {1, 2}, {1, 3}}, 2}, + {"TestCase3", 6, [][]int{{0, 1}, {0, 2}, {0, 3}, {1, 2}}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.inputs) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/sample_1_1677.png b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/sample_1_1677.png new file mode 100644 index 0000000000000000000000000000000000000000..cfac2525dc7bfd2314334bdcc36e2cbcc62053c3 GIT binary patch literal 11845 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 Kruen)$NvLpUzPO$ literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/sample_2_1677.png b/leetcode/1301-1400/1319.Number-of-Operations-to-Make-Network-Connected/sample_2_1677.png new file mode 100644 index 0000000000000000000000000000000000000000..9e03a13d051d234562640d6e6f8cbb9bba196eb2 GIT binary patch literal 15397 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 Date: Fri, 24 Mar 2023 22:43:28 +0800 Subject: [PATCH 0239/1057] Add solution and test-cases for problem 1466 --- .../README.md | 40 +++++++++++++++ .../Solution.go | 33 +++++++++++++ .../Solution_test.go | 46 ++++++++++++++++++ .../sample_1_1819.png | Bin 0 -> 10153 bytes .../sample_2_1819.png | Bin 0 -> 6975 bytes 5 files changed, 119 insertions(+) create mode 100644 leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/README.md create mode 100644 leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution.go create mode 100644 leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution_test.go create mode 100644 leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/sample_1_1819.png create mode 100644 leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/sample_2_1819.png diff --git a/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/README.md b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/README.md new file mode 100644 index 000000000..2973923c8 --- /dev/null +++ b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/README.md @@ -0,0 +1,40 @@ +# [1362.Closest Divisors][title] + +## Description +There are `n` cities numbered from `0` to `n - 1` and `n - 1` roads such that there is only one way to travel between two different cities (this network form a tree). Last year, The ministry of transport decided to orient the roads in one direction because they are too narrow. + +Roads are represented by `connections` where `connections[i] = [ai, bi]` represents a road from city ai to city bi. + +This year, there will be a big event in the capital (city `n`), and many people want to travel to this city. + +Your task consists of reorienting some roads such that each city can visit the city `0`. Return the **minimum** number of edges changed. + +It's **guaranteed** that each city can reach city 0 after reorder. + +**Example 1:** + +![example1](./sample_1_1819.png) + +``` +Input: n = 6, connections = [[0,1],[1,3],[2,3],[4,0],[4,5]] +Output: 3 +Explanation: Change the direction of edges show in red such that each node can reach the node 0 (capital). +``` + +**Example 2:** + +![example2](./sample_2_1819.png) + +``` +Input: n = 5, connections = [[1,0],[1,2],[3,2],[3,4]] +Output: 2 +Explanation: Change the direction of edges show in red such that each node can reach the node 0 (capital). + +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/reorder-routes-to-make-all-paths-lead-to-the-city-zero +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution.go b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution.go new file mode 100644 index 000000000..37ddafa9d --- /dev/null +++ b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution.go @@ -0,0 +1,33 @@ +package Solution + +func Solution(n int, connections [][]int) int { + to := make(map[int][]int) + from := make(map[int][]int) + for _, conn := range connections { + if _, ok := to[conn[1]]; !ok { + to[conn[1]] = make([]int, 0) + } + if _, ok := from[conn[0]]; !ok { + from[conn[0]] = make([]int, 0) + } + to[conn[1]] = append(to[conn[1]], conn[0]) + from[conn[0]] = append(from[conn[0]], conn[1]) + } + ans := 0 + var dfs func(int, int) + dfs = func(start, parent int) { + for _, rel := range to[start] { + if rel != parent { + dfs(rel, start) + } + } + for _, rel := range from[start] { + if rel != parent { + ans++ + dfs(rel, start) + } + } + } + dfs(0, -1) + return ans +} diff --git a/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution_test.go b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution_test.go new file mode 100644 index 000000000..074c65167 --- /dev/null +++ b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/Solution_test.go @@ -0,0 +1,46 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + n int + connections [][]int + expect int + }{ + {"TestCase1", 6, [][]int{ + {0, 1}, {1, 3}, {2, 3}, {4, 0}, {4, 5}, + }, 3}, + {"TestCase2", 5, [][]int{ + {1, 0}, {1, 2}, {3, 2}, {3, 4}, + }, 2}, + {"TestCase3", 3, [][]int{ + {1, 0}, {2, 0}, + }, 0}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.n, c.connections) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.connections) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/sample_1_1819.png b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/sample_1_1819.png new file mode 100644 index 0000000000000000000000000000000000000000..8e85ba0572bbac6c28abfa0e25935dbda7089f85 GIT binary patch literal 10153 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 K8g+2{nEwGl)qnv2 literal 0 HcmV?d00001 diff --git a/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/sample_2_1819.png b/leetcode/1401-1500/1466.Reorder-Routes-to-Make-All-Paths-Lead-to-the-City-Zero/sample_2_1819.png new file mode 100644 index 0000000000000000000000000000000000000000..8fdc705d83206df3b7e7cc79e3e918f454b9741d GIT binary patch literal 6975 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 Date: Sat, 25 Mar 2023 10:27:52 +0800 Subject: [PATCH 0240/1057] Add solution and test-cases for problem 2316 --- .../README.md | 31 ++++++----- .../Solution.go | 50 +++++++++++++++++- .../Solution_test.go | 24 +++++---- .../tc-2.png | Bin 0 -> 18307 bytes .../tc-3.png | Bin 0 -> 12558 bytes 5 files changed, 79 insertions(+), 26 deletions(-) create mode 100644 leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/tc-2.png create mode 100644 leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/tc-3.png diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md index 01b6c7ba8..b68084103 100755 --- a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md +++ b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/README.md @@ -1,28 +1,31 @@ # [2316.Count Unreachable Pairs of Nodes in an Undirected Graph][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer `n`. There is an **undirected** graph with `n` nodes, 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 nodes ai and bi. + +Return the **number of pairs** of different nodes that are **unreachable** from each other. + +**Example 1:** -**Example 1:** +![example1](./tc-3.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, edges = [[0,1],[0,2],[1,2]] +Output: 0 +Explanation: There are no pairs of nodes that are unreachable from each other. Therefore, we return 0. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./tc-2.png) -### 思路1 -> ... -Count Unreachable Pairs of Nodes in an Undirected Graph -```go ``` - +Input: n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]] +Output: 14 +Explanation: There are 14 pairs of nodes that are unreachable from each other: +[[0,1],[0,3],[0,6],[1,2],[1,3],[1,4],[1,5],[2,3],[2,6],[3,4],[3,5],[3,6],[4,6],[5,6]]. +Therefore, we return 14. +``` ## 结语 diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go index d115ccf5e..9ea9eb863 100644 --- a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go +++ b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution.go @@ -1,5 +1,51 @@ package Solution -func Solution(x bool) bool { - return x +type UnionFind2316 struct { + Father []int +} + +func (uf *UnionFind2316) FindFather(x int) int { + if uf.Father[x] != x { + uf.Father[x] = uf.FindFather(uf.Father[x]) + } + return uf.Father[x] +} + +func (uf *UnionFind2316) Union(x, y int) { + x = uf.Father[x] + y = uf.Father[y] + if x < y { + uf.Father[y] = x + } else { + uf.Father[x] = y + } +} + +func Solution(n int, edges [][]int) int64 { + u := UnionFind2316{Father: make([]int, n)} + for i := 0; i < n; i++ { + u.Father[i] = i + } + for _, e := range edges { + af := u.FindFather(e[0]) + bf := u.FindFather(e[1]) + u.Union(af, bf) + } + groups := make(map[int]int64) + for i := 0; i < n; i++ { + groups[u.FindFather(i)]++ + } + num := make([]int64, len(groups)) + index := 0 + for _, v := range groups { + num[index] = v + index++ + } + ans := int64(0) + for i := 0; i < len(num)-1; i++ { + for j := i + 1; j < len(num); j++ { + ans += num[i] * num[j] + } + } + return ans } diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go index 14ff50eb4..ca8cb0c84 100644 --- a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/Solution_test.go +++ b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/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 int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{ + {0, 1}, {0, 2}, {1, 2}, + }, 0}, + {"TestCase2", 7, [][]int{ + {0, 2}, {0, 5}, {2, 4}, {1, 6}, {5, 4}, + }, 14}, } // 开始测试 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/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/tc-2.png b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/tc-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ae9689554085b17e40955e5087e20573e3b1a06c GIT binary patch literal 18307 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 literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/tc-3.png b/leetcode/2301-2400/2316.Count-Unreachable-Pairs-of-Nodes-in-an-Undirected-Graph/tc-3.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5aaa71ebfb2ffb3eac33fc25d9b9dca34dda3e GIT binary patch literal 12558 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 Date: Sun, 26 Mar 2023 13:16:13 +0800 Subject: [PATCH 0241/1057] Add solution and test-cases for problem 2360 --- .../2360.Longest-Cycle-in-a-Graph/README.md | 35 +++++++++++------- .../2360.Longest-Cycle-in-a-Graph/Solution.go | 33 ++++++++++++++++- .../Solution_test.go | 13 +++---- .../graph4drawio-1.png | Bin 0 -> 7066 bytes .../graph4drawio-5.png | Bin 0 -> 13364 bytes 5 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/graph4drawio-1.png create mode 100644 leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/graph4drawio-5.png diff --git a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md index 59a7c6513..a6bade7a1 100755 --- a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md +++ b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/README.md @@ -1,28 +1,35 @@ # [2360.Longest Cycle in a Graph][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **directed** graph of `n` nodes numbered from `0` to `n - 1`, where each node has **at most one** outgoing edge. + +The graph is represented with a given **0-indexed** array `edges` of size `n`, indicating that there is a directed edge from node `i` to node `edges[i]`. If there is no outgoing edge from node `i`, then `edges[i] == -1`. + +Return the length of the **longest** cycle in the graph. If no cycle exists, return `-1`. + +A cycle is a path that starts and ends at the **same** node. -**Example 1:** +**Example 1:** + +![example1](./graph4drawio-5.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: edges = [3,3,4,2,3] +Output: 3 +Explanation: The longest cycle in the graph is the cycle: 2 -> 4 -> 3 -> 2. +The length of this cycle is 3, so 3 is returned. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./graph4drawio-1.png) -### 思路1 -> ... -Longest Cycle in a Graph -```go -``` +``` +Input: edges = [2,-1,3,1] +Output: -1 +Explanation: There are no cycles in this graph. +``` ## 结语 diff --git a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go index d115ccf5e..c0a50d56d 100644 --- a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go +++ b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +func dfs2360(edges []int, start1, start, path int, hasCycle map[int]int, ans *int) { + to := edges[start] + if to == -1 { + // 没有路可以走 + return + } + if to < 0 { + v, ok := hasCycle[start] + if ok && v == start1 { + if diff := to - path; diff > *ans { + *ans = diff + } + } + return + } + edges[start] = path + hasCycle[start] = start1 + dfs2360(edges, start1, to, path-1, hasCycle, ans) +} + +// dfs +func Solution(edges []int) int { + ans := -1 + hasCycle := make(map[int]int) + for i := 0; i < len(edges); i++ { + if _, ok := hasCycle[i]; ok || edges[i] < -1 { + continue + } + dfs2360(edges, i, i, -2, hasCycle, &ans) + } + return ans } diff --git a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go index 14ff50eb4..3a7ea7375 100644 --- a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go +++ b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 3, 4, 2, 3}, 3}, + {"TestCase2", []int{-1, 4, -1, 2, 0, 4}, -1}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/graph4drawio-1.png b/leetcode/2301-2400/2360.Longest-Cycle-in-a-Graph/graph4drawio-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d7b7d0f220c522a6d766c0f47a2444c111929b GIT binary patch literal 7066 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 BU2OmW literal 0 HcmV?d00001 From 92a9ee9281f81418ca98fd041c06f23aacc9f3bd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 30 Mar 2023 23:25:26 +0800 Subject: [PATCH 0242/1057] Add solution and test-cases for problem 87 --- leetcode/1-100/0087.Scramble-String/README.md | 51 ++++++++++++++++ .../1-100/0087.Scramble-String/Solution.go | 60 ++++++++++++++++++- .../0087.Scramble-String/Solution_test.go | 18 +++--- 3 files changed, 118 insertions(+), 11 deletions(-) create mode 100644 leetcode/1-100/0087.Scramble-String/README.md diff --git a/leetcode/1-100/0087.Scramble-String/README.md b/leetcode/1-100/0087.Scramble-String/README.md new file mode 100644 index 000000000..d94e581b0 --- /dev/null +++ b/leetcode/1-100/0087.Scramble-String/README.md @@ -0,0 +1,51 @@ +# [87.Scramble String][title] + +## Description +We can scramble a string s to get a string t using the following algorithm: + +If the length of the string is 1, stop. + +If the length of the string is > 1, do the following: + +- Split the string into two non-empty substrings at a random index, i.e., if the string is `s`, divide it to `x` and `y` where `s = x + y`. +- **Randomly** decide to swap the two substrings or to keep them in the same order. i.e., after this step, `s` may become `s = x + y` or `s = y + x`. +- Apply step 1 recursively on each of the two substrings `x` and `y`. + +Given two strings `s1` and `s2` of **the same length**, return `true` if `s2` is a scrambled string of `s1`, otherwise, return `false`. + +**Example 1:** + +``` +Input: s1 = "great", s2 = "rgeat" +Output: true +Explanation: One possible scenario applied on s1 is: +"great" --> "gr/eat" // divide at random index. +"gr/eat" --> "gr/eat" // random decision is not to swap the two substrings and keep them in order. +"gr/eat" --> "g/r / e/at" // apply the same algorithm recursively on both substrings. divide at random index each of them. +"g/r / e/at" --> "r/g / e/at" // random decision was to swap the first substring and to keep the second substring in the same order. +"r/g / e/at" --> "r/g / e/ a/t" // again apply the algorithm recursively, divide "at" to "a/t". +"r/g / e/ a/t" --> "r/g / e/ a/t" // random decision is to keep both substrings in the same order. +The algorithm stops now, and the result string is "rgeat" which is s2. +As one possible scenario led s1 to be scrambled to s2, we return true. +``` + +**Example 2:** + +``` +Input: s1 = "abcde", s2 = "caebd" +Output: false +``` + +**Example 3:** + +``` +Input: s1 = "a", s2 = "a" +Output: true +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/scramble-string +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1-100/0087.Scramble-String/Solution.go b/leetcode/1-100/0087.Scramble-String/Solution.go index d115ccf5e..ad0ea5332 100644 --- a/leetcode/1-100/0087.Scramble-String/Solution.go +++ b/leetcode/1-100/0087.Scramble-String/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s1 string, s2 string) bool { + a := make([]int, 26) + cache := make(map[string]bool) + return isScramble87([]byte(s1), []byte(s2), cache, chars1(a)) +} + +func chars1(baseS1 []int) func([]byte, []byte) bool { + return func(s1, s2 []byte) bool { + for i := 0; i < 26; i++ { + baseS1[i] = 0 + } + for i := 0; i < len(s1); i++ { + baseS1[s1[i]-'a']++ + baseS1[s2[i]-'a']-- + } + for i := 0; i < 26; i++ { + if baseS1[i] != 0 { + return false + } + } + return true + } +} + +func isScramble87(s1, s2 []byte, cache map[string]bool, cmp func([]byte, []byte) bool) bool { + if v, ok := cache[string(s1)+string(s2)]; ok { + return v + } + if string(s1) == string(s2) { + return true + } + ll := len(s1) + equal := true + for i := 0; i < ll; i++ { + if s1[i] != s2[ll-1-i] { + equal = false + break + } + } + if equal { + return true + } + if !cmp(s1, s2) { + return false + } + cache[string(s1)+string(s2)] = false + for l := 1; l < ll; l++ { + if isScramble87(s1[:l], s2[:l], cache, cmp) && isScramble87(s1[l:], s2[l:], cache, cmp) { + cache[string(s1)+string(s2)] = true + return true + } + // a,b/c, cba + if isScramble87(s1[:l], s2[ll-l:], cache, cmp) && isScramble87(s1[l:], s2[:ll-l], cache, cmp) { + cache[string(s1)+string(s2)] = true + return true + } + } + return false } diff --git a/leetcode/1-100/0087.Scramble-String/Solution_test.go b/leetcode/1-100/0087.Scramble-String/Solution_test.go index 3d0df9a77..70653859b 100644 --- a/leetcode/1-100/0087.Scramble-String/Solution_test.go +++ b/leetcode/1-100/0087.Scramble-String/Solution_test.go @@ -9,30 +9,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s1, s2 string expect bool }{ - {"TestCacse 1", true, true}, - {"TestCacse 1", true, true}, - {"TestCacse 1", false, false}, + {"TestCacse 1", "great", "rgeat", true}, + {"TestCacse 2", "abcde", "cadbd", false}, + {"TestCacse 3", "a", "a", true}, } // 开始测试 for _, c := range cases { t.Run(c.name, func(t *testing.T) { - ret := Solution(c.inputs) + ret := Solution(c.s1, c.s2) if !reflect.DeepEqual(ret, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, ret, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, ret, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7d1d0fd20b7c476fd681081d8fec421cabb133d3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 1 Apr 2023 15:35:18 +0800 Subject: [PATCH 0243/1057] Add solution and test-cases for problem 1444 --- .../README.md | 40 +++++++++++++ .../Solution.go | 53 ++++++++++++++++++ .../Solution_test.go | 39 +++++++++++++ .../ways_to_cut_apple_1.png | Bin 0 -> 179575 bytes 4 files changed, 132 insertions(+) create mode 100644 leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/README.md create mode 100644 leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution.go create mode 100644 leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution_test.go create mode 100644 leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/ways_to_cut_apple_1.png diff --git a/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/README.md b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/README.md new file mode 100644 index 000000000..96a628e72 --- /dev/null +++ b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/README.md @@ -0,0 +1,40 @@ +# [1444. Number of Ways of Cutting a Pizza][title] + + +## Description +Given a rectangular pizza represented as a `rows x cols` matrix containing the following characters: `'A'` (an apple) and `'.'` (empty cell) and given the integer `k`. You have to cut the pizza into `k` pieces using `k-1` cuts. + +For each cut you choose the direction: vertical or horizontal, then you choose a cut position at the cell boundary and cut the pizza into two pieces. If you cut the pizza vertically, give the left part of the pizza to a person. If you cut the pizza horizontally, give the upper part of the pizza to a person. Give the last piece of pizza to the last person. + +Return the number of ways of cutting the pizza such that each piece contains **at least** one apple. Since the answer can be a huge number, return this modulo 10^9 + 7. + +**Example 1:** + +![example1](./ways_to_cut_apple_1.png) + +``` +Input: pizza = ["A..","AAA","..."], k = 3 +Output: 3 +Explanation: The figure above shows the three ways to cut the pizza. Note that pieces must contain at least one apple. +``` + +**Example 2:** + +``` +Input: pizza = ["A..","AA.","..."], k = 3 +Output: 1 +``` + +**Example 3:** + +``` +Input: pizza = ["A..","A..","..."], k = 1 +Output: 1 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/number-of-ways-of-cutting-a-pizza/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution.go b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution.go new file mode 100644 index 000000000..839cc46dc --- /dev/null +++ b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution.go @@ -0,0 +1,53 @@ +package Solution + +const mod1444 = 1000000007 + +func Solution(pizza []string, k int) int { + rows := len(pizza) + cols := len(pizza[0]) + dp := make([][][]int, k) + for i := 0; i < k; i++ { + dp[i] = make([][]int, rows) + for r := 0; r < rows; r++ { + dp[i][r] = make([]int, cols) + } + } + + apples := make([][]int, rows+1) + for i := 0; i <= rows; i++ { + apples[i] = make([]int, cols+1) + } + for row := rows - 1; row >= 0; row-- { + for col := cols - 1; col >= 0; col-- { + isApple := 0 + if pizza[row][col] == 'A' { + isApple++ + } + apples[row][col] = isApple + apples[row+1][col] + apples[row][col+1] - apples[row+1][col+1] + if apples[row][col] > 0 { + dp[0][row][col] = 1 + } + } + } + + for remain := 1; remain < k; remain++ { + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + for move := row + 1; move < rows; move++ { + if r := apples[row][col] - apples[move][col]; r > 0 { + dp[remain][row][col] += dp[remain-1][move][col] + dp[remain][row][col] %= mod1444 + } + } + + for move := col + 1; move < cols; move++ { + if r := apples[row][col] - apples[row][move]; r > 0 { + dp[remain][row][col] += dp[remain-1][row][move] + dp[remain][row][col] %= mod1444 + } + } + } + } + } + return dp[k-1][0][0] +} diff --git a/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution_test.go b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution_test.go new file mode 100644 index 000000000..2bbe32b5a --- /dev/null +++ b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + pizza []string + k int + expect int + }{ + {"TestCase", []string{"A..", "AAA", "..."}, 3, 3}, + {"TestCase", []string{"A..", "AA.", "..."}, 3, 1}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.pizza, c.k) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.pizza, c.k) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/ways_to_cut_apple_1.png b/leetcode/1401-1500/1444.Number-of-Ways-of-Cutting-a-Pizza/ways_to_cut_apple_1.png new file mode 100644 index 0000000000000000000000000000000000000000..36c073d39826f74b1ab963d64f283394341d635a GIT binary patch literal 179575 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

      )Cv%gUodls}yoDjs2Qx_}`jX(LDv!3EXd1z)Zk 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 literal 0 HcmV?d00001 From 2768b1f71a5eac4e9e7998ab8031f94caf4983bc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 2 Apr 2023 13:12:29 +0800 Subject: [PATCH 0244/1057] Add solution and test-cases for problem 2300 --- .../README.md | 34 ++++++++++++------- .../Solution.go | 17 ++++++++-- .../Solution_test.go | 22 ++++++------ 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md index e46f5ac2b..5d3a40601 100755 --- a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md +++ b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/README.md @@ -1,28 +1,36 @@ # [2300.Successful Pairs of Spells and Potions][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) ## Description +You are given two positive integer arrays `spells` and `potions`, of length `n` and `m` respectively, where `spells[i]` represents the strength of the ith spell and `potions[j]` represents the strength of the jth potion. + +You are also given an integer `success`. A spell and potion pair is considered **successful** if the **product** of their strengths is **at least** success. + +Return an integer array `pairs` of length `n` where `pairs[i]` is the number of **potions** that will form a successful pair with the ith spell. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: spells = [5,1,3], potions = [1,2,3,4,5], success = 7 +Output: [4,0,3] +Explanation: +- 0th spell: 5 * [1,2,3,4,5] = [5,10,15,20,25]. 4 pairs are successful. +- 1st spell: 1 * [1,2,3,4,5] = [1,2,3,4,5]. 0 pairs are successful. +- 2nd spell: 3 * [1,2,3,4,5] = [3,6,9,12,15]. 3 pairs are successful. +Thus, [4,0,3] is returned. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Successful Pairs of Spells and Potions -```go ``` - +Input: spells = [3,1,2], potions = [8,5,8], success = 16 +Output: [2,0,2] +Explanation: +- 0th spell: 3 * [8,5,8] = [24,15,24]. 2 pairs are successful. +- 1st spell: 1 * [8,5,8] = [8,5,8]. 0 pairs are successful. +- 2nd spell: 2 * [8,5,8] = [16,10,16]. 2 pairs are successful. +Thus, [2,0,2] is returned. +``` ## 结语 diff --git a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go index d115ccf5e..da15e8596 100644 --- a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go +++ b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(spells []int, potions []int, success int64) []int { + ans := make([]int, len(spells)) + sort.Ints(potions) + for i, n := range spells { + idx := 0 + for ; idx < len(potions); idx++ { + if int64(potions[idx])*int64(n) >= success { + break + } + } + ans[i] = len(potions) - idx + } + return ans } diff --git a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go index 14ff50eb4..14d938317 100644 --- a/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go +++ b/leetcode/2201-2300/2300.Successful-Pairs-of-Spells-and-Potions/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + s, p []int + success int64 + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 1, 3}, []int{1, 2, 3, 4, 5}, 7, []int{4, 0, 3}}, + {"TestCase2", []int{3, 1, 2}, []int{8, 5, 8}, 16, []int{2, 0, 2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.p, c.success) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.s, c.p, c.success) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6bcdd064cb4ddffd452a8a37f3a04adbf6e7e46e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 3 Apr 2023 22:38:03 +0800 Subject: [PATCH 0245/1057] Add solution and test-cases for problem 881 --- .../0881.Boats-to-Save-People/README.md | 31 +++++++++++-------- .../0881.Boats-to-Save-People/Solution.go | 18 +++++++++-- .../Solution_test.go | 20 ++++++------ 3 files changed, 44 insertions(+), 25 deletions(-) diff --git a/leetcode/801-900/0881.Boats-to-Save-People/README.md b/leetcode/801-900/0881.Boats-to-Save-People/README.md index a885592af..b4f802a85 100644 --- a/leetcode/801-900/0881.Boats-to-Save-People/README.md +++ b/leetcode/801-900/0881.Boats-to-Save-People/README.md @@ -1,28 +1,33 @@ # [881.Boats to Save People][title] -> [!WARNING|style:flat] -> 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 people where `people[i]` is the weight of the ith person, and an **infinite number of boats** where each boat can carry a maximum weight of `limit`. Each boat carries at most two people at the same time, provided the sum of the weight of those people is at most `limit`. + +Return the minimum number of boats to carry every given person. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: people = [1,2], limit = 3 +Output: 1 +Explanation: 1 boat (1, 2) ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Boats to Save People -```go +``` +Input: people = [3,2,2,1], limit = 3 +Output: 3 +Explanation: 3 boats (1, 2), (2) and (3) ``` +**Example 3:** + +``` +Input: people = [3,5,3,4], limit = 5 +Output: 4 +Explanation: 4 boats (3), (3), (4), (5) +``` ## 结语 diff --git a/leetcode/801-900/0881.Boats-to-Save-People/Solution.go b/leetcode/801-900/0881.Boats-to-Save-People/Solution.go index d115ccf5e..868743927 100644 --- a/leetcode/801-900/0881.Boats-to-Save-People/Solution.go +++ b/leetcode/801-900/0881.Boats-to-Save-People/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(people []int, limit int) int { + sort.Ints(people) + // b + d <= z, 可以得出a+d<=z, 且不可能出现b+c>z的情况 + ans := 0 + left, right := 0, len(people)-1 + for left <= right { + ans++ + if people[left]+people[right] <= limit { + left++ + } + right-- + } + + return ans } diff --git a/leetcode/801-900/0881.Boats-to-Save-People/Solution_test.go b/leetcode/801-900/0881.Boats-to-Save-People/Solution_test.go index 14ff50eb4..32ad05935 100644 --- a/leetcode/801-900/0881.Boats-to-Save-People/Solution_test.go +++ b/leetcode/801-900/0881.Boats-to-Save-People/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + people []int + limit int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2}, 3, 1}, + {"TestCase2", []int{3, 2, 2, 1}, 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.people, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.people, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 273bb64bf1c1440f82483578dad376882002b387 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 4 Apr 2023 21:50:29 +0800 Subject: [PATCH 0246/1057] Add solution and test-cases for problem 2405 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 17 +++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md b/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md index cff395077..16126a3e4 100755 --- a/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md +++ b/leetcode/2401-2500/2405.Optimal-Partition-of-String/README.md @@ -1,28 +1,30 @@ # [2405.Optimal Partition of String][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a string `s`, partition the string into one or more **substrings** such that the characters in each substring are **unique**. That is, no letter appears in a single substring more than **once**. + +Return the **minimum** number of substrings in such a partition. + +Note that each character should belong to exactly one substring in a partition. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abacaba" +Output: 4 +Explanation: +Two possible partitions are ("a","ba","cab","a") and ("ab","a","ca","ba"). +It can be shown that 4 is the minimum number of substrings needed. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Optimal Partition of String -```go ``` - +Input: s = "ssssss" +Output: 6 +Explanation: +The only valid partition is ("s","s","s","s","s","s"). +``` ## 结语 diff --git a/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go index d115ccf5e..b799044ad 100644 --- a/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go +++ b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + chars := make([]bool, 26) + ans := 1 + for _, b := range s { + if !chars[b-'a'] { + chars[b-'a'] = true + continue + } + ans++ + for i := 0; i < 26; i++ { + chars[i] = false + } + chars[b-'a'] = true + } + return ans } diff --git a/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go index 14ff50eb4..d5cc3b3c8 100644 --- a/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go +++ b/leetcode/2401-2500/2405.Optimal-Partition-of-String/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abacaba", 4}, + {"TestCase2", "ssssss", 6}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7ab750eabc92faf25282724572ebc28cb00966c2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 5 Apr 2023 11:23:05 +0800 Subject: [PATCH 0247/1057] Add solution and test-cases for problem 2439 --- .../2439.Minimize-Maximum-of-Array/README.md | 38 ++++++++++++------- .../Solution.go | 21 +++++++++- .../Solution_test.go | 13 +++---- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md index a742001e7..3399a3380 100755 --- a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md +++ b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/README.md @@ -1,28 +1,38 @@ # [2439.Minimize Maximum of Array][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** array `nums` comprising of `n` non-negative integers. + +In one operation, you must: + +- Choose an integer `i` such that `1 <= i < n` and `nums[i] > 0`. +- Decrease `nums[i]` by 1. +- Increase `nums[i - 1]` by 1. + +Return the **minimum** possible value of the **maximum** integer of `nums` after performing **any** number of operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,7,1,6] +Output: 5 +Explanation: +One set of optimal operations is as follows: +1. Choose i = 1, and nums becomes [4,6,1,6]. +2. Choose i = 3, and nums becomes [4,6,2,5]. +3. Choose i = 1, and nums becomes [5,5,2,5]. +The maximum integer of nums is 5. It can be shown that the maximum number cannot be less than 5. +Therefore, we return 5. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimize Maximum of Array -```go ``` - +Input: nums = [10,1] +Output: 10 +Explanation: +It is optimal to leave nums as is, and since 10 is the maximum value, we return 10. +``` ## 结语 diff --git a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go index d115ccf5e..4df757f7a 100644 --- a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go +++ b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + left, right := nums[0], 1000000000 + for left < right { + mid := left + (right-left)/2 + buf := int64(0) + i := 0 + for ; i < len(nums); i++ { + buf += int64(mid - nums[i]) + if buf < 0 { + break + } + } + if i == len(nums) { + right = mid + } else { + left = mid + 1 + } + } + return right } diff --git a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go b/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go index 14ff50eb4..b386af79c 100644 --- a/leetcode/2401-2500/2439.Minimize-Maximum-of-Array/Solution_test.go +++ b/leetcode/2401-2500/2439.Minimize-Maximum-of-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{3, 7, 1, 6}, 5}, + {"TestCase2", []int{10, 1}, 10}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3db72cd23e668e4e88a5fa2431763141a97bf34d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 6 Apr 2023 21:43:30 +0800 Subject: [PATCH 0248/1057] Add solution and test-cases for problem 1254 --- .../1254.Number-of-Closed-Islands/README.md | 40 +++++++++----- .../1254.Number-of-Closed-Islands/Solution.go | 50 +++++++++++++++++- .../Solution_test.go | 23 +++++--- .../sample_3_1610.png | Bin 0 -> 5399 bytes .../sample_4_1610.png | Bin 0 -> 2403 bytes 5 files changed, 91 insertions(+), 22 deletions(-) create mode 100644 leetcode/1201-1300/1254.Number-of-Closed-Islands/sample_3_1610.png create mode 100644 leetcode/1201-1300/1254.Number-of-Closed-Islands/sample_4_1610.png diff --git a/leetcode/1201-1300/1254.Number-of-Closed-Islands/README.md b/leetcode/1201-1300/1254.Number-of-Closed-Islands/README.md index 69c1e7d2a..eb81abb69 100644 --- a/leetcode/1201-1300/1254.Number-of-Closed-Islands/README.md +++ b/leetcode/1201-1300/1254.Number-of-Closed-Islands/README.md @@ -1,28 +1,42 @@ # [1254.Number of Closed Islands][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a 2D `grid` consists of `0s` (land) and `1s` (water). An island is a maximal 4-directionally connected group of 0s and a closed island is an island **totally** (all left, top, right, bottom) surrounded by `1s`. + +Return the number of closed islands. -**Example 1:** +**Example 1:** + +![example1](./sample_3_1610.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]] +Output: 2 +Explanation: +Islands in gray are closed because they are completely surrounded by water (group of 1s). ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./sample_4_1610.png) -### 思路1 -> ... -Number of Closed Islands -```go +``` +Input: grid = [[0,0,1,0,0],[0,1,0,1,0],[0,1,1,1,0]] +Output: 1 ``` +**Example 3:** + +``` +Input: grid = [[1,1,1,1,1,1,1], + [1,0,0,0,0,0,1], + [1,0,1,1,1,0,1], + [1,0,1,0,1,0,1], + [1,0,1,1,1,0,1], + [1,0,0,0,0,0,1], + [1,1,1,1,1,1,1]] +Output: 2 +``` ## 结语 diff --git a/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution.go b/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution.go index d115ccf5e..b021dbac4 100644 --- a/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution.go +++ b/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution.go @@ -1,5 +1,51 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + ans := 0 + rows, cols := len(grid), len(grid[0]) + var ( + find func(int, int) + dir = [][]int{ + {1, 0}, {0, 1}, {-1, 0}, {0, -1}, + } + ) + find = func(x, y int) { + if x < 0 || x >= rows || y < 0 || y >= cols { + return + } + if grid[x][y] == 1 { + return + } + grid[x][y] = 1 + for _, d := range dir { + nx, ny := d[0]+x, d[1]+y + find(nx, ny) + } + } + + for y := 0; y < cols; y++ { + if grid[0][y] == 0 { + find(0, y) + } + if grid[rows-1][y] == 0 { + find(rows-1, y) + } + } + for x := 1; x < rows-1; x++ { + if grid[x][0] == 0 { + find(x, 0) + } + if grid[x][cols-1] == 0 { + find(x, cols-1) + } + } + for x := 1; x < rows-1; x++ { + for y := 1; y < cols-1; y++ { + if grid[x][y] == 0 { + ans++ + find(x, y) + } + } + } + return ans } diff --git a/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution_test.go b/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution_test.go index 14ff50eb4..95641ba21 100644 --- a/leetcode/1201-1300/1254.Number-of-Closed-Islands/Solution_test.go +++ b/leetcode/1201-1300/1254.Number-of-Closed-Islands/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, 1, 1, 1, 1, 1, 1, 0}, + {1, 0, 0, 0, 0, 1, 1, 0}, + {1, 0, 1, 0, 1, 1, 1, 0}, + {1, 0, 0, 0, 0, 1, 0, 1}, + {1, 1, 1, 1, 1, 1, 1, 0}, + }, 2}, + {"TestCase2", [][]int{ + {0, 0, 1, 0, 0}, + {0, 1, 0, 1, 0}, + {0, 1, 1, 1, 0}, + }, 1}, } // 开始测试 @@ -30,10 +39,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1201-1300/1254.Number-of-Closed-Islands/sample_3_1610.png b/leetcode/1201-1300/1254.Number-of-Closed-Islands/sample_3_1610.png new file mode 100644 index 0000000000000000000000000000000000000000..1851e1e06c21ccf95e2435c0f59c85547acc3056 GIT binary patch literal 5399 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 TAO{>~N}M?2e7MTtKd=821O_7i literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1254.Number-of-Closed-Islands/sample_4_1610.png b/leetcode/1201-1300/1254.Number-of-Closed-Islands/sample_4_1610.png new file mode 100644 index 0000000000000000000000000000000000000000..2ab8d1cdd17ff52e3479dfd2c3659f6f33649ba7 GIT binary patch literal 2403 zcmchZX;4$=8pjh)IdJu0S{x;S1_~o+F$T0mMK%!x1VaSEB1DLn9aL7?f(bXbAY~93 z%8tMkDa9Zliy$c^fY>4gP;QK}BvA@s6_F*f=AMM!_I|i?KXrO$&Uwyr=6TLL^S;0T z|9w-51RLeu>bnsLgtDEjl@kJiM8fYSO1t1^ThEa@a6m>n*;pcK`VUUS$!7uQE}cUl z9%by=q$t4o-@UAPVTi1KL14yN5R=hd%xdh-p3N{TXoE@edyA4Q%71nj%>YL-#Vn6=c9N9ipSyfe)nwr|EG_*W7 znxj$ra688IUr;foprF9c6LR+U_TG-s!gfZ@4;w-GopcOXO|j5~rYIbBaM{2|8CdtR zKmo4|%2JRa=s`sw9$lA=G=b58Y@kRX-*naLT-A&S=wMQB&C(sSH~SY+OV^S z#MjE&zw@(SY5XOGntAM|$HHknAfz|@P3QCVnPBW)q@*FjP}I&`Rf}C&o?K0!Cnt4R zdRLHAO`vMtgAw*QJfY4hp}_TUM7ySvFGpH!0)1N84WMJmXb$}VxV&0~e6M&>Spo=2 ziesn`EMirvFK4UT3u;+-kPd#5CY{*VL*MXtf({dsJeBX;vja!k&Q%pd_Zj-btK52* zgkk!U#~HOS0jWs2WzwHx6aWy$;Q&w8U$A`gA&h%CJf@piEWWA0r1?y_NJZRkVM<|x z_}MdE{~Fr5n0RtCJF7w5-y9mvuVig-CGiPM_WCY5Iywvn1Liaja&UBHYt&{}g3oA| z@8y@Ei~z7S~+|6WX$w)t|#r2cb!@LGE*p6ckXqKNn967eQw-1-gb|&zPey3qj=p% zjyDYTtPe~(OfyCX?ICE2A;VmjRx^-^GXCRbX|zEZN+t}HjQ_pha)%sznJ_wF9mo{{ zE5=y%Yq?Zlf&4KD-yf(M$XdY@y+6dN)DoB#8SAM(JMdDwcCk|QK6mAAU5FULES z6Eq67Ozwo_zhd3waFh~G7~t`*`23io?qg#&F$rR;6+ZtwS2T^faA9C;v44!XRGwYA zo-)t~6D}6L)fpQbo1TY;rlzI_2Z`Ym;=@2!SC`E=559(mB9FNzn!lHZ&6F=ruMwAC zy%=9ht-vNvr=Pl=$!2u3)E-dXU{$EDvxs-2sZMhZpW?}4*cDCGs%K_K{x??70jE|v-!Ju_1HyQjpo4`KBE!#{0)8RG#t3}kUwu9{J%@o z)_?ND5%+JB8kL+WqHUq8 Date: Fri, 7 Apr 2023 20:56:29 +0800 Subject: [PATCH 0249/1057] Add solution and test-cases for problem 1020 --- .../1020.Number-of-Enclaves/README.md | 31 ++++++------ .../1020.Number-of-Enclaves/Solution.go | 47 +++++++++++++++++- .../1020.Number-of-Enclaves/Solution_test.go | 23 ++++++--- .../1020.Number-of-Enclaves/enclaves1.jpg | Bin 0 -> 14809 bytes .../1020.Number-of-Enclaves/enclaves2.jpg | Bin 0 -> 14866 bytes 5 files changed, 78 insertions(+), 23 deletions(-) create mode 100644 leetcode/1001-1100/1020.Number-of-Enclaves/enclaves1.jpg create mode 100644 leetcode/1001-1100/1020.Number-of-Enclaves/enclaves2.jpg diff --git a/leetcode/1001-1100/1020.Number-of-Enclaves/README.md b/leetcode/1001-1100/1020.Number-of-Enclaves/README.md index 8d3670958..9f8a62ded 100644 --- a/leetcode/1001-1100/1020.Number-of-Enclaves/README.md +++ b/leetcode/1001-1100/1020.Number-of-Enclaves/README.md @@ -1,28 +1,31 @@ # [1020.Number of Enclaves][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `m x n` binary matrix `grid`, where `0` represents a sea cell and `1` represents a land cell. + +A **move** consists of walking from one land cell to another adjacent (**4-directionally**) land cell or walking off the boundary of the `grid`. + +Return the number of land cells in `grid` for which we cannot walk off the boundary of the grid in any number of **moves**. -**Example 1:** +**Example 1:** + +![example1](./enclaves1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]] +Output: 3 +Explanation: There are three 1s that are enclosed by 0s, and one 1 that is not enclosed because its on the boundary. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./enclaves2.jpg) -### 思路1 -> ... -Number of Enclaves -```go ``` - +Input: grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]] +Output: 0 +Explanation: All 1s are either on the boundary or can reach the boundary. +``` ## 结语 diff --git a/leetcode/1001-1100/1020.Number-of-Enclaves/Solution.go b/leetcode/1001-1100/1020.Number-of-Enclaves/Solution.go index d115ccf5e..f1ba14f9d 100644 --- a/leetcode/1001-1100/1020.Number-of-Enclaves/Solution.go +++ b/leetcode/1001-1100/1020.Number-of-Enclaves/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + ans := 0 + rows, cols := len(grid), len(grid[0]) + var ( + find func(int, int) + dirs = [][]int{ + {1, 0}, {-1, 0}, {0, 1}, {0, -1}, + } + ) + find = func(x, y int) { + if x < 0 || x >= rows || y < 0 || y >= cols { + return + } + if grid[x][y] == 0 { + return + } + grid[x][y] = 0 + for _, dir := range dirs { + find(dir[0]+x, dir[1]+y) + } + } + for col := 0; col < cols; col++ { + if grid[0][col] == 1 { + find(0, col) + } + if grid[rows-1][col] == 1 { + find(rows-1, col) + } + } + for row := 1; row < rows-1; row++ { + if grid[row][0] == 1 { + find(row, 0) + } + if grid[row][cols-1] == 1 { + find(row, cols-1) + } + } + for row := 1; row < rows-1; row++ { + for col := 1; col < cols-1; col++ { + if grid[row][col] == 1 { + ans++ + } + } + } + return ans } diff --git a/leetcode/1001-1100/1020.Number-of-Enclaves/Solution_test.go b/leetcode/1001-1100/1020.Number-of-Enclaves/Solution_test.go index 14ff50eb4..ada856c4f 100644 --- a/leetcode/1001-1100/1020.Number-of-Enclaves/Solution_test.go +++ b/leetcode/1001-1100/1020.Number-of-Enclaves/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, 0, 0, 0}, + {1, 0, 1, 0}, + {0, 1, 1, 0}, + {0, 0, 0, 0}, + }, 3}, + {"TestCase2", [][]int{ + {0, 1, 1, 0}, + {0, 0, 1, 0}, + {0, 0, 1, 0}, + {0, 0, 0, 0}, + }, 0}, } // 开始测试 @@ -30,10 +39,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1020.Number-of-Enclaves/enclaves1.jpg b/leetcode/1001-1100/1020.Number-of-Enclaves/enclaves1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..78ee13c60721b385706be531959cfa8c567dd739 GIT binary patch literal 14809 zcmeHt2Q=L4*7qM#6TKt|f*Cc48X<@h%!oF+L88p)l8F{Xkm%j$MDM-#lA;A8N_0X( zh#*7|B@*w*IVW+?d(V6F-Fx2q-S4jNv6eOK|J1$rv&-+<`*8g56+i)1geU?yH~@fy z{R0lC0C@lp_oyBH$HTT01SgIf5di@{0WlE?2{92dG07?NQzR$JP7)K7Qj(I9Q&3P+ zkes5TrlO$6{-!uu1m|cb-U%Y?M2eHdC$V4u58L5mfRYGD6-N~hhYi4`#KEJ)Icx`* zut)u^0lzdNVnPDk6F7MI*zT(o0C3_2F7~9PC-AW2up@AA@lN0qP!bXmQ_-`!#8HcD z>s7JI!cbAwG=f6HqGA^{U1JA_Ua*6-Drs*IJDXNumtn*KaDSct>n2#9oWRE+AjEcZ zQv$fSzzO`L4Swy#?m;cAi8?_kCA>!!AULM+wLP2NN>gU#ZNW zQ^^>Qp`0~UNz#+9&_7mB3$U8B-UPXwKq^=$*^ly4I<#OuyY$&Lxb&2Zah zPw{wM*x4d7#`D7Jd1ZG&bs~@5Xm7k->0atNF!3ZC*)kIOnJI#RO>s^I*_ zl}(FxyeCTH`6rAwFJCEqe1>*6{U7hkb+D)dkMo7r3oV%HGO4w@bG{JA<96EKbs3%# zV9-FKh55`>qrEPH%32pa=aIEWO$b-a2HswlR?&k4J&BDD{nI+4^&Eq|=aZr#=-lt* z{WcP}2*8jWXr47#h9-+vE==*ZS_YCPP27GTJ1g8yQjFtsJ^0i=-iKUNxov!Zy!QdW zF0JYCs#2z>u(wdW`t<;N)yj<=0&8}mQP9N2O*HiLn&r%QhRP&~O4Q4AIF_B&@p0CI z-?yj2vR>qmSx@u-D znf74GNDq4mr^yGNiV{U57h(JL8vx!_Z)y{pswuw-c!+=QB5Y|gt}w(RlbXv1#TR`l zWn1@iVS^a7VmydPbMh10%%w#Wr)*OPVO{X(A5J3Ay~Z!OEIJvvCK7$h4Vb&UK(D0bqLTt zZ$|0jYsE7KP0c(82qFQF<`K)fla+O+NmVg9gEf3QblnOZnz(at4tmMuk{zAfcCqFa zRN7fJt5=&HG0pFkpH3r-&sj-yhKFS!Uswh+o2*p43%l<&FUeXXl|Pvb3vbs`EZMQ8 zoLqL*%~`rRZB}USj{d}V3m~P#9trCH{mS0g8Y~!j@|8E`&Rj7`9={}YU5htBdJa%^ zE9`eTjd0*+NKRDAvN0^=LkC{V#BZ;?CgeH-Un_hw!P8|1Dp0Z=54rO;(QPQouf9+J z%7Aki6Qf*TZa>ZCmND}ej3+ibUF2;%G;73im;y_~;A^AoHN$HqDg(3i9om!I;8nv{ z0K<9giDI^FoNsvrzcmprI+6Fo8qlg4xp3a}004$7K+>j8>NJ1Pw2|mVp?JmN8f`e3 zB2nRFkX?esdSTs5o$gAV@OB6+e5`_QqhDw==g_0ZpMT>f zoyCkvFd`v@S7yyZD}M1T8wyd8iS>YYm#;r{sU6DPJ4wFsj+^ z6tw$w3xsj%6LM769@IyHFKT{>=ZLCM2)oIvc|M23<#TB!{Y$H8_jq?>nreQdGlkQo z<>8^lX}2D_II`UjLs?`>AxdJB!WZh-kmeKNH{&Mowra1JFQ*1U(X05v{0NJzhNx(w zX^)UQ?{E)1^n@NZwq5~Fgj1!4sg;s%7_D^C-Z&;n+=AZl_V-6hr%Zn_KGUbmp40iN ztlrbQ3rJ0-iy?kUP|ZNJucmy3Md8AmJs!4A`s?$|W7lX;^Tad-BouJ_DV%-(EFs8o z&@MZ&j%pINqL{_EXeDLKk~H68k;&v#iiS=?#J~EglnraV&w7oEZKuf&?-^F%hNQHv-;^my?WP124 zJDWv=Vm0XJYpWf z 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 aCIh@fL2aepj%M9DeW{@ma$Dwb;=cgN_08J= literal 0 HcmV?d00001 diff --git a/leetcode/1001-1100/1020.Number-of-Enclaves/enclaves2.jpg b/leetcode/1001-1100/1020.Number-of-Enclaves/enclaves2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d614aa4dcecf9317b889ccbcfd3819ee26fdeadb GIT binary patch literal 14866 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 vkgbIWeHxg!HRT?dhKI8RZX-aqq*qpT Date: Sat, 8 Apr 2023 21:30:03 +0800 Subject: [PATCH 0250/1057] Add solution and test-cases for problem 230 --- .../README.md | 26 +++++++------- .../Solution.go | 29 +++++++++++++-- .../Solution_test.go | 34 +++++++++++++----- .../kthtree1.jpg | Bin 0 -> 8694 bytes .../kthtree2.jpg | Bin 0 -> 11740 bytes 5 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/kthtree1.jpg create mode 100644 leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/kthtree2.jpg diff --git a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/README.md b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/README.md index a1291f8a6..bcc3a7b73 100644 --- a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/README.md +++ b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/README.md @@ -1,28 +1,26 @@ # [230.Kth Smallest Element in a BST][title] -> [!WARNING|style:flat] -> 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, and an integer `k`, return the kth smallest value (**1-indexed**) of all the values of the nodes in the tree. + + +**Example 1:** -**Example 1:** +![example1](./kthtree1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [3,1,4,null,2], k = 1 +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./kthtree2.jpg) -### 思路1 -> ... -Kth Smallest Element in a BST -```go ``` - +Input: root = [5,3,6,2,4,null,null,1], k = 3 +Output: 3 +``` ## 结语 diff --git a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution.go b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution.go index d115ccf5e..24c2cbc6c 100644 --- a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution.go +++ b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, k int) int { + var inOrder func(*TreeNode) + which := 1 + ans := -1 + inOrder = func(root *TreeNode) { + if root == nil || ans != -1 { + return + } + if root.Left != nil { + inOrder(root.Left) + } + if which == k && ans == -1 { + ans = root.Val + return + } + which++ + if root.Right != nil { + inOrder(root.Right) + } + } + inOrder(root) + return ans } diff --git a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution_test.go b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution_test.go index 14ff50eb4..e2a6d25a6 100644 --- a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution_test.go +++ b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/Solution_test.go @@ -10,18 +10,36 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 2}, + }, + Right: &TreeNode{Val: 4}, + }, 1, 1}, + {"TestCase2", &TreeNode{ + Val: 5, + Right: &TreeNode{Val: 6}, + Left: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 4}, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + }, + }, + }, 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.k) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +48,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/kthtree1.jpg b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/kthtree1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4eb2f16b5171a7e51c57735ca5d8bae218be3da1 GIT binary patch literal 8694 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 BPMZJ# literal 0 HcmV?d00001 diff --git a/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/kthtree2.jpg b/leetcode/201-300/0230.Kth-Smallest-Element-in-a-BST/kthtree2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d36c3f8a467951a4307bd482dae974ca4f9fac69 GIT binary patch literal 11740 zcmeI2cTiNzzV8RgB00m5Bnb#e&LEOO7;+erf*>#qL(U)$5(G&@(m_yi4w4zNAWB0&L5|zs%uS8b@!Upzh3?Q^tZ1kt``6#>dI=$01ONO z0ORHZxSj?m05EU;O22ZbH>Lk#x^4lG;$iS%1Y%;`1>7RVz$C@E zZU->@y472l7{6}#w}gjU6+^CG~%@E!U}rUt`#1h@ba4`D1O)UZ$11fCH;Gc|5Z8# zxO3CPEmBNUfE?ghlaz#%6yu*|)H+V&?qGxJX%SvSm~(z{lX)6T`Lf~L#Nmz*6S~b0y;?d3V>cV?OE>y3+Y@x&2&xhsf&b%ndHs{?6p^b9R zwo}z}gT;@s8Qk;F;u6Tc6Fcu?6G9S7PaVx1~h!|NVwWelWoG(= zY`}VnqcC!ZQOEQ?Ueb4m->h(whE~z&^Bl;M-SV7*yt6Zd7HeE@%T}hlwUP6V=Lio@ z;S-POw4oQ-)ryzroZC4-Ap>WaCh4VsSa zE-6{i*U-C*UYg06Yxg0H#7gYX&QVmt9V&szZS-MGQe3JQeQNZv_GwvLP(>)^IXdqd zH8Skwd@w5=nz(0}q2=6z(&8hpip1Cs#|VBt*D;U2zvTr=bg-$z(-=4+yW@Gf-=o9vz(?+ zbMxw5bMK}Qj@G|8i+rt@?83nN+%m*DJ3PP)you?D(}^k0a5<^|Xm&K}iV%|x&l=!k8{Rxw+^{c7=FWAVxaaC1dNf?OUSZ50*(0&L z-p$iUV}J}whkDHsRqZgjdZ`y%f8qDx2%EE`*(THs9l=0ER56K1t82Y<0QnZFlYq zscW>QgzWXm^3qlQhq$Bs0H&fTWrc6a5`Y;P1Jly7OtWS;rzIE-fbc6UV z%m6hETuZ0%J44^LVdu~kv)xMc8$(GU1NJEktfZb$uh1Ow?WL+8I8}}Fqt**yN$&=1 zre{%Vb{&;|?qxGB@1s{0yPba^&(*iM{mbVE6a}f}D!5e%kL6zXf@HK7r*Q~_ZRr=k z@*<~;t0n9CVoV&cZ3*CLvFy{Z82Gl^^Gu|Qce->mabMOud#LFU^uhRJL4RERgWL2w zNGry!9DB!vVT?8#xMA#>1ukp;D@J_WSXGw#yHWPS#J+wo``qcIim57o!W^uTC2$1O zUc#ps)%+4tXA5tc;IA%~07=k*sOGFw4JCw2gkbXW9kOg_j8EuAcKzpTK3jD7;e8KoYmOg&lXmZf-HDiP&kix zdaN43CQANUls9MlHf~Wf!otiuPbrPt@Umjjn`Orj z@2*ypnvWOzYI`k0O*dv+tfHCYCu_j8!AZ^cQG+KUdUBU24Zpd)x~Fn|mrttVtiUDJ zy*uTIW1CvN@#*bF8%*9#J*)+t?Xs?2aH5<~F65|n(HQvC-Eg6&T4=DY&3 zD~yW5NfJ8G&pdD_N2 z=@^zK*S-%N|J1i4kwqfU5YFXM zWy)XOQ_s6K53+=nh8&IQR|(+XP2+@*3+#BY^fAZEf0NhA{r@(kd>J!*8m5z4P*z6j#R20}XNSdhJ#T*#MN5AdMSQSQ z>|z-?63By*%ZFZfN1Pj;p;J*$#~z-E_67(!y#o$@0MR|)?_!v6wiak?h+XsCJ4v4G z&XoY%Xd;MH<#Wo`kCGV&H=5{*23WlgPpD!|XT%iqfzz;o)aSfvwN7tt7Fkb?fy5%fF+!4{4GB_P_{#yB z44O;o=jGU@+7OP!uQ4kJI#d&^X@qOgH><3=AMI|t_}~BLKqncKzP;DwRxjBx1T}3F z8F?&lrPt!{1`XM{hvbk+FV|BYHoZ?K>`5H8;|9cKO*+KKBBL(^qlE>c2q7u}j24W* zjNh#{_ce+OCIhMsCSisbzLx?1{5b{L`Qd652hvn^F_1bUdn`Dy)$LwIQqcb#hEC^b z^O23Y@I~}Y{oSrFW9I}k-#o{j-KuW7Sbw<~A^!FSiBx`5paQP;>TD}~7 zJcybzSm;B$@RzpS3h%gAvGR-0#U{7IX2TjBa27>I_={iou$T7PL_c`J<|2|FbwLEW zU8G1Be}XChgz-4rFLnIBWL4_&ot{}!WzbcR4^lCBXOx=3GzAvy*fPE)6FprzL3wX2 z=O9YEdKNMCdC)f-@rnuOBLFvvb!^LQfzm%*IDiq|C_MgN^n>K^w+!TW$Alww+Lbhf zlZ3layZ?}?EY$gew2L`)QS~xna3)t(u%~fu$M|6<04twnSPsVi>C1c3h}c1WtcBgKd*^4N&K{pYf9wa|NGeG1ap&0y~N0k=oF% zKU2_mQQoF?Om>7@2hPrgZPlBw(0RwO!UEcIN%V1_9Fv%0$J?&G;WKOJ<#n@sp~>!h zUBc_SB7zyB5#N^e$_c(G1f5GNixe>>knH02<`wi|IM*q|LKZ283~k>9B(;L1PU+=0uwct~N-_zbB`-IzT!j^siCjbAU53PFy|BHiMkQ;M^CTD{ zy(XN*>NqRG@0@M)t0%m7Cwdv72-os*Xj5XG zb6}$kh;_qE+r;jV&y@}A0Qyea>=$Lwa@oODWBQC#r^QDA6mLe0-V9$4qj>^T1(J2s z;jt!~bAcwehCJJjt+lzOkLv;pS3C~80u&t+<5ZY_^4^gqPG&ag;L|vuY zpv_z-I&o0dJC>9{jLtz?b~n?3Q?ucN?{28Nk3MPVLT9I5A}2d9?fWo!#eWJx{C5I8 zo;un-8Ue-~F`BbRzIlV29gG0r$+&;A{AQw5kaihmk;jLgsy-e;Ymb(DbHK(B50YvF zT1~cCPpqbemE&pq`Ft@7sSD@$-BHz9R>=`eUiqDjz9?h0BoK*2D(?XX%N&#RAs*Gz zt*9f1Mf)lAmWR|Mz8bt@Zw?#9KD953{k-r{ds~Xr+lGt_m;#Wg))t6LZlFPIL)Xc; z?$~6}g+Zzbggv7)B4^t^$pE1U6-e z;=ZI0;1*|>#Cq~NV;kYY6(-gM62{kjQ;I#jqqMl9Y>&St^+EF9w66=x>Tz!Y#j~qviys`f+6`^b^we<4^pS{p2qS%6%5H;pzqX znV~es&k$-rItfR zi=OeKVk{OlUP6v3MMb>xrA6talcKV;yIJcN@YA=#Jwo{@vW#Io4`aKAH@QidYmPZ5j`&cFzlAMvKO{xv%+GP{Mo+!i; zE$?CCsQ$Tmb72N8!H3C2ES!rEa=g;V;vP;ke_aS?SHYAj+sq$y?=$GN--A`#hx^@q zmwh7#a0!#}!3vAsz~~$jZ#G7G<}lF+wJ@j4zUj=z^sZ=#Mb_eI3(_B?gL!qBB(O;- z<8MZtcJ*JBwZpe1W*HHx>wwcz!D)aKZPQUYT4QH<%191UIpSkuE~4)L^T^e6TCItH z_vlP``ssKNtsk*}uPfNpUB~VFg9ed9;tKPgpG1SFl(mxKTVjzV6ob~-ODYTEfTZYo zDL;~)f|>*2;$z6WwWC#p@TvT$RQ>F%XxWH?y>f!l+{a;6KKJTW&CzMi#$){i;rIrT zqtQLP#Xi=GRUjM>a6?$W_}OQ3xZ#^PH(})aCrcl*6%$JwWK3Ktnbo8}F6{>%sYNRjIQe z-H|c+&a60@ELkpG&akpDB2eIl=!z~cN6_vb?8D3IE63_}<2Q2qXQ5fuYPMN1@n`Pi zG%rYk@a{Yd5=hS+NA)|cpF(3|-1|kz<9el}=-#;9|5z)}zXtIpdLpOds%;Rt{y$7l z!@%X5l*Aaf7EvJ+2fxd}*j~5WlE%!JD7@ChWBpOYQvj!Q?%Grf`X6cdZiac4MK zlTh@#0RKb-t-CqdshzP0t#&M3;+mk*AIW}`yiT*8+wRB@k2hB-F2eHMm-jh?Pj@`W zFErVLd(P>56+nHt0~U*C(Go#R=pr7H%2vnnNiNom^sJBu!F$GYbh7I;Y-uY95L-gK z^AA&u&U-F*c$m`5O`vgj_V?`49kttA4+)tB{o=RO*bpF|xBqBGdZ=iILW`}JP|QxiKl*Ol#w*UEf5tlpss{nIz12&drr zHNZ;^<~MtKpYyyKYBTj0HXC%e9jYy%iJqooO=(T@mIRvx`3_cOO41j51*AN4 z@B};)goZs2)cm1*SzWjTThA+Kamaab>YjAkIPd!TMaoGluhj3=;V~RwR)wr5H7qY7`oD z5!wHgHB9bCmtz;-zzmatMFu{>)qC-35zP6_%P92B?V^3tU0T!CY!}8fHaSK z08i6qnG$lB0p63@w#{R%t%5p}d#2FtyeF6qp^42Q;t&-X-fh1a8Iav>(Wv~$neC3} zH6YdQ*t2f3ifo>d$1eCweYgJJ?TkrIhK0OW=ac-hhGm#&)eU|kdl}B)CzGLPZUnZ~ z+tBEe-b^(3r3rkYDrz%ead`nXGr6%AH+K)j8vNa!!~BI`Jzu4odyG3u=9OuQ38Rn+ z_IHl9)i*z5dbu`J(MxA06Qh+LObSb0D-tsvhEu$S-nJtb@%H^emu=wATvK@xz*(e4*YkNG{yI5~fEISmX^{OfF#h zgiRb1qx#uWZP662n$G35+Egixdxw`0V*Q4WxxON6-?VPPmdpBBXV?%}v%om8%6=?T z|AACcQThC)lBQJ5^Nw8&ON!vrXVz_R7Z2Uk3G4pM9mImzWjU?Ne5@&)ZI5UWa}wQv zp49rH(o@(6S8sQ4MW%Oos%$VPPKz_gU+V;XH=oGJuFUdnJ>*qjUX42 zwe7Cu#opGo|6}Hq0qYRNGq{3Hx52>bIo~LwG@U3xG2xUweGOC!EnM=S~0bw zoT13A%mLHnttJ)A`(dNX-6j++*MOzLww7~O1LL6PcWlodyO%c>S!1}pUv2^TB8-kQ zuZ|o#EMwJ_DxoALclw2pTm>+XuQ#<^jKSmHBMmk6=FHepyTrhQnOBq?tf@~WUqTVz zU#^KtBj)ey<{%1&oI}g09?wZ;^1tr4bG~_D_y9{>9?5phA7z_g1EwG^jz5>IVBg&! z=>jnYKHUxG(r?cHLVUL!nx8w>HScwO zIFpV8JGt?$0V&w#fK5nKdWpUBWdfzupSeHy1e0wG*2dMPc9*MbrMJd-c5u~z)Vhs3 z?t%wLK4dOel)jnwt7~`M0^Q%Owj<4DXJiOP5UcvT^w>n2%5z8~=@SUnCm$7=nR9lp z%-a>()bS}-b87-gkT=s#-F)W;rRoAbF}VDJ{1k#_rHQ;4{aN-&#uHt1-jEobl`zKm z76P=eJcpy6hp8i4D!?{&XGE*qOnoxcbSYo>RFcm4t{daeXoZZt#9>u43AYb37YOyD zArguZR1BuzoEG}1AO8ha=(bO9p*ZkNM_0FMpZtb(<33(JDskXu&iaS2TgR?qs)@{W zk%}GdTOOdurOJI}fAXP8`P_l`=*!e?~wvz(L{N6OC7i&`kkXw<*risR7s>tSp9pBE+%Y!5E zxeIclX`VhssIfUij0Yw7*iHaMD~W77k4%m)Evk6D6G^3);{|G|0O$0VrkZToV+M|U z`b^hZd{u?@p^hP3X_vU`;m{*&Z&)S56(qr|uI5I|}?L!34 zc1DShkZQPz{XjVJm256OIacc@sBoL(84h;M&DLcx2=NCtc0%1iq`2 zv+UQyE9KJW(7F%xys({hRZEvm6CPMh*!?Ch@OExa)lJH)FMcvV#|P6yCm%IkY%=C; zN1WHNMkeldWDRZs&wpGwI5yZ~j%}W7i?r63xsa=!g|-w7U^gu$Hi3;uHZRGssYYRF}Q!nO=&e3Q2DwnD zao9OJ#t4#{qQiTzR2?pD+K{NVU%-oSnY$ehN=1BMg#cupMZ@>k;)lKe`cCBdX?^*& zVzTO~M&^VPYBg?IB-T>UQPy~1<41YgyICjxkklv*6`dnl&On9KP6KGhR81%(=dJZc zZqOKQ(fE{(@MAxPXE||M)y8ag-HliQRq-m~|b8RPv;~>tn5JfKwwF@@`3Ye7YbrKPUD5!Du%tdkGLOfpx*B zrj<6pbYzp={6pdzFnc#+kOK12J!(4e=$P6`e?{*pDj9YSAa&t(-DS-#+TJgr_~mYy zGsB)tEIh|-_Ty4DMa9*YYBm(Xyhm=o>DiSPhisZq<8F`i-t4qfP;UL1I{j}8 z#oxdF@5@%Dy_73vhxKcKVbL|<+eIU?|oj2d3(oq2q@%y zVd^{Fu#|%2$uieJ)~Tf3;GUeL%LDCpb$VThQwtxCi_=~{6cb9^)G`27L6-~_?E3D3 znL7kGXNRD@c~c5jezsnTRnqQZBJI>tpBC4{j5XB9W@$!vJ=+Q%$QZWUm7curiu=@0 zV3V8Rt8u58;9|DCKtWrQ6P^3Im@3lxTGWP*1b1}c}nU=}b%IouagGf~i*14JXM z-+OfV?PE5G3Ii}ffxf<9cACmMX>-0-Us__DDVD2D^M6B%)%wOxvOKlBbbV1ktZmev zk#SpL@d zJ*0r|7Ix%qzOGqS+~(v;C)K~}F@= Date: Mon, 10 Apr 2023 22:03:44 +0800 Subject: [PATCH 0251/1057] Add solution and test-cases for problem 1110 --- .../README.md | 29 +++++---- .../Solution.go | 59 +++++++++++++++++- .../Solution_test.go | 43 ++++++++++--- .../screen-shot-2019-07-01-at-53836-pm.png | Bin 0 -> 26975 bytes 4 files changed, 105 insertions(+), 26 deletions(-) create mode 100644 leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/screen-shot-2019-07-01-at-53836-pm.png diff --git a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/README.md b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/README.md index cc414d928..1549e4368 100644 --- a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/README.md +++ b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/README.md @@ -1,28 +1,27 @@ # [1110.Delete Nodes And Return Forest][title] -> [!WARNING|style:flat] -> 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, each node in the tree has a distinct value. -**Example 1:** +After deleting all nodes with a value in `to_delete`, we are left with a forest (a disjoint union of trees). -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return the roots of the trees in the remaining forest. You may return the result in any order. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./screen-shot-2019-07-01-at-53836-pm.png) -### 思路1 -> ... -Delete Nodes And Return Forest -```go +``` +Input: root = [1,2,3,4,5,6,7], to_delete = [3,5] +Output: [[1,2,null,4],[6],[7]] ``` +**Example 2:** + +``` +Input: root = [1,2,4,null,3], to_delete = [3] +Output: [[1,2,4]] +``` ## 结语 diff --git a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution.go b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution.go index d115ccf5e..4195e9f88 100644 --- a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution.go +++ b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func buildTree1110(root *TreeNode, deleteValues map[int]struct{}) (*TreeNode, []*TreeNode) { + if root == nil { + return nil, nil + } + ans := []*TreeNode{} + if _, ok := deleteValues[root.Val]; ok { + if root.Left != nil { + ans = append(ans, root.Left) + } + if root.Right != nil { + ans = append(ans, root.Right) + } + return nil, ans + } + + node := &TreeNode{Val: root.Val} + lNode, c1 := buildTree1110(root.Left, deleteValues) + rNode, c2 := buildTree1110(root.Right, deleteValues) + node.Left = lNode + node.Right = rNode + if len(c1) > 0 { + ans = append(ans, c1...) + } + if len(c2) > 0 { + ans = append(ans, c2...) + } + return node, ans +} + +func Solution(root *TreeNode, to_delete []int) []*TreeNode { + if len(to_delete) == 0 { + return []*TreeNode{root} + } + + deleteValues := make(map[int]struct{}) + for _, v := range to_delete { + deleteValues[v] = struct{}{} + } + ans := make([]*TreeNode, 0) + queue := []*TreeNode{root} + for len(queue) > 0 { + nextQ := make([]*TreeNode, 0) + for _, tree := range queue { + t, otherTree := buildTree1110(tree, deleteValues) + if t != nil { + ans = append(ans, t) + } + nextQ = append(nextQ, otherTree...) + } + queue = nextQ + } + return ans } diff --git a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution_test.go b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution_test.go index 14ff50eb4..5dde4310d 100644 --- a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution_test.go +++ b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/Solution_test.go @@ -9,19 +9,44 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs *TreeNode + toDelete []int + expect []*TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 5}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 7}, + }, + }, []int{3, 5}, []*TreeNode{{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + }, + }, {Val: 6}, {Val: 7}}}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 4}, + }, []int{3}, []*TreeNode{{Val: 1, Left: &TreeNode{Val: 2}, Right: &TreeNode{Val: 4}}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.toDelete) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +55,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/screen-shot-2019-07-01-at-53836-pm.png b/leetcode/1101-1200/1110.Delete-Nodes-And-Return-Forest/screen-shot-2019-07-01-at-53836-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..385bb25aa44060f42cfe66590027bf5b20148ee6 GIT binary patch literal 26975 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 Kk4qk!2mBv5a&4;s literal 0 HcmV?d00001 From 7b05d7169c90a0c7ccb8290de9fa15c15e20d3b5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 11 Apr 2023 20:16:48 +0800 Subject: [PATCH 0252/1057] Add solution and test-cases for problem 2390 --- .../README.md | 39 ++++++++++++------- .../Solution.go | 16 +++++++- .../Solution_test.go | 13 +++---- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md index b818423ce..dfedb2cd6 100755 --- a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md +++ b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/README.md @@ -1,26 +1,39 @@ # [2390.Removing Stars From a String][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a string `s`, which contains stars `*`. + +In one operation, you can: + +- Choose a star in `s`. +- Remove the closest **non-star** character to its **left**, as well as remove the star itself. + +Return the string after **all** stars have been removed. + +**Note:** + +- The input will be generated such that the operation is always possible. +- It can be shown that the resulting string will always be unique. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "leet**cod*e" +Output: "lecoe" +Explanation: Performing the removals from left to right: +- The closest character to the 1st star is 't' in "leet**cod*e". s becomes "lee*cod*e". +- The closest character to the 2nd star is 'e' in "lee*cod*e". s becomes "lecod*e". +- The closest character to the 3rd star is 'd' in "lecod*e". s becomes "lecoe". +There are no more stars, so we return "lecoe". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Removing Stars From a String -```go +``` +Input: s = "erase*****" +Output: "" +Explanation: The entire string is removed, so we return an empty string. ``` diff --git a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go index d115ccf5e..0971082e2 100644 --- a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go +++ b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + bs := []byte(s) + index := 0 + for i := 0; i < len(s); i++ { + if bs[i] == '*' { + if index != 0 { + index-- + } + continue + } + bs[index] = s[i] + index++ + } + return string(bs[:index]) } diff --git a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go b/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go index 14ff50eb4..bf849e502 100644 --- a/leetcode/2301-2400/2390.Removing-Stars-From-a-String/Solution_test.go +++ b/leetcode/2301-2400/2390.Removing-Stars-From-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", "leet**cod*e", "lecoe"}, + {"TestCase2", "erase*****", ""}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 68e7a7a4a3148751bd87ab9ed54fc2c183819f1b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 12 Apr 2023 23:45:53 +0800 Subject: [PATCH 0253/1057] Add solution and test-cases for problem 1072 --- .../README.md | 33 +++++++++------ .../Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 20 +++++---- 3 files changed, 73 insertions(+), 22 deletions(-) diff --git a/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/README.md b/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/README.md index 5af9f24c8..f829df623 100644 --- a/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/README.md +++ b/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/README.md @@ -1,28 +1,35 @@ # [1072.Flip Columns For Maximum Number of Equal Rows][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `m x n` binary matrix `matrix`. + +You can choose any number of columns in the matrix and flip every cell in that column (i.e., Change the value of the cell from `0` to `1` or vice versa). + +Return the maximum number of rows that have all values equal after some number of flips. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[0,1],[1,1]] +Output: 1 +Explanation: After flipping no values, 1 row has all values equal. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Flip Columns For Maximum Number of Equal Rows -```go ``` +Input: matrix = [[0,1],[1,0]] +Output: 2 +Explanation: After flipping values in the first column, both rows have equal values. +``` + +**Example 3:** +``` +Input: matrix = [[0,0,0],[0,0,1],[1,1,0]] +Output: 2 +Explanation: After flipping values in the first two columns, the last two rows have equal values. +``` ## 结语 diff --git a/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution.go b/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution.go index d115ccf5e..ad241c74b 100644 --- a/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution.go +++ b/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matrix [][]int) int { + rowSum := make([]int, len(matrix)) + ans := 0 + for row := 0; row < len(matrix); row++ { + for col := 0; col < len(matrix[row]); col++ { + rowSum[row] += matrix[row][col] + } + if rowSum[row] == len(matrix[row]) || rowSum[row] == 0 { + ans++ + } + } + + for row := 0; row < len(matrix); row++ { + for target := 0; target < 2; target++ { + n := 1 + for inRow := 0; inRow < len(matrix); inRow++ { + if inRow == row { + continue + } + sum := rowSum[inRow] + for col := 0; col < len(matrix[row]); col++ { + if matrix[row][col] == target { + continue + } + if matrix[inRow][col] == 1 { + sum -= 1 + } else { + sum += 1 + } + } + if sum == 0 || sum == len(matrix[inRow]) { + n++ + } + } + if n > ans { + ans = n + } + } + } + return ans } diff --git a/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution_test.go b/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution_test.go index 14ff50eb4..557baa4c5 100644 --- a/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution_test.go +++ b/leetcode/1001-1100/1072.Flip-Columns-For-Maximum-Number-of-Equal-Rows/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 1}, {1, 1}, + }, 1}, + {"TestCase2", [][]int{ + {0, 1}, {1, 0}, + }, 2}, + {"TestCase3", [][]int{ + {0, 0, 0}, {0, 0, 1}, {1, 1, 0}, + }, 2}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5da90e3c820fa81617177e78692e1f53699d7633 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 15 Apr 2023 13:20:21 +0800 Subject: [PATCH 0254/1057] Add solution and test-cases for problem 2218 --- .../README.md | 35 ++++++++++-------- .../Solution.go | 22 ++++++++++- .../Solution_test.go | 18 +++++---- .../e1.png | Bin 0 -> 20256 bytes 4 files changed, 50 insertions(+), 25 deletions(-) create mode 100644 leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/e1.png diff --git a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md index 88c66864e..b5a54d7e3 100755 --- a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md +++ b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/README.md @@ -1,28 +1,33 @@ # [2218.Maximum Value of K Coins From Piles][title] -> [!WARNING|style:flat] -> 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 **piles** of coins on a table. Each pile consists of a **positive number** of coins of assorted denominations. -**Example 1:** +In one move, you can choose any coin on **top** of any pile, remove it, and add it to your wallet. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Given a list `piles`, where `piles[i]` is a list of integers denoting the composition of the ith pile from **top to bottom**, and a positive integer `k`, +return the **maximum total value** of coins you can have in your wallet if you choose **exactly** `k` coins optimally. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./e1.png) -### 思路1 -> ... -Maximum Value of K Coins From Piles -```go +``` +Input: piles = [[1,100,3],[7,8,9]], k = 2 +Output: 101 +Explanation: +The above diagram shows the different ways we can choose k coins. +The maximum total we can obtain is 101. ``` +**Example 2:** + +``` +Input: piles = [[100],[100],[100],[100],[100],[100],[1,1,1,1,1,1,700]], k = 7 +Output: 706 +Explanation: +The maximum total can be obtained if we choose all coins from the last pile. +``` ## 结语 diff --git a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go index d115ccf5e..2d1abe5db 100644 --- a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go +++ b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(piles [][]int, k int) int { + l := len(piles) + dp := make([][]int, l+1) + for i := 0; i <= l; i++ { + dp[i] = make([]int, k+1) + } + for i := 1; i <= l; i++ { + for c := 0; c <= k; c++ { + sum := 0 + for cur := 0; cur <= c && cur <= len(piles[i-1]); cur++ { + if cur > 0 { + sum += piles[i-1][cur-1] + } + if r := dp[i-1][c-cur] + sum; r > dp[i][c] { + dp[i][c] = r + } + } + } + } + return dp[l][k] } diff --git a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go index 14ff50eb4..3fe3ec7ab 100644 --- a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go +++ b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/Solution_test.go @@ -10,18 +10,20 @@ 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, 100, 3}, {7, 8, 9}, + }, 2, 101}, + {"TestCase2", [][]int{{100}, {100}, {100}, {100}, {100}, {1, 1, 1, 1, 1, 1, 700}}, 7, 706}, } // 开始测试 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) @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/e1.png b/leetcode/2201-2300/2218.Maximum-Value-of-K-Coins-From-Piles/e1.png new file mode 100644 index 0000000000000000000000000000000000000000..daac12a8ddfb8492ac08c9f7332020c2067ecfa3 GIT binary patch literal 20256 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 literal 0 HcmV?d00001 From 080675a2f359d1c3da05e9e2420b62c9715dbb2e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 16 Apr 2023 13:54:33 +0800 Subject: [PATCH 0255/1057] Add solution and test-cases for problem 1639 --- .../README.md | 44 +++++++++++++------ .../Solution.go | 39 +++++++++++++++- .../Solution_test.go | 16 +++---- 3 files changed, 75 insertions(+), 24 deletions(-) diff --git a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md index 75f9ed4c5..769bd09ab 100755 --- a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md +++ b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/README.md @@ -1,28 +1,44 @@ # [1639.Number of Ways to Form a Target String Given a Dictionary][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a list of strings of the **same length** `words` and a string `target`. + +Your task is to form `target` using the given `words` under the following rules: + +- `target` should be formed from left to right. +- To form the ith character (**0-indexed**) of target, you can choose the kth character of the jth string in `words` if `target[i] = words[j][k]`. +- Once you use the kth character of the jth string of words, you **can no longer** use the xth character of any string in `words` where `x <= k`. In other words, all characters to the left of or at index `k` become unusuable for every string. +- Repeat the process until you form the string `target`. + +**Notice** that you can use **multiple characters** from the **same string** in `words` provided the conditions above are met. + +Return the number of ways to form `target` from `words`. Since the answer may be too large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["acca","bbbb","caca"], target = "aba" +Output: 6 +Explanation: There are 6 ways to form target. +"aba" -> index 0 ("acca"), index 1 ("bbbb"), index 3 ("caca") +"aba" -> index 0 ("acca"), index 2 ("bbbb"), index 3 ("caca") +"aba" -> index 0 ("acca"), index 1 ("bbbb"), index 3 ("acca") +"aba" -> index 0 ("acca"), index 2 ("bbbb"), index 3 ("acca") +"aba" -> index 1 ("caca"), index 2 ("bbbb"), index 3 ("acca") +"aba" -> index 1 ("caca"), index 2 ("bbbb"), index 3 ("caca") ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Ways to Form a Target String Given a Dictionary -```go ``` - +Input: words = ["abba","baab"], target = "bab" +Output: 4 +Explanation: There are 4 ways to form target. +"bab" -> index 0 ("baab"), index 1 ("baab"), index 2 ("abba") +"bab" -> index 0 ("baab"), index 1 ("baab"), index 3 ("baab") +"bab" -> index 0 ("baab"), index 2 ("baab"), index 3 ("baab") +"bab" -> index 1 ("abba"), index 2 ("baab"), index 3 ("baab") +``` ## 结语 diff --git a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go index d115ccf5e..944ecd462 100644 --- a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go +++ b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +const mod1639 = 1000000007 + +func Solution(words []string, target string) int { + lt := len(target) + lw := len(words[0]) + dp := make([][]int, lt+1) + for i := 0; i <= lt; i++ { + dp[i] = make([]int, lw+1) + } + wordsMap := make([]map[byte][]int, len(words)) + for i, word := range words { + wordsMap[i] = make(map[byte][]int) + for idx, b := range word { + if _, ok := wordsMap[i][byte(b)]; !ok { + wordsMap[i][byte(b)] = make([]int, 0) + } + wordsMap[i][byte(b)] = append(wordsMap[i][byte(b)], idx+1) + } + } + + for index := 1; index <= lt; index++ { + addOne := 0 + if index == 1 { + addOne = 1 + } + for _, word := range wordsMap { + if v, ok := word[target[index-1]]; ok { + for _, i := range v { + dp[index][i] = (dp[index][i] + dp[index-1][i-1] + addOne) % mod1639 + } + } + } + for i := 2; i <= lw; i++ { + dp[index][i] = (dp[index][i] + dp[index][i-1]) % mod1639 + } + } + return dp[lt][lw] } diff --git a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go index 14ff50eb4..085fdedec 100644 --- a/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go +++ b/leetcode/1601-1700/1639.Number-of-Ways-to-Form-a-Target-String-Given-a-Dictionary/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + target string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"acca", "bbbb", "caca"}, "aba", 6}, + {"TestCase2", []string{"abba", "baab"}, "bab", 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.target) 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 5b98046ef539ec0f03490173ea43a9213b143900 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 19 Apr 2023 00:18:33 +0800 Subject: [PATCH 0256/1057] Add solution and test-cases for problem 558 --- .../README.md | 73 ++++++++++++++---- .../Solution.go | 46 ++++++++++- .../Solution_test.go | 47 ++++++++--- .../new_top.png | Bin 0 -> 32742 bytes .../qt1.png | Bin 0 -> 142022 bytes .../qt2.png | Bin 0 -> 237977 bytes .../qtr.png | Bin 0 -> 136302 bytes 7 files changed, 140 insertions(+), 26 deletions(-) create mode 100644 leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/new_top.png create mode 100644 leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/qt1.png create mode 100644 leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/qt2.png create mode 100644 leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/qtr.png diff --git a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/README.md b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/README.md index fae646c6e..1606fb2f8 100644 --- a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/README.md +++ b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/README.md @@ -1,28 +1,73 @@ # [558.Logical OR of Two Binary Grids Represented as Quad-Trees][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +A Binary Matrix is a matrix in which all the elements are either **0** or **1**. -**Example 1:** +Given `quadTree1` and `quadTree2`. `quadTree1` represents a `n * n` binary matrix and `quadTree2` represents another `n * n` binary matrix. +Return a Quad-Tree representing the `n * n` binary matrix which is the result of **logical bitwise OR** of the two binary matrixes represented by `quadTree1` and `quadTree2`. + +Notice that you can assign the value of a node to **True** or **False** when `isLeaf` is **False**, and both are **accepted** in the answer. + +A Quad-Tree is a tree data structure in which each internal node has exactly four children. Besides, each node has two attributes: + +- `val`: True if the node represents a grid of 1's or False if the node represents a grid of 0's. +- `isLeaf`: True if the node is leaf node on the tree or False if the node has the four children. + +```cpp +class Node { + public boolean val; + public boolean isLeaf; + public Node topLeft; + public Node topRight; + public Node bottomLeft; + public Node bottomRight; +} ``` -Input: a = "11", b = "1" -Output: "100" -``` -## 题意 -> ... +We can construct a Quad-Tree from a two-dimensional area using the following steps: + +If the current grid has the same value (i.e all `1's` or all `0's`) set `isLeaf` True and set `val` to the value of the grid and set the four children to Null and stop. +If the current grid has different values, set `isLeaf` to False and set `val` to any value and divide the current grid into four sub-grids as shown in the photo. +Recurse for each of the children with the proper sub-grid. + +![grid1](./new_top.png) + +If you want to know more about the Quad-Tree, you can refer to the [wiki](https://en.wikipedia.org/wiki/Quadtree). + +**Quad-Tree format:** -## 题解 +The input/output represents the serialized format of a Quad-Tree using level order traversal, where `null` signifies a path terminator where no node exists below. + +It is very similar to the serialization of the binary tree. The only difference is that the node is represented as a list [`isLeaf`, `val`]. + +If the value of `isLeaf` or `val` is True we represent it as **1** in the list [`isLeaf`, `val`] and if the value of `isLeaf` or `val` is False we represent it as **0**. + +**Example 1:** + +![example1](./qt1.png) + +![example2](./qt2.png) -### 思路1 -> ... -Logical OR of Two Binary Grids Represented as Quad-Trees -```go ``` +Input: quadTree1 = [[0,1],[1,1],[1,1],[1,0],[1,0]] +, quadTree2 = [[0,1],[1,1],[0,1],[1,1],[1,0],null,null,null,null,[1,0],[1,0],[1,1],[1,1]] +Output: [[0,0],[1,1],[1,1],[1,1],[1,0]] +Explanation: quadTree1 and quadTree2 are shown above. You can see the binary matrix which is represented by each Quad-Tree. +If we apply logical bitwise OR on the two binary matrices we get the binary matrix below which is represented by the result Quad-Tree. +Notice that the binary matrices shown are only for illustration, you don't have to construct the binary matrix to get the result tree. +``` + +![r](./qtr.png) + +**Example 2:** +``` +Input: quadTree1 = [[1,0]], quadTree2 = [[1,0]] +Output: [[1,0]] +Explanation: Each tree represents a binary matrix of size 1*1. Each matrix contains only zero. +The resulting matrix is of size 1*1 with also zero. +``` ## 结语 diff --git a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution.go b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution.go index d115ccf5e..cf0d2db43 100644 --- a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution.go +++ b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +type QuadNode struct { + Val bool + IsLeaf bool + TopLeft *QuadNode + TopRight *QuadNode + BottomLeft *QuadNode + BottomRight *QuadNode +} + +func Solution(quadTree1 *QuadNode, quadTree2 *QuadNode) *QuadNode { + if quadTree1.IsLeaf && quadTree2.IsLeaf { + return &QuadNode{IsLeaf: true, Val: quadTree1.Val || quadTree2.Val} + } + node := &QuadNode{IsLeaf: quadTree1.IsLeaf || quadTree2.IsLeaf} + if quadTree1.IsLeaf { + if !quadTree1.Val { + return quadTree2 + } + node.Val = true + return node + } + if quadTree2.IsLeaf { + if !quadTree2.Val { + return quadTree1 + } + node.Val = true + return node + } + bl := Solution(quadTree1.BottomLeft, quadTree2.BottomLeft) + br := Solution(quadTree1.BottomRight, quadTree2.BottomRight) + tl := Solution(quadTree1.TopLeft, quadTree2.TopLeft) + tr := Solution(quadTree1.TopRight, quadTree2.TopRight) + if bl.IsLeaf && br.IsLeaf && tl.IsLeaf && tr.IsLeaf { + if bl.Val == br.Val && bl.Val == tl.Val && bl.Val == tr.Val { + node.IsLeaf = true + node.Val = bl.Val + return node + } + } + node.BottomLeft = bl + node.BottomRight = br + node.TopLeft = tl + node.TopRight = tr + return node } diff --git a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution_test.go b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution_test.go index 14ff50eb4..cf9bea25a 100644 --- a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution_test.go +++ b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/Solution_test.go @@ -10,30 +10,57 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + t1, t2 *QuadNode + expect *QuadNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &QuadNode{ + IsLeaf: false, + Val: true, + TopLeft: &QuadNode{IsLeaf: true, Val: true}, + TopRight: &QuadNode{IsLeaf: true, Val: true}, + BottomLeft: &QuadNode{IsLeaf: true, Val: false}, + BottomRight: &QuadNode{IsLeaf: true, Val: false}, + }, &QuadNode{ + IsLeaf: false, + Val: true, + TopLeft: &QuadNode{IsLeaf: true, Val: true}, + TopRight: &QuadNode{ + IsLeaf: false, + Val: true, + TopLeft: &QuadNode{IsLeaf: true, Val: false}, + TopRight: &QuadNode{IsLeaf: true, Val: false}, + BottomLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomRight: &QuadNode{IsLeaf: true, Val: true}, + }, + BottomLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomRight: &QuadNode{IsLeaf: true, Val: false}, + }, &QuadNode{ + IsLeaf: false, + Val: false, + TopLeft: &QuadNode{IsLeaf: true, Val: true}, + TopRight: &QuadNode{IsLeaf: true, Val: true}, + BottomLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomRight: &QuadNode{IsLeaf: true, Val: false}, + }}, + {"TestCase2", &QuadNode{IsLeaf: true, Val: false}, &QuadNode{IsLeaf: true, Val: false}, &QuadNode{IsLeaf: true, Val: false}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.t1, c.t2) 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.t1, c.t2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/new_top.png b/leetcode/501-600/0558.Logical-OR-of-Two-Binary-Grids-Represented-as-Quad-Trees/new_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f134c4ce11a7c12432dfe645ff56be12ddd761b7 GIT binary patch literal 32742 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

      a_2qN}b0XkB*WC@~efaPJ&zhJ@ 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%0ABrwH0TE| zM~V2F;=Z8w(zxNp`K{6LJMPW2fEgDAen~tuUIo8>bU)WqH!W6?IB99#UHpsI?4DU+ zOP=`ir)2N-VAbV0+qnInGn{GsDw$EpXiM_1Xrzto(!w?Jr$-?Lg;m)S@F1UdY8Kju>x$H4Ek{jox z<28>z-=qLOw35HyxqbKOdG-=*Gw1M3dZuy|n}8b-_y_ zgZagnuJoRcpM=Fne@*CPm)dBAWZQL)(v90CU!)>BL{@AbC>lPJ8JQiZlR76nZX)f_H_s*iP)H930|5AB6trz|XkPw>IL~;p zXi_dzjt4XIb@-(V0y&(^f`Aa0lAjFk1wMrPd5&(VtX!;fjvzVlIh!mFuvL~{U`*xf z7V7s~x+h6LRO~kA@64*n(uu=@p8al&cl&O*#mF!;_H}1+Ec=;0s3jMuDbJav@gmz3 zN|Ei)zunoD&?-#s;pAg)MO9?0K%1~00q$f4p63Q}S00?aui2q}54(^~_Pu|*I9{_( zY@u^z562CIqfbAM8KY^%L$euQeBfW?c!ul%a^d11nT5x)rY5G-C<}v%7Opl;rL0f79UsT>%Rx$9)HfYNhJc6W1XJ;Zo&~ zW)@!!J+D^;)?zL3K4+A&Mj8J~VXhj+;;ih<725n3hs;e#F!bb8kQBiKO|J)Fu5=~YlmkdM?&e5W~OLbmIk2A|8XPwy6Wz{h|KQlBM|IBHX7 z=jz$cdolYmz385;*&NGmr@lJF%|{KHt;6MTs#_9NXHQhWQLmP?F9oiIDZ)URivdmg zZ>=SdOTcX|q=s=nGLc6PESg42LcgW~6iclKCBF0<5;IL0Ji-6hhNJiy8II?}qM*mi z%|J3Ar+&zHQaw8Jy6IjB&-;tpAJA6X-V9fnk+qGW!MECO-A-Dr8-rucYj5ErrT*B1 zpG5mlHUyrU{E*F4vJ|3op9HVaW~d^sTTPe=Bm044@Zu9-?tIzg>iYk$;{}NShO9OqQaG} z586bbuGwzdYNVXnp4gmwP$i;yb=2|r3Y`x+F9Nkd-heR?*82~Pe@_D3$Guh;$!N!h zw>HlBbQ1Kvx4$o{tQ>yabSGGkLu(rC3U zOz?g)PVjs)j)lb0!%D9SKONA5#Af3WaIvUY%u?8iFNg@=c7+fn!k(P8`w8tZWxq#L zU&FxvqlKaJ2?&%>Kiy;7B-J_M96DFn>^)m;0dA}{uXLaK+q5mtRALo5<$Nq$&H4`S*B+-64 zX=xg}=~(VVdrYv_^O@Nq?I(8t3v&l!vPc&v$-ay;Z&A_CG@BFb{irE(<4@6OMLIL{ zyI3Tja^VI9!wSVhp3Ps79PfG<7pt*3tZZZtQiSos%tz>)qJ&oPScsX&Ue;TUSGy~W zJytF0#lJ$RhEu%=6?I{epvL~YBdmA);zFTME}pNrU{6j8mwPZL#X;e!^;r3;^H_O2 z<@=jW@;2d<9FhxHD)6HnmFpun7PaV`%R*h9@wQ(ljZZGA9Wlp%87Az_pUK-;AvWJ%I?}snvAq8 z601n((}}GBH5BeC_Tfm9C(qSk92&o z5yYqxfpCMi;CX0wC`?n96v=GoIvY`Mf5aA}WcEo#Bb0f-9i@SRMY>WeNn$jkBFlWV zHJj*E_uxEie5QeVX{Q%gHj4uB7|`P)rpg;O!yZ`0BU|VP{m(V$>w}g1=WJv39(P#WPtzu!jBael~Pg|z*M48DAX z*sdG{P1v>Yn~mo`&DA{e@ZB?AFn5i-Lg?Ihnsd7RdidcwuPx@w)Y`sNMbGzA!$@g{ ze}4^LU3oy}aQ>t+3aiN3xvR*Eo)l$X&@c$R9vO`JV|B5;iJpe%(_bZaN#jQ58T3s> z#>JLHACjAWL9zp(*u4_DE8O)wWMome>|30v1xi2ML+F-QA0no_2Wh|2zyEN~0H2{W zPY*BJu&zmKiDNy0@I;EO3SWHx!)TJ!@OzcqP(R7|U__HHlSy#LjuxC3zF?b?q zAgh=}GN0A`6^A-ze|x9+$D0eoj;=Ax36=WR(b#ECdi@>Ws_x+rg_`&MRR)(-w=su= zT|}x^rQ;Ju=MWP2BBOy8f=)5#<CT$)>mFsQ)<(FOe`}r# z8M)^^Q)cu}Yxil@L!O|M70f>YQ`}qn;{H=VkTD3?WLEs~RiqfGb+u{}I;`csEI+<9 z-+))LIA|M*56ArI4_>ykZq5fZprb_nkUz7n_*dzrByU^OH}+2tsSzdN(FKP09|ag( zg^Y&&XmqoDd+qS@?zh1A#VYIRX{~86OeAaROBxWJ>To%t5ce5RYNPq%eeD6TTVA7? zAVgY$>DUBcJ=Di$&4e3yHrAgXC0c(+cRm7kywmEtAuP@%&U+<4Htr;vB3w6T1y>XN z4Qw;I!EtOo^;8HiDgB#J3zYEOu?`Deaie)*r1IK@AWu4Opt3JN8jjbT$NvqiV%~&n z3#5Why3f+RBKp@v&x^Kl#ATKfTsYo=7cb(y+W&an3bT4W#p0B;u5I1E%nK9N7nNK` zz5GB8^juMwz#~>Cy77dtCk{>V@DBJ$_wV>WOFum8#N z4Gs>bd%)>@&-*C8Gqfb^5@<|oggSD?3v(D1JvhnWa@iKU`OupyC9A|xXO2Op=yRE5 zu_WwC@F|(RW@v_xId`k*Y&aB<8`6(qf-&_K@drXlt~a}|nm213krBpwlq4htpL_My zuQm*kOZS+slOdM;)Vf!a%qQS0?YC^HtP;faSMQO=`$;Y8 zL%(Vi2p|-T`c6%D*!9rb0F~?q&X4IiwgE&xV0pt#G~zU1zoBBxvhp7#68BHMQ;flU zD+8=}O3!ihRo0U=u7l9fn&2pv-}bQv{5RJX?V_jFyv@F4^V@k6GKV^5OY@&o*`2(o zl=NGDyYfxrwmD8X9sDbQ^bFqM!e8i^?3YB)sk<}HrLsXrtg8)-aRr274Fsn zYG9a=7SQjvljrR)k2~XHkOkpYWLH+w!6Zl=E5td{w91Yd%n{bF3t(qM{;xiV!9J#1 z9&Dmj2uK-QuXIeM4lm656Gan?eB5tVV;T5X(Yv9a zoyt80MR2r0HtM#xT>G+VZ**Ky#*ev^`Mp!nVLwy9E@9)ZGB(A}|2+Ok8s`-7ACG+s zvL!-32EK~Xwd1{GI8v!}@p817ZnAWYyy{>l4*t>-oQgX-UI%eF3C%vr2#Dw+At70} zpX^9Z1w_kz_5V$I5R;g5oEfxYRR3@d7(D2rSmq<@1KHy2-SAt**I)UXw#nmtIZQzX zo{NYGT`--mLngzv@Go(e7U1urb5b1yXupdlzrmaUR%Ba4&cNh2q6rdjYJmh$*3eK} zhbJ8oq0(pfi64Eox7cO|bYMBykJ&zbo{YgT1n}9YqD&S zgYo{A3So0)nXUq20mA=pMkf^_;Z|={oh(%Ju`BrHMo>0BVEZ-sL0p{+Lh9~e%gA}+ za(?;wZx5-D#yN|qhq?#zITPP7zR>@HiHAVf6$G`LOtn_cK#MV~BEk4YP(ZX>1l?7Q zZJvSJRFU9=Ky2=eq(KrEo32ZZ1%RL~vc)MTWQ)HV339R|YcD61rz$V_VS%yU)cZ^1 zTSgbkPp-J9EXU|_p*(a|*S_+L^)aos(q2*@E~AQc1IJyifg=c z9MbkRcWraA5hvI0JAWNg)$5y>*bJQF{I^s`N8`oT7pojMk_;v<*q@ALD9S{2a)#wA zI{&1*uB?QM3TU}1AeyqZVM+98{EqMazmV|ne`Y0MNHcvhI;l0ZJf5+k9-DmO4(^WC zNzj1&%FoZAYWoUNoocwSzc?Ko@wBzA>D@J#k$M+TkvoUV#rUiwBIaRDvTiyZChLHG zYjQ^lx(@iVls$fv2g}q1b~VK9RJxup)!0meaBbD!z2#)4k}~;$b+mI@7l*$)j!9y| z&CW4x_3FzTf<}R8X@&ya{Q$L&EWfvd^C%);7t*6OLpgr#?gbx8T+ohquS2 z#|5p_1$Fd~xOs)OIN*+s@U<;MFi-Dm+%}I!MA@J02tO(t zNZ+oAXQz9ao-@hHZ6@})la`HT&ex&*FEo#3)cA?dfmw;h%9N^^YNGQ*UoY4 zv`v{U4ldkQTJ(UpX6g+02@lt>1{d5(v5YX?v&I$XSx!A~O{OVYU>*zzu;^{ghe&oLgyzP)k zkkAE>+2ne{8SMc}A}FDmA|Kbjfy&Uc5m^{=+*KLlSM_Vzer{oYrkF$6YcYg4Oml)K zEiL{1VTiHQy9#ceOi?Es-powP%6(rblHXZRu!#FP`wt~oKdyJ;T$#848E>*T?r0*2 zXq1{u3PNFoE-rM284(#Av{KsIqM9DLWiL(s7NdC*;rd(A2GzeWnOOpfI<~SgrZ& z0&ziqeA@4h9c9O zu3-^h)5ZtsQ00W#WcBJFxHv@xeN9~HQEwytFi2F2iKZxnp})%f(N*xJqS3uA$$V6E zA#`kO2-97{7F1NC6u`AR_nWxlvmn0hw(R#y^-iQuZZ5@>S8@syJPEfFlz-H+v6Hl! z;x@!DS|*EQPOp!LzEoC58}0v9-cRH0L0q#Q4onA~h_8_43g#wCV*OUNVitim z(7%-gDG>nz6;qHgLy$+KN@!u=g$BaEEdq+LV4sPFd2-10vCO&8a`etl`@_5?+zo6l zarqG<3w4wv#G1<7i$6HhV&r#eWU79xCu{FHO$7^YJ>2No6@ zM~MYz=+rOxAMgMpW){rUiXY>2W;3LhNBSTlEWrfU;ZfOC`k_7U2;Zopfo^U|>TEhdxym4*G5Q+NV#UZ?X}!-BI_f0{?7dYydi*~?{NWBoM9%9X+g zl%XaodtV^&ip2=l+CwQpr-AbSCgG~95}O)&U$Fejrx2eO#Zk<4qwY&e7Pj0T+%{(6 zm*8(1WAr&%OSVf+kLafRD{(4KfBB(m8B9t9iJ$>coD8|@^45}*S}i?Qc||2d&w>uP zxwUX`D54x(t~Z?T-~KKhct3VS9-NopNKGd{$TLPuMethvU97w{Is;6i>sAVe3}j(c z8Hl**bG5}v(7-v}6U3jnHqZl5Sf8vk5=WjGqOI3T6<8fCbl1bYZ2pWy%s>`26rfr4 z*5`RKw~ukjR|AVH56UU9+Q5ql}haDBMR>!QnP)WfW3pU8f|?=U z7g)W(Us1KTG$JEZI)_G`vhx25o_ypeILnW5fM+Z$4~j?u8>UH!*sF)B5)OD;#PW{a zx4BvL4GFy28f#jk_pslLKs`0CHl+nYlfz&)Pcp@QTRVrXtzAGpEkg&xt*IIoUgul# z&b6u+I)MwGHzt^u*8DiCmgED{1Q7r{ZQ5WmpS~1{cM*Zu=8s<@U|p169)6jA@#RhZ zpFenfKAL%m9hCp7qJ<@kCR|dUjpKxM4j{6guuJ>{TVDhiAD+7H40kREQ~k3Fk`xqz8l0ThCv+uf;OU*Po^vFEv$G{acH&VVRHP?dCd-8 zcizpT6mJMOc3WzyH>ADUPGqRd)d35Myz>j`ifq3hEkYIXfY1;>E6haTX^7J6V@4*D za8!?1a_}p##mT~jhL$=OT1RTv=}kY5^-vU~6jB3?pd3elHdwe)&NKm(4E`;ewb<~r zK5+=+feD$kDkexV?T0GV&NTHX8ELx!;SQxo;QycE|1W4oRbRbK_p7%(5zHf*nY!rx z9WKrvFUgs>aXq|vYdjydyS+&LN(ifqSBgo3iH%$9_s8t_WWa%#0F(fa3*VBnp4&ew zE{ye`%%S{8)|;~?_;;`;_q8a$*2&RPVS&}!8-tAlz%&ARXIEH6_}=d2MSZL@7LPWo zocwQ=Z|@`vp1!gKV@6}h?li^Q2b#r~9%bn2XWtN!Qf`+|VYv=+v8;c8y|)yJt4TCh|D8)ZvibdwiJ-n> z6rdE^l|;-!P*3B^#lXl_o40#gRr`w&vfMba!9NUAo%>#DGn4 z;8txC^D{|RE0~QW)9Zn-?D4*{d=ecQH`RX~;~1EqzwP2R$VG5EQ$+!Nsv^zNfcJGD z)Yo5n$8aw7a3j(6{I9nMiXqQlERchReDhqNdf?leL@7HLzy4EamszDH@p{^X8G+sN zLkFhskHy$PGq;-V1F)~@%Cp4>4`ermB>(kTCPy#A)0uqFX{hzRJ6D>@ z*p+hWFIq?4ubj*=C#%!5!GcjrZll;Lg&xNrx3BYP?|aQarF%&~_L7kb@(?Z%c=Aiz z7drlvp-RMQ(($k&722HSKON3GhksFcU?NH{6DM>Q!Rqej!J-gD$BDe|nB-HKkk*gr zXwiRwCx+MdJD3<4Mal>r+*eDhcn5f#$dXWx(a(%ByCy%fPVG zYeiXOG0wD<*wDBj<+byGL6!b*l}?qP5|7izy*_*0-o_ichmb)q&M|D)4pIJ~clGu# zvN48T<1*kcpw08zx ztS^&x$p}-u!Od1JeV`SCbW3ucWUB0-k+ZE-dv6d@40k$NEp_#jUuB)GbjSw6!e-Ap z2iGycOwZu+;_9+#^1q>k2KwiZ5w5YkOE8|Qlmj(66D~RjnG6@mfq2iKBF?XG;66~G z2B@N-3G3FJI(DwMEOY;oP_EbHPB&GRqqwGhEj4#%MaQKR{rDTw?uox@?hR-Ng#1N< z9lxRDkZRL4LRhGo**Idx2KIL1J1`?Yxy|@OXeeNEo9LpJOwbRgKH+;^!4MS!0Ik3b z$JYrHh1~N5kA39zXLZA<)sWGSmQNeX4+Wj6sv%NqYb>$-r(NENw$)rOo~qgE>k|>F zb2Jp8PQqBHOo_RbMd$)DTH>GQ>YyDT4+S03vkN=2REk$EtT1r_0IdCSYAN?C|5S&q z8%R*Gr63te;A!bBJmWGlw+e&l`*P<14QtK>hI9=i5tR%l&Pg1&5cjm_Sy(uI(HR`E z(7jtB-jH<@kJfLVo*|J{uV3#@=5IrPXkloWvZR97 zE(|12(VI5`uW>fJo+m2Z7QeTpnXHAqQK(PY{+cXlj) zGX7)eX}uM+H=O900vCLV!IB=CVq;?+*8|WjEiFHPkqay}Dj{9FTkto{Ju&JyeU19p zX1PATr((VlRf?8Yl@ps=%i5q7WssDE%f)8)q{(8bMze5DJag11KA!lqK2Yq1>9hDH zM7v^iCaS~d^yw5>ni1Ny&_iLp2+0p*h#l+cDbTx5kx7c1B_f|R`(+p|9v+<6Y+GmV zhZZc5;H{1l6AYzS4wqnPWP(FTb_pF^I#UWCvxb{!s@lMT<#)F1hiN*q>i2HSUOb09 z8Q^C|ozc*@w8qy>laBjP2LOI9lc)FX?SO033mr;F@sJ}%aku2uu%Q2Crpf!An}aFT z+9zR6V>sFz$fw7h*L<$We$oFtGc>j=V533Vy5erdlfaRJVr9kpSwAZ3rHu|a+Hz~S zjD)b%QcdY|G&MUh(?dZme7~XbOGHsN@}M!95NM_lSCvlXj!?aMR2f$%{d$292S}b6 z0qJylsR)_0c&t!V|$QM~>#bnQhXN|4giQY!0Qv^Vu?k;v4z0;2ME*|^jf)B|s zM~kjGZp(xe2yolOAJ<@Pi-VIJU%6Ei8>Xtd%9%7!#?w>ka4e%o<)$bww3u@A6L#$Z z!N^6UTvaUYx`Dq{I{9tOb+JZscyTd~*|cBwuMtPQ?-c*GXeU(hsa^#5)!jL_IWrJo zWrckAu%Q9HfBs>*3&eWbWPKF3P-t_N>vn2$w8tr4C!y0(6 z3aYQU|AT(oh~5KHaHMT=M;nD}4g=s6mO?e}oiD3Cd%kMAz>n`gHnz+SxGf&Z#a*FF z3-yZ&0X9xbQ|nng8&Q?@4ZzXv+)ddImcG#MAlD8y)Clno|JIjtVH2CKu_Aq47jh3W z4)`S|n1#WNsNvV?3m1hE+|9`W0r%+~a9~{Tnlz&G)r0v8$?R7gx6+{yDGiN(nR;Yw ztSZYUMjtW8y|a*O-ydo6beu>96j_0sc<#&flsJ1+QER^@ptztbs>3)_Evb?=Q|*)| zfJ>B-(l5hfFzd{`r>08ish-$Dd8eKeEuP%Ve@n^JiJs<7K1Obld3Pl@FE)jj|7$NT z$Sb&DbFv6K)nzsq0)0ekVd>D_QChHc4Ce;>LtT>*f&XI|h)rpJ+yW{Jr)yOTe07@= z*EY+A#qKa?`h4VE2ZwsHUIWSbo`;gk7Bh9LWH!qQHlkGi6rXT*`I)_fDyCSD-7*e6 zbQVz8JHt_NozVGAcJjrxXhNhN&&>DnOnwR=V76S6T>bPw9NnPy6azmp>K+5LkbSbX z^}Ct5X%}UnYpR%1A|wg4ai)=cCR@}gk4eJ7`Yj5Oj1|@TVKVDXHp%5Ek~$b#zI~Lq z%n!elyyz!rAqoW`HTip0x zBy6;fLDf=A$l4HcYX2+3i1vz4lnJ(JKP+7N;637}qpYmVu5*Rbcy)-1#*7vYvKRcv zUJmbYBncGgN%9BNsg(@7I^bmbkx6R&(uy2e7MA*2(l*?e>R3)4OD8T)o4l87F)k;H zjp0fLwKz_!w?D(k%&c+U>LGUA7vK?HEYtjP;aNQc)&ElPdjlGJ8=lg(YnQvWID@7X zIZ|0&CoP|;u}kz3hA?9T9CgDq%_M(CsY?l}y`0D>`ozM>@u~`9VyU#QXl7-u8>UJj zhDp9LA7J@;SiYkAVV@+kw_-|1lWDBOEzFhlbT%sXafMSJ?4++9Xg{bi-k?>s$3 z&UPvcbJc1L-ciIrAXgyWR^;X;OHf#Nd(xg8w3gsh0La?Gg#o&_?8+4Pics>g-o5;_VMuuT z!}QY@^+W};#)~QK zpU_#|82g=*{QXWCj20c{rCUQT0OhVKc3NJ1;TT;E48R-%I4#MDs*Cu6gwMHz6vhW)4-xHE?*d8)aP3Kn_fRQd{JXs^%`vT*2-~W zq2;khuRB`AV6$RFMnOBXJRk^04_hr%W5jKP(B4b+7On4Y7O6p1iv>8N`wkNSn4aKV z{ifPXs=2!WzMzE!G)DPQzcN1grA+%du3GoLh?Ym>Y>H5jl29oEud9#GX^Lj5Q~at`@%tOXUj-ZC6D0pPtN)@Xuy%sj{|eEgnFgj>8t;bu4;vvXM+T2<~<@ z4XJ{z;8(9nw^1g8IUf7C=mLNL(XTNu_bAXoj!cL4DHqCw19l>RO>mdg3kvW4E>SPJ z-EbhyskA&0dxkqzctYZRV4Aq$YfBmC-?tyLn%6IFE)hXucw_RWki z5I2h9phwQ_3F<2@@IB-mwS3hX609J+^ZvUVR8$Oo?ZpB_2y>@9Z5x|2Nqi#uQKS z$-e2Oy<0o7ClWZqI~Dj&1-_SQ)0Gv4LHVJgS7bcE*C5J^cUNu{bHd1r;4&s)3hUbb zgi9<$oqkpErvWsk3Vd?;hJ}VRDF1-&w?%lHdxas#_JyV+N-)#XZ(HL0VjJj(3z?q#ZtQ~?N;{;wBO!^YFGth*E6{J6x(Si2 zMmQK2UR9}5R@#*R4`rT|jRdcZjA^)>k)xwok;WZM4sl%75P#$6IRpuU^&zjU}a;M9Xe2QoWqi^dyhb6(wb%BXP7VW=AwO59dvv;M^Ff+k?*mry#=9M_5txjmMMc z9=G<5`Sk3{*$xsC(&>Els8cvVJ6RiQ*AIgk^wzI$9wM9QRXbGrmFF%T^ppmWN}F6c ze)nj{Cfl88#>`V4L@leb`4&^9)FU#VGod8$H75f}iBnVgm8MP!k~UW$2qDHwQLHP> z|6!``x@Jz?QbYO0IC`OerY;G!-$hjJNxUl!ZTz2~r(vBC&!8 z=N`=XU>eUw2FhXTm1_?u&@<-q9%_XQZrmqY_WaEdo z$(<1HQvYw~B^}Wbw;p0mQd#&4=ooLOxt{q6gElwQ*+|3OoKDc;6}q*Ea3`MaevOnf zpx;>n*ix)~GI!(G=cA`vZlh4213+p2;@O4P^P~oqkSk8q1RwNEKG_%>^0F{x3?LOql``P2}NsJ|K9aiGdZ zL7|Rz7|nIv{zGa-Drr}j+xTbQ(MW3J@0MaW0G^rtBxc>2vsc(Xx{UfX8XRg_21G_Q z5?2gtY`_0gv_~xP*71>lT^OC_K>Nqpz+xq*sedpwKBF5lu6a=z5_W2pYmk&cRhXY| z+?~i)uSO>Liw>52A;6Dt7L($nuS&Z&lFKP#s9j%E^IK_8X2SmxT{22c)Ry<0q~+l! zN{6z{uGw3)Z{@IaQ9ZqBRDl51_MNw{TOXh0wRX#^I?AskM+l?xOTyW@&rQ;WDDShX z4k{GA`jeCgLO*F3zdI%|kkP$_&$rD6*<>x`Dqj#%h_U6DaEY!5S%uNK#-F^zde?r8 z(OW(3J=w&1&5A&LH&5(Ip6a`zI>h}TMLp!?`|w3{po91%r_j@8F!=TtjB*O0E1%vy zN83JhfsQS_LMe%CdqUO0VglSO^}fgppw~hY;hOmb&$~g3tsA=aO&=yNyAZmz-r}du zaQWto0SS(jM{TCx{~;pnFPS`alb@Wsnk_Ij8`}Bal_e%1l*wl34B1?uOnU)%*e;q=4sg59PEWHqv~q@!My z-O3C`(Ewg^Dz`}rzkA&5WEuJJ%5nkRC)zvB2E@go{%E7ePNnPCS*X0SFYtGK;=7rp z>qa=Mo+*-t(+TiG)6$i4zJhkU^$s-{@pC;sOqGv|>h(q`A=3fwj~^wj2h;?S?spJdhne%9t+!6rT2S-^q?XTV0jtk5wG=(^IWjaS5&B+Ef0Drz zJlm5t%hCq+455r8NKdFUY{2`gzorG=4Qy>9-a}6q)z|-3Rx+BvNDF&OtgDbJ6=Paf z`eWBYTSb#WqsOr!0=|Ri10-Icp?SuFi2uE{n z=RhgU=W=ggUU#n)z$W$|Hb$8Z!M?egky#Fq5s$m#{$daKLHIGwA`Y(+l{WPVHv5Jp z6^G$>k(3WE)r@qS@3Nu^mFeF8wtp)ZFUJy(5nbG+&Y;4Gm+TZEvRgcy0EYxA!^;pu z>uLaqCPexH)mEO%CH;QI!-=6s%rXfg)yw$acC+;M@MUJ-;+s0Vlw*x^iA*|DsUY3K ziY<*0J}DzNc%SN$;@kvoTS>k{G|}J8KbT#_$-mPEcHTl!T*`bQG6Ki8M>8vlzklz` zCNFaXu8HRh57HrJeZV3yn!TW|?&){*OPT zjErZ8habpJJHocY#aF;0XfC+NvK2;03z4{LYIo4h=b0+&EogFyUB0x<^9{h}a7Tu! z)CES7N~^qip_+tc@$XYsrX}I9NtXulEv|#&Cf68Zw#y4s?Kw zu6HL-8lM<(iR53XK-F%P9NTr%krC4L)A8q6qh%I9M?h}*xZU)dKoQ`dR(-1rZd}JS zq(9)d17SYQ1VOvOM9rl zn4E6V;EEz-T~}Mx^PJ9x@A3qEtTVbj)^`{8d!_CQ;RfcT zvJ+92)YHRU3Z#U(O+jHDJQTtTJz~ZPq3m-+vQw16dB{u-pEzROakKFWe_mCS{>DA_ zd7bOq^^xa@6%DSAuu<|=>n)kbyC`o!2o2E902t3NS5JfX#YIFR3Q_?#eG(NdI|#2K#Jv6^s+a{8B$5%1LfH>tCDg+m=|Sz zEnp-?kXS$QK6sREtf^I7*L2i{&F&zx_3U8%Q<6ZP2++`aE;v1iZB20$v#{Fv;KKPl zhZ9&To*wi&uJ;T!Rcu>Rdiy*h%z|Er3bJ>wllh!=|B#n`5no$g?a-A(WG5O6-gomV zEk7%(zUIIDz;pfjRp^q!Z<(}m0F0v1uuQB#LW%`0Kf=!DDfRo$zUT9!xGlbmw`Rp! z)TyxQJt_CEqbY~@14v@oU*6;S!qcn$x4~{?A%@QjpJ!LrCaC8e5Z<+~pX!OYI#lN? z%O6(`G}|H?aB?T_AEolk+kIH$$;jkR{xjK`PIw&Px?$6^$1cF3&>K*Urb4X5Jk3u~ zu3eSjCWRkWq$aCm_igGY?G$T~#+?EOVQU0t5I?xCIhW|$~Ei7o^BR7>|Wgp#hio7-9q}_4k!S)k~=%CBE%V~P@xeY zm#D}eA#KR{l>9#?KD`9~GjXLh>`qjRf9h+bPqpvGRqx`_Rn1S**8ad0qjS4!;-!^^ z`v;@@Jnp&ka2q2G$GDxwVB}O}uGTilV1?0)@3`UOg#l zV8gIPrUcY)64|^8U@BdVKVQa$&PkS}L6h%Q60T*N&#qT@jom&#-7f_kwH3rhl>S~v zfTjAUY}Im9&Qy|(Ht0v*O5bu zO08{)_+MSN)wk^Fzv{9{c}TCxx#6UUe{(IbPJ_CbzW*2Jtds}_8Zl3_tM0(`{UDz= zi{+&dl`PjqUS>A5Do6b@ShAl1WZSHKx%X5X})oGJ)Va1(?g}pOG3x;MV=O&wHY%03me%6vs@0jM7m@bZW z8&DvlW8dtbjLBC}p#<}(wZ#)~(Gi~^sjA@8nLrtZFvP#{m%iU%k~=?^`niFD1}Qj; z?o`QqOTaCIbriAjP=l#z7||F3^|)G`CQtqlJawuuIsd9zL?53{D`+>$u;t^3pJ~$d z63g7&@13KLtyHag5J&KA_hX!Q#0DtgZ*=L-SGWR{f4||?pLjDbvv{0Jj@xV zFCIqHuo6q}^#v$49N&!`;skL+lydBWJhUrzs zvF*?lZEG0vLBd-m@)*cZimZ1(y-a%uQPDA3gm51^SaL5CTzN6>ZcaL8y0MQX6*uzn zq-NzANKCa(V7E829Kczi6`Y0~ku)p2e=t*I?!9uH-m)Hyt%!D8Co2f2L7^-?zk!4S zY}UhQXD3*9{9RuI8{A-L_nr+b7Jr{V9N*eI@?nIr8M=hQR;p_cSVTc)BCzni{I09w z>}!9-j*pi2QmY1On_f2! z84|DZKL+)oF6Pi6!cSgIR+ALYW zasA+`!a{VJ#D1S{3pwAj=yMb4(#@|{d_$0}dt&23P#pgoca~2@Rn>PXO;1d>stn=I z^{%h9BdOc`eHB7)M{b9f(3NiS4-7#Q1l1Tz2cqvP??Omb$n`Ocm<%NDiud;rsYQiS zv?@wh(rO$zfNS`(XO|a$s}7quRLE8pIad`ec3JUGXPVscs1BV9tJiemGGZde7|qW{ z4)bd=>Tl61tLg%qYZD-)F%bGvZwO%_SN6#%xz^*b4D@VGvocoh4(bmPe-`Tc)_wB# z3KSM0zd1^dK}6K&Du$iTZ08R_^lUsY#3m2Ci~ELb#`B@Nx;AjV1Bu+;9#dk$I+C*2 z_p@{7E_7@8Axv(4?q~Q1IjO}oruxumjXmT?j`lOEyJJx7V)x!x; z^%O7L&7p{g5QxIecs4hQ=@u1EfFhXM%;6)t`wb44u^?2d*$-vA6v;n5+!C&zosSos z6z**WG=9w^1^Aq(pNE3jX26+;R)IQGZVa$h;~LplHysnE8^h!@;b4^I)czV+T4|QMC1nO8}_9PSLlFzT_8H zcIRS??vGA2%p%mZL}YS~HI*bGv~+|il$Dl!P(aLOH8QS=)sp&EO^diNsE9!tZUBapUF@i$v)=>1E!M92S$^*6o5aCJ3cy|yNblV&1x3sy1t6(P}XzNlASEUwDk8@dy7O zS#KE@W&5oUOAAPgAYDp#gQQ4EDM)upkBD>(2uOz_APs_a*HFXINOum*&^V8Ym0lTKVOLt zPtXB;yof1Ff`4$cjg8La8JKItlawc4xTQJIpB3weR}ol0^+@fH=yn{suoV57mL!ar zjvzDx{@9rI^&C$Bztti?r=7!@rRn#4P|cx_|hh zdlo|jn|0|EcNSaU$2qc**CqngoLmKJbNqv!?~lj(Jq8Q7KRrT-Z^tBad{13T-WF{$ zYm29X&8#C<@XrxeX!rPT#C*JJP`U9_y0jzjA)qJJai`Ra{xc3vS3FRlMfzV5emlXmooO=GFPZ$KL zg<y;LHy+Iu<><$X>kj|dX+`H`Jq*P&|2ga8MRE%hj3-GyYs?N z8iq_7Pk(N(RPj(&MyDj2a9HIf=1%M2sMkJARDBXv@MNQz1@!ElT_59Q)sHsppMyfo z4PM`pvm!XZG%UJ)A}vSR{5g4+-?jifwj+gY1tDdC<&0MWhZ>=}^<-E-k}lufZQv&S zN$=fPNuUc(fMvu}$~iE01fE_yh5D+pts+9ji^korx;EZRA#TrOME~j42qa=H-@7O; zJe4+wO_VoATYDW_8c z!f?96OjEF=+47ZEZRpTijJ*0|jDkkl>dzuoyU*yc86G8{Ha3yNWV0PVMT=R>e(8cMILpgYx@J5O^r`?fUK46#0CtUTyFU+_ zh(0M!AUO=}QODc48>zx|zHvuHH<@a}vc-g9bWq)w8*e76xz*&OI664mHeayGrz8{8 zex#cB_xmiA-fJEqu72Syr0z*bD^aKHC@L&Jco>MwgVOTbu#G|@G?f%k=MHKYw z5%)G?+0hAB7*B&^B`t@tBKlkO+tt~DLpD>E$lT2sHd$NWc5yIIravQ)8@~g^bI)^v z8H38N?+}W%Gi~$<5((Sc0{pPYgke!@nJ$q@NqMJYqjwd*_XpO}Ff|o05Zu<9dE(_H z|K~o^kPnHFJgKL2BZj>kPfr)Mx}xZIz&*7D!E@UKwo+k!WFc9l$jV<}%V&KusHZsz z<=Z+*6}qbI<@42aV_G>%b>Aa!9`4}%hG)1n&DBx}$oN9TDnWg5o@9R^ zknSwiuVn5>V0NkU{%v89uA;&$h7Ly_X4<`GRILzYV8`FhG8c=V9ue7%?xz(zX=>TD z;(m`^saE645#6pmk12GBU@5mpG8#bhef*cEblKcxwSftV@(1&`qW0~tLSC}A@jf^` zLm~`~HmOY;z7QXpE=M6d|0P=z-*$H{YOh6gj9lP3fSMA)o{e;7RcATCmAg#{wR==PbV8-kp`h{gij+%n zxW0LD+)2cfpOu|6E3R#6r-fEszd05i(3V$JVSwayDP-;!k;|jLCljY)wnEC#ED^cvP})|n-)7FDfQnZ# zWOYZ3UkHk?P#c-gTiTYj#fSm2=KpzjY%*Vn-Wjqy?Kw~aSK{T*ghSdm@k$r8q*3Gz zj?-mKBPUnqP0#<*l^*GKJSHFogsVvIm1LS84DY*YPTm~`wybaE({BDeMqcz~uea_> zNxnA#Fx@DNL=#Nw8cDQBuoRe3q1k>Ee3g7szIV_Yo732V`5NB{tyhvv=5MrP{V}sz zaacJdB5B+*%`%7nu#&x2A?}^vRw4D4Ca#(AE_UyLbrRc^3e`Kpaqlti6Ae`dH!mC! zagcQ|04el7P3@~B2BJGLI@IUKGO zDy+rlVP7VnpXJ)5#!Ha-F8z9wu3;1wg?bKp$21nKSnxI6FkFWc4c5GNEFnlqdCSpj zEw%h>UPo~blRWCLw6oJ{REQ!P2e$RSbodzuPCfo<6o!Y~kFIS~-(1{7Q?@HrZi#EP zM#G21KVA6ooDvc^N{Jh=pC3-(zs5xdw`TD1DA5RwpykcLQ!6!Xw}U>P1kn~`>hcb zk3c&vbCtS^g%)h)sTW|+Bf79@XU!z>E+w}~*~sX%+-h-RfbZq>rFev~4{-Xjp}aJp zHYo1ktuO4>xS=Z?0a+itQ!;Jw#hSCR{%%m-43U(``?#$|y_Ao)lOyZM#L8%e`R?i5&%{hF?mO822%w#$7xv1 zJ!;A`iC|*8hl=>JYP^bW!F}UIpcLJ5)@Mfh&wkUxQL@`Gpn(2A8OeVMg=2p|x^`;V zToPilU+zuJjXM7Hp^DY=XV*v*Y3)`*c~cm&W6+oY%~~;ZoaGhVbo*0SV6Al7??3^8 zHW4Hw1TOu|a6WZaA5-tzg|@ERE?}CuyzCkr#I!Z{r{(4>cdgjT))UI3p)# zg?$}F;uqWm*gS>t1+|kd2#SxpF2;O9o>i%zrE9zgb?~igs0nGXU$oRc+~}Sb zsi&{laz%mQD`{l0pcd1rOcZ_-5(TI}cEURG;GatawbX}i+7bK;#T>@^OIJzm%=#~N zi2WaVH+N#!s*2=%qlQ*l+I@6Ln0+}_a=%V0KN&GINjS$~`X;Iz8%c~*<_0xC>k)ka zn=9$&YyxOgXnuKBSqt(kf$zKrzA{?<(q23S3}c#P1C#}+dIZuBje{mP=jBM z&0%I{bQq_CbtC;yiWkqfnYh1)`q0%>xDkBPh#WkP?aTNrfA_5QkLJi+ez6HaLmX5l zY&G)4*LgSU2Wp!sNe~t**dp;#>5rQ7dW8gQoY=@B9Yp^5>kn9Vq+?=K!W$#dAqwB^ zF@=|@-4pT4@F%8=G;iEBilaY2VhzkGe~)EoT^O9kiMEC9y*dp&{uO=~2*iorz^VVP zpMqxTX+mbo!zno}9o5?2mzu}6|GwohFMHGd`M%BBY3Z*Rj z532I)T!}v?WYX&7;iw31J##Eo!WfAtJD z91_{S5NW~e!Ac64*Z0Oj_i0ch|3p8%tQ}&sSc@`Qu6nng+TkM%6J7bm!7T#28}X^I zc_E0Sp^YJwC-(o_I=PR0Ej48c{$!@uGuxBs#WHbo|HkL+5PYw%|JDdy-!nJtEdpQZ ziNXe>Z<6jCS$U&0)jGa#Lz~Bwqvj(gg*v50&z`DN12i3qt1GD$FtYJ&P7B{v%`m4J z(&mMiKQ5G?dLR5zG1;mfm7$Y&FUu(y$~l@onrtg0h=*=_>`CAx-ObSA->1c8n8S}g z7~mKM{R`gu?|q)zM-chJj)V0ZLmXaWw9oy!^#lSt7RtfF4~Y&bYK1U)(aI3Je=-J0 z;7|iH$z8^t76Z|rE~*5}LO44(JABrETKX5t_x__d>|LxD{y+Ag)1TmQCGdQUqMmWt zEf0lmZV6Y1Aet5OTSMtpz_ht6i}fvirtkTv5A{PI2 z{5r7qx^%z~Mu(R17~SG*${|GqrW?-G~2g6vY543%roHRra)F7A5CU_y7DVAdfFVjU|CU{QTEB&olTR0Da~Q|pJZC1l$4Fn z@6oehN$?201}P*@{XX6995{DmgoF8c%jzY<`IG+h-@!JDcDvm}dEL*qXN<96<;$-e zjB1zY+BKg2GntR#@uMnk#Hl6<3flzf(=bQW{>dDmWsq@^{I6gP?)#4A_7@fG+I{H6 zeWab-#cU_$EXcbC#*f2Ug`8Pzn2VM1r)4X;2 zLzfm6$~*1v77wvjQLFG-2<#>?H6!95xq3T2>KL+_W3%%&??OLSl4@Ac%6XN5V_Ifa zCh$sr#Lr=q^wA1-G@;I_PF*=q0~zJ7hfSJ;dC#yEAJm{5cB8Xv&!lI};OId2WO7E0 z>qm~+%3l#h%0#o89r4AOVfeM2FS3K*@)9IGXMERha0%p|!+0d7m_k8xr6*3M{_zP8 zK}_^X7nG1J=V#a>M#d$HJ9d}y8Ry*R`2lxAEcr((D>a{#-oV2Z^McFDSZ_R!z6vG~ zg+@b77T6lrc{jns+MWvLVj@j+#-vkkyHI=1UDruK&cJ^&;JJX&w zoM8mK_dZ;K3$Hdk_ojLqjyXDt_5qs-m5FE`dsFpg-2d79mFVMhQsgsy^#~Y^USK2U z|122f>tOuh!Gxz)Im&M7~AXhs4K ziP&Den1~%vJ5bPkL-1K+KE+r6XF=bIm=?kzdu<6%baY6FS{s9(1c6nGrZBHlmK%_t zi1>Y8Lq#SSoO#K8KPhA<1O63cj#!KdmU|x&-0+bxy;Wl0iTWW{OEdfHNOv(Avrr=g2yFuPtf#nBa57~7eTk45dx(~5%_37 zUua0)RskiSj$T328ZZ6j25}vv-{beb-0@9HBfs67bL^M@Pus=%BuSY&}`I4}b4)%>+E^y?{ z)Sdqsq;vDHLsrw4Uq{V5C*iMeEj3_Et(OIM_Dk`Om8W8FA-a=O?%eG`z8N=Bd;o1? zx=7uOAcdYIXtiqzAE2)N9@pUabAYYDC!RR}7c}Cl1H*)`o`DaF>4DMNn@JkJxuux{9#GGgIDal7eP^XCk>w z3{~u#D$ER$)NFJaO=Nc9u9dlzzXZ$lpS&*engVlQ)~R-|^hd|no<(ZY-8D=U`&uf! zC;4^kJu|`Lcn?&?%Dw}58DaWcllV~uL5%QQk1G+aZx*YYh7u^z19&a@o&UF7|81sM z;)m|9ngS9l<$7M+SYP{bB&XvPHvP44+BQst5>4-di9ar>6N_$))G-=)6RNiQzAkd{ zdIup;?YS6&-s={TdA%Qk771H)XCLYR2B@I7JOt(Xt+0CJQ0$<>Dr0!ieC zjxrT<0;JLwFm!XHxZgp56X{Jp<^KO#J_0ygIvsP8q}jx>9EqDuX}%bGY)K1!(D}t< zSCWGQRB*CfCuSQaI^_2?tA|MJ#omSLUlPw6)$;pDHEIqDtc|o7q)OW?VI=>se8*rj zMFDXIGykY!(94XJ!C)nOdOP+N-mnw>%?7q7q|bhmlN6*D7v&4R1n7+2C$@Z(H~)n_ zdX_h+T!W29%@y-{K+d3J*UbNjn0GWIFBra}>d$*%yhGPtQ1M~RvhTqRRE!J5|7p%- zDWgs=O#(J644x^4-3{ch3NSn11>#Rk5Te+SM4AO)E)$2Im>e0Hv~fRgRx} zG4VXP6xr7l!=ZPY!b68}6%Hmb-|z-HlJ&JgW(qZVNOU{?F?yIhn%_*nbsPdQ(w89ot=B#ZQ6iM)tKr;K{}xRj|) zvcWI5&$h?`UQEem)rqSUe7v(Gnltv@iN**eJ$hG~0o0)+_G(KP(=gT+E{TsBHpUaXULlwTkxQfCu5ldi=3z z_spM9of>grS^iOvA;tHVYbz_kb~%BO(XZmahGGi1Q9Wof0aVD!tE zOojQakDzM4*Kdx+otn06O|4m2Djj@LPRNMj zzw5=i&__=WD>e}Uwr5*$HXXG#34W^;y9xHQ-CL#qY~4BTv73?qg{kDhobn9HNfj|; zmJ*9iOuR=JI-i~H$LnA;^Bp*hgfhx;y!`S0_(Dc%;SB)e*0e(CT|Yypqcxy+t$)+` zI46y9YK+Q*YW4WO`|s$W*e`QxM=NGB2J8NmtaAxoUZRijITMlw%UF;{a_7(I@yH4B zN9hQw+#2mu<6{H6f*X2>`CiZ$cSZ>4ynLph^a{vkt@<~cI)rTxT&$r%r0}-ov)ZP) zJRP7BmeAR?NFOeF`96_y?%>Oo)a~Vc()7I0PL#oWQ&T|zni~9PH|QF{$X7NhizWcy z0tWnEJq*6O@%2ZN-(Fk_+S+dI6bOIG9fN8^4u20k20SpxeB@A1c1J)P`;M8x@`J=O zI@0!KB9#G(ZNTEL&|Lg!h*}9%rHEi`|l3ryHIuhaMH|U!C-QZkOV|Q}%)+cG`WU>uS z0CIXVY9`!)mV_oz@vkK%mmRMy`JSIGkjSm{gcEY`m0X#teXHbM)fCXSw{jP3hnH?4 z-uXyaQ#kcOdpURk`FKx)K_55UG#T?Z5tDISL$qir8%7OSm>{%;CJXfP=3}&H3_1xL zdMk^O{vSk!S`Fj$ozk6vaj(DF`GoAl zk7k-p1T5NhzeQW&qSW8^%@shg7>cp12%Tg^!8Le=w+#DI1 z8L-T7A}{$s6SQKUB$V!C>~@f9c(K}QXwfE#H&*0n+vmEm??fE(+xmGU;+0ZsOTZnY zPhzH1H58Q)W`%;iX8JbvN6zKz+iEYB4`1lM;%ao+B*FVmJxywC;AA&OwSE)~Ik&`Z zE%8DQB5Pb+DFaPR%g{x`d>enD?C9)lI*9@Mr;{6A*@f5vn<34+zMN@nIz$6Z<&v>b z{*P0(#%CKyj~y=m`@oago05+X^q1Y;S1swUb5&n zQAh(bm|IUTvuzh!tlyby`Hd^L7lWjt9Q?KxKOc?`^yX08jXU)0sxLAvMJjOowHTrm z{5xyg8lXM|J$KhTdwGsj*H8;7#mx86T(pdLY_0)J{E>qP*c|s!^`R5|y)6IdY+8*O zYU%se*|g5lA@l25iPFxZ6KNZrF>9Fsr8k3_YbLI!b%he4x3+gXj{n20$~H5#_nO0w zAYY``vUDd5md(HpQ}5}qN+N9$|0xIHIPRX4V}ju7!me)0wu#v7l9Oiw70d{uaNs-^ zz>9R+03~7KL_zJo_N*SP%Fl6^35FU)K-T>S(lJJdSHVnVon4AbR2Vw6KqaOp?yvON zSiQ3g8k_|&bx@5QquR=|-RhKfj_GNwkwAak&IvTMX?lx= zeVO$QksbjJU;%d&#RMs8xm^_fa)K%kg&i|Dnb*vqH8YBC&a}C_88Ob4{%FC$yun*z z=4J_{JFhQ+r?YOj1#Yk3WqME;T}}hK#qkhPROuN-tO%!|AX(xZF2JXk>$m+Qz|+r9 z80Ry@OX(#1aG4V{6#`y3`zC(g=Dj9+Yj<&|9dPOgXz>DGqa1t*iKIi#lghSSJ4xgeIRz&7L==yLkI`yKe^?mIpLeNj zi?=BY%@9R65=Wp_4mJGlmkRIkgusr^m6Y2dqImR1j2TsE{AW6#N(K#`{BHuti}FWV zlW%#tR=k|5!ioz%Z48xWSC(gI%&hb#Fvvw$C24?C(y|8_ljPB<4esyH0J3feVKvjN z1x%1fN25Lo?J^@-nId+W$cQ7A9)yQsqZUH2Cu_>0JUvFd{z$GsF5XNsdfWp~FzD3h zwOT2?0h+SJZP2hk+SJtYK^mZ|rP?R;{LJ>OL1)ZDJ5ID`N4Y3yO6%bzS(F09X=E?C zsuGK;gP{z)si)|gj|b5&)w+TgnPF`bWi1OC8ZF!GvYnTk9gvUT(+kTm(zu+?X72*h z9mnDdVFu{j2h?)D@x*|tb_rs^RBvWfC;sipkU;=L$eM~Q0Zq67JcbCGT%P2L8=apdo*uVf%nLu>LghS}7gBCH3vqaSP1ep77?^HRq#EPn+EsmjJ z3t_)xrg8Ny71YbvmJrtcu+}-z{R@>IEKWi)QcyQT;SSrcVs#pGTOyK)Oze<4E-c0c zY*hTRN9(!%5frh>OwTpS`a1XN)K!XG;iO+$e192WWingIg9lmlE|$!I@IJQB_oCpx+h z6lc_CX*aybc~)^l?z(u>-8q1PzyU~8R56=Ko1|B@JTy4WU{*luXEmS(%ch%CB|o|T z64XzH&O5hp4i>qX3)+@b9C7iNjaKuX6at)o6s1|Cj~9HifyG;pUGT&M3cy{ndevwd{|0kRF&5j+P6UZ-hSq^_u~j$cr-7m@)^l!bK76jRLPuj z6pvIzgRniIVV}SAHUow+roO(y?`c@y{E5+R`8VUukfC>5JuP1R78J?~4Q=~mBIedp z8@>p;KUTj+BIiNvQF85<43TpqZQpQB>p7}H&ipwA;IxdV zh6>63;ShX);Vehan?%-2`?#;+KqBDW*6U$$hH4b1^y(bpy4q!5FERzQjUO`gu6UNI zYFc$TrLkyou?YgaFogh$H{H@x{ z9_(x`OUP}nOR{Am~OSuHb3j< zhE=(ZXe>e}NdicdV^Z>tc9_wb`fIE+Xr?A}8n=9}#$7|ecjp6i{^~DJvLZ13QOlQ0 zC9k4$f_x3K4aTt^)`yz5Y6JZJ5vrDe7~_~Zm@=Wc2j_aquzT9R{cCPzG1m++|BRHV zp`;)3WMsLIJ}8NYnlWRLGyUh`kik5i&9;g(2o0w-Xs0E&Si6|wU-22+|06zM7wa(8 z$h!dMNBH2g$7j8Rg3++<=4;6CVe8qUH#bSh&LAUAN zb^zcx$~)nCJzLskYBKj%P~lw*VU5;HjE^5UatS9A2z@ovphEq2&l>^lmPmc?-c*ck zr7>D~U&la>xhk9RXII}9;1TL8-lW9?h|z{E``uiS{66%}*KSeOynbt+}5RipZ_`A1=U!(+9u-kX2d=|484!B4Zgz z*h~_nJMhy&X5G2j%MVj<>0_G>)yh|)B0IOC+O}K2pD)-V!t=;4qAy8!C{kRD6C6z* zt5-5YFEPo%KB+1 zLidUwh8UE&NII*+Y4U{4EAkt>*v>4m4p9eF=;EXd~dTX|G~MK zL1M90KkRB`Z3oJgo(Nbys0gCp6Ti#Y8`?FqkT2iHfn>aBh1FZ}&Q=&#_OVN zz8dSEgPi3b{F3v%q<3%{_bttaH}IQ0AYJD;CZtWibFz7y9>tFK3TIi(m2!V2Egb_t z-I%9YmII;&==pEn@R*PP;7$Fk@SiuY@je8*?U2^~hzu%(z`0WR`fEvm8W)=l5y04c zn-F&O5?E;5{;c)#X$Q=Fu?T_4Ai+i=qu}jWah{7X^Lg5N=!i+>dvk^Sg@UCOe_qkO zqo&;_ttrj`X$u(;Smr_pz0tSEi2Rczc|A;0jxRvWv-47{a6ta{V~|?zhsW<8aV1L+ zxFDvP9z z+dt~)VV^`mL?8_HaB=UlER%C9zysBRHm{9tIahH}!(0byPryMp{wQ~*Gh8nuWz6kcCw-beLsgAr+riJohywC*=r0$tduK|^y-8$s#@@c=YSGrJqM=6>LV1_(7~VQkvpA+K)E z>pm^j&6@~C6`2zpROIOsn%hV$70hmvN1ISI2 z{%83lc8HL^lhfBYaTw1gT3h|p`xUgdHtYOdqyOZfGeS^eQkckquU)s&96~d62l_+8 z*vEKxxP3f1n)*TIg~q6;IJQ;UXBj^&I%flbUIN3!f?`GQ?@p43iT(j35{=fQ+wyMpG ztA_{GSw>yiEcnr*HAK?=C>25pYw092f(4TT1bwkXGntkXHlj)VR(tz1wQ+AD-W zl<0%bc7u6+E@kSdJ9^vkpl9rh&}Yd-3WH|};EHRu!PGm>%neel_G3x5Z^T)1f!Vxx z;C=n9B*hz4G7$L4JLq7n*6iUg3ea8K>*{2}K+3)rvb|Iy9R5H*NNJ-IBfzqDqwZ@& z`eULBRb_FH+qiU3cHw(v0KMD8ub8VaPI0}wiZ^@vcThi;D>CApTV$*2oT*^x8%Nhc zx__oo>iwl-eJZ%l;hR-8p5RP3VzM&Em0-sGR z4-Bl&y7F4D8e0r`5A*sw?BLIBaV7gx)K!5?FpR<X|9{qx_#x*7=1L)xJSlWD& zrEIA;0e&I92U9h=H*2vDMNa-eELYL<_~du5zH2mB9E<~*0xvdwv;9~E)Z+Ppk}z3G zKw|irN%iKS`pl|OJmdxlN%^>b@B4yhIp-DxJQlC!+SsVZyesaw0s<*;_I2^#`1?YOIL#u?zP&%YJVkw z3;v(z{0VW8$hGzpgzFF`&H*ob|9F&|p9QajW9JMlmOpCEpuYz6g$8)P*#WCG1=DC= z{BZ^ddE24i+Q{ERSHlgLT1Re;J+D;DoqmiBEJK<=G^uvv0h+EV3H$m?|EiE*FR)nkX1(7Dvg6j$S;)ONoeHWZL zZ|>F(K7iN?d()ra~ zeOqF=9LnpVzf~D2$NPQ8aK+_0%EqjRe&Ea|1}`!0)4cNhtTP$qPlH5PE)u3FN^YDp%G3&-SMO5 zkjQQGr36^Jywb?w-={+F1?py;J=zG1ReNjApY@0lYzL>5S2 zB{jKBh$KsLdl>ZOe7MrdRDI?nq0feV*1SO&$ur3^91+<^Eho z3S@D(tIul@sY&}~o&^%rd20`etP0vz$lQI>-hE4NCKD3rQTfj0Ua^dhGrVZu2o- z!1EFT>J(Bx6RaFIN^51g57T$+`RfUQtRPeT$BbTvENJD5JZ%0#c!%Gy|36m;AM+GT z@RC)|R7RKKD|$I0@N4W=TdNz5x;lH0H}*+Zl#W7vP@{Z84eP&woj|ulnSIuo$l@R{A|Yeq=ZIT}^KD$aKxmD-i^M zmWl>=x?gu+^`PXwai_R;&Bj!XF>u}aptejtjqEv}gv;GP)Nk_YhxO9xguG2ysPcI| zU115H7l~ctzCcBmM@IVkw>59D2g8D=z7{tU)qFS2NE;4(9%#z!PY4PmwbPWMTdI+P z_gc<5FZdfohf@wcvxd$x%>~DvWVgEY{tmxZE1=?c8FBW$<7MnmVDNh)1IC&M9#h{R zLV&aekWCm5OWJn0(r=g0_u-}?YF?UK?Qi{kk8c~Ha-oAM`{T7}kmU~}Hy;>_Cw@TqeB_6`y_)L2fHIDI$sa4BjUhyq{jLGDN&Hq|W@5PP)87e}{$0hNoe z6J!m)r!DR9+Sh-^lN`xwbZJCa)ehQ0xZb1W!ul%2St(eSA>gR~aaZVDG?IWGs^n&8i?-)AynxnR zWQufx;mZ&mX40#Z)WJvz;(wiULYSx3Qz9>NqAhj^}H?_=UBUy@q8QKs%fX5KN^#{ zrc<_NEiQhd=t}7%PP=a|cZZ2=l*?~vFAiW$C#NO2H>9d!B=cc|C-C1CH~3)LDRx8| zB>IIeVQHwl*qvf3@O67EWGvrEbAW~fKW~v`ErlB(gH`XtN&K-o%6tNgn;dv&g*f2(S)xgL+^8HR zx8iwL1f!nf=#MvN?5=-Wj;gr_axb&ZuJdBjKl+hVs>faR*b>gwj_;ua9! zVIQ^+i|~MZ-K#Um-N%M1a28&28qwktd4?Qy5)f4)u4<@ z24?^{7otk;jPo`X_~Zc5LXx!%3pyTBIbpxl9EQPauesVzgk1qK+c^>71+n{!DoEta z(QpkY5Ow-0DBzJb0FFZO$B{MP-qraA-li3~Uq!)-nZv|jk@J79t-|h7qxgE@Np)%5 zC@su<{BbM?5i+-bc>+(#{{~LUh%0~@3HWUH-Wk%S!@fE{+r_IpwG7-|wdnH9;yh40 z$=utkF!%_EnYIT=@)-xd?;JJrxD&lfWeh4?kuCYj*mD_hntgDO>_$*ik6V>|K1)({ zWA3KgU!58^Bso##;-I!0Gj1A}s3J3I%rX=4IRYPXN}i}}6%1=y+!~n&-8HQxRJ>Yd zTQX6NlKcMdab6^mkvg?R8j6KDiq|LmvD}&<6^CbYqwW=7Y{iJomJ8Be3>JMFz8I>( zP@W@otn2f_30)bcRR}$rDNc8bls26hKKpS7tKuZU26PLb`lFVLFsoYc@Su7-q6?`R z_|~cY58SM}f=Q7m*NiUPN#a2#5xlNI&Q+unZ`{AmnHkU67jGli z`KgpjbTh6gU_eYnkH4t{oO3h8DCmt({yxss0Vx9b<@sk+{pn`=$#=Pv>^0JW4D*s3@{uF;j%Htq2n#mF$1utCMh zdFG$V;Y@(^2*niRZXwG7U`iP9ObB3{KzZ;Irh6iv_6wYLf)$z7#%Nwk@jd!wz4;em zE~jUjTRL^W5zeTDmGd;W`bH7!<#eV8y}VKNrUr}KJ)?v9Yc3Wt+6zz7rkg?aX_Z6h z8UJDL!`1eYb@vPIlYZbQ?^#&TS&tUm4^C6B0j~Oy9D|+d@(k>d`4#+3-}U!w*2|wp zaFx2n^SLV_g!UES3&_{+U?4GI`s6qtTJtb2_~B=22~ym=6@TBr8P)c{p0E}ncSj_9TnT!uSU14Z$T^2jTgIF5 zPIlmx++K&;?a>z%abh}I;(qt(*Y3MTu@yD#UgRIs=rwJ?{Q2uMkT=#l0!!n{PsUKJ zU!LCpk`|l*C*s5_=a-OBTMIm{jP#nl6qEO@4krgq%oIDD!mah-3iHON6`CJGpd|V% zA6t|cokS@@a}i$cNHJS6jzos4F!qK*ZirwWLr~_t1>5Jb$|u7^i!isQ&lH2KNkeDC zA6yJWIfo2hZuUe2SGNM z+1wI4cwWk5I6Q;D^2++3z=$Q1G!bvI_OG!y-xo6y$FXFC?S{u}`(dF}#Pan4hIk6+N1N4dh2-ZJ|so)jRv1+JLY)pHpG2m;L zJ`Qk7m&}$EJBW;{eMkL0(g(wci!m`0znW+MTgfZsXxqIx242bEeAKW zHMT>Z!hI=JEFlxv@iKQ$<6m9>Ds4=y2yNYb#`d}wbtl&Hu!J_S-v(ojyMR3o#Qz&) zOzbFUUGaaR+W!XoN3|O9E1zAFNk=?2BX+YFn7z7cZ4(eIe(&42aUSLuil((YQqu;L zNp`c#S4K;#?GEh7OdkTX*9fPl>O*4rvdw(^fAU{>X;3`Vh-6QQlpCyLPdZb11^nF0 zD9zKA7>0&@=EZoZ2hUU(Y6n=l#xf{@=V_SyObgkO;Du0amYHh`PoFmk@_L?D3_CrA zA0HpuOp`jkkVTT@D4=VPlF~{P@{uJhMJAmL)q1^ui+m<~{hAGal}YpQ&APHk)g9fS z)0`HSads+pA88~>+qcoV_E^J&XDVx&7E1nCg+J;+^T_^*i!(+pT+f(Pt6oj zbTC-n76)G=v12@KN&-Ct`43lQo=R7xAm$dg_3~;EKJoVv)!bryG(Nir?H>L9KLFcL z8Vn2UNoRUu;^Uu>ergqc*JxE`pL&b^wm^3$4rF7{Uo|1~*)-1(>P0!rE8%~breo80 zVoHsP(mL#LF3L8bsv;WcS46#4`XMzO{lH}07R1wy-E+onTRIM4KH0UApVdU++h_em9o5yHl zieQ;N`#sgC*D(SP<_WMc;u^zRmlMi#^-@JG@4lARbgCQ#cgu>*;h7ESFGl;zH13li7$MCO1EU*Ik(jS-Q8?EQr z#RgWYo$GgR0v9pK4#rldpq9Gh{z8BC|F!p(QEhfzo45u^C=iMVik9NV-9jl^XmR&K zaSc#hid%u=-r~i*SPMmq6etu4Zovr-lg>L&pKpC@X3ekpH!KKuAXz!a8PQCY|+e|&`x{|fDKqvZN#IAR<9H*K1V<)|x z85)~eJvC0NX2SF^LNQwC`7MpHd$p*ePA@^El7^39??z02#u*ta51+ff&kf+5P7AkK zuAIlxFuKz+WG=@INg;*4x%F!K>@MQrTb+}a0#!HQ!QE+f8V-Y`E@3RitMh`*Wg(v5 z8Q&{)&H@0_o%H@c%p^BIbcke^j-PLh@wgt6D^wg6=;+p3aoW$#ePbN32c-)Kb-yTe z-rGiO`N-WHf2OPsY1$TLwx>pQiK^>R&B8E9l6LvSiW;7Wbo^yS)8()frBXbN)N4~M zd%8uQVYzA%Cn@7bX+H}KPZpO!FkL&>98dvR&Zt*aGN;Xc-f(IdmC#R(F^1CYJRk+X zJBN2|Q@Yf{azzb_b>c7KLmJ73C5;VUak#w#jK)%Q%ro)WL!)aqpB;1=RidRJ$Cf=` z!g}AAy<&trsI1@Oi=!C#nSjB`tX#zAiGYfw5~ z&>EE6cP>}%Z9m=5-*p>|)+VuWea{*sHW8Hv%F7p0-PArZM<0#csUN=j9qqiH6t!$c z4H{rdh@q1k%XhL^?vpE9j5Z9jy_MLisnVEtTUgYBd77DCb0_Xd7JAnk`%+PuxN&hj zJPo-LPyfvjqX(bJ`MdfXdlTcIu=K>^W7eSV zk- zn*h$kbIYp?1lSun<4mUcwH$G*s$1{FKe&5Y(0e*MH6eTrHQ`nhKc`Xas0f3F4gy;o z2*YQbIFwHRluT3BWU8gK+)rs z_>^Qd0(RCox!$o=jeA08_{Yy&*-dnmf=<$o3NJKcQ?uELF)%;BX&=8Ni1Xb3Va?(& z%xw}+u?gzJFIW4JRKiO3flFv6{@~0a6LK?)7p59onQ(lSnBbJ3P&^0$DF3Q`E-hbB zaZ!j(Z*qDx!>_P0GM5SO1I9_>10=C6_bRK_wWgXJ<@Kyio)d-4WGG;*jH{hy`{Liy zw()lmGXgs?7Dic^ZJl<+RAqB0t^)YAnAmok>GwZ<34s@re`!_l$_v=OCjF!*7;TN- zCi(&k6oUK1>lC&nb(GgyWFx?!chBptb3*|#&L~?wH!y>_S-3ExI*o>mN#HckEpC|j zicmPTf^@h5g5odSyq_A`G#6sBn#@K`ww*;2@$}*uwNibLt_~*SKzw1fne;a|QIavq9cq40K1?v^~PPcgO$HA47-{p`dBfOf1+rTJnt4QU4MXgHQFAWPnV5}t_Y4o zCEj3a-mC#1QdOAP=D7iz2wK|-Iyl<|*D(8ed#eZa4#gMh)RU?V1G4BsE-1s?+2gDD zdr~kks^l>Qjfx2+=xsuQI?5`T-a+Lwzf`6KOfsdmm z9&-_hwDmxcLx1|Ab)-5e40GKud_X?sh4B|?_L(dO&8n#P#uAlNy;_(EpC(E(y9+1c zalDfdNgMv5TIzC@`pS7D)d;-vBVQ!;o&D_Vr`>v9B1!o@+@KL`SfFQ${ifPSA}4^XYA|K&;Zs=$REt~3b3QG;RHF+zJbg+VN8?I9_`Yh9|vFE-i#PN;@9ny3xv~%XdCZ)(jfsdiJzV34i^`R$sIBQU+XqmW_Rf?$&dpEFWj4WB6+I8+%j%4d z1S@&;xm&Qf(hP&=!iI-*0G_-?{$N|Fpg0Mbv-KEVa~#t9DYZUOzYRF9bG4*DH}5{a z>7#7Ag9% z8GHh6irL#~RFTiLnd|Z3u+y z6U|dpGZL2IM$W|By+d1L2STqPBzW&!GVEdHJ=8p_)m`9U$+T5#xMdklID)FLNjb`g zrt5fM_(dzX;JpCa5Tk0jdQVV`ko&{Yji*J<2f zDJJy_|MG&apKU*!aN2lQ%~|0q5cWhC^JUj_9kwHdjo8OYOG-sxprttY(Cua*#CHAC zLYGHj>$B=?Bc5aif`)_v{}y5_rGEoNAJBHwmd_n$T$&P$*1pk{<})u(Y1k4KM832p zfuzi0a(3cEJucE@QAMt{P?dJBMvfJzJK(hnTHl>{S7D4*Fy+&?ZvoI*DLe+Qg z7kE6={sJ!hqyx9(PYRK88xN2;#|fUa%@Dj|TITGOQOcAQXO|#SW;&U;P17#n*to>o zEgBz8WiMvJhEKle8#7!AuMvDxDMFUJdTewUAxs^@{LWaV*YO3gEz3p=#yS8I+{(5V z)h%(NVu!FJn_V*1=je2Dk(~i?Dnig!>Sl|gP+j*5&W+nn5S1oMoLqHf3 zB0Vgc&w0YHi5Z_dL*|*rKFW%=gYaJyiCUcKNFcbPH?zV}n%p&+*^YShTd8n3)_FyN z8B>{lm7LXyN2E4y#;u6c1h#DgSTe?T^96X{o8a>z&3L~)dg%@#@|8)1n);I1+ak)eE9H9?DD!LW7W>48-t#Lm%q@g13N1>HQR9xk zg?NAJW-AZw@Z%a@-zCj1l~bHtwBBnxlx61OLah>2!k0NI|Cl5Yt0Yc(pTvuO6NVYZ zvj)Qy8RUfa^t7;ZVHF$dmFlDmo8UbYqie6n?4P8Q_y4AO+DB5z?*e8Q%0YO0_+aYW zQxq0^@_u+t(JfH1CrM!)7q~03MI#;*7qq$s7LUtMT-^KWSO|#CFaFq+7DK(lH8Zai zW}TcR`5t+rNhcnTFSmZpn=(L#C-qcza7al!5Tz4V75A5?Now%EhSvA|+Br)O6E5Rf zK)$r03r+n^!XJQkX#T5QiQ}QBUK1eoOa=7|3kSh9WX(dDv&k^`7BJpf7>T5pflzp> z_$rD_AQhncoZ~=~vR1*Xd@#b%)$4UDqB6jevLe6K3?L5Z#m72v{^_bc(ndh8I+Its z%>lNyb)~i0WoKM&VV7^qRjRnw19(ZquN}hoe2nUd)Xu~bA1}r5Py6bq!-iHws(ak$ zGyPH8_y{DUi?>ue4e!T-&-g?`FY^K}T?HN+;q0Z(ZqV-}er zNO$pju&EQD&8ocYHf(=5t`H{IesqmcT|}c(!=Oy~Q~l%Rrv0t{8G@off0j?bEpR}G zWLW_%DFPCpE8Gus$`hD~3k^64W60)*%62OcG^gN6+u`PfCY~5JgS1A^e#BdBsnaUi z+_0^Tnl{41&CHF@FrdxCMKdM6tkwuM_5(Wn-DyF0P|hYw&TNg^;_LAm zHXz!}l$PQSmc-B`Ho1u2@7{|SEsD>9{(Os)pbb@@+sH#EvnA%?%;O7Qoh>0?m~6?~ z>3C0kF3A9B96Gld3QJbGY6&O`>1>MsGV1C3p4@tHac4xXMoY<*1&OKlR{A>{$Lll> z62>D?*+)I_o`u~Yejmpx4c&1rT zEbi>7>2CMdfRxONf}57fUrj11j9{d^8Y(4P|9N5-HfSUCn{W!oDj1xYKMAH14NJ^V zjwH$nO?&NxMgyaoKth;fthVUviaJJqbbQc+snAD|FJQmE@Ja6_*^K?cQ?9vKgR_2? zR?xl=N|`YNa1O5_eG*uj;mp^(6Zae_pvbhyNl4MxBw~|zoi@9wooM?w7ApTVkJ_=m zNnCWYi8mQZvA+}Oc1o(%Pr~SNOuBr3i-9jkt%xWH`)Fqn_yLo_P=O*Y0f7j=ne2Q>YCdA1*mJbTOH0h$70GL>~!crBS%B5s^Q9@`z5FPU}-W zF)pjIG*vaj5yX`-e_cEhyyj~Mc*x3|AQ{#vFBU#wWbxx=+RwtOS}G6nlUn+BvX|-d zd)x6I*txc>;Vb@^v1r=!BOe`dBXzh{7qK44ROZ?#uY+8eFIhDmFhKrPlTL~XuGCIn^n^N`Rp~SXVJv0w zMz&-{b~Y37NYg4u8hV_@9N+yMH^2NQAbf~glnXe{L}kY%c;rdnN%2}w z!3V?G$~&;E8p<_a))6Fr(0LH1s0sSa%Il5hatYW|@-rn#8b@kYqBZTY6b*696*$o1 zR0u+Ykxy|Z06K}zH0XGS6 zYY^r)DnN-CPl|X*z9r=ZGzM+}tWs3Ikda}4@4k9d+ zJL$<9r)=cuQpfrm&8TD|g>-BlIzMtZG|r*tx`Tf4@9sB=Z@GN*(uEPh<-nq8SKsTZ z*8RMp7n&Om$G&X!o63g@LdZ`@KiSGQ7XTBFaUwOecX|@=Bp`dtioS_4XAHnyMaXoR zws}Q|k0O=fYe|}NBKAV^+wG^!c20K>I6jrd|;@jL~h+BC&aRvEsKF5iO&LL7$P2 z4)*d2FUaJX%WNIke4H48zUC4g&wfXFcrnc_gxJ1f1<8q+S@74#Xoys7gz;=PblVyS z%BxUkk>2Of@Mq}CV7UF+UPZhoMJ)f3>I6+doEz!)Ysb#7W&;RWfrTiuCdzSbZms>< zh$&eqhgW$VS|NkOr4X%K3?x;GFx!(q^I3b#iBbpOq3r+1@gvqUDV#U7Vb+Z9vC4>^=u1t#|3!p$?2Y1lvxwhh}mUW zv%&Hlyn&W}XrG!Zt{E^i^1t#A!SzlOo@T<+xuCuyTdD#-774mJCRz(V3mpJtUGT@f zNnfs@kuDWGRFgjCG>morY97i#0nz5A&v(VQ`$^DNf$gcsU!mcV-}|m)RGEm8_CQ{A zF=%Rlsz_0dkz6cRyMp%ntcx(Vv1P(2Y}(H|Q6(|1LP4~i=KCS&v>+AvQosxOo0gpd z7Jcf8X=JnPo)bF1gkD;X`NlQtOZgy&rm;yxZ7WX7&z}VqjTBab4Utn*3|dA+Z57SE zWTmSv%;Dh)U>bQpXSAar^uFu$$>_w+fTET0V4+dKt1buoaLpxxIy=eV;XaWwLgR}B z6XuUl1wJ;z=s(*!3QlALVr<^Q_c@%15kTew)o*S6KaHgm&cM7-*#Qxb(5zLve5iPE zQDvlJ6}&sOfsmX-%?J0>Le78+)F1>3zKv|XjTGqsE1y{iFOZ;`PH5~q)~Hfj0Kkdoxeccxra>+Llu%9L6(qX`P> z%%-~4Uap<9lMSlIoqVNZS2>{7Q)w0?pH{^JTb^8|m-LNL9-!{_$4nh!UF~Kv78`6+ zlBdUf?|ow##vt-Tdr@ja(T6Yt0^0uZhQlkNv}Iev=|R8^Ow<>3D8fsNGbZ!19#>ye z;RT*-W9dO-v!Fiu_JQV``uo1xkjNfToj%OVkKCpNYenaF?Ioc|U4d5#AyJNL=_dsHF)psrFQ z21!A;6|pcwR9dYRCA-~e+3W#(~0Yq(2tWnsde5}@I|@v;j?B0 z;)x$Ce^p9&7t25%&nQSE$0r)PrU8iKpN2_p^6~VL^Xxn{n|X>MsLHdOnP6`#Tl;Rw zsU=GnRiOxrp%X~kZ1#5iWrmn}cJX4)dyRG!ZW0?J@sDeuQNn{EN`sN3EJ7p7MQsd9Igi-Tf(DC_*VxB?8YV(8{2OSv?-)k1|jarmH+X;uq!- z4ycv* zz-+Ft5MYpvc29#nyx?J#9_CDi!d$sRPx)8pGVx}k`ldhy{P)&j9cEx)HMQanV0eux zeI+|>KR7XoG_D`5sj&GV=2w9{?aZ4H0yu?zI1@dLZsnUeppb7%3c+Qn8C;C&#;_j6 zHXMZBEa&fxd$mkN+!agI6HVMr`%oLhmUrplqr;avy&o&WH8lwfODGgQXf=#5n;MCu zpb9_y=M1`nAEEdUWfUnYz;5X9{2ypu8lx`aPvQf)vkV2V7q9jtlbZh$m$@P`2Zq&y znd$hFaM?@%NeRwzY~p2$I_3$ebBiI&-!l{RWS~7`my9cGs>*UOd~(vTqH2h&E=W-k z8KDJz$Xf(dAaE(_5T1BLqs)yyqY80kPIOHUOjDdw=}sjvEb0&tpV2gy%<&#(i>KdC zXlHfoB6CsbBR=}f%QYKbsX#6VBc)OVGqN*bP2w>*$eU(bk;dnc4w@E%7)xoKnWL(- zTuxg9y9&K*`f_RVl>)wSCMx-AOYZ@XlzezT!3rhZ{JNFe1LO}i7sbN857S9q`av?R z)W=+;{@Mn%sEm0Jzuo^i_|1lXKrR4?dxFjRR!mHTf&i30f_zE$3}Pv7_Psy4rwi}- z(Zk~vj+un*NAMPxbW-&kW&pD(lvJ6UsF(bbud-*<)(OkeNk;F13U$sgMJ>ELGy=~w zbeRz=-K-f86I7)dN~hg*HnRMN%V07)QkUg{+vojISg~1B|L_p20YUjcoka zD;kA3gA&9d6Xr>nB=CA^gEQy?w~5h5NuSHZi*d}nl^Yxx2zphz$UaZ2qHm=Mai$P$ zEJ8nXfz6#f0*@b*4bEym60alR;Y2ssd)}x3tqixB=@Bf0hnFSFb7@%%n!nk=#+fsC zvM6GdGlH}hQPv%2;yr7X#;{pd+Os zaudK{q#OrU7Hb2Cl13E+b4!>!DTomo5s~aCLkIXo#?9EP;}bF^xGu`!9!v4gJy(GJ z*TF&ZL;e#(y?CWQntPeLQ^C>-lHB9_Ym$uhzPk`>9g1T7AZG~8?Ng3GgAK+H^b&mu zHE$p{AAh_-wbF``m}~1N^6Hjo0Y8o_ntpwX!BanQl_**kLVemc~7^&Sse8fU0 zITtbz$hjWV6n`os9^h^ga(8WUGE;_rFJy*sXE7u zT@ftm?NiQSFk#^1H`|^HanWS)8!H-?6E{KAx>8eIOVlX=$H);6Kfaqi6>fNy_{E9u zwa*y;Cid1%#E*>r$-59fyEMo0c3-}pxZ~sTm3NT>uIX^=KH3*pRB~ai$^IzDm@KuQ zZIyNncEKhy0BTX9&&+I7BG$rCSMzSFi;`@u4mwZdIqK(a6{j+G$W&)|OSf~W3>&gZ zX+y!*#ofo2_&*j|lwy!iMT{M?)dP|5$5ssu>YLnvD*>oTwf#pU)QW#{^RKsPSYi>} zJE!4JB@rry=1Bvz7DbIoSw_zRS{QNOCr~v;IYJo-9yBhgyAyp>9=y!iAz+lT zMX{t?7Q z`0}?)U|xr60yV-hIB#~(0n66OrZBlK9{C!g3AWeL)Wr0K)) zUUr=Dk;mjKs)RhN__Cc58VnEY4(Q2^pD+>FaWmi(vC1Y9OR(z4Znh+_sr$ZFocc~) z%=a+84>ux&E3wO=IPPF zYM9~B%_-%ViW!Tq44+Cn#uslcd(PJIFP^d}U0Ka#wzuTz9bY>hyS-D2QSWNvwS%YG zIn_5E*#OQ_w>J+nqml}K<;n~of3$qBd)~I`l#A$Zi{u1N3_j>q#21p;XE3=) zTwO0@`ew(SXKKPCZul)3x`{JELY!igxb{=CCDMIB*q>?!_HR2c3wfx$6OF%t?fc}<~W~E&`oEY(RJbY>$hJ_#Pmsz&VXMey|}LZ z`giLtn9$JhyOrf-v>A?;6aDSK=pqWq)6THU;p^`028R`GrX)@ zl);JS3}l|LIJ#lef0|^huryhIR5X9#p%0kIU*qdni4^vDB3GTts-Y-w%;(_>S|Vd( zx?4lar1Ha;6yv*{SYN+AdYf=PUyIzm;So7z5H%!khlHdGl&qOS1B9yDwZM^(k_-~+dhT~_Ak$7)6&}`CklEgE6sdok@1K*}#Msp)C zcBM}>BccwOTxOOZw&U`R{_*ra1CLc01}x(eixhUy z-S0Z{jP?V*#2OE|aHJ(r8!jD$a1&h43={2AOnrLt>He}GTk!FSHAd&ig~hknUT_+ zT-Yn+PH(%HG6SePHkOiYa@~HbV7O(VFqam;a}m#fFc)-?HyM`e+luQ_Dx+6hO6~PO zWk+Xme@+<74qR>~dS0&YrMm8fAiG-{cv2h@CO@i$`$b!>zl(N?S+s*t>oQIeEs^CdUY$I+WrY071?`oH% z6hj%=Cl~#wOFGs^D_e|_2e_N-;kA;61B~X}#n3qrzQVrw<$m$J)AR z1PUe${Zsv8{yTn#Aa+KctNzw3_nX$`e7!fQQy8$VmUtlB)G<<5J1%L*~Ldp~$ay6$6E@6{Tp9f?1!>Iu8Y=hq|QB zw=9Y}HL{m-UZXxBFOMkZ>4#yNRxSir8VY|*!x`FyNW&&WG1}ng^DP^I^IR!(ls6%6 zY)}r3j$%prL{PHdzu!ECSOm9`=VCmc{ln<>uQwCUevKy2zbRN>MxQ~Qz38tmOwc$s z?df{`tDN}h0w9hAv=YBoM_E=Lh<-5e&TwrW3ogLFtjI z&rz?FR7EzQG(<(w2qiuZ`_?6j+QeIwP$u}@wn@YLuTErGA0zn|E-{I@9)Faoups4;aKNd@ppNy$uFl#vc5jxD%n!WuuI{v-!=D%GmtAc)@ zb1$tadkg>jdH*>#O+){4f%1A(V)l&ZnE7Ah{k7tM zyU-B-GvcuhQ}zG*h*5DKmG^>T#PR>{1Aah)vgubh?pd;bZTf#2a5@OJnU-KNsmuNs zZ~JfK{O9RcITX!v^qUYF`VYy`Q5j^&wamtf5-Ry!*MWd_P+MI*0t8T);iA#Q&W)#U8T5+fq?;nLS)r3FmPir zFtF6G-~ykR4Hzt7V9;VfWo0xyF0D`Fz0-6>pZ$P~m~WcS%s#W=h+w^ymZkH1%fufONB)BIL2vt_m=Df1iFdz*95*3&o+2GX5Rqu>W(GkknW zvmX6=FE@39_*mK9B+4i#JYq{B#rSOe*}7A`Zc?1U;i(c0RPK_ zi4A>s{lDGk5_b4iB1SS(V+PDCv;i3Z@rMlY)_+{f&p!md2A(DNXe{(U-vhY0bacD- ze}1X+8)d)2kWqhdLy-QzEC%xm5#tZ)|NiQ%Y|_!1@h>9&>sy_h=kouW=Rex$f6epX z&cy$E&wq5BpMUsY@A?0d_e4MYJ1_@+Ar76dujT4@z5d4I5`2g4D+b2zq%`&pLk6)F zG4@xM%ErT44Uyj)P5Z8%e)STzAYC?{`l)%8nk9*v&HdlEr-RHX{}tN@*D?9b2jV-a zy_L-RlIeDq;Yl4Y$rVL2?Dp53E@87NXBQVMSXo(_j8z!(`ki>B@XYdz+tyKmz+4>R zS08SJ^QR507eDneD zZ{WS66jEVUZj_D`-(H)$U+o+i!zIBj)NXRR&nYS*M)zyI(&P9j0$+=^6mIh*wQBn+XENA1I7*^#3qARowOQ|zm0hiDnxDX0@=vQY- z*6Yj(``!Ux7=A8j@G}sBlsS8j{>Wf~SILtFZBuW1uUA%C4ACP;N|N-Qx|y7oQp{O$ z9^8H@`+%|1e%S(#aiGO)R=+}X_LU1wATvq*e56#59Jv8wZxXjq+t+DlxCF0V6!#d$ zo$!tWv@)&&m!?(KCkOi94!|mM=~-TElPUkrKP+s~gh@f~yH{eApv25DbNESUVJXc% zQPTIAStbS-62tO(_5tZ4CL<_G)Z z+S^CQXC_WfeCXNx6Y1^)TO)($g~WVz>E7Rv=i4xVTYPmzBEf&UEi2LB?79orjZ#_B z#dwW{L_ND0;r-b65G+Qi$iBuRNO&#%9R;?8T@yjI?bsb+HYQSWnd~9V7qhB1#gWX) z$AMFx%l7%IS(4jR&hTE?%LF`)^D37qnSYoy5CBDDMf`%>>NAt^G1%o2_c@W`@zIGvX!(Wy|?l(paOg{zNq)trjjR+3?pqVtpB&kr&XFu9>JmAP_pEG5Tu?aO{k6XPAInJ*^ zhbdD|Cw;aXw*f7;U(pPZ<`S>U;ucEJv!jvp3FUZHC0n43N_s^lCMu>A%V?~=jv@}t z;D(mOZ7(YoV~93hAlpZQq{M$L05HBy#QUdF5@rNaz_ITam!}|=%M7KFi^X&G5G$2s zyB1S}2@RsB;_VHFP%t0SzgCnmuz}etHwoXkggrI&RFpi$YDF#9O&Dq*wGeIJz2$$V z=(#&&$!peUL4x^mWtoRGMq1sFF@`2IDPvSgDvc|der0j`#m`-rUOczTKyyLiAB&Q% zzS5U`w=LZr2ttBJylb~1E#!*Kud3E4m=~AsA-Holh;-e!Zcs8dNOyDDf;aRzjuQk4 zv573wrK8t3*KVH&9`=NC_fuu5 zf`Upv$#3U>a|MVB;r0D4#D7Kw>Pu*KuhWyGrG;Gis2U?#>)Ho`!U*pC+U*b8U<-%| zIFELaJI_}mCND=lZv>*dPc+^Wc4Bq;;DyI2YzYZ6m&@M8(eF?zV-XZbI6yGbJjcZC zF-63;1*|StPo~+om`J8=Ru?Ox*S!oMgCA#z-6>~-5+c^Vr}W*~x%P7{flfCbN9H-T zH0^@^T$|Y?G;f1JlUuAxq3Om1$Sjg9L!K#a2nZsUC9%6NEh*`bh_PXfGD)Ia;l9ds z4aOVWC9$auSn1S(SBV^EV?p6H^iVKuOk<-ca-z0cQ%kFRu7h34V?nay*i$K=e|^OC zad8SihFMwORgbnoxnHJQ#Z!yXBz&&*N7TRw{Dfx_nir+X#*{Pg;Yo1KPTv%y(V#W? zONifH+hy4*WA$`U46r72)x-wF>jWaRgfrRzX_6~r@a$mNvGHek0fEphsG5Q8Kv|YC z+GdH+w=hdaFCm^6rT7?ZM1D^|rdk;1ca0Yx3Iva^Dc01mKY~Y%z$Klp+P`=r)`&ffUrv|wP` zO4FXBjA~o>gwf> zLo)haKsSp!B!^#Iil2;Qx-e}CVA_VSkB)zx&%A4YG zYY2cII2$=MJ$*6j+_bHINmzU+56K*m9x zBE^}KAKqOnqNU{>fyQV{kmAa3;&0xt;YhldO^>rJW&Hx~eEVo}+I*aA zV-(U5aL4@`{34C{oZs}|D}wLOo66y=6Ft$gT9|^?C!wwV$T=7L%d9n*0yQZuu$2F*(OJQlbh@M0QmLqW{fsm46Sqrf zoKV}q0ZmnWJe<`qRpI8f5h2yqKSDq7^0(D&9|eTx!F=2;DF5h9sJ+JAV<*@5&}>yN zl5LW&z7E_Pcd>bYLHR2(#P*mM|MEu)yZ~eWzix;~U;V$017KaDuO474YirZb zZywBfX0|&{ty3Y^;qckCIwHp_x&1o;+Qh%X5xu%<4&CUa!0RfNsSuKhMz#CfT!lg6Lp z0Vx!oDPg+1GK45MYJFlbWuaHJ>zo^0ed!`Aj41$*F2!DO_r6!Z!F*& zje$SCx@EUtYpkH@kgjK0BGa2HV7<`8ULMb0R{v3;_Oa)uTjpIIg5Lk6iEKDXOyksV^KclI^C`-sbbG;fasowX|0Cf(SyW?1Tci^pz z=;J-;akg*w-UtENm^KP|{PCZ>Zb5LVRYavn&M|D^r;hj#s)3WvzT}9DibAVe0>cgwYoH4y-ql%_)8e>}Arc+agu8vWV~!z#N8L z@4kP0R(%f32Bgk9iRFw1Z@-Ldx&MGeVg0!1GA!TkhRgGR8Ri!D8;BLIrplkk95~#H zS1huB^zp$NlU9cd>yp2^}>O0-K8H>aDrzt6Vi6&Gi;r@Xo&x9y{P??*>e zjY20m{AI_%2Cvj(%l_3o7g5gT40pr1*Qx*zK5&|_WJ$G+VcDME@-rF`UGr%;_&V7S zyTy0P1$bwo-E?DUC`$|XYv2BMdKsIN@*33^d-n30^3w6nX9JZNh3ysoTp%{_%{f_J zIK;2W6Nn(`A_NPL9v56A4mYUF*=a%xv^z#AF+XLq<6hwm<#?y_i1?uu`mrKotiZhO*MoM%PJ0q#$M#En))z;P`$_$#0L+pNd`LU|6 zpB%9`p@MS=I?ZSv)N=dXhBD`Z`{kI09T{dC(5?-326n>l_SS}pgHzt+Ao(r3`-AdE z#99iM$$s!s6v&QCcf?6wezt=Z11X7>eGLgJ)W4Zvt3C9%ySYGdRItw0+1DM_U|Km( z2U8q3V_m%2XnppfIJ z^Y9l$D9O6B)X&Ggw?3}1KWQ&D?!DEVuTyTg=dSvNoJ*gTQ0k;Y{9wxYwU)fDDWA<4 zkH}_yT)y-2K(}ABs4FjB?7&_w8NaB1toAK3T+SAtXLA2^o7_7Ymt8mPX;9&U=Ifl7 z=pUvV!L{3+Ql}3@U00cbko(GI_49{o{z9&+q`)f_D`i-L{LyPOJ$cZ=)cIW{L6gdy zk++Yk7YO|igWjPwn+p0@tA|y@x`C?KI`Js*6->zA0Q}B-vq2sxh#iOhH>$q|HSbR- zwj6eFD{Osjt_H!i%w0F9wC=yUX?koIf+G1r4;r-z&2yHRK3NuvB_O1z339Q~;WQQ{ zoe@H&$P$N{tn088NXXD;;`Q6)Ydi7$YbSVbe4qQ+s+{PkgQWNaZv;qdTwRf3+3Un% zwifzq*$`56(q*zvzV9W0RyQmWb$Q5xhY7WGeVLUJ^l6xT!4^kJ16G>jY{}|87sk>P zrz+VnWJh81?r`oUqEMB_b1~rvkt;7WWIWxno#1Nc6M78qV(a9Ykd=tq7zYn`A~^&)lGjMJ;%!`IocPy26Eak|^Hg#?@j<)4BHC*oK6; zlcRtq-sPD-+m<4W@wxq{gc7@XZw;H(RfK1|UfX(}9*OX}t#>^enx72lH)`t_?`rXXAE8dzkcTOgN&y#BisRCFbfKXc=gGV z`|1GsAthZW#IR{0Hp}KgXkOqnrms%mr@JBk$^3y6la# zMl0P;r7;&XA2{g;9(?knlZI}K>twKxFdscQKl1g&!tsGk5EDpsw|3ILwV76Sb;LUQ zw##6k=e}-#K5A88WB;aJrD>Z6`Nw+G7Q%}v0VB|f1PG^fVha8jVdgi$3BPJHRv{B9 zIiWpLPsP=^LjS1Ns&vYA)X22wb89b<*`^ie@&#n8v?OE(`)x)Q^8L^*S464Gl!1Jm z3~2&N7Qwd_JKx_vtkfkCTc>?gWde0FEDiRu{3`ya-sQy!vIP~pF)}g|tKiA}4l(#- zsc(5PoV^TUc($F?$}wDcrnfZUtC5M`dg(OfXwF!Uj4Li?8&arHB2C4BW=&pAhu9>< zOiz=j25<3jh`?a5f#*-lFj+n6P*ly!;`^{ngcd=8Ee>#z*V= zl0}09Sb1W;r#nWmD$_1sUq9Sz+S)XcWb{>LH;xqfM37amOwr_P*99BO?NnsbvMnpp z;v+Y3X|OInS=DKc<%5e)Uc-CS35t}nYgnWhH%s$#+8aqqMcj8)cxp;_wA}m{j6z`e>vy{^(VIo)-qFa6zx&jU zCvCe|X z8IJI>YpMy1As}2q5(WD03-~tYxNwT_{VRxX6MY*s@0piG;Qs}aaIq1{8ht-cu4EBp zUfjZG4b?8(TQMfQ6!b_^71%aJRf{}0mH_-nM<*@4!Fu#`4i#9WiO5-=iqby)%#K}p z!3C(7Z*tpc#|J;Ev8dE{8#lG9PWRq?;j|D#(tnpi4Owa5idNY^j;3Si8?@5J+1qTw zUuami>FAH9125>!h>l=WA!}e-{_C}H(KVM_!Vd8w@||xct{IaDdu@KSVg$+aKO73^ z80ERs)33O<<=^@k^Cl<`)0gvm`wkN&t!dN`XPFek^%(hr9s;pfRXc2QF`7C$Oz4$i zbIPLL=i489xx1~)CG25@w|KQ9MORs!Gqg%1W4t##rLC;IdhPvDB@6Xn0ugB!h@`+w zMUF~Y%kig$T0MJo?(XWyaG(9|YRQhtT)Ta5rgx;G;ns9h-R`7Yz-Lq5B@a;E=Lej- z`pa4VKkm~ZT8z#b-)&D&@_Ow;_-JA?b|8GO)0LerW&TsHk#R`NspHJ}G+spSU;P2i z@b|CfUS2JZ84#Wq8!xkF&2|1Z_Ki*_f><%0fJq}MrZ0HP=N^TyEu@f1%OF9M!L!o- z8LN4NAKHuLN~vM9;4OqoP$W>Zv}sP&qh0E2G}&}+@%tQRFNgzR)U~NQ4>~h^OiS|7 zqASPt^O5(iM=M)20hMU7uWJ*o@^R?9uD+1G4>6z^pP_ZgJoU^0;}s|Hk5aw5u|7_d zIyw5B<{DfTnQw}0i)k1=c4Q)`^_QmWV?)dy!-5u}f_777PNN2KOjn9cPY&UV$poge z&-7{hj)z|Y;K!BssHGdg`I#Fk2^_!%iys}262>SQn1uTxkd5tjNe26gRPIv`4E>JC zj($Y>GpkBTFo~#S0Wb*)oaXCDMCH?c54|DMPc3itYE=j%c3C}<`OC3SMcp?!+-D>n z?N2$sd!v36`Q24e8gUJpmG)q*>V-UPRVhfgj!;J9S@-{=8~es45WuHQ7(tf_6LY{J z$+TU;5Zw%PVLe(Fw;L>qS27t^`uGRq{*&(d zT_!R9)L{0VrRGe1=fdXwBozZOMbVyQTR)o+=w!u*vbFo5>|L+phZT=w9)J@a<%E=uw1AU5o- zhzl`h;y##oP~At(<2Z+{QJcGSGev=87$&_xZq7~OfUKmbZ$8;p>}FDtLStLbv@~<* z!8pbXR6o5M2m7JdN=#M;bH-;eYqK&r4ByFq^_Z8d-g^58-t~ZmhWjj4wD#LWgQE`a zvLrB}MEi3~S69LBd|EnwCTyJpjo+RdIiHj>h>3O#$SVOo;?9 z%~5u%_2LExed$oc>_jh)oLIi67q#aiJ3u{YIY`X>t4b%mK4zL^kXH;&D55|}e|ipe zWK@(q6~^P1JUgQ5IM5&t*G3-_yHt~jQ+ydSp64}Fp#u>sb;WjrYzvn^UoC8GY+P7H zZ3-GPeqJS~)E}#7O$@|Bv7lsQv<1gUU0di6ES7bk@p$+Ji$lhTA0g~TbMHia`7;o? zPLnns@g;df4ziPzb@tr11gzo#Tsf-G98F7kb9{cIRzS9L2efz@x-W3|Qfly{TN^qS z%O(i74nIbU_O}L2UpA~Vm&<{QM^nc=hnc9ykxE-vvd! zzeneRLn6C>z_t~zwZ!e{t#dU5q@ri7Vn;X#rzCXV%t|4eL{H&eV+PuisPVf_KRTrNeO<{6L^-m43>#zaY=*%;1VaLg z5Qt^n(tJAog`-#mUfwo!qtw58n&~)K&-OJ2B=YV5YI~EhXM;-{I?spUeC??O{RPe- zQGQfqk%A|~zl#SJdzZ#F4F=;$Y?(`my|;~B z&dOpy@;nWO4X-AtEic84X^J&un2Don@C0`c;h@_qg1uTg26wE#jCm&QzT5A_70L3c z(oW>6ZR_Yy7tymC9S!Riak(j8${b!B&g}0;1BzTH^6bWu%_}SW@|@);C)RuVrGN?B zH8-2@Pp~Rai0((-l~G#n?TQhr*XS~rUZXEnypvrBKIcP&*IYT8nq-nw!mRZ zk2KvLwyxi@JDzqmdn4xD3XZ_s@ZC|;O2U0`{M7x+H%Lg$@b@l!OgwQ=JSGXFCCp-3 zf$iF8Z16VrMIRApNVCQEd@n#S{e?pA1p=MHmje;I17cfUu}q2!Q_lX3t>}$fV$J-% zbRpe97xdmJ^JNgVc>8l6-2_d8j9ACqPu*+P=4qod=oN-r!iRjX$v6urn6^z9d$hVM zGx%*n>4Cnde3k9~dTVcb(ozq>)BE8j%NmHMN!*WO*7=@(@;B{I6+o2g2^EbO)a|Z| zs3mgyt4ba|Zt*!o%_OjwpX38wO_5uM$|dQMVw>2HVCx3XkwBVAGo@{zoaLhQGFjfg z8>qJLX-F2~#i4(gv%5YHo(lC6R8vTWjk7Gd#1ODAhn15_+=;P;A=7Rb+77Rsg9**E zdIj22W`t*9S>viz!`Z1+GFl2XZpmwc`hch`$nCnkPYUb?GinnhrxBL7BP}PIXY?jV zm$BNcnWK~Hz_ogQef%s@&%V{bstr=0nw6>VKl@CsDtim_QKL=6d4}W<81^>QF~_R9 zgmv6oVcaHL(pbYS6P-cHCRP|LU`y?V;Z#DYXqNGmG7E;U$dI-6W8(fN4S@CbY zV-TA9{&L}=@9Vbae098eHi z&vcA@m4gXsfa*$HXxw^L%^#L3U)}_loCmOt#NuMond!$eEP^pTpk~co3@E2zo7`RH zd`ZroaCYhroAO%Yp3d*DvK}2!H!xt5I{wPEU20GL1ZLomhRgYL9gmMx4R_tG;>t)o znDNsqQ1XNTWS+#^QZ6eu`KBH-=W3ZXuoVN~Gub3dSpo@EvEu06IA*os)5AcP!17EO z1$0;h4%aF~dTtvCx*EcMkz9aqpU)MIN_$dt@O=NDkA6q7!GQO8EVns_3#FL-k9v*z z3<2<$z&9YAvvNHM*EY>&wBqqWhP(2Yy>0{dY4wWC)+Zre)!^w2uhns&FNsR`RA>wQ zq%4G1*`KgZ#{;*xeGA+^xm(y{bmo;Nf}W_gUW}#jWjRyFflHkpf;9H{9KM^fe2o01-YJ1ym%E9(Bc zMcf-Dlf7GZtx&fa*TMyULJ61h6?g&l%+WwT!hX_k>BM`ZvgEvIT@Y&R#!*f>TR2gs zVw3Q?7X36zsz+0{)?SAR>#`lYee>Qn^FjI9Gi^8D!&!Mmle=n|gzCGo{f=8!^#yck zps1S@Wi2#ozm25Ug89Nfjbp~|ui+jBz!Vx}i<3H;B}m~l4c|o$7s`N2HysK2%!exA z-Freavx2s6Mb6BYS_r#&_xPr*YBFdC0b+J-K%9>}66n>P^?i3UGg4is>g7%_GBgj$ zd(uhc@Lp&k`KgM6p+f$%1y8W5sG9{h(7Y=gU#w_TiEi=rW}yqiWioryxPYDcd1Qpi zT0nq8bX=Ng-}akHiJQ~T)%+7_bw7n*zkTQJ*0W|7maHB0!r>Fu{mCsg&+i}nyHd>k zCN(d4wr~exZwJx%sBYHJ(+yeW1XBZHMPNJ1U;NIbZCxo|wTodc&_=BO7L7;3ocwsT zX{Pz1-)=7ZVz|*Xy{$lrrekP9wL@ic!XtzPh~qn98EhU`hYFK8au z)Z}JWk$Wi$!dP2t>A6#se!`a&H85Yj z6j!@_(rOe(2=_k?S{bxq$@F*?31+D@jjgcmDf>$B`U_*=HMwI%xCat&@Fk-SCwCL}O0*T>na!r( zzri6<)YHlsq$v6#S|Yd(rfsgT|B9L`P+>>*`JzGH&vRUCXNGDXp<02SXDC6x`Le(^ z-7GT5#J6Y23%Lg}pL=*>b2A@h z{df*}O;&ekehuQ#;vpInmgB+kDuIKOLLUQ#X(t$&SbTD`@WuJ2~Y>}@OYDN_gQ z1}L^TC?2m=KYC$JT)_*?8n48B17ywn;6DHEkGZjdk_GSABNA?#OgbBRGOr|UP4IE=6if!ib-2xo-7Mq!LBX^ zE%Kc-Ou~yv3c%_3iZ%TcLI$H~-#FWG!J;Bir%izAJzl=TXc)MSDZ{rr9s(u$M2r)Y z5&^B|^`_*1Se>A5m?s25SqJf(&&s#72aZo_`lMjh&QPR2QllIjR~nG6_x_fs-FZ5? z$L^oDNp1obZ$4WxToufaU_;Qtg|v)1BKxKOy<2-7=+-8QL8boc)>4r2$b{h%6pVES z-)O<5Xn`=tK_g2`OM3|j3+e7viRhto6XYmhV>}(fB)Xg=Y2O&|*q=~hA{+69s|qVG zDG4sVAtzWYGr@`%=7wy~zn7Jv_?#TlZx;&&MtOGSrAj>pqcFYKHjw-_v}qeP$kC_c z0gVxusi_<6mecvSxYJGsvLXju5j%xQ#fWA=H0e6=zYfd z7fXK0d`%8)Yu4o@mnS8yiA-TH0%f(_#-vB>NmeZ?@@F;l$Cf|7?}V`v$kA_D@8_Tv zW>}oRjtPk*1j`r9b$>HM3oJU_Nfg8TO%DQ;AWG+)l-*AV&c6V3dH_C&K3Oy#fs16; zd+l@%{YL)r249pLGd}_YjD>^F3clv`3jekX0WGD&ih2;4UJ(iMR5vHSRNZOzc~eWU z+VLQI8r()l9=amPC#1eF=SbG37{sSlKz*v3dh^|14s2!2{#25`BhK zwcR`PKln)zw5%0$F_uBMD7eKs)t!7NC7TnqxsVO|0`cYG6;mumgH?zxbIouMGZj5| zg)KiBM5}UzoS3v2;m&)r98v4N9*4Mj;D?q6xh7e&4W*>52mQonyEN0{39@&lonFlHK|hgM{_x_=XwR* zGtlkbhEv%XTuKVAJjO`yqecfu%-3X4-H6g_hVkez@;ckIT;Wo)_FaPO|E^-x;j7FYMc&F|3Vi zNh6RvBz=FGtLl=f&5}gb_$za^xA#<+dxk9TA9NGcnqzW0Ai?#{Um!eHmr8yejACAGif#p`_K)a;i;m};>2~UT>r*tW9 zh|{F2C1#0mB80^mVYpy0tchhBl8gUNTK$e5C#h!(o_fv4?qEiWZ3|O1jwOMNx~}wr zVBW?kP?pco?DsxbWmZ!ZsT{>bJsZ1q$?_0vtcTt?bi{okvMqa&QF4*FWGipza6?7M^A_M)_mCO2(X;z2n|lgi{zekg@nfcf2(*RCrH z-s2_HWDezv)HPmA>*1P)zdB0-l}-HsICQ^R1Wsf?3>pI+@95lO zAWqBKu6fdldv^juOexKLUp3_@bltj4!fcg_N?MiWpxZmSn3W{lf++%|y=^#v|JKGM z0jSy<=_xUQAYUSj$T#f86&JJ_+CfTE6nIi7SauZzLig{*G|Ewwt(Z~Xv}~&NpKurJ zOW%J$SYiA!7&2jK{?zbp`6SzG%^rdeg{bGo79Rz~_>J~o7bwGgxdN(ZBQo15ESX}c zpO(bxpKbgo^MWM7BEC#EU$#N*B~N*OG#IB|dshouO#;Qd%4oVj0H^Bxhxx*)1Mq{K znyYv5FDm_C_Iu25i4p>==lP1P*aIR6YM&mcX_@faUYYR5m?%ApEKPR|i~>5X8|Gsg!1V0YLhKuUT-o8y6&AW@!p`fRwHTiCOL#jKJ_Z2LG>~Z z{AzKwQyaokAOhBnBfhWSouc&Z$-RPyLDl-%`GN6Nb8u~*aqBTFR+1%?lBV4&+~LXr z`I21kht}%d#veo5vLM5^phq#|aBbVoDL>JmyJ$*;%A9}^#@eta6%hZFFuT-zwBMwu(GtN9rU-gfq_*rIXw z-%f4UxJX0UHaP1uDLpW6mtWN4fB8XRdH^oQk#TG=5%ZOBOgwajVKOP?jTUPvbBaR_ zkE}xedbGJHV+Oe;gyG4OW=}9@!GnMFr73zqnDK}gwTQ#QRRc-EPcC3Q zs|<`%ju!MACy`(lqKSnKZRm{=OlpfQr2E=&$A}ezl53h9`!}DKJd6Egf_2jyqytUx z)`}YX){kp<+?b)*ZJ?U8`Jfdp8Wk%!g&tlOeV!?~?%42jLwi!nd?~UHwHCH+xY-H= zWiI$bU+=IsxUE$AwN6=Y-v0Nn&~+xJ-mo9z_g6ogHu_3E4?Q{dLI|`nPhGe3^_l(` zkyw6?%A%mn@&t(JXmpxTXW!+#J1=fM>o=tD23OsARam}^Lk9&{scvJ%F9--h9|(#= zVfMT2u+mczC*NKz#2684Qg*$serVNDQ8ne1A7!f@IRE2@;9$4Z{jAZ}U{EeUHe%mq zD&)9x(u#HCCFu3KfI+mDhtFwcW0nCtF(C!Z*;!(7BGdVf_$O^z+a4}=@e7tKz%e=x zaWmeE|9tX$?*!>89P5qS@`PV8@qt#P(@vUeO9)f7J2iKA^d-E3%+(i-J$cy==W zmebqAkw&jJp@g8vpu{hFt(}QI6u+kVQLx8-htUaVkK7d^APiYQPrg% z$6-=jB?YoNsb|3<)2=VnGe-77bYD!~hoBZiDcP!>OO~Mz{5=HREh!yr*q%FVICwWL z7VNv1j~dz8o%J`DEl*BK?ism%h_zNkk50SQO--%YwFW0DJ4OZ%7@gH7wiu$;T8_kolE0M2aXt*i&Sc3fQa~8PZN4wuBdoLGKo&}row}y3itoWE zW7qVCLrO(pOsKBfi(D3{e$I!e6}#_!k?($QeX9QZ7eo}SmZ7AbqL*WF<=nU!o3jaQ zm-nrUiHf?#KH~k`^%hTnjbX-Jbh+pg{HCPj-}!cro{|>nBhLk?a;6y{&9zC+BZGqA zzM835YbgFLK->dvaF6iI#j1Y)h3(<{7hn-gP~221u0jI_w9f8b>txaeo&4Mii*&$D ziTWVM@Sn-*uO;xu1O$U&Ylf7XrxXdi3vP zbk_`$rJeCokP7S$pKyM=dWFALS~NqD+%ao*sg+*m0v4zPK$ESb>3-V38A2K(P>@kg zL*uD#wZo5C!Ov`|07o&6hcJGwwcmRr-b1EQw zvkV`0Bmkr*bb%ty>*im4gY{Ob^l^XNMnMVC3AEeY?Eh0~G?DuL@W;GzT!GYSpIO?C z(Bz{K!6pVVfbm(4FTVF#V~OJU)|dY`t=p#Z{d2sK6kitAQ)j1F1Kjavq4UC&v>iuj zo`4sYvN`}0nY0obk8e2?KT_du{Iqvy_N4f++NdwM0KG@$KW<-aBN$jJ?{JI;Rslp!w{BgIaW^$QIX8R-S}opRJqc|}55uFwJ+$m8)QWI>wA&}+G+ z>ZY}_r`4kz*8+r2uL*e%*I&@kYh(Zi6777X1N9ly|IAceasQQ;1}QFV(#g9?hPa z&W&@Rlxip~WexBW3xIK~QpAC#*#&U>T~%4Lp6Tew8)(c8QcHN(dRD- z@ay*J7if)1O{F-O2Bz>MFBd%fV89<+6Y zU8eC-JKo=5A2md!J%i_=Uo8dK_2S%jOCz^5RUfW<2`D~)T2p%R1}(&D@*w2PpLvam z_HhX*?zI(efC?D}Oo$qG24;HB1$l{_dNG zkg#|K0%NZ3zOcNuaZ4sdhPx!K_m+g=YgS&e`^GoJahn>ifyH+7w5gHH!+v(YF|^Ur zyVWIGrA3&)gV=)^BUXUS*dqR;9n0(hkcf8Ch4?5kD~&1M zkC>2wjTb~=kBrPMzkoL8qIc9=r_4^?`j}@jRODkKU34XnR~SfK0EP;7p0w9(Jp8qO*Zo=`~ z(PvS}lbN?}lhaj>=H~Xl;Ne7B0Di1Xs3`i0E+8L+zgPOCEiAs>MdGwkE7S#W4{D}W z26?f2^dC>vI|7nnsd$FSLtS2<471vOz7pdK{5ThCK9Gy;n>2;-@DG}7JZ)+dR*W+~ zpZ2zDPo`mgGr}%}KRqV!t@PCk%_*>_O1HyRB;OJqL|LH-9S+h)-0G>(RT2IU_RT`S zcFaN#b0025pvz^3FfYS2)RT{Yqr@5aloQYWaLm6z= zFlq<`1zCw0ZL7c|%vx&Of{Lcj=f);o+rCSj&E#a zHaJ12k1Uo|5mINna2YgW!Y|NvS)&Txww{$^m&~E}gZADCSfo{FMQ;bc9^=bt+B9F5 z1X_O_kY&2s@io~^J_R#^qWRUf`)AA<49r3*hvC8(gZ($+KsM-UTHgJs!p^>hy}G)} z_ysRa0v+Pc8b}Ty^?W_wwU)en+>uhMj*t%H{**d((6*@7+IrmjAK!lVnVmyZl;w$oR)1n${a1R6@ZX#e%!?=py?E-Ugmv77rS-2 zfe5;+#QPyu`${9czVt>PRsV&0>`wrj-GTjOKxUk$m@ z9H{?x9Vo(-1!Q|%M{pZ-@!o(ZkWrwRnkuz}ovJqertr3@7(k@<>!>II&DG*~v1ui= zOKZnxrNZT!^I+P2<#Sm{wX?WIbo|wP(QEA`2>+bIK6^7%O9`a-jL_XLt=hzn7xWW$ zSg1*3(H`KFGK&$T`3AIU$LS1hlNUTijQ}Avci9dWQ*(frd=U9Opza*AxvL9< z3Vc%rZ_Y5H@{4=WUuw~FZ#nma1b?Ne3IWVbd^1o`jh9SofZMrDId+>K4~%x^;qe!o z5Q(c<{g5bMpAY+>dC$YGLBMwIAvW71={EXpoz$lIMa7rx1W4N1mJNr07QBIGq!4?E;)=H!q{*t%C>Z&0+fOu_=L!?qnpD?b zFaN>ttBBdpzjyC-04jDukdB<$(~%?Q^y7==lv%@#lfXM+^IblcwqQoF^$he5uXnIb z*XMA9ImDItx6){MF0SISLr!#XBbO55n+_la7E8}4TeEKPt-hS}78fM{dlOXwR@JWM zqVTVT87Lk&;qs|3Djv~5>*C}2qaA)ojFTf9GZ2+$6pNId_ryXhQ^9|i>^;iweFJS< z>tUB-fbyY|MYl2y!ClHgwLPLOHTKS8z9;WQt!V1i3Lz%vo$R(R;~}Mz2zY^?O6@i) zDe4xeX0^+G($&5=T6de;@pm(Nq8O-E^qTo+kMmj`W?z;Es*{FcFX2GL za21Z9vQw{TB}CNIHUZ*VGn}bq1P+9P8fh;L$lCABsA4is!wJljO7thzyT>ndYdyLE z_Izt^-|G_Tzfk*%Pe%qL5XKpe2fmKiey~e37xVmq4GZz;tn_PrGWEAJ>87okK;pKa zl*o1cwRt{Xfgh#TY)0(-vh%bc$1J&k@W1_45tE?)@vhDy1jy=ak9)8fVpz+MA?%Tu zdam*K(d!OwUXdT+4nx&d*MH*}HfdlTn0CAdKQXX{-zC+m1o=v;0{PbK)vb>V>P<|J zmRia6e=a-Q7H@@o=-B*;-J_eV$iYXONyD+o=sxnVwk0$*xPjY5SK5b%5_j&sKEWtD zb!%cd`&|MADgaWU;$3$P^iSuoAP$7I(hhr4?{Gpj^GsU&RkA zUf`S-NKg$yFa|jPE#$rY*p-_Rvf1s}PFWpYeQTC!StZhly(vkiFCwWI($jus>FCck zHR->CD+0T!b;`1HrF-oiD1KY;JL#|3a+S;hfWTMt@8OD_uy;USu)U=ltiiPFG8IcV zIBl3-=JTighm(H^=swK({tf^nR~OE1)cUI6sFQ3vvHc9myw|(VJ~n#1(PXB|r@T_* z7KV0w=@>y5{S0&z9_WHN`|5c0vK{X8cGJ=Gz zh}S9q^(w`4@K_@}`qv!rcg6X86$-L|C&}88{+=HGrS-V@RrlQQ^E(=-&jIpJK=(iV zP@@OBl}t{#7R>+cDnLYu4dvt<*!$Z+|Gut3;`2#e45b|3ALa00mJ3WguPrPc%YI?Z z|6xhzYmE<;E|#5u@?Agtj7j;$KDzbfN4e87r+cdN)Q|63Chxyp$~yK*aHI8$Xq{I~ zEQ>D8%3vBkJu>pN9H3O!X*vhV<*%r!n{QXlc-(58ya~;J_9?6WUgSeyetIr7;`QFQ z0T>5$c`%r^*TE)d7HVqQ1i+oVR-ak%Fi+SPHl&6Ar?=331lTme9wW)#FmSO~yDKat zlhwZU)XgbJpk$O0?un?t@B^Vf``5x?DrJrPaHnpvy3hVllYzDEvCrm<;U#CZ0s;a~ zGg(|o&8-zXpHN!g69GM>`;2ehlpkt?^3J={<2Bx=pROJ4WSwy|d+o(4ayM(bO*wW( z>_5f&pSOs=6azddP|9L%4aO{odxHti5VJUR>XcT7Y4%tBBAVpbbxLEV_a%!wLN&KE z0n$>UFLOHcf%x|WuX4@JRThBfP?+JSJ495}(o<#HYl6sw0%Vbs+*8H3fA%FV+(?=P za8iN0tcBK;nEu{}cp|%sA>n?;@Z2AmhXMl}83SD(bM!<9s!GJW(Jy-gT{Y=ZbOt9y3k%s9+jpg=2oN5p7y7Lhaxti8_A5{m>vI#vi z{-15F%m~Ci+355F+bi!5_Pw2^xy!66Bkp|A{x*7;CU~~zz9^scRny^HN+I=~tv=7s zeSx3zo#ib@%XCFu*J)X(y({{>_RF66N*z9~JXvgExeC)l^gP4C2fmEw>TI)MZqa*wbW+8PfUFOux^Ut|s7_at#d+o$+NK ze4a{TUE7%-J)HF3+1g?kwt!D}cDd^Ksj3%cKW@?+_gr`I+@4LFE`DU_yklg7KAw1H zn^3j=4dCCnxB_2}Vs@HK%epD#vZB@i@W1dQhX#vaFkbXk+J}D&%YFtM0A2&)>q`k5 zu*~-XGFS`kd@B4P;q7_`(__Wqg#|uUt7hDUv4kJiQy{%YoBS!%Stgh8$`?wm*y3W% z53pl)6u>sI__ja|kXHixQc%HqrOAuMS|ug`F$M=Madxu9lwdVx52%K3fYPVtf%#f| z-B+*P(yBkZN&h$w^LaM7r=&7+j48twO{4GC(s%UDv|(2#38LIe@u|J1N-dVlzNmJv$^YT&tK+Ibx2_fG5(x=uX^;?*E>Y=j>23rhrKLf-8%b%9 z=Flmvba#l-NZ0qAJ09oWx%d7483$&5p7Yd>wbx#|v%IbMA}{@{nWaaLziw%rkR5GP zox!C-T206O;H5^5mBt7Jbc?DZViG47zxfe-0abK*;&MK&ru#(Q6yYDX?)Q($ufWlm z6Z1$t!ucxPDWE9QF^*v)6wh<_%KjmSK+4TF8UhQMTj$*sSDm&RnUZZbW;KQEOX=H9 zFKTo~OS4xP(T8NZH-`zeQ*Q!EoW2Mt|I$JqR2ObX{h#(gh7#OSst>6-%J2;iTa@$f z99ZHuYU-U<5+Kw`(sX5m!x;IhN=lFU!bsw0_1TBto&I2c_rcBK`;<-%tFL`v?60Tj zqOM@CqXhv?RjLLwFBy5fm1}VPNdx{j(7Ze(VEmtj<3HX-h7NqRUt((E4oasTQ;}+! zB+o7m$kL^VJd(H|CdYq>Hz$djA?Ju zOlE7q@gt+%{j2%h8x$~IG-B_(vpJU_iYzZ;}YY1T_>$~q!O5V1k- zgZ>`$`$H4!f!Obu|8sLoSilM|PQ4#iWePhwRx7i^Pvk%Bc{A$pTA_+FVmGZQSM>5k z^KD49ppzwI2#^+_(|q(Qj)OexcdY)O7bG(Y`fgC-M{6*Ay2x1KYjwT&%m==wy^?Zt zRQYSiET{76b?5E!A1G?471>(!y;WAKhydjlt5$EoWg_dv#syFfFOk=wfH@oZNkVb_bqrky z6?#Wb22}aZ;a&f=YRPNr{`eL9Pi{r&_~~x@G_0cR~tht=v>kGq5S8QUOLQEGr3av?~m~w&grv*Hs zUO=mFESR7EM-d73kTgLdr3%l5`1LzDm2s8a$?wm`46ab$bbnd)&CScBnRe;Xy`cfY zmiPqM@mllksdC$uIA8d*PR-V&n-U~p=S0L8QKC$zDf&hxjaS7X2r?)DSm`>fLL;EN z4|S-re%19)9q-@c#=Gz}THfU5{UuYC@CaFS3}(kYpu4erNU{Tj6WgN@HRowd_fiJ) zgOx7(X_hxJ+~HiVOYIQ}eT0kkSxd*+_vdw?ZcUTA*x~1d%&Q2}GzZ7&&&G%OLe~W% zLi3wHippfeztLXqwY0#Cte@kN|B*xdkJls24h=VOnDVV3!Ogolv3w#(I{m?4Ko(vV z7GE<6Jp8`LH&;)ZG{FkJ{1lsdIh)&~4usjc5LHH!rw0(5aVAG~NSVx;L0gTahC&PQ zQH`097+Se_pxs!km!kR2A{Qu+d@V`N#k8yizr(dM{J-3VEcv)Y{)#kmRkOG1d;X&} z_QTF>C1~s4OR^^n1kbm(3gr5~Ax*K|oSy#>wC}FZmy-91BTs2iI6pP z?%!*1|F)qV6~GAL_}Vv2;JFyyq}WfOm~u@8O>Q)r=uEEPAZ^ojyuz@wy_J0Tprw1! zx}>oFrf?4*UgBMR!RU>lClT*zIwT_MXjtImNA12F&SSpK)VHYbsdj!1B(V?5iQX~n z{t#st&Xf01+vPu1%l_P~8b$AqJ2lvm9kcPRJ!DU;lzpEjNoSw1oTeRIIyk$`-f%ws zISnCl+&2}1q)FG`zAGrC9NrtvkAMc^VTZH8V!UKbP^7;iLg*R#w}t)fcsLY+Uyst; zUZ_EETCg_d*^j(e`zcC{)H%mW$l&tHOs%3*``+l{R$32cLWGXjbDA`}F%voad6mVO zNs|TId5Gimc5~e4j;|j@*FOf5Mn4YcHmKAV1jUtg@KR%k()ivu={o&c5G=g;mk;qN z!Pz%R!}Ujk%TN?v6jZ?N#q;7DO|M`BAT_ zS~Z?Yn}Vg~FrbllPo`jNR0)V0KGAM)h>q$&>i@JX3R={hO2(_+|9q$I{6t+B;$+?S z&a$Lft6p)z{YVBH6y%6SkbX89Bm(WvzUV|8;)wT2nRaHXF@!eXF1T(c);|p`ad_eO66`hyhV|7 zfD;7(BT;{C&5NGgj@WGE8}WS$!2rq@knM(_r5pKpDQ&s`)87aSzd(+5dGz;D{q=A1 zCUDjs`wt2~_itl}Ise|z%wi~+^5SHK=Rf0WAQLbZ9cdoC$N0hv_%LHn!Sgko zZyBJEs5b!P(SV$_bxF>sd9Tq^lU+?`SqxhT<{qGRr=p@_5-ypRueezPo@O>sZ<@Yx z*qKoQ!I;TL_4YSIJ|JS6|7&+%%EID89Q2C==_azRu>w(pM6>|PZUWfyMh&k7VGnuVo ztTS1w7keednd9zDVFZy#o!p?0$aIvb$=(m#T&?L8a5&j0L%K;hztP1{Wvd&88FbJ+ zEDrJx!S($_hn$5hSwEZRA=F}eGCkYGS8D5AzRu-3nU;1j;A|qqvK?`IlxaQt%xto> z#C50f?P!(gY$P4&DIC;43shh06#x*(lo;(;AQB;q)DJe#lY{J{VJ>+_-w-jZ6}dRlfkczu5Y)iMrEh$ zdPrn)u^0o+KC8SarZX^B(AWQ1z+uq!fH6YdM;UviQ^p^gF;2arlQmdH`Vp562cAq# zL$4}d#o<;UndhC^28(e99M1~L5IjZnhO?Dw&_j_%!sqlNUpDP){aamd+S83QRnvIF z@5U9s3br(M#6kviyfYtkf5a-=_Yu zEpV80$@Qi7mt0@Kd=mTn(g?$?qtXEu`b)I`-eDE|^0o&MAGe+A$^DC;WdK@OV7;rj zmCZ{2W3r44WU#(K|12Ab32BfK#5H#pdYZ_0PlA@YQ78RYjyDVZN)=swCDWjVv2|-b zAp>65iHKG24&r@5tjk?K0?|Os7y9}>TUiltQX4>|&~#R7+d z<$KvaDq56x?jCICSWq*5bpCVwDYd5wh*=)ITK%)hV6(rRlCD)$@45r-3+Z<2nnsCpxaEU=&Ld1bWudlPC}jD6~` z{aSag;x>}P)&MT{|^rcE|H1`UmW+Z=50;He)b$NV`bD9i9ajyh@n{qz8vAvEa?{)H3Q~1>BnEWq$13e?*W^jA@Ci%*K#{c6> z_@E*XkXE2ogMe_L5!lqEInOVV6x?f(qSB7&zEm=^y54se+K|YsbgVFZsZ>7*fb()W z8sxHD^iUcsay{B0;M(OTcAj(jwF|)~?p(gG$$A}pH>O0I0f@FW@%l>^5G5!4{!DT* zcwDOW4($m}N!Z2t{RoBQ5I`W{gGB0b2M8QtZ49O)%)J4M;sjha#NFW}q0po&!IFj@ zfnfjO7=+a*KrE<7Nlw5YV29X1pS*LY_I9wb!Fdts_S7qIb-yE`Q+CjK!5}x9M2Wuo zCm(`jlI!9)1MF^C=n9J{?xg$(f*l0RWJUVJ5gTp-c`Nq2(bk?ojnHmPK};XWCYub9 zK(zLzsau!!iYtenmgPz%B%@XW`$=%L*%Ep*wEC0(>ZF!-rD`<1JCfp(5|QhPvi*Ff zC0`G{W^Rr!JtQ5WS{3$KexTKjFTQkxedymN(_U-|bgBy9-dqoIixocyH|zmWPjF~F zp3uyr+ycO*d{8W3?d+V?f|6>=0qK#>Q95XT^w=Og8!vmc)OJbsoPYP;{sU3sZ)WJt zWPy7fjZ-`NTWXjOwiN%q3d!JEaA11C+!5>~eB80rYi&qM8xJL+u}vbYJ{*um3IpVi zC7?Ul2EZ^|(7dPrHB;nVIBIh8i`#(Ppxcn!u&LheTrFT<&;k=avlQ?s&j2)M(#RW> zh(1%ER9(~jL~1#Zq3aHNv%1n&{w4>lxi0xvAtyb4V4CPx2bcTw{cG4c3YVgQ z$5zc(_%rICkB!3zNLK8bjpkuMpl28)7O^Nl5vPwL$8L&U?9?#{q)Ev?T4f9Zv%B@=V6phS zS*0TXw0eEW{5NN--@j!efzY0RGP0GXC>&;AGe65zH52=QPS29m+}BjUx4rcQSG~&Y0gYVx2hi=<&S3~_Y~oX6)DvLu zccz)r`1%omI-MV6ulW%UjWp}H^=Q6akAm1WVs->KTtb=`8?VFEy>xuBImabF(v=Es ztx2ENJK;E7YJ1#m>XPo0u+Q;^|NK%IPh#3We@qtk?qQGMlk!rT*EJ((>$G~F1M~@3 z7H@C3z#j1Ui^uhu`xc_IMy|1UnT8He{SqU4x!63<=J>;!jv*vhjV`Hlcjd=!X<^-r zEbKXdz_ndDaM>R=c>3AZLOBm@|KPxbOs$EPZ8W9uWIeMrR&@7EThR!$aY}2+rhrlM zoRg88A2Ghpl&HQwe3UrBF)AgUm3+_zLfdA0JL{Y+GDVNiPq@;b&u@u1XLsvn82`0% zNeufynQ9p*-*?lew*nrO!7eckE5=q$qdQSf@C+4{$rC|X>36xkp#0VbkgO~NrH`?^p3!@c6+Xra zdXAhlBBp8nxrxeD;Il#;s!A1oM(`v8kA)y39#tY5KD2^$y-cyX8Yv<14wlmb*2gPx z->QZ$<@4b{yv4pc4tQLTH~7`G z?EDEI70AjJ`buTO`7o9>Vgre-sOgnY*|ME+lUiXkVMLU;_A-vxjIk?rs`*8{1#quQ zqGA52170~QR-fy|;D0^bK7<9&OKbMs2clHrN=G2dVti4US~65i$H4G(oTsemgvewt z+26Q7e*Bz=eG4AIF3*N3GkOEbn(sdjAPYL(aQDl~q6-Nr-li98f{3f&_1d4n*@yR`e57(uD{mvr9KlvMmfi|PM&gS3SFUm-Vl4KS zRJcb#Cdvw=f|=CI?|>;7D0$LJ1`YH@?WOBBE0=;mdkUSs8HY=~!GZo{$}qydc5uzV z;565PkIQCG{hdOIyNUYSuOdkLy-PF50Z5C z90;$1f^i}MI6S#Dz%Iu=F1G!H+2%79QUw9_aOAxng+%4a(^oyP7$x%p?#E2&g~`l+ z9Yu|AYyD<=3VIZ&=h?C~Ddj=5#(6td@F)=a49M`jD0qd9uA%4~$!R$;_T6RH(9}t{ zhk0HxAL>9yq*%ISxaO5<$HmFq_wND*Y>G+3JI^5?b4&`t&2CT_RC_o6>~bJ8W|$$r zpQYsvcwu2%E2VTlQg(Npa|0BHKOS2Qp$duXf&eg`OX6W}A=Z z^%~FGZ-Ch4JAKFScq-8?o`VHjh*q^@)i39}Pm z!2_Sy`x90{RNI+knw~UgqB(5am-Pw z_`}e;jAXJz)AW5jjvW63zU}gRPJn4!WizQb+r^Nt&J^E3$GG9Ue-D5kB(H02wDnW! zcg*wCObRUl;~5(#Ub#-RAdWb@PZmH596g^iq*@|~IQ#hdw4nJrQ2wg>MKgQFo}n+; zznygeW|KU!XOu0+89I}!a%E)4VWsZPUCYZCBmBSO~5L0MGALK z#3%^Zg8(MA_(2RRm0P7v;Br9pkV#!nN2|9Y6pD9%=cWh3xS$u5-$(QBE1q6o9Sz$7 zAT!x;9^kxsT^cGq%m$I|2NByKk~Q+{(7&u0;1h)aHZQA2(k~D%md&Ub8DqXiLsL)c zG)=CV)Mg`mqPhLv&JgpNSh(0qUJ)O;pZpijIEi9;NsocCF6}3C@FdS+(TN2JMhhP% zJo~T2ui+syxNbuwm4!MOAUfRAAZQ#H;RRrXm1N6OwpsS_t;H6vnP&7PXi1}{_*Wnp zrF0)XrI08ycA=$l`1a`-+XR5+gDu>w@8{a=w}3V=ySP1777k^()9r#}f! zY(Yi=u^o}1O_I!dk`_AI$-J&et4i;2*h|}sRRln;Jo{k0=jh3WIC*TDSv<7iGF^6o z49Ns_9Offb^(c_8{@CDQjtpz3sI&aVjQ8Qzx+15$+IRhYg6{X|<2$3r5VM;^udWRVST%B zNH*7N!0U3SwjU#k;N6tohs)B})u^BhT_PYIwwN!IQqzUiOPacA)M^a*SlO>ZF$UBL z?M0~|7>lkf6Q$Z{;lZ8ENJYHRlQtoP2s{Bgl=znwulLe7seNfx{SMUQWJCkd3#?*x zYSM?FX-|91=O)Ou<*iU!Eogl(QyBY@)allxhHlqsAcF5~#l%=SHaPDDvF5G#>#mct zfG51ZZaw+(4*>JmTmB;L17<_v7mM>QdEc{Lk5eay5`IZgYU_3I7AmsXDvgO%M zWxu*(mF@ELax@{Q786?4`v)^ZW^u!eQDf4a@^$E_}KN4JZpAfp*f1-6e>6POr;b}iW)oDN@ zeRy40Ap3boDba}f7cIYdl1S4mGOW8RS~j%Jq0^{MZT7 zE#D(cjPyNLNw$J)kPp&nsAe*l!X*YA)#!xv4pMlB5v`N;DWIIt6gfFf=_8Gm=`NNs z9}Ri%bVsF0*4De7?mER0W*6#r1Z=SHfy`9f@BMo?9A37@6%OM*TpUVj=b3i&*-nN} z)@&;IKO3#Tr5_HpnKl7!*t*Nz7X2@gZBwT5LX}CYcVwr0Ry(nrh&vm(m)y$d=ZxQp zt1eVqB*ARgG(Cunw;SJBRKtGrm%a8$#YyCM{al|1O&h-h!ce!iuALnlFe^&AP68k> z%A*99WPvSCcrMtG5|}Dv5?+T-BWw(_X6t=%dbv2Xswd^BL2W1y(MvG7$g*41z}A>H zoW9dG80WOwP~ZTNyskE%w&C}%eO3ZW@k&Kf1_a%^>wxnm20;NfJuP)OmQdBy z_@dJ^ZJ0m5KjK(CzO{IHr2^e$Lf0qTvSHfIb_TYipku^{@8@`tX*(W74+wB` z|17R#wOta%Ay4x-nHI+|*>(azHhj;6ndIR4F}v-@vd}adiW~C-cxuC=Gw6Z&CeX$t z0rAMgQ2~-#x%q^TUqSUqEf1w&Tv`RCbHwdch$sdNs5v~?|UIk@i-uhl3@|m7G zTtz5&iM}Qs^;(;iM9(DGt~ z;8(1ixA;Gg@Ggq7c566`!$B9mnn%8MBQ>L)m6~~R_j12%@r3@QExJ`-%9Mu&a4`oU zx63WL0pDQ+E~6?g&Ru**GQtzx4akgsHLB~JC&U&2Ej4+wO(4~vjyT)O&!E{vLMM>l zO_V9N`mCfK_~L{guW7UeRKZPf5Y2#i+%3Zlamq96b|4iRH)jHZGKnG6l@A^#z&vNr zg}i+5#K2e)y&@}-kcIwXDCNVWWjwldt z$o$pAs;s7;Zr3h)LIK0iSvx{NHVlP9@eu@c4;g@Fxij#(q}7bUWGPu~>kU_rf>mrb z;tC}yYzagaCykeT#0m6{k|iz%-ko19&JWkm2H$wbY{w7TWDsFvkO?*pyt7e@W1w_kD{Wq0UEM7G0b~?-Z%fmDk6SRwj@9etYOP@mwP>v!J$bpZZLbvw z;l4LbcgKAB?L}heor1)1^=6c4Vj)Ec~06Lcy>jrHoN%beZ*JB5wp?WVm_oO$oxzn84t;8tq6IWA*!+1CS_ zeU&4HStCeufQlIt3U!>QkOnuPP#-;O560h-@X-jF{`hc>3EHYU@-+DZB=X!K2C9z{ z^cBB$krYLpF>I|cE0sy?z}7&137mxSt-u)GKOEne*FKB!G*Q$%(2$!(*a)Xy1=Zi|*> zP0=akg~9rYt~iVpH&>fNv}z>4{Eio%Nbc5!nVym8Epd9?xFrgm8sf4GOFCGq4HQyk zs7NThWpNQYYs_h`v3u*t3v=*?F94LAK4+$#_n*(sM;g}!R9$2$fynYFX{&{Yvz@Fa zpibO-j2;3kiZ5t^q^Y-(VlVJf_`wE{y@0XO-R+y=7v~_9*$20FCDAaPZCn=JaLOYs zZK6!~O}7XGOVG+^O`CcIF;Z75Zp`5-^U;wLV{%ZF+nW-lUgYtNNrTobu0T|EVpzXN zT>GiFf-~iO~d@xt$Bp%8kk3>98$zsD0naHT`sY zuYDk?EQxt11V?+8P5f|r9&}WyGhy}wr&L5M$HhKzR^9ns5;7_SIPP|nvqk+s7GC^N z@4KF;H)v@!zN&`T4t*)ZM>xmIz1%6k3C%-+mfWDri^pQ&oxq(8R;PXB7f?0~yImVLk}b;tv14j{<8?n;ilQ%T z%{NEJn-ZX_62q7Yh180?K1W?Huh5{>2MPm`2C!7j_F!+Xi7{2h7wuZms+xmZ1 z9OhBVr66T3H#1lJ!w2?HJq*4_@diL^r{+(Kg0}hbp%eNVYa9g7{rXad1WvW~RpNRP zSpmdAq2scQFty~jJOL2YsxDF6;!F^$e}xx>fR(Z$Lq2<{cpDUS-ZuSe47>IklpuCus#mc1rv=c$);sP5%Q9l_4WOL1_3%3DAZu0IGC$j2J_8P; zm7xeEK8qjJI+^#lt8M0q064%=2GFwHojzf|w&)T%N$uWskOhzdX!;Fcb`2^Q00j(3 zK13~$+Qe@ygyn$}@2k-~nYPk10*(qs0Z?{Z=yZD9n4h5Yt{0x2|KX{zd^dg%>&lem z?OBgdYe;sQ(+vF%YoiXI3KwqWrS;CG_uYH@z>yn(uFgEZW*V8~#LQ6bQ^&0lgxr$a z6aHC4Ax~QHo&=dR4|%c_$S5YoDuyj`xI;oc{5se=weTwv?{jS@RYVg9-l}rjBp3DN z?AT2@{06**ccG4L-mQochStLz+c&sk+ht`16^U26!Uf$GhyHhk9pAGBJcG`lF~q{d z$4~h|7{G%ra;B43ppgAak2rnOsq5FaTL zXY-Ww#&B7a790?H;0K)xX4#Q3_ej`lyXX)5Nu_T-COuv1_Gmr80v25iV?-Yo#(%NA z>u8-YSt}&O>^a&kQ@1(c#@4v$xp6#>ue;vkKRKe(S7s6k;=NYwTAheC0cXxKmX@as8{fLsf& z)8ksu1D>?Ipst}bk41lNHoJ?{LvOG?4)_S)fPb@gULh8Wxt0aSd~)B=?u?C$O($ff(g{U_- zq)vW-{ngVf`v7A|37rBlY~`)N;Tfu8k3^qg!0RT5%e1qT+422V^e8Pq9DQs9yBFDZ zFWkc;aFr?BLQ_I=T!`gsovPn4IRkm_1_L_Dhv3q zCnIJrpP@DG4}=o%xfgGl@~4y;x>aj?a>jVwB=xYGxV#bY((FCkMjKvgt+?!c!+2el z0^1i*bFx9<_9V7Ld=(r*+qF`k`9X1R4Xg`;|*{?`PsN#TmF%S z%F>Y6oWGFlnPCYjdj=+0`TWl8tsUnL>+<(x5~_&P^mm&=wi{$}!-jXY8~*w<@)mfj z1T$hou^4zNc}l$&oTx9dL43vBsDwihjxg3WPjwEke23%P<4aYyxe&3?&VK;~w-Q(tUu&$`(yvpgylqvNa zkzUIX266AeOK5^}%dDfusos6J8+vUNo8okvQzDj;hhewIvqlgeV_NU5C zRXz@itu@KAd?s0Uq^>xvo4l`T7Q)>wJc~_`z8p0jU#*|t%k2Nx=lC?@nt=f<^}C>i zvA%x%GmE;M`tD^KAQvt1weKi0MnoU!agM}?XRX5=i+H9J*v|3r?C@v`I7sb032mz9 zd-K8N9@6m1jpmRTn)F19lKv}`FJ&gDpJZkQ>{hnCSdj?5wtHPHch$IES28S|zVgpN z26wIP4pH)x7zGda4G(TC$(Dig@J5t3v&vtIRiqbO8klf}-=x>}{t9x2-mn6IJYryV zp$Kg;o72;^=Bd3Gvo(;EZxIBY+;~(1Iwv*MY3|RkGQPpnvw)z08FGPT$9^6k0$VT4QuY!!(iIbU7#G$1C0qk0)mrixtpP! zmkG0|bqkJLO&LVKY(S#=x6c5unU#pJ_N?{YSD|l}GJ#hxo2!zr(V2Tz$8bK5p5!T$ zysKX6yLPbf%W|g9oD}W*$Zrc@Py4k<4Zq4_92HQ+yROcU-tNIwE`?0t%>YX8&&FI` z_XC8B)4dGzsBILLFe7Tog>&sC=Pa2N*{LSSqO}mCWmS8cdP(-bZ=Ng^!lp07Y;Hn0 zOUTNYxQ?}Y1;VRx(bZSI!^s8e!k&1S$~Ezxpfo6Bqgtk8$YD`T&W@tk`{7(+H9y+x zfn{?GA4jPXO9>1WB~O7Tp!`58FvD@)OPeu}m$xacsX_eibT|H!NHu-A z`6`V&@80MPzmX1!lqV--KINHBYtPX}4si~hu})vRo@LDU`D3rTO?2TwsRPiSIc;KI(+KkxG!VN;Lb{{x^dd@N4&26) zHI`{=qR%T|o2~zKB)A<$Ni(l7+ zt75_le_?Js46F{{%f42c$^o370NVQ%u485TP7D78;s-Xf2E@Dt9;-F>-si zJr3siai43jiGsx(h@T@)5{FiUkh-kW?%p#}SQkWiaE>bmsdd9(b$5UwNF&r@K z8mS3)b#MuWNOItFI{p}&Yp7#_Bm@3XHmIkVgK0GHIH6S42F2Or%m|SYz_SViG_*uJ zFCDMz+JAr!x8YoDA_z^*Ysv?I!)v0wjth?WO!BP@_jUk0oFb&kPje z(TwJmRYe|qqbzjR;i6jg?1+dSxR02CFruyVqPzOO7l%c6Go0f7Dytafc$Z{yZ=B&& z0HWe5XwvEeC~HcT_58yygQe#&ZN5l`tKDIm{OgN1CtQ{D0;h9IyU(EHrk&cwa6m6d z6eG5S2UFQ_K?5cU%@=y-z*zrWNWI}5qn>9C%K?wDLc0`eN@uKqi+~nW_dQOwr&VU@ z@7JzW4(|!i)}*mnEqYCgCoAaj50uZko7;uqQhQNF?YYK}Ib~u3z${V9y{E z6Z*0!N-@)1;RG&E#_peU);$61A@yGHK>7|{-eS7Pn%X^~9fseCGu7RjDUz$D9a_dG zfYM==>~g-IV5+E8tD(7az@6^8LHM>=qtZkl;2`ViZoSdeXRBnlW)m{W94LUfWM~gD z;|Kwz0Zag(gZZkdKA-@H45*+4V0@ho7-M%AG$8h9n5H3wYbuWy0Q1o+!v_H8RiTKA zumYSiO(k-@jO&hYZZ-*QWl}Z{`z4>d(P$AYH^Y7sTKLM02m-SQe8w%hy&ZpGy1OW2 z;s7xSJF9wIgMy2XXQ~;)Uf2ZQ!VVq7j8^5nwey9ST`ygkfBVI|C~N87*KM;0Bp_c$ z0aKiGLG2MqZ(XWcrpgQeT!)_lmgafZoN;Akst8GV1elXhD7n(2BLIT{uqMEKRCkDZ z{oXdO_3m8#dMV=@3J9bUXILR+6i`(WhL0?cA~oEYpm?L(FM{x8(LjW8@lwl%>eVyx z;up`eC{faV<-f4`Qc?Fv9Qy9lA)8gki(tTt)#Rd3jOTlpLM7~p{bqHog?eul_B+~+ zt0W{!LHYa@;LEz#U#&TQe#FZs14xgc)}MB5w%~QXj(_!2_g0db4-D&-!RjbXU%cLR z)}xL|dtGf|ELdr<1@L7N3v%T$9RY|&?jB^P<`I-W-cSnx)gYN#i@06oHpBw$+1#3f z_uBTJco~j@N2%dLH!epu&sAF;EKM6Kr2NFwS1H$AZME;GuO?m&TTpuj{&~RUJ`LDk zGdO-os`mVTGk?22Ndzkd|Ghc_{xdbeM~j{g)GlA29cyxP{spL`S|`AL9DoVEIS&R> zxL9~}9*7dClG_=`JAk!O*9w3!V*3EY(pzfvF&oK2fevcyrd>gti&#}qF`WT{bQ|+7 zDjHf*rDpx?VZ(M+KQm-%y3wIkw2lw#YQn zsP#1b2F^}bySASfa~r$Ix?nMYJS{NzKm1gX{%ai}@X}rWg#FYu-ClNAb%dAeGnTa3 zro%poY=(&2brN_avz`;fMZs1@c` ziyZkc{;T!Kl|_8RBHRO~dLO956FT=Wi=v5XOAn$BuYE?2f3M*O^lgx|{U}eO#|rmj zuhiEV0nUB<)k{hQPCnuEJrWeLLoMM1mfw%x`mWR9I(PBseOAXG7~fOB^_cx*e62*z`8GL~6e63u@$mP!Q^ z?|QX)RI#CnK0P4;wC(~O;tTAyZhG-EgIdS=21lt~&4q#Put)uxjbLUeQ~p@#PED@_ z`!6c@yd4*Dd@YB2Gd0r!$k8A%>ThL>dLHgtPjUZ2cqr~?6$$hhZoz27X7;%`)yKx) z*9$dZp^s5LNSK&fd@MY>;AEVvqMv=*HqCGk7!i_HbN9Q_VFZroHjnR_l-tci_orgR zx}4%E&!*W1_eO^W<8(Q%stSImGLJyCV~5&K^($uVL-ds=~;6Fz6Tm49MuDF z+q<564uU2&0LE7t=L)$4fHRTP@?rCJjmd4fDS#Ie*-d4)IyUD`1^eCecw`b;3GbZ} z>TM7r0?>1be64;1&q=_q!`&b2M6z3a#hL2+5cAnWj%UIlrZPSgta_A&7VD6#wV6MH zLM49+cO^CUlU=7Lbhz2iOaXV%<5K%jcjsW6T{k)S@hgOD+53F91hTi+@GcZ(yN}|j zO(S&&ZE&x3QrJjX_%FG$UcOX6*x@oCUMymf>8Vq=OpMv~S|X6Xy7u2!yeKW3p04zI zb8&roOz3jcwJDGLq`hyiS>`B(?TGq=;0pQMkB$eySyVq+bk+9xy~$Xt zLRk<@gNn?N_jvfG=^nfQ3iSo}@k1!f1PUU8?g4?#UVu3H0}M1-G8=S(8v?E|&6j2W zS`aM*M!N6_`9sEn_qRYhuWffl5%O8eCNWX}CHC!{aXz4}PY=ak4u#Ox_$z^-hx;IK z&2%78*$rQ3TAPvv#QhSEItJ6pRE-xxfL#&3A7tni$QBqb0mgAVnQtZ^L`>zTAw^I` zsi!jc87bipY|>AnUHU)nHI&uxRJGaRpuO}{EjS0iv+P@;44Gi!_RWmoFk@^CyEz-tjboJy6zNak(is-uU7aVRcQXx)!OpGYcC0C5aJ|=S?E8# zLhZ&~J*E9V!~98FlJBD+Z2!o8USrEoI#t6LbQlG+0)wPnL_wUWsub*fCCOA{V$)Tt zt7chi#?gX=&m5*Q&lVYSeEme`)9`N?s~8`-+ZCl-(qQ~0T_@R~fR38& z&=Ca61?-hKuNfiUpjS9{+VAej8?VdRs&(`*z}Ym5x4ZfXI56DS0zy|n`mo&VRG%8X zD7A(o7tw958&M@S;svGVOv%Xlqi0sE6u3os+nvIpEKaToKXEcN1R>~A-C-%-F|y|^ zu~_s3_`Uk#opzDW(@{bxqp&DHVx0|@?wo;4?foJ~K#7x8j#lmHF)S=EzXp+s^{rdx z!?7&kjHb(_OkE^xT`+W@BSL_fq`~2nRb}IA7GSP+o89iWf7gvD8xiRyb9>6`)O&5C zQRo*n^~o!v$?l6tOX&!+7^x={uk&}sTt7QVzdkBqAICAeas_2RxU#5LlZcoQ_euE=UD4!_lA-f5$ z{~}n!_FbHu7D3Sq*%aTow0{>e)ujEkOM42V;VjwZu=i|s@RZ=*jj$I;$JVVT&5Eb= zzjp-d%hlSfN8GQ6BFdS0S>zjl_ajFd8pj6K%H9*!Ww4QU3*L@o!U&Y9_^m)Gzp5fh z@=ay#@SHQ~s?>aK9nTIO<*DsIYcwnAG}&W18UT$DIv$ErsZv&qgi>HLMxwSqlSW0F zpQ-;C%e+H;G{5BBDO<2e0+HVP^TjitA&lJeyt5|N=z&#%{|0ZAMahqm4#>sf41ylx z9%3mo`43F7u67fDsDU*5y&bB@fCb-j(%Yv!w*#( zXq%qOt2d1Yh|o?ub{cF*j3MV&K&fmsOamm2Iv^%6*ubp)-sU|aRulMv=EF}gqP8Hu zK!$K(6ddnDqs38Ok~`CaFBk>Z;XqrrneJgbK{h0M>9ivgBO}|xaPq?0NrYMvSwBF6 z<^?K+vi#F$*n2!hkps@Hj!Qmq;@cC<>Dx2RF;B*x!F+|iD2Q5Z=ESu9VbX#3{mckSdDF~ejaQ;^o>SliPcWwK@a^S>9#GpwmlZr#wk2kirQx&J zt|OlP;`l(BvVxC~<;e>JE++(pV%bCNS(l)7S~=t|3ez6`r2G50?0r6S{*2qp ze)5m(4R{Vm%1E8KPO?P}|K&TRJ&^}k8*ZJPLREWHb!?^0Cz60@#g$mIk8}mKbD-0| zIHqPR6MHK9P6m&l+p`xJ*L!8Hod6S|z|JrS4Nypc%Y&ZFEl5?9f2Q^XDh4!=}q)O{I(gCvM01#=;$d9r8^SfnEz@Oc#zm7^B$4}o(W(~&U za({U?WYdb;zI1<2jQCoU|9q{8fa5#)D4te}=QXQwU+ink2uv!U5csp=gQOImw=@@+ zq`{gtw_KRqwlA`N)^igl_9{;wzOYs&NKg(UxK@ManXcFR2{ zt(>tvv6nj|e~SN9@|qy!vXD~jfnofx`|k4^r(7r=X)oAjcZnQ##f8mDItf%Hw0#_R zzTE|sr;@s*_eC;~m|L#wL1hmEO!0Fmsg^*B7B0M#@kG$jeS#Zg!3j$v5?&%H^O`AG z!Q-N(n@Ii%mkr0oyxN7+)+F(7A?6F)PgjB_yUk<3{l+^h_LK^?s_G~~&mIQ!8R zb~~x$C!u-aYxO@I^FLp*1iM@)`6vyKWP65@^nQDe?Mly?txv)yY1GGx1l<7f@!uL< z?EIu4X4v)~fg9AK*h~fp8UZa;a~yGp%4Y=5J^oDkV0wl985nR~ca)xQ_w~E)NMR%a z>2&FK`*wVk_OvU7Uwg4|NG2;Wf2F%AHFk!v>g>U^Nl>S$!1tl>adDA2(nU^~*CzL| zeu6bKK|6N-&r=tMQ^BJJ<4vWGZ6cf#31Z#Lw)?v~GdtleI?g

      Ety?Bm_(}Hiz6+gA8SbZ<{>^ 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�JjYVB|Q6DJ{S<(4q_!BuiC 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≧+Ydr~$X= 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 literal 0 HcmV?d00001 From e0d8bbf962262acb8926911bcb381fe1a8737497 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 19 Apr 2023 22:55:45 +0800 Subject: [PATCH 0257/1057] Add solution and test-cases for problem 1372 --- .../README.md | 49 +++++++++++++ .../Solution.go | 33 +++++++++ .../Solution_test.go | 69 ++++++++++++++++++ .../sample_1_1702.png | Bin 0 -> 12349 bytes .../sample_2_1702.png | Bin 0 -> 10406 bytes 5 files changed, 151 insertions(+) create mode 100644 leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/README.md create mode 100644 leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution.go create mode 100644 leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution_test.go create mode 100644 leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/sample_1_1702.png create mode 100644 leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/sample_2_1702.png diff --git a/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/README.md b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/README.md new file mode 100644 index 000000000..d7c47edc5 --- /dev/null +++ b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/README.md @@ -0,0 +1,49 @@ +# [1372.Longest ZigZag Path in a Binary Tree][title] + +## Description +You are given the `root` of a binary tree. + +A ZigZag path for a binary tree is defined as follow: + +- Choose **any** node in the binary tree and a direction (right or left). +- If the current direction is right, move to the right child of the current node; otherwise, move to the left child. +- Change the direction from right to left or from left to right. +- Repeat the second and third steps until you can't move in the tree. +Zigzag length is defined as the number of nodes visited - 1. (A single node has a length of 0). + +Return the longest **ZigZag** path contained in that tree. + +**Example 1:** + +![example1](./sample_1_1702.png) + +``` +Input: root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1] +Output: 3 +Explanation: Longest ZigZag path in blue nodes (right -> left -> right). +``` + +**Example 2:** + +![example2](./sample_2_1702.png) + +``` +Input: root = [1,1,1,null,1,null,null,1,1,null,1] +Output: 4 +Explanation: Longest ZigZag path in blue nodes (left -> right -> left -> right). +``` + + +**Example 3:** + +``` +Input: root = [1] +Output: 0 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-zigzag-path-in-a-binary-tree +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution.go b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution.go new file mode 100644 index 000000000..e24d98629 --- /dev/null +++ b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution.go @@ -0,0 +1,33 @@ +package Solution + +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + ans := 1 + longestZigZag1(root, &ans) + return ans - 1 +} + +func longestZigZag1(root *TreeNode, ans *int) (int, int) { + if root == nil { + return 0, 0 + } + if root.Left == nil && root.Right == nil { + return 1, 1 + } + l, r := 1, 1 + rl, _ := longestZigZag1(root.Right, ans) + _, lr := longestZigZag1(root.Left, ans) + l += lr + r += rl + if l > *ans { + *ans = l + } + if r > *ans { + *ans = r + } + return l, r +} diff --git a/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution_test.go b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution_test.go new file mode 100644 index 000000000..c2c036753 --- /dev/null +++ b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,69 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *TreeNode + expect int + }{ + {"TestCase1", &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 1}, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 1}, + }, + }, + }, + }, + }, 3}, + {"TestCase1", &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 1}, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 1}, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 1}, + }, + }, + }, + }, 4}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/sample_1_1702.png b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/sample_1_1702.png new file mode 100644 index 0000000000000000000000000000000000000000..d43288c0811d76f51ea8bc57f29b37a42ab631a1 GIT binary patch literal 12349 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 UghU`{`NvRus;yL^U=jNN0Pc8LnE(I) literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/sample_2_1702.png b/leetcode/1301-1400/1372.Longest-ZigZag-Path-in-a-Binary-Tree/sample_2_1702.png new file mode 100644 index 0000000000000000000000000000000000000000..cc841409bf4f5f41bfd7c000177ee9a87d1d890a GIT binary patch literal 10406 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 literal 0 HcmV?d00001 From f59bb415c0f6a13f0d3d85cfeb3540f7d6637444 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 22 Apr 2023 16:02:08 +0800 Subject: [PATCH 0258/1057] Add solution and test-cases for problem 1312 --- .../README.md | 37 +++++++++++++------ .../Solution.go | 26 ++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 56 insertions(+), 21 deletions(-) diff --git a/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/README.md b/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/README.md index ae1d48a32..21f808d9d 100644 --- a/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/README.md +++ b/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/README.md @@ -1,27 +1,40 @@ # [1312.Minimum Insertion Steps to Make a String Palindrome][title] -> [!WARNING|style:flat] -> 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`. In one step you can insert any character at any index of the string. + +Return the minimum number of steps to make `s` palindrome. + +A **Palindrome String** is one that reads the same backward as well as forward. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "zzazz" +Output: 0 +Explanation: The string "zzazz" is already palindrome we do not need any insertions. ``` -## 题意 -> ... -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Insertion Steps to Make a String Palindrome -```go ``` +Input: s = "mbadm" +Output: 2 +Explanation: String can be "mbdadbm" or "mdbabdm". +``` + +**Example 3:** + +``` +Input: s = "leetcode" +Output: 5 +Explanation: Inserting 5 characters the string becomes "leetcodocteel". +``` + +### 思路1 + +> 找出最长公共子序列,不同的地方,插入即可 ## 结语 diff --git a/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution.go b/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution.go index d115ccf5e..b53477536 100644 --- a/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution.go +++ b/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) int { + length := len(s) + one := []byte(s) + for s, e := 0, length-1; s < e; s, e = s+1, e-1 { + one[s], one[e] = one[e], one[s] + } + dp := make([][]int, length+1) + for i := 0; i <= length; i++ { + dp[i] = make([]int, length+1) + } + for row := 1; row <= length; row++ { + for col := 1; col <= length; col++ { + if one[col-1] == s[row-1] { + dp[row][col] = dp[row-1][col-1] + 1 + } else { + x := dp[row-1][col] + if y := dp[row][col-1]; y > x { + x = y + } + dp[row][col] = x + } + } + } + return length - dp[length][length] } diff --git a/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution_test.go b/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution_test.go index 14ff50eb4..d8941263b 100644 --- a/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/Solution_test.go +++ b/leetcode/1301-1400/1312.Minimum-Insertion-Steps-to-Make-a-String-Palindrome/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", "zzazz", 0}, + {"TestCase", "mbadm", 2}, + {"TestCase", "leetcode", 5}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fbdce28454659a9bc80e1d8b39a060d448667f08 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 22 Apr 2023 23:57:32 +0800 Subject: [PATCH 0259/1057] Add solution and test-cases for problem 1774 --- .../1774.Closest-Dessert-Cost/README.md | 52 ++++++-- .../1774.Closest-Dessert-Cost/Solution.go | 122 +++++++++++++++++- .../Solution_test.go | 26 ++-- 3 files changed, 174 insertions(+), 26 deletions(-) diff --git a/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md b/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md index dd6afea1c..5f55f1324 100755 --- a/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md +++ b/leetcode/1701-1800/1774.Closest-Dessert-Cost/README.md @@ -1,28 +1,54 @@ # [1774.Closest Dessert Cost][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You would like to make dessert and are preparing to buy the ingredients. You have `n` ice cream base flavors and `m` types of toppings to choose from. You must follow these rules when making your dessert: + +- There must be **exactly one** ice cream base. +- You can add **one or more** types of topping or have no toppings at all. +- There are **at most two** of **each type** of topping. + +You are given three inputs: + +- `baseCosts`, an integer array of length `n`, where each `baseCosts[i]` represents the price of the ith ice cream base flavor. +- `toppingCosts`, an integer array of length `m`, where each `toppingCosts[i]` is the price of **one** of the ith topping. +- `target`, an integer representing your target price for dessert. + +You want to make a dessert with a total cost as close to `target` as possible. + +Return the closest possible cost of the dessert to `target`. If there are multiple, return the **lower** one. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: baseCosts = [1,7], toppingCosts = [3,4], target = 10 +Output: 10 +Explanation: Consider the following combination (all 0-indexed): +- Choose base 1: cost 7 +- Take 1 of topping 0: cost 1 x 3 = 3 +- Take 0 of topping 1: cost 0 x 4 = 0 +Total: 7 + 3 + 0 = 10. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Closest Dessert Cost -```go ``` +Input: baseCosts = [2,3], toppingCosts = [4,5,100], target = 18 +Output: 17 +Explanation: Consider the following combination (all 0-indexed): +- Choose base 1: cost 3 +- Take 1 of topping 0: cost 1 x 4 = 4 +- Take 2 of topping 1: cost 2 x 5 = 10 +- Take 0 of topping 2: cost 0 x 100 = 0 +Total: 3 + 4 + 10 + 0 = 17. You cannot make a dessert with a total cost of 18. +``` + +**Example 3:** +``` +Input: baseCosts = [3,10], toppingCosts = [2,5], target = 9 +Output: 8 +Explanation: It is possible to make desserts with cost 8 and 10. Return 8 as it is the lower cost. +``` ## 结语 diff --git a/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go index d115ccf5e..4f1c47321 100644 --- a/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go +++ b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution.go @@ -1,5 +1,123 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func getSubsets(length, sum, start int, toppingCosts []int, next *[]int, in map[int]struct{}) { + if length == 0 { + if _, ok := in[sum]; !ok { + *next = append(*next, sum) + in[sum] = struct{}{} + } + return + } + if start >= len(toppingCosts) { + return + } + getSubsets(length, sum, start+1, toppingCosts, next, in) + getSubsets(length-1, sum+toppingCosts[start], start+1, toppingCosts, next, in) + getSubsets(length-1, sum+toppingCosts[start]*2, start+1, toppingCosts, next, in) +} + +// 二分搜索? 将topping里面的数据都计算出来。然后开始判断 +func Solution(baseCosts []int, toppingCosts []int, target int) int { + next := make([]int, 0) + in := make(map[int]struct{}) + for l := 1; l <= len(toppingCosts); l++ { + getSubsets(l, 0, 0, toppingCosts, &next, in) + } + sort.Ints(next) + ans := -1 + for _, se := range baseCosts { + diff := se - target + if diff == 0 { + return target + } + + if diff > 0 { + if ans == -1 { + ans = se + continue + } + + d1 := target - ans + if d1 < 0 { + d1 = -d1 + } + if diff < d1 || (diff == d1 && ans > se) { + ans = se + } + continue + } + + searchTarget := -diff + if ans == -1 { + ans = se + } else { + d1 := target - ans + if d1 < 0 { + d1 = -d1 + } + if d1 > searchTarget || (d1 == searchTarget && ans > se) { + ans = se + } + } + + if _, ok := in[searchTarget]; ok { + return target + } + + l, r := 0, len(next)-1 + get := -1 + for l <= r { + mid := (r-l)/2 + l + if searchTarget > next[mid] { + get = mid + l = mid + 1 + continue + } + r = mid - 1 + } + if get == -1 { + // select 0 + if ans == -1 { + ans = se + next[0] + } else { + d1 := next[0] - searchTarget + d2 := target - ans + if d2 < 0 { + d2 = -d2 + } + if d2 > d1 || (d1 == d2 && ans > se+next[0]) { + ans = se + next[0] + } + } + } else { + d1 := searchTarget - next[get] + if ans == -1 { + ans = se + next[get] + } else { + d2 := target - ans + if d2 < 0 { + d2 = -d2 + } + if d2 > d1 || (d2 == d1 && ans > se+next[get]) { + ans = se + next[get] + } + } + + if get < len(next)-1 { + d1 := next[get+1] - searchTarget + d2 := target - ans + if d2 < 0 { + d2 = -d2 + } + if d2 > d1 || (d1 == d2 && ans > se+next[get+1]) { + ans = se + next[get+1] + } + } + } + } + return ans } diff --git a/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go index 14ff50eb4..bb56ac2f3 100644 --- a/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go +++ b/leetcode/1701-1800/1774.Closest-Dessert-Cost/Solution_test.go @@ -9,31 +9,35 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + baseCosts []int + toppingCosts []int + target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 7}, []int{3, 4}, 10, 10}, + {"TestCase2", []int{2, 3}, []int{3, 4, 100}, 18, 17}, + {"TestCase3", []int{3, 10}, []int{2, 5}, 9, 8}, + {"TestCase4", []int{9, 10, 1}, []int{1, 8, 8, 1, 1, 8}, 8, 7}, + {"TestCase5", []int{3}, []int{3}, 9, 9}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.baseCosts, c.toppingCosts, 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.baseCosts, c.toppingCosts, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1f48035d29507989df4c3594c6aceffbe509b6f3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Apr 2023 00:27:14 +0800 Subject: [PATCH 0260/1057] Add solution and test-cases for problem 2432 --- .../README.md | 51 ++++++++++++++----- .../Solution.go | 14 ++++- .../Solution_test.go | 21 ++++---- 3 files changed, 61 insertions(+), 25 deletions(-) diff --git a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md index f8042d1af..9479f4c0f 100755 --- a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md +++ b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/README.md @@ -1,28 +1,53 @@ # [2432.The Employee That Worked on the Longest Task][title] -> [!WARNING|style:flat] -> 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` employees, each with a unique id from `0` to `n - 1`. + +You are given a 2D integer array `logs` where logs[i] = [idi, leaveTimei] where: + +- idi is the id of the employee that worked on the ith task, and +- leaveTimei is the time at which the employee finished the ith task. All the values leaveTimei are **unique**. + +Note that the ith task starts the moment right after the `(i - 1)`th task ends, and the 0th task starts at time `0`. + +Return the id of the employee that worked the task with the longest time. If there is a tie between two or more employees, return the **smallest** id among them. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 10, logs = [[0,3],[2,5],[0,9],[1,15]] +Output: 1 +Explanation: +Task 0 started at 0 and ended at 3 with 3 units of times. +Task 1 started at 3 and ended at 5 with 2 units of times. +Task 2 started at 5 and ended at 9 with 4 units of times. +Task 3 started at 9 and ended at 15 with 6 units of times. +The task with the longest time is task 3 and the employee with id 1 is the one that worked on it, so we return 1. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -The Employee That Worked on the Longest Task -```go ``` +Input: n = 26, logs = [[1,1],[3,7],[2,12],[7,17]] +Output: 3 +Explanation: +Task 0 started at 0 and ended at 1 with 1 unit of times. +Task 1 started at 1 and ended at 7 with 6 units of times. +Task 2 started at 7 and ended at 12 with 5 units of times. +Task 3 started at 12 and ended at 17 with 5 units of times. +The tasks with the longest time is task 1. The employees that worked on it is 3, so we return 3. +``` + +**Example 3:** +``` +Input: n = 2, logs = [[0,10],[1,20]] +Output: 0 +Explanation: +Task 0 started at 0 and ended at 10 with 10 units of times. +Task 1 started at 10 and ended at 20 with 10 units of times. +The tasks with the longest time are tasks 0 and 1. The employees that worked on them are 0 and 1, so we return the smallest id 0. +``` ## 结语 diff --git a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go index d115ccf5e..cad5c823b 100644 --- a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go +++ b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, logs [][]int) int { + slave, slaveCostTime := -1, -1 + costTime := 0 + for task := 0; task < len(logs); task++ { + u, c := logs[task][0], logs[task][1] + if x := c - costTime; x > slaveCostTime || (x == slaveCostTime && u < slave) { + slave = u + slaveCostTime = x + } + costTime = c + } + return slave } diff --git a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go index 14ff50eb4..0bfafba5a 100644 --- a/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go +++ b/leetcode/2401-2500/2432.The-Employee-That-Worked-on-the-Longest-Task/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + logs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 10, [][]int{{0, 3}, {2, 5}, {0, 9}, {1, 15}}, 1}, + {"TestCase2", 26, [][]int{{1, 1}, {3, 7}, {2, 12}, {7, 17}}, 3}, + {"TestCase3", 2, [][]int{{0, 10}, {1, 20}}, 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.logs) 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.logs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6c45c269103195e62c684bb4edc6a64a116ffde2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Apr 2023 21:53:45 +0800 Subject: [PATCH 0261/1057] Add solution and test-cases for problem 1416 --- .../1416.Restore-The-Array/README.md | 37 +++++++++++++++++ .../1416.Restore-The-Array/Solution.go | 39 ++++++++++++++++++ .../1416.Restore-The-Array/Solution_test.go | 41 +++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 leetcode/1401-1500/1416.Restore-The-Array/README.md create mode 100644 leetcode/1401-1500/1416.Restore-The-Array/Solution.go create mode 100644 leetcode/1401-1500/1416.Restore-The-Array/Solution_test.go diff --git a/leetcode/1401-1500/1416.Restore-The-Array/README.md b/leetcode/1401-1500/1416.Restore-The-Array/README.md new file mode 100644 index 000000000..dac58e095 --- /dev/null +++ b/leetcode/1401-1500/1416.Restore-The-Array/README.md @@ -0,0 +1,37 @@ +# [1416. Restore The Array][title] + +## Description +A program was supposed to print an array of integers. The program forgot to print whitespaces and the array is printed as a string of digits s and all we know is that all integers in the array were in the range `[1, k]` and there are no leading zeros in the array. + +Given the string `s` and the integer `k`, return the number of the possible arrays that can be printed as `s` using the mentioned program. Since the answer may be very large, return it **modulo** `10^9 + 7`. + +**Example 1:** + +``` +Input: s = "1000", k = 10000 +Output: 1 +Explanation: The only possible array is [1000] +``` + +**Example 2:** + +``` +Input: s = "1000", k = 10 +Output: 0 +Explanation: There cannot be an array that was printed this way and has all integer >= 1 and <= 10. +``` + +**Example 3:** + +``` +Input: s = "1317", k = 2000 +Output: 8 +Explanation: Possible arrays are [1317],[131,7],[13,17],[1,317],[13,1,7],[1,31,7],[1,3,17],[1,3,1,7] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/restore-the-array/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1416.Restore-The-Array/Solution.go b/leetcode/1401-1500/1416.Restore-The-Array/Solution.go new file mode 100644 index 000000000..6ed8d6ed0 --- /dev/null +++ b/leetcode/1401-1500/1416.Restore-The-Array/Solution.go @@ -0,0 +1,39 @@ +package Solution + +const mod1416 = 1000000007 + +func Solution(s string, k int) int { + length := len(s) + dp := make([]int, length) + dp[0] = 1 + for idx := 1; idx < length; idx++ { + if s[idx] != '0' { + // add self + dp[idx] = dp[idx-1] % mod1416 + } + x := 1 + base := int(s[idx] - '0') + for p := idx - 1; p >= 0; p-- { + x *= 10 + if x > k { + break + } + if s[p] == '0' { + //leading zero + continue + } + tmp := int(s[p]-'0')*x + base + if tmp > k { + break + } + base = tmp + add := 1 + if p >= 1 { + add = dp[p-1] + } + dp[idx] += add + dp[idx] %= mod1416 + } + } + return dp[length-1] +} diff --git a/leetcode/1401-1500/1416.Restore-The-Array/Solution_test.go b/leetcode/1401-1500/1416.Restore-The-Array/Solution_test.go new file mode 100644 index 000000000..8eb4dfd78 --- /dev/null +++ b/leetcode/1401-1500/1416.Restore-The-Array/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + s string + k int + expect int + }{ + {"TestCase1", "1317", 2000, 8}, + {"TestCase2", "1000", 10000, 1}, + {"TestCase3", "1000", 10, 0}, + {"TestCase4", "2553462832281151811513004352253111", 456, 21752500}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.s, c.k) + if !reflect.DeepEqual(got, c.expect) { + 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 dd445da38c6721d3f9b361c18c8694897faa271a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 25 Apr 2023 21:50:34 +0800 Subject: [PATCH 0262/1057] Add solution and test-cases for problem 2336 --- .../README.md | 41 ++++++----- .../Solution.go | 72 ++++++++++++++++++- .../Solution_test.go | 12 ++-- 3 files changed, 100 insertions(+), 25 deletions(-) diff --git a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md index a34298856..d1de87cd5 100755 --- a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md +++ b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/README.md @@ -1,28 +1,35 @@ # [2336.Smallest Number in Infinite Set][title] -> [!WARNING|style:flat] -> 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 set which contains all positive integers `[1, 2, 3, 4, 5, ...]`. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `SmallestInfiniteSet` class: -## 题意 -> ... +- `SmallestInfiniteSet()` Initializes the **SmallestInfiniteSet** object to contain **all** positive integers. +- `int popSmallest()` **Removes** and returns the smallest integer contained in the infinite set. +- `void addBack(int num)` **Adds** a positive integer `num` back into the infinite set, if it is **not** already in the infinite set. -## 题解 +**Example 1:** -### 思路1 -> ... -Smallest Number in Infinite Set -```go ``` - +Input +["SmallestInfiniteSet", "addBack", "popSmallest", "popSmallest", "popSmallest", "addBack", "popSmallest", "popSmallest", "popSmallest"] +[[], [2], [], [], [], [1], [], [], []] +Output +[null, null, 1, 2, 3, null, 1, 4, 5] + +Explanation +SmallestInfiniteSet smallestInfiniteSet = new SmallestInfiniteSet(); +smallestInfiniteSet.addBack(2); // 2 is already in the set, so no change is made. +smallestInfiniteSet.popSmallest(); // return 1, since 1 is the smallest number, and remove it from the set. +smallestInfiniteSet.popSmallest(); // return 2, and remove it from the set. +smallestInfiniteSet.popSmallest(); // return 3, and remove it from the set. +smallestInfiniteSet.addBack(1); // 1 is added back to the set. +smallestInfiniteSet.popSmallest(); // return 1, since 1 was added back to the set and + // is the smallest number, and remove it from the set. +smallestInfiniteSet.popSmallest(); // return 4, and remove it from the set. +smallestInfiniteSet.popSmallest(); // return 5, and remove it from the set. +``` ## 结语 diff --git a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go index d115ccf5e..28b096395 100644 --- a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go +++ b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution.go @@ -1,5 +1,75 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type item2336 []int + +func (r *item2336) Len() int { + return len(*r) +} +func (r *item2336) Less(i, j int) bool { + return (*r)[i] < (*r)[j] +} +func (r *item2336) Swap(i, j int) { + (*r)[i], (*r)[j] = (*r)[j], (*r)[i] +} + +func (r *item2336) Push(x interface{}) { + *r = append(*r, x.(int)) +} +func (r *item2336) Pop() interface{} { + old := *r + l := len(old) + x := old[l-1] + *r = old[:l-1] + return x +} + +type SmallestInfiniteSet struct { + index int + store item2336 +} + +func Constructor2336() SmallestInfiniteSet { + return SmallestInfiniteSet{index: 1, store: item2336{}} +} + +func (this *SmallestInfiniteSet) PopSmallest() int { + if len(this.store) != 0 { + x := heap.Pop(&this.store).(int) + return x + } + x := this.index + this.index++ return x } + +func (this *SmallestInfiniteSet) AddBack(num int) { + if num >= this.index { + return + } + for _, n := range this.store { + if n == num { + return + } + } + heap.Push(&this.store, num) +} + +type Op struct { + name string + val int +} + +func Solution(ops []Op) []int { + ans := make([]int, 0) + c := Constructor2336() + for _, o := range ops { + if o.name == "addBack" { + c.AddBack(o.val) + continue + } + ans = append(ans, c.PopSmallest()) + } + return ans +} diff --git a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go index 14ff50eb4..0e6dc614d 100644 --- a/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go +++ b/leetcode/2301-2400/2336.Smallest-Number-in-Infinite-Set/Solution_test.go @@ -10,12 +10,10 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []Op + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []Op{{"addBack", 2}, {}, {}, {}, {"addBack", 1}, {}, {}, {}}, []int{1, 2, 3, 1, 4, 5}}, } // 开始测试 @@ -30,10 +28,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 810bbb3671a0e6816115ddaca63d9256a1d6a09b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 26 Apr 2023 22:26:35 +0800 Subject: [PATCH 0263/1057] Add solution and test-cases for problem 223 --- .../201-300/0223.Rectangle-Area/README.md | 29 ++++++------ .../201-300/0223.Rectangle-Area/Solution.go | 44 +++++++++++++++++- .../0223.Rectangle-Area/Solution_test.go | 22 ++++----- .../0223.Rectangle-Area/rectangle-plane.png | Bin 0 -> 51863 bytes 4 files changed, 67 insertions(+), 28 deletions(-) create mode 100644 leetcode/201-300/0223.Rectangle-Area/rectangle-plane.png diff --git a/leetcode/201-300/0223.Rectangle-Area/README.md b/leetcode/201-300/0223.Rectangle-Area/README.md index e6ae5f921..95db068e1 100644 --- a/leetcode/201-300/0223.Rectangle-Area/README.md +++ b/leetcode/201-300/0223.Rectangle-Area/README.md @@ -1,28 +1,27 @@ # [223.Rectangle Area][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the coordinates of two **rectilinear** rectangles in a 2D plane, return the total area covered by the two rectangles. -**Example 1:** +The first rectangle is defined by its **bottom-left** corner `(ax1, ay1)` and its **top-right** corner `(ax2, ay2)`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The second rectangle is defined by its **bottom-left** corner `(bx1, by1)` and its **top-right** corner `(bx2, by2)`. -## 题意 -> ... +**Example 1:** -## 题解 +![example](./rectangle-plane.png) -### 思路1 -> ... -Rectangle Area -```go +``` +Input: ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2 +Output: 45 ``` +**Example 2:** + +``` +Input: ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2 +Output: 16 +``` ## 结语 diff --git a/leetcode/201-300/0223.Rectangle-Area/Solution.go b/leetcode/201-300/0223.Rectangle-Area/Solution.go index d115ccf5e..5ed2b5fe6 100644 --- a/leetcode/201-300/0223.Rectangle-Area/Solution.go +++ b/leetcode/201-300/0223.Rectangle-Area/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +func minAndMax(a, b, c, d int) (int, int) { + min, max := a, a + if b > max { + max = b + } + if b < min { + min = b + } + if c > max { + max = c + } + if c < min { + min = c + } + if d > max { + max = d + } + if d < min { + min = d + } + return max, min +} + +func Solution(ax1 int, ay1 int, ax2 int, ay2 int, bx1 int, by1 int, bx2 int, by2 int) int { + // 4 * 4 + width1 := ax2 - ax1 + heigh1 := ay2 - ay1 + + width2 := bx2 - bx1 + height2 := by2 - by1 + total := width1*heigh1 + width2*height2 + + if bx2 <= ax1 || bx1 >= ax2 || by1 >= ay2 || by2 <= ay1 { + return total + } + topY, downY := minAndMax(ay1, ay2, by1, by2) + topX, downX := minAndMax(ax1, ax2, bx1, bx2) + expectWidth := width1 + width2 + realWidth := topX - downX + expectHeight := heigh1 + height2 + realHeight := topY - downY + return total - (expectWidth-realWidth)*(expectHeight-realHeight) } diff --git a/leetcode/201-300/0223.Rectangle-Area/Solution_test.go b/leetcode/201-300/0223.Rectangle-Area/Solution_test.go index 14ff50eb4..0f94543a1 100644 --- a/leetcode/201-300/0223.Rectangle-Area/Solution_test.go +++ b/leetcode/201-300/0223.Rectangle-Area/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", -3, 0, 3, 4, 0, -1, 9, 2, 45}, + {"TestCase2", -2, -2, 2, 2, 3, 3, 4, 4, 17}, + {"TestCase3", -5, -5, 0, -4, -3, -3, 3, 3, 41}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.ax1, c.ay1, c.ax2, c.ay2, c.bx1, c.by1, c.bx2, c.by2) 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", + c.expect, got) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/201-300/0223.Rectangle-Area/rectangle-plane.png b/leetcode/201-300/0223.Rectangle-Area/rectangle-plane.png new file mode 100644 index 0000000000000000000000000000000000000000..9b9a5d0d2b20beec8a991abd2a1f55f8ca6d5933 GIT binary patch literal 51863 zcmeFZXH=7G6g3zN7F2AMD+s8FVi5332N4^fARR()D!oYwRX|ZhP*Bl;Ql*y=Iz$oz z3WCyWXrU{hfzTm9D0AZdzBMy{=Etm=`SGn`Ef>X<=Y5~^oU_l~`y@M_p{I}z~Yt{nu{5~(zBkLD)2FZKS`2ZJ5oj7} zn|J}=x-{GpZ7IQh2;LZhc)YsLcbmCR#ABILKD(Gd98uZr%KVNPdol9&LDxV zUKhdRzf3K)?>x8cP*PGN5w{y2NIvwH2jP`a?RDo)m=1nbGCMn)8nFH+lk1}49KCAW zjKspi!uo3~t^*dVg_EJ%R-8dt8Yr2<`$pIF7e3%Oj z{QUC}q6)*C#C;RR7q)LOd=Kly_c8!RM;XU1pOm%L*6q3A5M%%RYlI4Ng`_LL9; ztbc{)K6f&#*kht8+aNzN!d1F%@Prf57M}O`K`oh&`34ig!8;GMuEvAuGEEQHDe>+EvDM>IhE8xzB_p-7!Kd zQzL=p0B4pXp15h~vezmiR}>Z(beG=&)15T){UIjf6l4LF3~6klIN2i zEe!e3;;LceLfLq89?cBTpnBdAU?-w@{_fgk*tI*#%Fi1dd-C+>hVH*sF!vb^Nmq-R z!4C)KOb?VVPWKgu9_Ak^vTi(|=yOI)OcV3=_P2A|8|Tmvnr9Ut{NTn?Lj8%=(+F+iisAC5Hh&jf- z&>Cu8hF$H##>S&6Wr0;X9@lXWUhA5>!2i9|1}}~Hb`)+Wd_9&q^S{iCG;l>IlXOlU z3A@#`>=^#?C0XRcg+g<<$WJ>V9rY@Q5uD;tLu?^8AZWi@7G!1JmV`6GEq;=XvJW10 zjfJ^45ywh9N-_E`ZkM(!h`07nGaIe)_x0z*T7eZT_=CL z&K*Mw{CwjxYvHUC992YFC?q{fT1E!aj6!T6JN_##C|En=uO@SHW%#AbPk01^1Ges( zJ$$M5Lv&uPg=2Oz`3>@Ac(`76aPJRz#I@SLZ)9$sh!(5bSZHdxOF!p*NkL(dbvTgW z?BI|ycv$n!okB5VX2L}(&+U2a%wEQk>EZ4kebFf8F)yp^-ukGhV+^F^IBjff43ZzC z3m?$V4Ug9P7s7WVcx)-xsQBvUk}jrdohs~aP~P#mdgXNJ$$LrkvTH6+rv-+QS=ge@ zF?^wSrisy0r@Qb}J!$5hth=`uC8(y?>pdL6BkhuFuH<432P*fJnU>Zk?gK-|JgZ!q z8)9!QZ=F)|R8KdL%T!+c4w?5_=?&&GFP?8rkT(d)P><`z8fa#l95w#fw@@4~WMaL| ziO=dmlJ(Q8%aP8zBU~5tBK(+1_z)BiOP=&`IBJkmgpfh=wOq?nJ$U|q{Ar~<61Oqj z->;6~R0|osUNI(SYCWu!Kx?>h=k$yurDS2%IdPu`-|axWU<)g@ZJime+JAtb_ErD|;=jyOY@ij<$xqL$rZ z-oyXa#Ct4gbu{!Qo9wOeqXNqD0V{pTfdKj-eb77U-pcCyPe_Y7>}Gm;4=n8SMsUfh zgR1>eZ{NO6O3L@EorOdzxWbsN+MbAW^_q>8mtaQW-|D2QYlCtxqx7)0irX~(h6N9l zd$?B2*L{7uSJ;MPr`pdtBp05eoSJPpdjs!{d3{2BVk*C?@+Yj1FeMsvjJZ=c|Hk|i zqoc+w+lgM4Q@O=0+zNh67z6XQwws5^S=y=JHlsYeSwq#W&4S(xo;R37eXSeKVCMGa zZ!y>%U!+u9R?OYh2HWi<6co&ij3u%P3bdAMYil`in_QwISQEV7DZ1*6*57il4CNdm zFo!>2Nn7xj7p)&EWNXU8^FutST*J3fQAIuG{ud0eT6%hEe!&v3KCj)7fXcM9uCD)1 z#pKzxCT{)^c>U|wFLq8&wiA~hG`zpSE9d#UGxPOen})i2=`<5YY#^C|TfJlN$xA+S zBbJv|o5WkYa3<0M0zYfHEc7--@BNF(yr#FXD;FoHgOG&=z=+4Z*O?bGP5;uRu+(;wtY3#BBwn(* z0o928hpvu}-U-$aJ<+vst~lnoqul&^)i_Mn=40nRDEV?0jx!ynA~IBo%g(wGx(E(H zL|?>u^Mj3cYO1U2=hr$Nk5CqQ=a?12#4LKRu*!&4mTi@4_F~)-o&w1(7eB^Lc;4gi z|4Y0CPyJsqgTrP0zgdv3T{f)nnOBz{^z5^a!I=@evEgw_FF7N4<-OJx#?6B`iUT*- z-G0_J$4X+;(!OE)sgNG{CG6V7Td(|FjyW23tD*yC?Wh{2oJys-t_9^~W&IHA{RKyY z+P`n>AkGrARl-s5an;Fvb6JO_swXK^;U?mmAhW{0Ip|WkHle~F;MrSX1-Xl!6X=RX z;no{1wxTc?a*jT>hE3k-wZe*)@9(zcp%LT=9MnJkrH&-OWrFwYP-OrEKm_C`@A@dg zp^$2VXZhK+b7i%hR>UE+{PVYd>11vzCD%@QC`Iuo*vn z^Z7v@DW|!SuNHx8{bVff}DN)F?`Hf&h;t z!v@AmI%ZtI|2;B6(lMI#Z*fJwS9{k>^F}Kz8l0nwGR2ynQ3BW zOIm0U4%%8wV$f%Y^DU|x0eh8CCYlu93z2Tx99buc`U?c)`p=ZB+$5*S&wRc~g1y79 z3q;CPvmPT}vuXNZ6=F{ElXM+24T&-LyC5yygA9mv<#54$8vo>CW0SEJFRgrnwYP!5 zx&m>pHOf3*Nd@`(y2ns;s3|$GX`gz*7^rCmKfV8Sq@$<0Rjb$5)&P-69amJ0(MPVB z%(XN&`Y*MsoWJ|Qa#qhELb>?k>e0>DK^v)lDzEuAJ2e&EzVjfEAK5w)kB0{#Pk4@E z^Lh?{Yli;p{^U}rV~?M{sQSklU8-}mZ-cwJSHeBg$U@QX9?I#bW~A7?Ma zO+4Pk_Ib9Fk$W-xTY|jzir>yB9Kt9#K1~e_8a|1`YvA#YT^qAJJx=s~M=@d7fzR_) zY<}57g!GVI2!GIqTYHKUij&0#-oO-1)<@mGb4RBo-(bKiyf^SCy^ExmMOZ)#UP zD>T7j9QQ7KL+0iUq<4S101a2jvlS;sR{Ib~vHxQxUSt!nn9yXluX_RNfi@|S7;Fp2L@dU$T% z?t6;U&KPR{Nxe4RhWdKnv9R-j>wnIx2M(fp`Y4SUyd-}drh#*{xVV@$evoArBW#cZ z1kOb!XLanucG&OUiu2(`;l8OVuPbR~l#b3${nWXPAGS9)UvoBE$C!Dw$W9urz0Rr5RnvJ%R--#*jm`t%88 zH2rsbjl+hfTfR|o-F9;U;PxTbbfMVwr;$)OA&D9Hl{k zB4+^pyqK8l{8+7&J{(N4zR|yi2L^0Xigs>5nw5~o0EWh)gr%?_xm6^&o6q2bOKNTA zj}r-yKe$zr{eJy;tEsT82d9~_a?rNnfIpgG2cb8`dE~&V2pe2>c5mTh3>gXT!ty@&{lXstE(g1%H_~A zg#=_HP)K=eLc91qn*NPlge{SE>b<07eMrZDbJk$7n2_{EzX0F%nqM&x4t(s|+GJ9G z=_hXbnw+MLw6wwT{t_zr7xIC%b@s)rsSAk5ssR4svM)p$Cp*pYU466)>2Me_nXaaS zzP)qxv;9Ml7p`nBb(+_cEY_iT_$XARbq!`}@^7cMs}64E+s@`fas+s%>AO%+!$t%= zq`3ZDfaSKU;VVeYgO#Nw(qhM)*oqR3*DlbDOjH>Y7t z8@_~RM@Qp&8gfcv-D{sez=$m6$mVoamzXzSZ#Tx^Oz?mv_E-}if1kdrav<_kL^M)-Y(aT5KSPa&^-BKEC-N>0b~==2IIW?_tc#fH z$_6qnb{q8w$0btVk|58>ueD1AsLlb`T&?{N;_>e8&u;gHSKS(~%zfE~f}?uAa%+9+ zJ7nx%?=;H}qPn3_s0B3lLPf;wCne%U%YQ{}Z%itpDj74x?G=2LkuR6f4GP^!+P>pf znCG__M-5Efl&0}T-xsQWnL^JgCG0snL;@UxlJaW_q|T7BF~$$7dd#9bhz9OSj}6=} zYjIy7KHw=r@4Qd-K`vLsu+4@bD?-^_7L&wX(t%z_1kZ zA4IVQEt3s!x$UB)C7nYN)=$|phX)!Q8YHb7*o9XuN<<-7uBcX(K!NPvwDM&_iHBQj zlO|t(&#qUshyc#4udkm^{Mg7dQq(4lGcHBO-KHtyZ{%iK&W?M9I>jtJgc9c5?%ZEe zk4%Ra43Y(EUEdd=DKH>f*BvJz42nMuk^H^Yv5IN-xQtJqzH}7T+H>gTCnJUQu)M`u@!xoG4L z?Gbt;G!utzyl z%6P?XUR9Ur&>;*G6BF~=Ap!7gp8i9@=X0lUVSs348Iif#rFk261{ zF!A9&D$jHc@=tbQ?5&{Njcw6kTi=*${Z7QEqQC6OMPzTBELwZ2TXv&}W5e5jCuVA{ z<}luglQC$|Y6bxvf>B%@d5XdrU-*4>rT0E?W2o#Sp944jIPxkMRJUE`=037Vp-NP7e+1??p-PP36a+N;d0eTIOgqIrDbJzXx73aD(MDUJT0h1M*_6(wNGBsS?(X6?Rz^&`iCc|xH%`q)g z=Jr!r;Y7rvFFW@39`@VyU-MelzML0CbBrk<#FzR%MN&9GX+obvAWi)I)}f8S1qUwy zm50+w1i@wdd}$hFQttsb6%CEZ0ROTpa7j$SmSn(Kp7Q?6!ezKdHn4y=&c;B`H41rT ze$ackbci=5I@-oxw;U+C&j1S6sxn1#wD~H3r@YLSUTGYmNVEEORSY~ak5cKkM|2VEdp@9IY|0)nu7#|FprgW%K)~*lUB@{p4uJ&}#p)N|g z8kYzeVitPu$hLiQKZM>)%^Dk{dhV6+K0+Ekk1mnCi7qWUz{;w3NeYu#2TiwR(o;6M zA3;jH5Ly>1rfwsyT{QDz;9qx54X^6-8J9pVN^JVaGB6Loc zUw7sQF>G4mv(x&q2Khybp{Vd+{N@>NU;|VG-oyIxFKwh!8*Uzaion(%6B zzy1>#)*e=zZf0bJtGM^p-4jw_gxE0to`@Shu)o;+O1~lBN&5x-kRMhv=_>2wkR{@a z%XjD%ghI_8Oa&Xpj1W@DXq-bA_N689R-O!c7x7&+CcQhqa=pRfk?IF%Plcq>FQ2bh z^4f!0P5Uy(#b|lkE0rkyZTx?8Rcv&K*QjRpYetqKHY^t4&e7&P9=z z4PHV8?&TMk8h}>lz`I&RtS$Fg2yb$7a#CN6hI+jmKy@FKyltkAHRshVbLxY(JO35G z;ufg7txZiOZzZv;k>ar^k52v~^SETfihVGk!3Z8{4FM*}4(v^F)q(#Yd#^HAQ8a<9 z-zQp%Q#PpE!eH}UKtfpFiE#lM23kiQE5LpzT_g6WR+*o#d>1D+sp`|b?V#cUBcnd= zzc|s1^4MJN0pMBNK)mLrC$9IkQX=o7T15)4g;Jy&tz_LE>Do>(jZTtu2k9z!=F5{^Rg4*V=mAyLDyYUt)b-Tt-0Uu) zLq!d2ymCxZ2nw44$R{@y<73oP?XUW|ARUqItJEBwpnF|e+6}+_E<-ugv1VD^ftcR& zsGJ+|-lpd(HP51IYrvzGSHZ6YSp}yOD5O6+hB4*T9OdttW)lS6_fN$PYG!O_#a%nn z!j{iP3=9nP9=6}+RExf-EiEE~gY<{e4G%GYnZL#6@_n~(Oe6o-b6iv8yG~cFZPNw9 z_82AN-R^}NM=TVFEQZ@7Bl3Sn5vZj`Yl|hp!w?bd90^K~ecF_+vxu$qlAms&Exw8A zJlXqtaO1_T@X|FS->$5~SJxhth@xsnE#2Ib6@xjPB!V6YGu}Dw>aL5AN~y`!oz-l4 zsck@dPdJ#6-4#bEi;8b8V7 zn8pN*dr=VAApdEv8))yd=$9Eq2D>CNidf)+xgfg+j^EljE#)%gmB%+tdq}v|W_{}| zgHiuw=9k54%SZ7^{_WLJQBjH2Sz+K|Z|aevwCPC`oV2aUpYls z^g`qv)p%0mgN`sDd)ulW=JlR^1bYBG%nAC`NzA{HgAOf zz8ACo@j;m_y#7gxyyrPLc1%Da)t^JDhOx^JU%Vf|_K=V@q&$B6 z#)TQ%3QT?KS4*FU_jiCMmS67DU0m%iadc75sN2^bj3nH&uS+vsr3jF&l6%sZuvwgt^U}u^z1!<06t9h?PEE*t1^AaH zDP@mwy{1@{NbT&>k|(x=XK==I{DXr33iP%8c-Q=Cn*I)bvuv8|F*4ss<&gT;ls6rIuOeB-PvseV4zd{?|$1>}h+`iue) zWtl2fftlIhoS2*h;WPSk7ms_DShI3LzRpX6MT*U=?B1vZ|C3%b{@*JEvIjJu z?m|4KjeH9m6s2AbRKLW%ul%s3H&RGQE54fw1#}wq)0kW16^!$ZThv9hSMlgV;$Js}l~wYXrP7_&eImbNgKpS(oE)7LoQed_4hcP?}R7@2EXVFJWrHXT_Pv z1HS%Go;T(n{@-)q=!rT%aeBslkEjzLnWmJ#!fL9!(!k$e&Wim1O9GGL|HF4_HN^7L zKdd2L%h{KYg{`unop;+h!JQxJVLB6eYX3lS7#q9C;*>rG&K!=Eb~~Aq-KWr<9UXdY z`?!CpGaUtbOv5Ba=zeBqrm(xPC7e&>ePN%>w6rYqC#I4BqxN5sl*Ggh!9#nG{`KNS zF&%M%ft3xaJ*tCXT|{CntxQf23^}x@Gd-Bo`(UTR?BfZwx&v)vV`F7yC36zhB#K1p zL{yh4&D@KTW(KL&X?UDds;LOP#GgNZ;GG8Fzh_@IHrj70kmclh-8+N%DCA$8$HKzG zv=@D0yisxO*So`t8xNO$w+{zxlc<}mXsl(@I;SfnFN7uI@0s=TS^+iFAlL9;tLkS^ zRmnn5Vn#)``uw5jgb(Cg@Tyug-9M1PG`y{H{Ld}Px&daU983uqqCgYtC3??-Je~{c zJY;9E<|RLWUKUs}?;sKJvxoU~!fBts zCq_$O$XMF0ZKU`9Yg%WfCN!$kgA)y8P~}jl@UkxF(^p_6$#RN{ieNXC%oep(p26p5 zD_?Z=AcD#6Q$H90zDRjJ?H?=g(}%S%Es9Wx`#?~ETg+llrf3OLAuurFX0fPI(~I`P zPbiPN9Dhtyek{(bV z-tYm{e$~O0-FYXk25mheJEAztBr~jC8Gt?!S*Xvf zyTQ|iw0-bE$QAn#3dJ14w zW&mRa#55o{NwBe5YeMy*u!Y6BGaF31kDmD70C!R4;^I;n6caIUg_eWKDZ!KT%t^*y zEP?junwa z1_Jq-hBWhn^}_=!VvE2R7u#^m&8Sbg*c?qu9oae=Uj=vmvBUGfhY=}eSO8AZtE(~!#s3SZK(`(VfoRtnTNb?cCah1u|&$E<&YZt_6q zjnnClAyg4jrFpO*GHe#W=XWY}^?w*;S`)kowp6R3Px< z3asM40*MhGyUP6el>Ptro~Zv83q23wP1FCfOL}Yzq9T~0Izihk^P(9q=NXq$891kB z!!cV8(!-C$fmyPXpz71E%&rA&Z+;6qPRbc3rzpLwi{vFfT651=d>##`6HZ}|#c9V> zLREinO3E4Z=KP?X%Gt4vGf`-0k-o7){z4t$8Rpm9!4Mv6ZS%Eh&l;Xu6n2g(68LNE zgPZL0e>O=O%mQg0@B<}PJv$E4o$GLA0Fa!1E7N_Tcxnlyl~ma@bGy#9$N()feS%4g znv-X(z-t0zo+IQ6aL=QAtwL#_9ROnu63p@*B1o0#z+^fm`)-bFJLntS0U&H_;G|W~ zdf^AV0eXdoTpahp5Ts})v+A(gWcns`S!tb%4 zKO35Da_}%cQO2HtUdej!#&YBDbpouFfy&BB+_axoi*T!QGpOkqBU7C5-R0x;342V)3J4ss!nLntQz+zAq`N6Nw zlvA3Umw|V)ZUIBfDC8yj`mP3WpMu}Ua(+;Pgnbke#voEZ;H1nw+m(b3^19#};riu4Y3Qm0YVd)LjRVr(%<}tx z2lmT67?7}7Lp0cSP1LUlkrjdPM4|5KJ!hJ>aNZDo4Zl!BELHdCu7XXKX`-=KY6JOy zktsq98JPQyCv9(JVlW0Y+>XOn<{p#ZTi-F9Cy$kkPlgxcpCkL=)@FjLt?cLL*P5sR z+bGElPiV=mD*PKV+54OLaJ0H=V_Xar!A_YKmxnLA$2->b4LsVeV5qL; zf-`1*4$NN0qhQ4O2?ip5YvWp3H27jVS&5%Os}kOnYDi-01Q@1fcnESkNLzmWTMQbL zhZDZNy|qbBxMWogPBSaXbfNtwZ_0MN^z}ASQk`<$h9D-H-RbDzpx?l+2ZS^2OZ3U4 zpuA+5aTtr2^^l-|%Yy!=^ZVsBP-18q@ zOiz*tp!hVv0hzqs(|{2s8Pj#g;J8fzqbNq4E=mg8GLqz+9siyBx-58UW{|=Pl9VyQ zGaKU_JvbjYjxhj>9|6KK2uN8l7nNO4Isb^_j31l|57<>M^bNTN^)IOV*#Rz5CiOpc zXy5LZD~or*H6ygk#0vNX)R7=J5_on{LbWca&_R48)4Ilt$Hnv*^MySz$-TLsuxDNK zwE&ae{3*Nyf-zVg)ZPhmB%!;FKs`ZexC~X4bCW^#jgSSb#5DA+cuneEWwAHWf&N3_l=E+t1?yySq=7@xfylZ| z58AecP#f}$UPxn3R^eNa4 zlQl4O6+iF?>ySyrBQRZ=*B=Um4F!K%;1!f!S+%Iv!UoWe?A-UC&g&bPSb_GN(z;xlAs?{qC&#LDj4sf4lpt<3ACDP$2h}1BMCy9ttun2&P zBfx>?l=DKe&MC>BXh~o|B^w_fFZ~NqGo*?VpW=ogo4@9jM+GU3^QtiU0?r@GFahvb zbp>jjNisl3ln|KgU4Z#IsTf!>_Ax07Q@1I0ngQbixu>|yJliFEOz*F0DZl!s9c*91 zG3Z$meSKE33bYhlf#cRvrlNCSk#&EGJ?K79$F15oa1X%&Wpw?fv{SF;ICD7547FmR zA~Xf{1Mh7I18tb~h4K{|#pLVu1D^|=x|m-{f$R2yhAb1}EiyHGFzJ>R_iDpoS_+#R zf&zGbfXqajHy+=cg9DwPjyni7MyJ^Ws+aKv)znXGR1^gWufOy&?_B zoK2c*P_ZhUyjL8cE?W4Ga|kzr=f|EUWUkj_IK7urg#$O)d4o5%gUDdEO=ou)2W|6r z9gl0t0@Kk7-sq#-=R4t~91;dAG@skIqbN}*)f)3v%j%kjZe0y^LGtTRIdYGvjdrKx z8$QIXMwUF!gT-~E-SN8$gjLIrA6gOCTgNqIk|FCO!CADGl^WR*Zb!}`!x)$)y_MsS zWKqZG6!+<*f+DJ9rM2sn{!sU+h);?S3LlMDhk$*okLiV}y@)FKMpRgwY{m1mul#Wv{{?A+!x--p z(5gVU8^z|XIv49tyY}QI*knC(!gpe#C4)Daf*wY{APuH*j&|v%r%wUgFas~4Lv{lc zM*h8r`Ai{jcytBq7Jyc@c3l>=sC)!v896Nj{U}5~RYSXhm2zNcg=AMaJ&_5m>vz@( za9X@ds0TTKhH3abl}CI(lbhSM3GGib;ax@X^sf3!(Bv-&8}|i8ZA~$q!e+%b5rn|! zR{%rgj_3+O*WUWOJr!q=&0zXS+;hX9;?H2mu!GX5ODhLvzAV_ERBQCx89u<7CYc01 zxk3^czgMddh;{Mf4DyErV@x5el1{q+IL&SJ)>eD&&}aBrx8WB6vs zrJq5{1if?oa-Me6v^M7U7z-<9Q?`FEgE4uTqKkj;7X`49#U!YY5)=iA#Sevw#=zXr z7F7T0hQ0ic3bsE!1lAr2=_jt8u!`QwO*f6`kBRO zmL4|s9z+8HqC;hh4j2M$*BZx_JN~NwqY8c^6!QmjZg+cMh?90L%U7VUk-(Aun&ScR z`%GI=&re84x>bRj6^S_WNApUGXr@5|a8bRh=HO-UHRb$1)5Bp1S?5AJE8#cUsJN)t>gWJI96Jr#!;mb?l>@ajf-zC8=j`GzbHG>elr} zB;Aa=vOiymN6L)703WyM0Td>@4U&F|bO$7Jea$Z^r74w$?kldklv5b+#F5EOn7YZ< zq@ZTW9;UCSfd&#kRe?T`s%RTz_S5bh)%f~5ih{?Xj)C03z5hX5J?|}pNaiRqN~m$W zNWvGY(&h+noV}*(ID7uDa}L7L(l>0M6W8`z3i@pVRlX2pY>}6v0BeQ@8n*ZO)q;Ct zZ^Sf|qb-wfot>TclhU?(L`-6JET|cE>lW;ppZsA~#aGisnCHQU{6=B^^;LEkk;--H zH;W4k7u8%}C*l(0>I?`gvl=F&!ZDnGz^S5N{GdJxY$o?1)v8v5%h>?{PfBS+;a5X@ zBh4>WD!6PglIgc4F-Ze34ajZkPLHjVb`961r6YJS|5ighraEUQb@U*;Llu1&De9{jPV*1 zn2>0Fp3}YBZvRFrtpi7tRIWdL7^8nzV0&CFs2seuY**&4ZL1A-O$GIufHvg$<8-Kx zLSAu;9JVWza=)r<6E<=wu@42aVRO&RGc*z$LVEdS>Gr1$-;01EF=0>+iJ;J8+Z+X< ze^~DKDUo#WF9@XzBZRLAtKpp~-QDl0%n5~%Q7|(_@F^Gzc+&cpVc@q-2H6N^kXZ0e zSD~Q|1KSLnLH;3qqihpEw>aS0GzEU=GffY%$pK=7x~|S>X4*8D)M^HftJFba4Vpyz z;q|hge@Q0ZV006Q|IN3&m1Jxl+vje_r+RLkR2X z4W2WfXZpo0R^BLe?)xW_yGZSU*lhYE-R`y@aV6#!vq3tQqEDG7wT*pjM&! z!11$vXI*vk2wuTt7*e@8HPNdUW=p)tX^rQ{4T+1nd4i+v_8YLu+0q_!Zd(v0p>&n% z3xGF*0A_rSD#^Xe>*CtY;B+LH9*`nueR?Su@yVRS=@Bu`S<+7xj9m;cA}T5fAJWNZ z-O|e`blWg*wt_(WbaCLfCxMNIcpcY|F8{PoyZr2z5n#>=!<7i)iF=JSoD>4n*kfJD|@RSi@X;bh?| zpm&RNA^d?$D;r7}3!3o(pbIGE!vE)a(|_`q@WwD-=K|1!Wrrk{=j5e(LWC``-5> zHTgx}mm&V;ud+aXtdv)+?mmS$`wpDgcfRU}z-WiW%7KoJADKQGGii6;b%WUj#)irH z7Q@tL=vpdtPQ6J;0H1MrdAWIg#CRcTe4z?$ssTn@?;&56{lnXRb498OH``YUuVhCa z?<(`YFLnOB$|!17*IE*#Ugo!mZPnU1zXk}z4B9W$=jo!x+{@8<*`99cllQrd36UMg zSCSlzxN`rx({8A1Ed<#NF<_@DCbt*a$|gLr=cJ98Q_)nS~z*`owB}!e=NrrS8H;w#$uB z4ReDDIbH2W-%WYGuG+HY^MmYGx!5A#dUbLGaD!2V_AQBS?2pY*#f@Y=Drbmul0hlv za!$UUYq=A$UGO{fATT~B}mO7q!?Z{BOjHU&K?fIjbrL3F& zS;7ujAf{stdLsDd$sj^MEp?kj4bSKhOwxDQUDy|1r`_+^dVxLJ z1*8s8BfP9KRLw9(NFef2_CYs1%K99hK_7@SC#{2B4G2flR^FaIlTOJDKgl3sZ>KoE zYTTl~Pvx6rEc$28-Qp4*rcj5Udl(pNN=xlsHJ>Yo?+pQ&>p50kjcWZ zGPQu_X7Z_s``?XteQCd$m!u3Az#IqQfI-RA*lbhgxK&j#%{%#$Ylz=6^+M~^neRg_ zq(8l>)?2e!yN>rvWQBnuE6PV>~ya5v%c219E zlNC%r62(0lVv7kHV$(=Tf@nTTGIwPh*Ec0Au(?%liN+L=Q7NAT8v^Ly6{y&`)BDRH{qG+r4EmA(iu7htIKoddY@uw7 zAj+bqU>lKbt~AeTE+Z5pec)4+-G6GteMc9UnX%fJXiFO8f~2bf8Zx8L;5ZwEjzGf+ zg9xa-E)fDN4t7FHq}sP*XU_ZY6%f2$>&i0y{} zV_hOH)#$t@8@q+&qX@N0-zF?|*ThST2wMZHWVLDj1z|}_(S7b^1xCBM>7qlg>w^xx6sgC@tGd0QAl*zK8m(jzPO)V1)Z#&D^SqMbLf`pPHr93 zBQMyorpNZNmwO0b)Y+>anc(uI;U3=Tan6m*LMD|3whuYx&`>#tczAet^~`slc=7ng zp@6jOId?Rh_wB7-^9}JWU(3-{!@RdV74?>rZI9~Cx7AuDmyU=WR6daUHu$#N6CTpw zvzn(WWdB>iEvaWqmaWDuRV6-fAIeC3@E}BoHsx^h?KK%ek(;Lnd~0NxYo2>CDRAtd z@=n2{W;dS=h90j|3;ud+(lR&C!}+K_UPdP?YRp>*O%dMAl3RTxjf_cmF`JWR{*)j{ zgQ2@mjOB@ym-jp-TN1AL7CoPVW(+^S5AT( zZ|6}#+A-bX~g$p4O(yddmavnkI9k8s9)C>P*{GJh;d0-HgR84waT^hwTqvcDi7HF(mD(9+$0|Hy zW9vrCbC`C4qZQhv&u%1x_-gGM@<1>GMj?Uyyb9Jk8&euR5S5D}2iJC<)1>4xPOBf5?>)hJ*Q1hV+7~xsR(qsEyWCUaDE-upIc1KK z$|qM+9y9%>(Bk!S;dp_bIm9iYW!<|uugu~UVb6jdd@$x*f1OTIe)?pr%dTB|d(Crj z+Q>|hnb%# zB0A`UUbgraK#cdUovwV^vi2oTm#r!3UyrS6--N>opWWy#Pr3?@w>+H@lrT7{{|dj3 zK%~ed%WMKODrR0`m@FqR&w!o{VxbZ#e)%$c94(Y6d3$YOCh%o-SdwOZ&t*XLJk<${ zDfIpfwz3wnOW8wfVdwa+d`q61AvA}wZpjsL1tWHm+W51 z`1_etxupTrkw1a$#$g&hEhbHp&bO@Oe`UP8?NDMlV4LI=FNyUC^>QYnMLf+PwOou; zK4TT(6sMq7x;u4+Q+d*%Wo!A*8Q0qIq(S*1b(0dOiGf+K8K2OUjre~M)5;okk^TOY z6=DXR$^I>`J|3`bq2L+G>i(X>Y*Pq6Hu)<03uNX}JqIGExVpL;!UfDuz20$}iC5O1 zg1P~m_Eo43V1sXtmn{YzxyaigXHjHa?s>n0b1e<0qUZ0{Pdf2=d2~RngeOcR|DFEt z4xFDEF(w5kJ$5yB#8V%Sz8@)rHwxCC9d+7*%nzk^=CHgf_LJ~oI-zDwNrf0dJv)~r zDlhT8&SU1-8v-_C4%$Z=#}idcm4maZm#iDQF1*WR+DmjpHMGsT=Btl*5#d9XKsH1M z3ZsSnu{}eYE>=Vst^iKo+jU76&)6yWR;$fd-{`zz#4#Q1@^Aak%Pn(=8C{aL-HhE6 zK_xr2ONgBm+MmfOPbradN;s9^949)MLqo{UJi>Gsz9MDo)z-r|H9Woevwu{C);qdC^L%r4{Q zJIgTn=N=Ed<+9{TM0X(gLTDiU#Xqdx51$1=1$r_4uSiFL#N<6}K2u={W|Fib(h-`Q z#&f>R%m3_WiRVA;;c{Ni;^o+3ceV=8KdAqWw|5VRdXM{lJE@gYE25P{twJ)QgHw@2 z&T^g^jAKO@hRBSVVx_29IykPzA!laBIAul+l8QpkW-#MWNeV+LqX_%+Yu)$#JlB5q zzV^QEeLZ{qv)09|G4uQVzTfZX@Or;LZKbC~R9xyD)~rIG7-zAFnUkBx+bpsOrk`(q zZ7J53rb(X|O=$7Hv3Ul>OSN{NfaRQ$s`jvDgKxp67(?h7Ko6ybPut4&h|H1}-Cz+X zS-t6byZNC4qm}D}54Z=+#oi|@27GIBR@Vvht)AbrIKII!$1}m~)|FB7*Z0NEejoO! zo%bDtu+z8q$L+O(?bCB|tNwhFT={%@a^85jIz=~#(KB|vRN1iW)lcff9UcGlJzi{> zBNO8%#1$*&d^tj|zTEpWzJ8t#6v@||3 zvJ&C=7Oz)Mbvd&2s5U$EMhG+AJWjr0Z|0sljp@s8i`$bL-q~81+wL3;S7EQjUd$Hl z7CL`;8`(u6)CCS=3s`u;`gW0=UF}MB$Y)3kl&vA1B-L}eMRhzUce}+D>%W)Hy4Kh( zc|-kaUDa@e%qom1V4;x`nQQ9$vNAhDY94&#Dt9iHrz}krT4zWnjH-&Kknj1pxvgP) zS5MyDX#!gYJ9M-QBgFQ-tLFP}IHP?|W<18$E%HKvT|q^J?c>3lYgQE}hBo{3MM49) z`oHM}iFAJcn^f$7cF-{BLlZy`JqC@3skpt=lQfY|F}G6QiiD+VTe z6|2H!P?Qg}CThp_?b{_Kso4fJ$2HZ_DU2Qe^%8R%8^_mb;DUKfc8klJj#saKW6x-5 zOM6wigT6jzhtf*eBd3DlFG2}BOV`!r3?@fP+@_6?q@Bd^vWW| z3VA>DU&vp5r2Q~6eK;{ay(VCw5_~35p5tRq@?7)V&c~jNdSqh0V+mF;=WmyNC@XU)x}~AEMr%p zcSEFIdUJ6VO>|MU0+fcYftRQQC`2+p(A?6};WJQujz)b|R5gxDkiTJLh<<>-#-{O; zYi_O21epAL!mon&yWsvM?8Ou)bq?m4ZdDxb6zaD!LK)^q+@!6{T{3EhyNV+OPpa9{ z>f&!T_rVv(#~~M}-=z&S5L=*O4&Xp>$s0F=^I7m7kb*0L0tEyl$1Z*-4g;KWlhgr3 zeF5M>N^{E7rRHV?RN+YcLL052EBg`rXrK*>!LF&6=^K7?1aK~dd3~jK@x$qYK)W@L zTO5Ca5Gv_PX-)r<1xxfi0LOp5|JOG$MIbkd+HkD_E*jlLLkE~BvPIBw}rr7u;d(X%Q2WFD{kzZk4#>4i5FSA@ zA+By`X=%S{1MIMW#RYSIgS)%qj>0sjW^mmZ3M46Y5c1pzGmPzyBMb`;ilATfz=0#H`s%y z&nGUTH#8J~g%{Ot+i@Ft%U{RGzsxAcPUGXhCjr=cz(2pdhX3;=$iM&hnaw4%6sX=! z_M39&-|ueB}VU$k3F2-*SWT=Cs2eax7Sf27v`0)U?Y8*^moB zeZ3n#-Kfz8?U2b&&}5}TdlgVAxnm*uS^1h5O+Rc!zD2W_WAr@usujNYPYe|Np&XT; zh3jEDpiI65-DR>~eQ2LsnDbiz5$Tdp+ojOH`G;dfjIkK(g?OiPG#4kQqad$VQ zpeU0>Im-}JZEbtDtzZNch$JAy5EbBS*i=KIKK=lF^Z+aB9bxJ_+S{K!R_iL=wp^9< z7Ba+A=y^lVx&mD^yKvY9k^Vg5>4G?8+niSK+U(Dv5ua^T^8EY(k zBuO~6_83y@#t^66ovynQs8rCHfHm{Bf@swg7V8EL1wX==A+rAoxB(m-zES^(YklS66 z?=D;BM{u>U4GIhlge)QJiqKgGclCdA!Sf?)lT++~%9V_jJPQfdc89s~1CeQ#Uob;9 zCw>^Mz67vEpL)f&z*DW=-=S!YP&;fe&JE1eA)>=O4K^@?M%+b=$G|UliAa_vNz}M5 zs7M>+DI2Z;g5b~wX)F=k0P!N!V3)doroRx)DT0N{e@;=&}51$EF- ztR~FC2FAY*AoA19u;F8%G%;R)u*9WchDI-qvzn<1XwNtXxGutWu6zL=cw}X11kl-{ zUd9yT^RbZkW-_J*3u=AP#rM)Y58ZfRC*~2ebt&l8y`U47zojnh`&t=bFg89O1zQm4 z;l0t4$#+%La5KXFPt=^spMEHOgNP>4ciG0&?|-Ye+s^hmV6?ET5eRUko`EAJRiE*> z7VHfM{t-nOJ*=ALskzOX&CneO?4h8j3&I+J{vJD58Ie!2R3#81sG3enmh=u^> zi;A`S=g?c=(W@!o7xo62%ZIZNmCh+4GzA#vbmJrQ0D(K;T=}8}@zcxu0M`&%xhjaE z8umL}`yHw{FYoZLZQ9@zX9z|~^+&AEp%x;R_+1bksvx8vcE9Ce%v)zWtar^P!W=)Z zUKbFenD=0VvHuHJwwKU8fjUMHgWVp=GWF1-4!L-dxxeZs_|Ie;SoCTw3w_s-V_O6k zyoh#iR%iw}>i{%nPkHNwr!en*kE(#G6CgV`z*`DXgog=8HnEEHvRz~bHpoFyNQf(< z!5quKff(ml5O$oL`7a zho*SsyBD`m`(?8 z+VVef6|iAA?_pgn=)dCW?b*gcTI!wdSD_|_oCdx@JF0Ke{g!NE>5dKkTi=sboSU8J za0aQ7y2J?t9s$ps2CY}@iU+FI)u@~LyI0hQrL6||XIX{aKY>F^2cu5&UV3Gl=@>jH zOvH-l%jioG?!8#H-8?rv2&8I1A=>U&Hl3H*dVEJSckNjcNpId1w(1 zFrESh+v+N@P)F);uA@AzJDGi{L@B$!gaS4y(Au2?p)o+h*zJ9`vUc%#Z0h^_&7O9AhJnu*j`;9+?NP}sqB|oop=_?->|-ko%)%u zCGu?b>FFrFtSr{P>RBvBxI=8iDzscz_OD2~t6e0h(M}~HM2Qj$?YY_C~ zb{X4UE9o4g)xhaweTjH?9*iwP+~#oU1o&$OLi_{$XS4gAGE(QB{VQg&mn31QDsgoYOveSqMmx*=37&*Q3Gqg<%@1x<->YQ>T;f@Yg){xbe|gR-vG7K;p)c!*%=lx@~Bntc+&)YfAVLNRX4K?TRCxDQmX)7tcbWiK5qE#%u zU5KAxY8U%IgC-0anVho9_R5s&XY2*0;Z)7bF~E!v+oh?Cy@1I+g5_%hUd9%X^-cA~ zs^oxuth2k#WyA@pwAvr zZ;b3d!R-pa{_-5hxHIzm8*omThFO|!xh#M2BE|K4{@-;-E(ehl6uFOY>Ahq4Zd|)mTx)%CY`Ibf<3w3m=of3K?qw6AezW`)I!lw*Wfd zLXChET+VOphkiYh=Sgap7WL=HMi#UXb&Mopg9~ih0&Jm(K(~5FRqPfy+=PGAFiZ}x z`Z)LE>fS0ywSeM;C_?A#i<@9iyjSQlaPEgkh+6d!DP0nAoX$D5K_$(5&qZ?bFzmnU z!1+3|kSWuMwf!s=cIjC1IoKo!UuY%KihMXM{2D%d_&_s($^#mqZc-9fz~S+4*<-U1 zN>(3Ct+w$!2$mSI!L@WO)Ck9?0_*GS23Imz`cZZXS%jCjI% zWT5LcZ^zSjk?y2lLxJ&4(iH85vJ>kh}2{W=YB5f#+oBMcPg_qK);FOf+j zAWlAQ?xcxu|8T^j0oFon0|h^1VUvZ#7)2WKntuJNZsUWLl!EA?7OcS#B9PN00PT%T z2#Cghfk)^ejHyXsmcTJsWSmpb2b_1hk((8W4y4+guYEg>{*^y+T3~ICX{)?gKLh7& zkILf*H?e=XS9&#r<;Hh7ZCwiLDhB>1AG@DrYDxVD6{wrppvTa;sN$_(#@ehuqX*9g z0BeyT4ZFEb9y|@j>B;sUTGRFXLB}s)^%&XOix)34ES>4`;jK}w z;bSSw1Od3UKvy#i_9TldSam2Yh15SSdFNCk|8w`DBrqvG@8bhz+K+*F6{Wn%KwYDE>JtS+H@!XNUi8EP`;IN zO}Eqh6}GdaLmFbdbuF&jRj> z(AX*<4|xtDZ(hn3UGZ9o&kyWQodk#t(I4AC=$qm0-|7LmFIQ&KJ1DpQqrTp;i;Eug z^Qg$!$at`L{@qfBZBHL_FGKA!PO}_UF`S4fcjkk_NwK1%MZ%6^ZpgCqyA@TO;OTPthvn?Dv{RJyTl(^79vK6AuYpDX>MNns1^pTT*IC=l0^K=Tgah89u{cp7*<+$C*+ZQEDyq~H&_QEhm=5pxug zdx9>*7C|C=SE^VLIJ828JLMfblpipSorvMHmyZuwF>U31z?Ye%mo2TW4-Kd81T9v5 z+J72}wI@fOK(36U3PGDR)sd5u`(_DB7xYfRD(y!U98*`mCF@(pe9p*_^`C;{o9c=O zySjMrbFU8iyLwf?r!aCriW?{(fOHK2oyYRhOcY?(ypfA7ahXL@%+w20uVDNW&O3F5 zLpK0r=Z}TSG7duPzT~D+qNqjqb2R!+{4w7RT!of#s4t|}*{wj{EDPCmg6#84>j{d?T{xw6GgB3F}>%@peL-!FEY;2k2H zytF2`$XzxwICNLsY*VsPE@hROEU%nV4*DL*gEXO7VH|&6r#IgE$pp`K)k)WwJiBon zd9OZMa3!kAQ_eZ5uw9v=e{Lez`Qf}?mFe^88!7p*nK=e>87k~Lyf#0SP}WM6d%ZLn z{({p!^d%KRG3_TEJ+63bo=|)ZJ;>yAw(+Se?i?`xJ5e@~mRz0CxBFCugVHi&tX-33 zwg9_IPDE-FVYW$=ef88Uo6K+azE{Vn@K&=v&d_Un zfPEVUMI2-rP_nWEs3KqYyAtFl?@V<3xLB@TP@FB@WxFDnZW*4yzlS0auxnwct$!SP zdcw};SNRha<5oSnccfljNpkS>^BLcwYt@^jHHu+VMQxVT>BXbs4QIjA>2T0+tw-Ih zI(aClgOz!iawPm<0AC6L1+)O2!grM5m=@~joWX+$Uk6x$2ah^yVRbNlv8k5lP?irM z#D@#J6C{GL&``fsX{it;6ICrIgKojL_)J;>YTpshTADlH(?i-m)?vHaMcyCB$!B{6 zlv;51pNIN8=Vn3~%c;R+8R8d+49IYnBf<%3kEq72<8TXBk(Au3CZkT z^7h6^Yw5ZfNTCKHUPC1>SXT}qJ_Lv)7{m*8%OfTY{CCA#C&mQGgfT<{WKi<~N<-*s z;EEjGh$)=pRu)kaQ*)zaN|mQFcy+AjmBq7{vKL>2sr&ZY6)1lBi3d6DD9qvfjM7^R|x43?h-V}SZtm?;|d2w2t@Id99_`VZM{Q}f=6%cjx1() z!?OYf#BzO9`vK%@Ou4hSS6eOsD(_Z7_e@*p7b7WNY6V2UW^imyNkrsQ!Asaw3R=Jz zACr+9_ChXfu;S8}vju0tKC`OPe|Nd(Px>dcjlDcyY#hpmSosIQZV#8w_FH>H8lb^| zRL&kYM=`{~R;)YVT#%{%x^&x`f)>gPl4Z)=aY5UAsdCL%CJudT9&6@9HVNU^H-N*Z zF3w6jXgqGI--|z}Gxe@%a-vPqh4$aFCV0=`uPUt|{rbQ@hUW8HsJ8&dt^5W0) zHCY78quMNm%DRJ>_#&#VAe9p?RNLG_yIGb`;LebLUYe>`ePJ_|njol~WNmV`7V1Af z6J-YR^HC73A#UVB18A`9eCbfv#%-BsI$=I~=gq_K0+q!k$(4=kGG^50Jv`&ree=n? z>T7PaO_4ac#%u;=bc%aYtEdiI_xI-%x(0W4z&N#S2Q;bv368 zONSZ<>U*s=9wXctSWdc2@uOozGP^LR$P(7Q;rD$f<$cSdX?FPgUn{A_6*+gUrK~M6 zBqa-Ld}h>N_6^voxqXT}OLCI=9KLMvYh8s{$)gHs+O@}SLTE}>f&DyE=GgsU_G@(M zbHP7lm6>nQ!X4BXsTHG%KWN45uG{(Y@ubcCv?@zq$BH`3tEP3i&p>1a;O{W#|9zl7 z0bLXZK1trKTB2I3g4~IFU{6q@$VQXKE?}Zw75YC z0-u0Z540X-(vktYAG*C7VUpCx59LG|?oq7B_*r`aPs>WF;crN3|CT%$kQ8voEWe-N zW;En^h=xw3NUNc`C-&=|4>_L5siK>=J)BF*Fi&n?E?o$k=veo0X%K-Z_jz==6OfIEgoL1}!C)kT?tHBo9f9eb4gCy$@BUWA~|1YXxkvoE^aFSrXr+Gp>bJg*?mt9;^aerA$O?h6_zH4+P(-mXLT zojU(OBh<62l*WB57W(mfUQ1lZ(k&Hd{$ybLn3;KSEP~M<+tyD zib!kPDj6|sB?H=M^oW|xRwt^`g!_`b2xVVSusySnzLzcJD7Zzg`xObHUCYllKQn%K ze!K{DuVr@sr0l%StJ%~VRF+v3I@>*Kx6bwqq`qL;P|v(PRhSw5*ZNPQKe^!h0c9Ex zSNZSW+T#)|&(!(<_tr~wZ%w@T?vME^k z?>CBu6h8zRul1w)%}r=_syjM-L+3TNtNcdVZgxT^($CIiEmIV|fB%K)d(*>X^@|Gr zuJxT)x5U%6+HFK5S`b zA`>TgntLiP;jULAvyS&qE5_CJA8;T48jquC(cZq@KJI0AHvMvUR|{sc%22=%Llv9M z;UB@veGdw(_BHd|nY6(-nc~W**8>`16IC5gmLM`nNhj*b&E+z6-TZJz0W?4+R2cZE zEoLNdnIgGAR6O52O-DvGsqk%S_G4qTjXj&Kj9zfn@4+M zuL6{6bzjF=KmZMM1jpWuw{P;6ZDM7e(BX_|Z&&t3!_WwL8hroEE8ZW}Sb1tbkmEOU zdrr5iHNnUsHx5NLR*b1gztY`#Pf1D12XajvJ=ljFDzT+o_BFFtu+_pi`}rm-8K6qR z9%pT)!PLU*I<}=X&Sn(TUvM)pZ`~XHfL;|Cfmf zHR}q;6$z6Smd-@O5tVraY~!E!elg5Eia2b#XCBD-YT3*Gmh`vvO+3P0AV3D2=+E#V zpJ}wFHs26-4|^q+2!`B0ZxNCANZ6%09e;3ABk0)Yw>gcgz$IFp2n5Ovs(M{3wO6BTf|^=ed9TMx%InV~ZihX?mbF%0WKy+ct}hCTq7b9mn1! zo+V~FDz*Nds&VIizzlY5`dIrX)v3!x@q)ioYN8rbZtI_Y;8h_+{Zo+oLvbbFZiuG> zj+|f~$G|!#U6gJ#njnsl)WF(p$|@TA7wO@?y$*NTEoUS}_zNOJV};q=m5b#;(! z_*ADL>rn=X)oZhR31bkot0*6EW24~=p2YQQO-FxA&CypSVP^wlZsu$%1Z)*@%dOHH zzL5JPMnWwu_G6GM6h#OgXhoCCEo$BJlss#KV;B9ezlEG}_Q@xl1=G>eU1@!oSqL1h z>#HLtm&?p}uLx5bWhwONTY6`dc5B+Y@zP6rPZIrtD(%;D3hJ6I#L(3XRgTA;G7lx9=nE5qLrb z`2=R9OmRw(|ALtu(@w)RZ32;JLuMT<5;Vz1&=&+HfB@|D`|vlW`} zSlS(XeM27nL31HrnclifNng$d9cqvsj?x3?we#nEIfgxV=-9Z@1~bSF1CpI+vUxkPc~PhUq?l>HEoUJ@V{ zS~`BsU|!0_I02)!pEQ!DmgX8_9=o{uWX+kR-J;;S{m zjG#BnM89!U-7hHi*UckY&+$sV%YMW6b?@>WljENmHPQ_~dFS@t`?~lhb?<4t-Z|~A!A;Xw==;+k;qpY)bU|WhK1srex zd@Mu9*jVRE@nan$U45TXF>9TG4y@m)q^$y`1uRZ@*o+xHjVU80ZvL1~cQK|bROSNn zj_vRXoWMHXI%#Q>B8*&J;{Yb*4K=vVC;6o$C4r^RD!-!cCtiyw`e;osmqo?wt;8ms!kdkn_ZRxVlcgnR)kar$40q-BOek3eRNd^)3o$ z>^8Qd?sitmuTA3DQG)MrpV6^Ug)x^b96^(vzg4Hc4|l@tnzA+BzYb@Faw!|TP_w%< zrckB&{jfDje`dbts>S%OeHmi*ZuNcZ2Mi2El-fMJBe2YY*Y6;B>i31b@-j0e>efv0=x zQ4Ec4q1luAmo&Xp_4o8c!9T2QC#&vFE}Y)sj?dN{NR1_|=WRl>?nxvwj!O3KtuKjY zU{%2eEdhJ(TCbHa-WnoNE)`p#Y3e_)#h1nB>2TImNQdPb6)+3Wo>%S#&tW`Th4|!9&kQR?tXs-*rVRBhd?)%J|!MG zx3B2M@Va}aLz8>W4c&CV4tU>9A>7r)9&w%jLldTc-D?-)+Sjyv=}5-r(O0V|Y1G$o zP3GcSxEJUZhGV5?^>(X9Me!w6qlkh}RDYWeYXR=y#DFj~kMbhjV$X5uzkQ7t#-I3J zm{fWqaX&RS^-ig0=sQOPOLLX3)LSjMKXFGOLOX|@ru}qtlIZRJ_V;EY$BD2OpIw~2 z=|p{r$|b&;IE9j(QY=NS&{3mi+`sQ9R<$jlfPa*=LqUge)^07wotV%fdhV06GpgUW zVgvm}K`LA;ExZ`yTq800r4t;EFAWBTe%WW~gul%g1eBI2@bpg6IXMt-0ebTZ{DwZ; zpvvn7`+PHLL_9^>*W3RI%SVjUf^nSWu}JVM?{Rq-2EJ1C)AWod)zRBOyQ$0Iv=#SQ zYv%qlB6TWWa&c8Nv_E&=zmE^Jz_O%2YC5}AmuiZyoRxPbw5p%Pl!JU5*n-P|a_C?u z_WwZ2r9d|5Bo~)R6H0Yn;Wcy#{R$gfNOeG$W0bmj>DK6_HVY%ZZZyu zd3Cruq@28A#8nH5MYS++1ex&ZChL1w_4m99n`jQT-r`|b7i8N-S1qJEBj_?TE=Dm#2JYW{Y$T39ASJMnW^EeG%R z+)r^7{pz|7PN(lip$#JVxCjF*V57&L2owmH=SNoz+2&j&`;hk%t^Q5(-#b!r7n z@`_CanCCFRdIMttp>^=RW-5JBmhURZ%cKTQ_$OpSZ*5B$Zie>{!IXQx6ROM5nxgmZ zJ8g?EBsoQm(VC`%T#_((L>^oOsNnEwR#kZgJX=>VUWVjBusoJk)4&fYMj)TFJd0U?j!!9qD8w8OdVUGfde68z(g01*XDUpmc zv_;&kVZ+Izf4El!4CL>Q9DHb#Dg(hdf zjFsKXpEnc)X3h~mblxifh5#mQmd|e)*!a9XUgr)Eean&%4l;HCAvD5gz1(&dJ2E0+ z?iXk+|AtJWU*xW||BePJp*Tglm`Edi()a;g8yhOWJ^F0lDa;M2MJVV&?3DKhRjEXp zAwP#A_y3kVo*_#;*XKKQOr^K(d3Lnhmye=02F7FX@T+PQs&J2o*KKU2WD^K}F zRzQFt@LC;f9Pn&{s_0vg=5_tX&aS44r@2+~SDUJK-y?yL0~~DZ$~Z7i1SfD~;#00< zKh4~Km1^hSJVa$`HAXN?B|EBquR2V(S8?=~Nq$t4z{N9M?aH`RmJh>~VXIq7ZI)I# zCiGxvYPLz!3klFy1z|V4zjFa2lkyxf3kF_B)3vr)Je6Uq`2t%Z%3AGT&#Fv-eS-bD z96k-9dYMHd>V!?ZGCTwfJk>r72CKJ^>YVVGW%3FwTyeMXX_OLHKdtwRbCH4=kk9BP z#Gwd^w(S%>%gG15Zkj;6Vm|(P1i&Y^w{lR)g$K5^t*s6mO)x89sf<9COp6BJtM6=VIE$ zCMtIR1NBB1u#8r@y6%ss3yZ!%IP80^_I;uyBpi7T-@)0m&;TifMv?j=zB~wL<~HWW zc#8G$dKKN`7Ih!M_>rzax`nD#Lbjz2ksxF3i_ezMHMu2x0nol0==V~<_wP7Zg@u;m zAz4gqiWb?F>|S-@*Oha2xrJloZmNNY2NXbK2+RWGmqJzPsfYu>qOo|12NP{2B^fZ{ zIG`1xc@Z#m-T?D3U*#Z*oTPY^*~QMCD?U%V3I-$kpYoHyY7v|{XAqkPD~gsCCHq~q zBmW`kE#RyGLb@jC!DKOnU|N9Mv!AMxDVf9cEDVHx3Gr_oaNt~+pD7d4YN6fayT|t+ zSG+U$HQXoCUMWorH^OTj37~PHIr8B;SeSv$9@w`qt~hT%<{~RKEO1yftZx!45bm+H z9#Wa$vji}0J)6jba;36E;R)yz9y=C3tWkUxh-?&+N&-#kXe!~xhwWoO(A^?(&ii0< zdLDP1mZ~q%qabXU#BpY!$2Q;q<@7q!~?bztv`a z7qK6`u|=-w&h9d4O#p!Su}zg2SLbhiAhY%lLic#zAF36=06p$AX#Qp=Wn{6mto8p6 zPr}IHPT1np!Ri897t;g z_{zh_%7>!@4kh+_i)ev?RVS_o&pBUKxy4B5C(V(7=7Yfl_1eSK*wV9_A#fXAyq6D~ zT0JB(=1vfJ8XT8|%qvx+d|&gEgzXFia_}B7FgbHtz)Z#OPz$y>sTK0hUZU4T@OUDQ z#RnwdaEU!E(|IZMkvMU(Rg{nqRJ zVzvlxbZzjKct6s}Ou9-z2Kmt(#n6sLCYl#vX>z^9n3k*cClspSWLbnXhdEbFq7rp5 z-|6;sXU8n^$Mbsi&OBR}l0y9!faw8*fe{U3!EC_chkFxySJb>*Zu$U|*N@3m^YQ^o z@?6tqHx@pgV|<6r&g!9X_RbcXd*P{ji{)-6*Mv4iyaq@H>N|1S_-r{Ux@=o7iO-Ut zcv~_p)5`HRYA(cl9Y$1CjD%Y|?F3}clQ&38OUTKIH!Dqj7 zP85tz+i}SZ1DSG`lP1@`S~~ECCWg1()2HBi;rTdN?NmA=49tV^d4hV}c3dM+rO6Qt z&al@;OG59xfuNhWpNl}XxUirH&Sm^Y4QPvj9VWZq49F0Ca;9&UHOItmzu6UX_e6Sy2ZXuI`CkUau8Iu zJD_eyQuTLGRP&FPrpLx>g^c@L8q__9%Ynk2D^NF0RFFEW&CPyId_VLzu5o#~gjv$+ zOx6y8x)&zTfF#ITH|fY{6la?Z2up~xXCQe(W-&uGYaBj-6HKWQx(ZsQ@eYa_46NoM zuzHs%Z-J2?m}6iN4Ezo_E-c3HILJL>cST&btXECYp^*ynPR){_=q^V0T_n|3MM)= z#VX}dK*D6USNhfcF*pMP+Av*@%)+6h2TFq_C=@Eo_r_db9-AkR{^w}$J1CFRjVs`6 zKwQ{%gmWjZ7jmg|CY3}zhU=TK29t%C#SqHji=|>peTn(AVLz{*7chr4|k&&uc zIx0A3u&p14b3^p#?ZPB^F|AwA05h%iN{fs(SQj)ENSb=sQ#+<6r%n9U8{BhyyN-5= zQ^hk;7)Z+PauAtYc!{<0m)Lh*!0an?ENG8{YK{Q#y<$UvFsxw`n9PX&LELkRXF?wR z8Fc2az-;GYJ6u<;L@eVAtx2jTD@*IRU0G^9(|AwM$j>T+1(o6jTRwB$3+!2FnZ^x5 zW$5dAC3!*}Z*#IblP%bi$Py!n^PauDv%4P9E!7(kG()KtVB_oOYl;XzQSp+!8iH5Y zveB{rU68~qKqP`p%GEH-LA$AnrlWG4 z$sChOX0(={95r+qVXd@QC7g4UQ3|FK@i(z_QEoSo3;la6>BHFK2xg|gzfJT~^{b`k zEBr)`tO(LzFV2?3ioNdW*sUFykwEPd-IVlJKCT%=%|lijUO+Q_37DzMR_Qs~p|dZ3 z)7|j#cj{;(q+cb&h%?#vD@0iWq*|w)$tlfOnKzQcOKj%|Wp$)ac_gYGaO*#y+eXhT zvX+Db^#gEP_LZ10!x#Nt{}wX>H>i+WBBXIhCg?KJVJ}Rq6cMIGA_X^`d}LMmMN-z{ zFfQtA53j;-?u<(wHrIEtmx>sJHU~H0)cmQw1@yO~4^aNkxtJ-0BnGE@!XD`S0P9jw z$4NhMhDs!v`_vRsN-8Kxv)nMmSy-atx zR0xFVYtc|Xw*h-17>Da`3atciM!1+uEZiwnzLdynNahnL}I(W7yCFgG1$fkXic z(%zW6xRl1r$@H^DY&13|zvyMg{~>2Is8i(R56_5^UF!Nb*J0C_+6Y@SCc_q3r ze^5B_NO=Omv9vCKzrgwUJ{bHMK;bd4>}=#1Nm72(r*J)lPv_7|xrNq|krx=zN`|U< zy(qos@GK1IbTcWqoFdvIND09WwvKInF^4t!Gv1M5t6E?*xH~MB`$%gQ!=DlAvdAv9 zn++`s$k5&cdGvD2u=JjdtPKngrkz;V0yBkPNhyiu)*!y)MIqEJuW~=sNGKj+nwg?B zwen2F6eZkhVQ2w7(InPG|8<1-_`()^qQ&&D;*`M(4H@B;jVJzt8dZn22O*WgPq- ztZ$1?@;#j*Vfhxp#k^Vx)RP;BPaVtSwr3^8ay&4^J!7n1A{x}~g-431oHZEo&bkkmb`Ob7Xa zTQ4s#tFw1M(=0t0{IG?QQXEJWwjww3)jfI8oO#`wLX>R4-G@2{LC6s1A{-9SXHw^! z?mj5P`1!lO)am*&1*UewZLwGBbz*qfU4#w4081zGLK)5P5-10H_wwTtT6pC!>9mZQ zk(tRT$gyx~o!}k4)f#k@VMR8zhXy>yJ~Jy|EjEdnNzW!AxpKkd`s^I3PnW$k@inDR z3mGACi6kIyt77gvIHdefVmIKAnGXoEXl3Li(ZPQ-90#FL)z_=+5a2SRKqsXW{n35~ zoaVT`*dUKG+VeOzrKNo*N~yCsge>6PS^+;&bU&+WI@IrOljB-qR(aBO{FLH^QAM2) z2H#TcP<-N@gn)yEXiWtDA)Nlvg8$I*pv*)70W>V{%6Lisb_rkIpLM=s__vU-4N2BK znCId-7W3p{;exWKMy{* z(|!&o>siqR;UM>w76y`!01xh#Qb`(??uRd#U}E^O4Cy&u>Wp>r)84&IvVnbm4>(Ly{4}kHQF_0tx$9o4}+`^lbZ$KZZBrufH4ND*Ogt^Kt@Rn!c0HMHpXPJGUZW`o=7QRowC z_yU)}mbOi}y$|MQ+{fS66FOz8|1=Nv_8hxjUMB>O{s-6v+b2YT1Y-gQV;GE^CHM`Y z=iB-tEeSN_CA5;S57;`oyj!+&?DZk0C5GQN!w`BBXf^PXe}lVsViTMUjEwLX+e~{I zE`7NC@u104w%u3edJf5rP0cPXZRgCvonhKlIpP!O^vOBM%4sD6gB{uyL((rPLFv_S zReBDa_S$PI>B;8-T!+t8n}LWmCx?b80K2KB6Hq~5xWj4e$MDnci)A$JBK4ms$_Qxz ziO(P;{;-$GfmBh4;@1hYb8`)Z=Oi{-5w=NIiB10Q^WZz?kV~c4EiCMToAM0%h@M*@K`)euH;1o#x~)~nHpZHL@94t zwu@ESC7wpf*5b8boNLNUC5ge_^%2F=k_z(jr_$MOSVavcnp`SPuiWB_E5ettRj?(t z1+lkxs_zpQ1Jt|z+)H6&Bj<~F!36zwP>NB(!@T^y(OoA(_uIXNRdM|7b%`l%T)PBG z3g$(qNH#*!twC`cAIQPR7}*7q5vEQKa=S=%4EPjJP-bA-i7(8AO(@$YKDj20JlWTR z3xg7bE=&Xg?ZrbFM~tAecM?W0USp9U3Ij8Ms!E2uo(kg#{o8~5i&CL3(%)|9HD2}n zQ`#&z!ZL2Zon_P@YZi4G^uHPx1L_<3GWGOzO4EA#&5} zZ=Rk*Es`ob)E3^vA3VZmMg3U1H?ULl5R~aa9n^}cWn!M zU+3FdFkD?4*I&60yL519b_L9T`gO|zT(u+;BQ8wVhT?rhFbhfjk9%5fQS&%UIW zm2$K30TOMktv$@!^(f8gSlqE-svn7yg~@9I;vQ;LbS+d4)sOX+$EigvP}*QKn|0_(C==9oL7V+vP^5UgMUC()y%rZf6eN#^I9% zSraU<1qFgbI$zA`T2&-`s9#KZe^w)oR!B9*J#2XZxaW67_sDnSSE;DcQ041w}@=ja|M9iWxA~B@0OU;>GS$_%n9MG}bQ-MGv?%XBB1P(EH@i z2gCOK@J;VkhBlryrqixzBI%AbS?91*pS5^yM9n(1!3Jm5)tH4=g<$Iavx30%zS4LLHRp zporF+ML$ePyk7Xh_*BEYyBC8Kb6ZC}kK)8p$|$o<8>Bk2D!keUuL$||<{k2JJsJMV z@7_I2PQJdfC-%JqMvb&uZZGk|x7LY?&igN@E(sj-XTzce?#y1%+*p3tU;O*_F-H2j zak!!nzHM>sJ1gk@L6YmRYwDxw{j;lu%_sQsf zD)z&d;qazPgl_I-8Ople)QQ?i;s?xEju+D{23$m#j^qmMqi6h5V8btVZ0n7%3Zpuv z;0w3-VoCeVr0~Q6fpZ=HQH!+KX#cBQmUJ7!Hvck8VT%UCb^er%&f#Ob2UV0SNW3@` z%&E^Nn70qM!uISOqi|`&QKZ*NPFuB6`8;3QfY2wIB?_q!`V2bpxidbg~9ogtcBBb@HRg3rNaYXLTGLdzAUs* z3%f{S`M4PjZ1HzXC@fXIs*t@t4j!PTG9uN@DS zFeuJ-LTN%}w`RhYOr5Wv-uSA*5C`F!+K45Q+^)no(NEi>NQypUXl%*?5g%yVbornB{AE?1`?f8#noi>4%`6WdW4RESt8YpdOyXd@c1O~h@amnvq3HC= zrV41FXj-5j=cLYY zPa*ietNd`2fhBTG2-Q#wn4l%ldVO`=sV6qx?%?yYm?29&RTOHpTrq+6!kcbW;)m-Z z#oD)XH}<9er5-TJkSp4O`MW0ZFVx8!n`;^w*J8F%mUr%T9yoSV6{9Zb^b=sdGO~N} zt^Xk5dk>?BuBU?Lj)-TlJ`@*lFG#-FNfqsEKHXtKKWWn(-j~{%m9^g4S!`QM5?NwM z8Rv^T!Oq~g2kcmvxNe6I$=2Sbs)=L5H1p=~suHT^-sJRS?{${!SzaGR$9RV&&AU5Q zlr~j#B_`f}jnAZ%jh5GUV?K#lJF!|yTr&I03T&BZ-7=|YO%Ly&3(xFbdPU{Z(Aj&6dD$o`c zlGlpgueZ)*x+L^Li;m5bo&EZinBll*qx=5tnr-dQ&`Y}~myO0I_^y*{F(TMR3m5q1 zqLBkLaZ)inHI}Z6cXvOjdtkxpYJ04JKCY}9!XCL-{^4au4A&tJa zz=JxLZMj-yGT`k4WAQXzF?`9vO{Dn8z3Mv0 zGE;9kmAOqSynH-DveC3vtvr=P*gAn%;$Uh@iB*UB@xEH-h7aW&7!H;kcgYvv8VzOt ziG`X|vlT?u_MDb0=DjV$Z;YB2Bwc>PtwH%R3u_+4kPI#VkLu1m9_s!5`)!Zy>I&E1&K3sPRI`vPJ7w!t1Ubv20U8 zrsyIi>tlLyXz976Uwlu>J9n78H}CRzg-h@Goc|VSI%tv=5S_|0WgN#b;?!IF0~T=w zqQdcr0imIbgw0D`i*Y(UCmy0Dg1vZX!W-@RSYvMW|DN{q`-A_d$e{nrZ{lNaV)D2W z3_`n5e#yT~iYvjj)Qv>S6BxY4!Gwp0Bj{)T=BU-EfJx&X5rNp47#$+O;BbHa=NXNc z{Z~~428AE!_`N$0|LC&;h+veYCqC%=Kr<)ceD<7}C{BZ?PVoU|>)W{W%Hr zEjS2fB6@bibE$Ulvn+V08IQULFA)y>4IYfCL5O7oF%;B0YII(t=~Tr(MAP4f-VMl5z$mz`1_%1C+lBR?54v$E z`hs@)-3C)-jP9c${;=Hw1&g>WER}AWTcBGTwi^>>YOHhi189dc+RdtjgN~aH@H_P13;#)>ohV!NN?B6+E9lTj{L-7Jsp2KK zkJAZVWXl@LnP{oy(bT=0Kj`WqD#UelHZ8J(b6el|t#8(gD-z9QW4xKW0{52TedT^W z+YBCym<{;aB50J0l(y z>KS72RXrU)rB(Xx$E*`iG3~Y3s8b6{_w$y{g%7(cmD*+R1rtMp z&PUEi{jsLIDV?6>miU7)flxjihk7a)ceCM_KS`-yy?axZN8XsNzWeLy^~ifO+I)g`9{V4C2q?S#_0)gA5D5wU zgY{tQnlPtlqSQ#O&oNRy$B*L^n>QZ4-z1!79bCO*NjOC9X1-X2 zo@j}(x1w`4MLR)w0SpvzczggPt)SNG0cjHG5-jGM>g}~=ZtXJ~z2#S%G8?&A5cYHI zKELo|=G{%m$`7rPl^<_>v^2O(ru^1To%`19VfkUc1-}08_i|>b6@A_y!k};Yv9Dr1 z{q(BB;l~RWidvV89jv%-lPH`lvs3X0=_^70c>QnvP2d>pklUHqs9UqCZ+XPvBO?z? zg`m$7GXGzpY7I<*lTh=e(kjQGh9Qr^bl5~FDert7FQrnD^J?>5$k^VE>C z;k^A@?k^tZt1SLg$Hn4C@l597Rd#f9~W!Ur*LqM7)Y6 zm#5(OVXbdSHJ4I#XTZt}!ktoy0#g`AoT;6j2<+dUnTIBXWH?WrKh5z#{XPsHEw zzk+=62%gi}A0vrGZeUBPIJKuOcRA(nw%$^J2y#J^9FP9m3Rx~!T&dK&JU6&$AP)iV zx!(zz1rA~`!PZ~;rr(^u;GH%kz|AZK5$uRDSKSP_9W*!VL2*7Jn036){AbN;cR#WUe&0CNPl)z8W@Tjn^wiA{1P8-CR1z}_qW}^>q)Pdz%P{2b z;lvKIzc-L(16^EhVPV_Ay)M~_*oy^Tiv^UFMI+1ech)^<-}|~TK0;aYperZm(A0|O zloTIs`nTkOB#N={|VgaX~U5ZO161r28cpq{+>0#vqS)v*GaSs(G ziKd6_UN)PoT(sS_x*x?k&VJS%#RosrXkvDJTZx+@`pZ-uzh(qA?zGdVk-sp3)bNk2 z%|Lu?Hf`Z9@;UwN?k`NT9(<3d_X`fMBtULsezg4)>YWDwOGsgnHxs{8f&&UDl!g9X zd92mEzzbh%nl;~+7e0tpUTDYaBSex+;6(q-aD(0`_k#>4`@ko`-RHYmpT&|R zmQR{T3Aps}MqvzrdtZ}cK~+ah@G7wQ#KgpU{&rWKqVKn@Ik&uJlGX35Yt;>wI!!U~ zh!vc_v=^GS=VE9FhgPun`t&A=Nekil=&BtLmP&>yHx1_5r@WNXS>upvb0B9p-)U!r z9>Pw4`N@O%&YI2|C!hv*j&Gmm7NSmv^4^N2E=Y}Jp!ZVOlqn(2qPE9InzsM5=W0U- zH}_qQRuc5@ppQ8wfoL&mDqX&;K12{++3Wbkyjy%u6JiG|gE|6o2z3=D&9CtaC7b-h ziC9FD=#!0}g#7P!ucef!EvKXuvkFq@cZjeqG-~&sd23&BY3ujP8k+yd>>Lm4@iQc! z*l|CU6)q55$=%GU>}(5;WwElKjbmQcY#BVs42t&6`g4ud+3f@*q*R!G#g!Rojfjdh zn0;pq`6hMcE=gnujmVVlU-I%6Shd%>^RI6n$4Ev*S7z_}Iv0`KJ$4%O#WfbeeA+7+ z1Pa>Qe{7zFkppC<(sD?V`Z9{v2KIr3=<*C=U2&+Jp7>;B{;dY+&<%Wed@mo}jVfcIjs#4%3 zqZ1AV(aYIn*V;?IpbJQz3IsAnG?AGLT2Y_7;LLW`hle$&62IgJNC8kYKAV_@lpGoL zbxecnDL#gmJIuXNEMJUis@y`YGre?)W>cWODi0Ydl}8}E9Rb|m2`E^UqA6he4;@-Fq1LlX2eX?}lm7=t#@jK3nGh7DBptNBJDX{1))kf?Mi+P|7A1;fR~|`LN05M(Uq4}`tVy5s zA4$4uf5Z<8LQo7^0Z0ZgiSm+B`yvR_p|VPZ)UnUFdu5XBa9?_oJds%fD%kfhF~KJS z`A8%Z$#q=ZPS9Bk41?3H`nklp564|@3XN6og{5S-V2E0AWbt!+);~ZSdJ%BQz?nR? z%c|v0B7?+O%7ZOKfN)cQ)dWKl@)q{P1Vg^*-7>!&o+$I2a z)Z4N7Md-%B*)eZW4$H;Q3-i@D(A7@BPYCEhyJwwbmFfjMdJ7A}hr6>AVY;~2Sz^{1 zD^1sPjW5t2xw^0w&~gHJ%!xrE;QG=vS2k!Jzkq37OniLyOX}J&)X8-pP7+a`CH;x6WN+?TA`+f}a zof8DC@tUt&s~!_kM=3>>@{j8jeKMOZAUFg>Vji~5U~Uo2q@Fzn=hyilD5Jc(v`QQT zT{aI2s{_?RXpVjswGsl5Wt8Szf*>c{wUH3G3(i9!%YZxq1?U-qtok5;1tR9KINZL# zAgBwWoC|=Ur3#{K&SccN{R3zVAv>LlPx~N6_nK^)1w(Lrk)i;5ajQc9-TFZQ5Mt^u zTFi%e^f+e(*98N#5y~h~G7oIrel^ET5{Jd2@S8fz+y&S#(P~mDT1^Md%s*=v{{e`g z@`SAwunGd zdH}l{?FN(rtP_L~zee@7iYZ>8kpvUl6BUJO@-qq<7*BAnu$m5ROFa#r%!J^K%mdFc zRiJST4*=F0d4B?6Q}&Gyf7VN_qza;@xN?C(>Z=gU9j_=nT(i)y{|Ae@0Qf9dO=n97 ztShdVuFGeBzS$cE9<~%=pfz#;G$o>{DFqZd;55dfbfkN%k6Y7yvNrvKrp}6PXTj*C z$rGA9gKk1#8zp8ec2#tyPiXcGLp!kRFNo1V8idz6qKqz`Jvt+f13=?m^DXJm{$^>A zK^GZ)H@#2lEidx!ItUO=Iy%IZVb+;}1>-(yEDc1ve$>l;gM8;1HQ>jL=%YMGhtFo$ zQ@{$$h%ysBJk$RTcnI&3G|F;vMicBK&-wg}(hCG6r1|yHwz?n}?~t;<)J1f)(FIpq zSXYyQMys_l9n}?mH%J^tvOi2}3ZBRRuo(gpo7;hMh4zX0nM9P{!HUGXk3IlMwiU3pY`} zw5D+MPAnD6NjE%|9k2jAI52`X_=qZ7G-rc03kd+Pc|zx#o>+L6LLDUII->s?5s zAG`s$xA;;fUH2R|2{+zE-7-$eV|dA4ipb5$;Q;G%3=k-?m&kUKn5R;JBb0C~8Hx)$ zTI-1Dh7Sqt!MQwC#*|XoAVBee))pwJeY&|`sF1GuiL6nojf|Ruio7iktH>ik^$xUG zS#vfTDC4FYsOnb3sNd!gcv~0S>BAOQCQr5Y<&w*+va9BLTyXN4S=C-k&>LK&z2}7Y zn1&bF$#{S+#i}pu%)J4)I^4TNwJA`0Squie407m!`%VtED`X`G_=3)@S77NZazw<8 zjfux!n>|#NVy~Qwx4}Ur9;aa|SYowky}I^`ME+xmEf7Wz7DjwH$=hr4w8QP^NbV9o4#Vu$cK) zhxyE*{j#!VBdlnSAk-$Qx%azjq9t-WU-n@?LL*KZTa6ve?sL#)ya>fAW6n~ss*GXR zbLD^y^(@y5^DNgc@S%QEu`1RX$T#)HVq?oTu5O>g%eu+wG3o0=wbNQ!4A_&SJ&8gN zOl%aR!|?h()yLI}J;r;zce5p2n~KlCcmBQe=uSMaGBq)=)!mt!vc<7CFmv2t24uJu z@`|87Wwy4i1RIaYh@R$Yz8f+uhV#(mr@BVK{6I)XKnZ12)6xCbD$8}7DK-s;R{RW| zyo>q9Z5LZ}XbiuJbqF1$hrvlbHVl}$n#+%P`@FgwpkwfV))-ENj~a2$rBF z%f=gQ1M@lSC*8N)+u?a%R3q!uI7HzEqG3%c{M2joAsRlS=sKd!gJ8!G6egUBvf?tX z1C);$SWr5Up9~0PE+BNbghtK*I9N(U!|j8BBNslA=K`UwkIEFwZj7HIv7PlV)cer1 zPir3i&6G!Xd)?l>O?`paeTR3&?Sraz{>J{?r*jrHi`Zg;4WMY*mrg@|E_^=<8C4Y39zM@*(@EeIt$wW~=-~du44CLvcg&glCIS zIk<$7kPwg_S#eaLv^lp}4;?}I+SDIO)u6&&6az`qDomMN{h}(sE@9H!bDoq8m0tPS zsUb8`j+2++{&dR33o@kc&wY&ewkn^B{{!&~@OJWInrH{2QxRL9@!!z{CbUNsJ2p%) zCo8G2rGt!h6exm}?}-DJS79l&)^upzGM`F^90Ld*-g_oFvEc`?_109lwo*ej)yh%Q z6okks@t&ZhPscgAihGsL?W}GBsukkv91fWRLUbQHk=wx6PP76YjcBfvXEosJu7tf* ze+q=#reE(~8n))(sLB`&YMUKN4d|=%ZedBdezjON10eWPkDvaM=w9he{%px- zBMR=%k7n-+J5a%O8p5|3uN;bO*09l_ReyX79-1B+>n z9U|Y2$sbEOrHQBFvdPZ=(C2`634YO*0O(3r*hfLe{!r{_hwK+&{rGdenZ(sgqOtzKP&MvTe5%--kzwzg?Z1)>5AqD9b}ve0A=Zc1f-qU?tX z#Gi2BLha&SU0DTZ=f0OrF9;nf|IEu@02X@3SdxKM6)br6QUi#T;aHk)i!9m1ft?)d zsJxjlO1IA?gUAJjiMitYxcGR*@yZMRfCYhI4UE|HAa%U>YKM2H35dg2K-22e>(S(# z(i3&J8~M`0?#k%Wa9DOav-IF=Dx)lC^}e@;8Z)ZThpG$52ih{6GdnZ36%tzMe}sRA ztF85I^Okv}iF%N)zD_yjVORXxq9j5YL#crc62xs~y844{=X}U!kEOd~(>)W1XUbsP zxR{-JC&jw|>F`go#u(UbaivQl2r$UXM_!9hx*goCo;e6k zI&i8QWY<#?K1zuLU3cfi1!PI{-#anNcqCyNX3W?%FvotYkp0~5llRJG3|!&OBM=U# zv>3u3X*L~S^D8UaXzRNi6x<46{pI0kBiM=(Cl>oryq*gjlmL|ZH&8!jQ8vE8SKQPs zG_-8W8iJsY>#St-`3ol&A4`cfB%9=SY28xBbdyfODJ6y_nh2+2vNJBpfPuwg<8INN zLh&Gi6y@pLul&f?g2_<`0`H&PT}s(lT;|o0Tvm7b71!5;s)-2hUfbzd+N_pnV0pm& zWFMORav$_i*a_brjS2G2;4BAC6S*k0efHOWP!kei%!4pI5Gb2+%xX2>H)wx5zkFi~ z+L4c1@g9RD{Q~lY6f~F7OnOYn#ct=M=U?24?>z9UOm02`{pIh0p<1X@tpmu?Ga=sJIiD*)=c$y6mYj zuH;>WPr6_GifN{0Swr9=gtl<^^zvFbD_MrYn52hqTMggM6-a-`Hsqryle`3}`T1yP zI12tvasXvsr*pme{W8?tW;fCoD0HB3pm6EU=HtU#2)(PYG@8_DRD4_J+>7RBRE^hD zsPZj&#?&1yj|ub_B}{S6T~Uf>nK=6+r>uxiyZFnOIlIhV5=hLweU01$7WX4c4a){2 zU2h6#tQF0@C&p#G-Sum)%xZ{DVzvnmrwZpyC@6`(Qh^V5$V$5WWZjac?&R_@@7MhX zed*1_)lOxDOfdt5{*gpK-)HCXfv&py=wd+Nx$fIe3B0<9_|6v*`6Yvqy*QtBPXe5Z z$m0`rJ7186;O%Z?6EDT0$$&LCr=q}V2_C2T!E+1!k7m?s8+~lo`L{97ZK#T%4~H#K zK8454P5(9_djvf;=s&DEgxX)h-he$K>kbK-aiGeFM$dA;K{%w-v47HYz1R(Ypj}JJwO$S222&skl z=|g1zdlDsyR?sm!gyhQ5pVlV=y&OP%(3_DV&=a2kTs-WCdGc<{utqF(zoXzxOa{NO z;I%h@lwaHMC_?G1bO~>Ly>?m~sGl{VxrlAh16_Rixw+u)UETF>?|6$EO*dt4 zFZP(Zt;k#Ca%qbm46of>v=FqH&y^k*MxN{m=sm#z%`<%r(wSHz=rRROxQNg_$Ru$f zdvEG8(wYdOQ+1>RH+S-y$uKU8V+VKi2}4Xd%q2k*s`@wcwZHK{%5ts7hrTEgE@sbt z?Jcsr-~yIl)+;rt_9PMYP=;GRArKbdmeaMN{LctZ>|dgBV~a~z9}k>mcL&&nTmxheevMQ_6< zoudL_pMnAe?vULv`9;ggX`_J)+0jPF7xbT!?o|haS8fPO!e+ulf2r;VAJIaG3`5|v zL+Hq}XA)N&39)#^6h&1R6gmoFMP37R;=N5cm;p7^o*To>j|B!*52`@Mhs|d97$myL zNgVK*;Oseb*Yd77R}S8?SfEbwR9vybq|=c+PJZbLNVmYbgo~LqN>oK)J93k#0;4W4 zgt=2(+68^}(NLMq6_6$Kxkt3`iYda%$596+F~N`#hfJK>jfHRE+1Hti>Q)>ip{%8p z)y(T}Czm}og0N(!NvFqEMyML$ zR`8~WP&+iJoqD{=d8?=`1mqt@qv&u_j3I|7oM7eN2;Y|&NSW|T2-MLB6K^tLU#TE zH(%8>F0#R{g(FtgckiBVhRN)mdfQOa`993V7cX);eXQL^xw66oUcFnBCIR)+21h2$ z;U0WqE2G<8K~d4H7FUDMrO_C$W!ixOAPVjvqoph~Y=IlsYN6=Kt?%g754WnpFLk;l zN?J%**goz3!fJ4Q{d-RT=VgY9T7)=UlxMjZ%b(YSXJ%RV+P`6A?f|efXP-A5I#N;7 zx#Aevt1je90-euQv@4~@9?>p`@6F=nC%%_ei z2|utLM9n-3YfzuONJ<%XD2v6v&Kp~~=jn_yj7{WY(y zCA8xkV3nDHGoGCAU#~en(G`n*Z|0zWvMczPhoEtGSDya*7?O0YudyYWj_!mv| z_g_-mHMV}u0MzQtD7bI9=PM9Vi&Vfq_q2qU>x`#1080*%4R4a^j%qpK&r|ayYPs;VlTi4`u?+ulef2}!ojgo8To+rNa(LJ#XoFjo|4NL@(NI!+u01_cX zLw15~_+oT<5*rfUvSx0bc+Hu#M`KVXy##$@M~@zb?2+jhPQoHP0)Ej`3|n}=>ivQH z%S_AqF1aPaiIUfm^%^iDA}{P$t_JB#KfZR%)dgPqNE0UCH`Zub&c*B8zAucN9kc*A ztwZ~manvmJa0MEL760|0Fl|Wi9{m6RaHiU?yS2LZ!@Ea!p4J-w4jIqs8tTxrZ9@JR DPcY4` literal 0 HcmV?d00001 From 2ac538c679ddc018f7eaf52f584815e747f27ea5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 28 Apr 2023 21:02:26 +0800 Subject: [PATCH 0264/1057] Add solution and test-cases for problem 839 --- .../0839.Similar-String-Groups/README.md | 31 +++++----- .../0839.Similar-String-Groups/Solution.go | 61 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 81 insertions(+), 25 deletions(-) diff --git a/leetcode/801-900/0839.Similar-String-Groups/README.md b/leetcode/801-900/0839.Similar-String-Groups/README.md index 7c5267b2d..b41441ca5 100644 --- a/leetcode/801-900/0839.Similar-String-Groups/README.md +++ b/leetcode/801-900/0839.Similar-String-Groups/README.md @@ -1,32 +1,31 @@ -# [839.Similar String 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) +# [893.Groups of Special-Equivalent Strings][title] ## Description +Two strings `X` and `Y` are similar if we can swap two letters (in different positions) of `X`, so that it equals `Y`. Also two strings `X` and `Y` are similar if they are equal. + +For example, `"tars"` and `"rats"` are similar (swapping at positions `0` and `2`), and `"rats"` and `"arts"` are similar, but `"star"` is not similar to `"tars"`, `"rats"`, or `"arts"`. + +Together, these form two connected groups by similarity: `{"tars", "rats", "arts"}` and `{"star"}`. Notice that `"tars"` and `"arts"` are in the same group even though they are not similar. Formally, each group is such that a word is in the group if and only if it is similar to at least one other word in the group. + +We are given a list `strs` of strings where every string in `strs` is an anagram of every other string in `strs`. How many groups are there? **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: strs = ["tars","rats","arts","star"] +Output: 2 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Similar String Groups -```go ``` - +Input: strs = ["omv","ovm"] +Output: 1 +``` ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] -[title]: https://leetcode.com/problems/similar-string-groups/ +[title]: https://leetcode.com/problems/groups-of-special-equivalent-strings/ [me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/801-900/0839.Similar-String-Groups/Solution.go b/leetcode/801-900/0839.Similar-String-Groups/Solution.go index d115ccf5e..9afa8bda4 100644 --- a/leetcode/801-900/0839.Similar-String-Groups/Solution.go +++ b/leetcode/801-900/0839.Similar-String-Groups/Solution.go @@ -1,5 +1,62 @@ package Solution -func Solution(x bool) bool { - return x +func isSimilar(a, b string) bool { + if a == b { + return true + } + diff := 0 + for i := 0; i < len(a); i++ { + if a[i] != b[i] { + diff++ + if diff > 2 { + return false + } + } + } + return diff == 2 +} + +type unionFind839 struct { + father []int +} + +func (u *unionFind839) findFather(x int) int { + f := u.father[x] + if f != x { + u.father[x] = u.findFather(f) + } + return u.father[x] +} +func (u *unionFind839) union(x, y int) { + fx := u.findFather(x) + fy := u.findFather(y) + if fx < fy { + u.father[y] = fx + } else { + u.father[x] = fy + } +} + +func Solution(strs []string) int { + u := unionFind839{father: make([]int, len(strs))} + for i := 0; i < len(strs); i++ { + u.father[i] = i + } + + for idx := 1; idx < len(strs); idx++ { + for pre := 0; pre < idx; pre++ { + if !isSimilar(strs[idx], strs[pre]) { + continue + } + f1 := u.findFather(idx) + f2 := u.findFather(pre) + u.union(f1, f2) + } + } + x := make(map[int]struct{}) + for i := 0; i < len(strs); i++ { + x[u.findFather(i)] = struct{}{} + } + + return len(x) } diff --git a/leetcode/801-900/0839.Similar-String-Groups/Solution_test.go b/leetcode/801-900/0839.Similar-String-Groups/Solution_test.go index 14ff50eb4..37a3afdd2 100644 --- a/leetcode/801-900/0839.Similar-String-Groups/Solution_test.go +++ b/leetcode/801-900/0839.Similar-String-Groups/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{"tars", "rats", "arts", "star"}, 2}, + {"TestCase2", []string{"omv", "ovm"}, 1}, + {"TestCase3", []string{"abc", "abc"}, 1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e2f22a8b655f71faa68d23092622cb83f444d42c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 29 Apr 2023 19:21:53 +0800 Subject: [PATCH 0265/1057] Add solution and test-cases for problem 1727 --- .../README.md | 37 ++++++++++++------ .../Solution.go | 33 +++++++++++++++- .../Solution_test.go | 16 ++++---- .../screenshot-2020-12-30-at-40536-pm.png | Bin 0 -> 164371 bytes .../screenshot-2020-12-30-at-40852-pm.png | Bin 0 -> 88477 bytes 5 files changed, 64 insertions(+), 22 deletions(-) create mode 100644 leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/screenshot-2020-12-30-at-40536-pm.png create mode 100644 leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/screenshot-2020-12-30-at-40852-pm.png diff --git a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md index 0d3486a43..db70029a0 100755 --- a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md +++ b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/README.md @@ -1,28 +1,39 @@ # [1727.Largest Submatrix With Rearrangements][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a binary matrix `matrix` of size `m x n`, and you are allowed to rearrange the **columns** of the `matrix` in any order. + +Return the area of the largest submatrix within `matrix` where **every** element of the submatrix is 1 after reordering the columns optimally. -**Example 1:** +**Example 1:** + +![example1](./screenshot-2020-12-30-at-40536-pm.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[0,0,1],[1,1,1],[1,0,1]] +Output: 4 +Explanation: You can rearrange the columns as shown above. +The largest submatrix of 1s, in bold, has an area of 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./screenshot-2020-12-30-at-40852-pm.png) -### 思路1 -> ... -Largest Submatrix With Rearrangements -```go +``` +Input: matrix = [[1,0,1,0,1]] +Output: 3 +Explanation: You can rearrange the columns as shown above. +The largest submatrix of 1s, in bold, has an area of 3. ``` +**Example 3:** + +``` +Input: matrix = [[1,1,0],[1,0,1]] +Output: 2 +Explanation: Notice that you must rearrange entire columns, and there is no way to make a submatrix of 1s larger than an area of 2. +``` ## 结语 diff --git a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go index d115ccf5e..009419f9d 100644 --- a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go +++ b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(matrix [][]int) int { + rows, cols := len(matrix), len(matrix[0]) + ans := 0 + l := make([]int, cols) + for row := rows - 1; row >= 0; row-- { + for col := 0; col < cols; col++ { + if matrix[row][col] == 0 { + l[col] = 0 + continue + } + if row < rows-1 { + matrix[row][col] += matrix[row+1][col] + } + l[col] = matrix[row][col] + } + sort.Ints(l) + + total := 0 + for i := cols - 1; i >= 0; i-- { + if l[i] == 0 { + break + } + total++ + if r := l[i] * total; r > ans { + ans = r + } + } + } + return ans } diff --git a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go index 14ff50eb4..56d0a3e25 100644 --- a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/Solution_test.go +++ b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/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}, {1, 1, 1}, {1, 0, 1}, + }, 4}, + {"TestCase2", [][]int{{1}}, 1}, + {"TestCase3", [][]int{{0}}, 0}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/screenshot-2020-12-30-at-40536-pm.png b/leetcode/1701-1800/1727.Largest-Submatrix-With-Rearrangements/screenshot-2020-12-30-at-40536-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..9d47c660de703235267012e1b5d1a9654cbaa6a5 GIT binary patch literal 164371 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 VBq;KX#4-5imbTH2QZ4%z{|!$}e#ig- literal 0 HcmV?d00001 From 265e47a05f45f6a3cc0555c71a5245f1614c1590 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 1 May 2023 11:29:06 +0800 Subject: [PATCH 0266/1057] Add solution and test-cases for problem 1491 --- .../README.md | 33 ++++++++++++++++ .../Solution.go | 16 ++++++++ .../Solution_test.go | 38 +++++++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/README.md create mode 100644 leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution.go create mode 100644 leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution_test.go diff --git a/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/README.md b/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/README.md new file mode 100644 index 000000000..60dda79f8 --- /dev/null +++ b/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/README.md @@ -0,0 +1,33 @@ +# [1491.Average Salary Excluding the Minimum and Maximum Salary][title] + +## Description +You are given an array of **unique** integers `salary` where `salary[i]` is the salary of the ith employee. + +Return the average salary of employees excluding the minimum and maximum salary. Answers within `10^-5` of the actual answer will be accepted. + + + +**Example 1:** + +``` +Input: salary = [4000,3000,1000,2000] +Output: 2500.00000 +Explanation: Minimum salary and maximum salary are 1000 and 4000 respectively. +Average salary excluding minimum and maximum salary is (2000+3000) / 2 = 2500 +``` + +**Example 2:** + +``` +Input: salary = [1000,2000,3000] +Output: 2000.00000 +Explanation: Minimum salary and maximum salary are 1000 and 3000 respectively. +Average salary excluding minimum and maximum salary is (2000) / 1 = 2000 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/average-salary-excluding-the-minimum-and-maximum-salary +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution.go b/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution.go new file mode 100644 index 000000000..784a0cdd4 --- /dev/null +++ b/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution.go @@ -0,0 +1,16 @@ +package Solution + +func Solution(salary []int) float64 { + sum := 0 + m, n := -1, -1 + for _, nn := range salary { + sum += nn + if nn > m { + m = nn + } + if n == -1 || nn < n { + n = nn + } + } + return float64(sum-m-n) / float64((len(salary) - 2)) +} diff --git a/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution_test.go b/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution_test.go new file mode 100644 index 000000000..2b31eb14f --- /dev/null +++ b/leetcode/1401-1500/1491.Average-Salary-Excluding-the-Minimum-and-Maximum-Salary/Solution_test.go @@ -0,0 +1,38 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + input []int + expect float64 + }{ + {"TestCase1", []int{4000, 3000, 1000, 2000}, 2500.00000}, + {"TestCase2", []int{1000, 2000, 3000}, 2000.00000}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.input) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.input) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 43bd17aad6fa04aa3c3e8bd6725a9155b19b3c8c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 2 May 2023 11:35:20 +0800 Subject: [PATCH 0267/1057] Add solution and test-cases for problem 1822 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 16 +++++++- .../Solution_test.go | 14 +++---- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md index c430c3bf3..b93cc63eb 100755 --- a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md +++ b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/README.md @@ -1,28 +1,39 @@ # [1822.Sign of the Product 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 +There is a function `signFunc(x)` that returns: + +- `1` if `x` is positive. +- `-1` if `x` is negative. +- `0` if `x` is equal to `0`. + +You are given an integer array `nums`. Let `product` be the product of all values in the array `nums`. + +Return `signFunc(product)`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [-1,-2,-3,-4,3,2,1] +Output: 1 +Explanation: The product of all values in the array is 144, and signFunc(144) = 1 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sign of the Product of an Array -```go ``` +Input: nums = [1,5,0,2,-3] +Output: 0 +Explanation: The product of all values in the array is 0, and signFunc(0) = 0 +``` + +**Example 3:** +``` +Input: nums = [-1,1,-1,1,-1] +Output: -1 +Explanation: The product of all values in the array is -1, and signFunc(-1) = -1 +``` ## 结语 diff --git a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go index d115ccf5e..61b6fbc26 100644 --- a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go +++ b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + nega := 0 + for _, n := range nums { + if n == 0 { + return 0 + } + if n < 0 { + nega++ + } + } + if nega&1 == 1 { + return -1 + } + return 1 } diff --git a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go index 14ff50eb4..04ed48dc7 100644 --- a/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go +++ b/leetcode/1801-1900/1822.Sign-of-the-Product-of-an-Array/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{-1, -2, -3, -4, 3, 2, 1}, 1}, + {"TestCase2", []int{1, 5, 0, 2, -3}, 0}, + {"TestCase3", []int{-1, 1, -1, 1, -1}, -1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 53e364f76c2b0fac2814ef4a6ff6a2b6a19880ab Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 3 May 2023 11:46:53 +0800 Subject: [PATCH 0268/1057] Add solution and test-cases for problem 2215 --- .../README.md | 33 +++++++++++-------- .../Solution.go | 24 ++++++++++++-- .../Solution_test.go | 19 +++++------ 3 files changed, 50 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md index e1d74b91d..d1e3820e5 100755 --- a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md +++ b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/README.md @@ -1,28 +1,33 @@ # [2215.Find the Difference of 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 +Given two **0-indexed** integer arrays `nums1` and `nums2`, return a list `answer` of size `2` where: + +- `answer[0]` is a list of all **distinct** integers in `nums1` which are **not** present in `nums2`. +- `answer[1]` is a list of all **distinct** integers in `nums2` which are **not** present in `nums1`. + +**Note** that the integers in the lists may be returned in **any** order. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums1 = [1,2,3], nums2 = [2,4,6] +Output: [[1,3],[4,6]] +Explanation: +For nums1, nums1[1] = 2 is present at index 0 of nums2, whereas nums1[0] = 1 and nums1[2] = 3 are not present in nums2. Therefore, answer[0] = [1,3]. +For nums2, nums2[0] = 2 is present at index 1 of nums1, whereas nums2[1] = 4 and nums2[2] = 6 are not present in nums2. Therefore, answer[1] = [4,6]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find the Difference of Two Arrays -```go ``` - +Input: nums1 = [1,2,3,3], nums2 = [1,1,2,2] +Output: [[3],[]] +Explanation: +For nums1, nums1[2] and nums1[3] are not present in nums2. Since nums1[2] == nums1[3], their value is only included once and answer[0] = [3]. +Every integer in nums2 is present in nums1. Therefore, answer[1] = []. +``` ## 结语 diff --git a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go index d115ccf5e..f1d20040a 100644 --- a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go +++ b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums1 []int, nums2 []int) [][]int { + ans := make([][]int, 2) + ans[0] = make([]int, 0) + ans[1] = make([]int, 0) + + nn1 := make([]bool, 2001) + nn2 := make([]bool, 2001) + for _, n := range nums1 { + nn1[1000-n] = true + } + for _, n := range nums2 { + nn2[1000-n] = true + } + for i := 0; i < 2001; i++ { + if !nn1[i] && nn2[i] { + ans[1] = append(ans[1], 1000-i) + } + if nn1[i] && !nn2[i] { + ans[0] = append(ans[0], 1000-i) + } + } + return ans } diff --git a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go index 14ff50eb4..fb442fa6f 100644 --- a/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go +++ b/leetcode/2201-2300/2215.Find-the-Difference-of-Two-Arrays/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n1, n2 []int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3}, []int{2, 4, 6}, [][]int{{3, 1}, {6, 4}}}, + {"TestCase2", []int{1, 2, 3, 3}, []int{1, 1, 2, 2}, [][]int{{3}, {}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n1, c.n2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n1, c.n2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cca0e5cc15d649962eb5239cd74fedb0d43d7be9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 5 May 2023 22:34:33 +0800 Subject: [PATCH 0269/1057] Add solution and test-cases for problem 1456 --- .../README.md | 38 +++++++++++++++++ .../Solution.go | 25 +++++++++++ .../Solution_test.go | 41 +++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/README.md create mode 100644 leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution.go create mode 100644 leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution_test.go diff --git a/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/README.md b/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/README.md new file mode 100644 index 000000000..2737308f7 --- /dev/null +++ b/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/README.md @@ -0,0 +1,38 @@ +# [1456.Maximum Number of Vowels in a Substring of Given Length][title] + +## Description +Given a string `s` and an integer `k`, return the maximum number of vowel letters in any substring of `s` with length `k`. + +**Vowel letters** in English are `'a'`, `'e'`, `'i'`, `'o'`, and `'u'`. + + +**Example 1:** + +``` +Input: s = "abciiidef", k = 3 +Output: 3 +Explanation: The substring "iii" contains 3 vowel letters. +``` + +**Example 2:** + +``` +Input: s = "aeiou", k = 2 +Output: 2 +Explanation: Any substring of length 2 contains 2 vowels. +``` + +**Example 3:** + +``` +Input: s = "leetcode", k = 3 +Output: 2 +Explanation: "lee", "eet" and "ode" contain 2 vowels. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/maximum-number-of-vowels-in-a-substring-of-given-length +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution.go b/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution.go new file mode 100644 index 000000000..9cd1b6549 --- /dev/null +++ b/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution.go @@ -0,0 +1,25 @@ +package Solution + +func isVowel(x byte) bool { + return x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u' +} +func Solution(s string, k int) int { + ans := 0 + start, end := 0-k, 0 + vowels := 0 + for ; end < len(s); end++ { + if isVowel(s[end]) { + vowels++ + } + if start >= 0 && isVowel(s[start]) { + vowels-- + } + + if start >= -1 && vowels > ans { + ans = vowels + } + + start++ + } + return ans +} diff --git a/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution_test.go b/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution_test.go new file mode 100644 index 000000000..f9c79b68b --- /dev/null +++ b/leetcode/1401-1500/1456.Maximum-Number-of-Vowels-in-a-Substring-of-Given-Length/Solution_test.go @@ -0,0 +1,41 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + s string + k int + expect int + }{ + {"TestCase1", "ibpbhixfiouhdljnjfflpapptrxgcomvnb", 33, 7}, + {"TestCase2", "abciiidef", 3, 3}, + {"TestCase3", "aeiou", 4, 4}, + {"TestCase4", "aeiou", 3, 3}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.s, c.k) + if !reflect.DeepEqual(got, c.expect) { + 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 9ff668f4449434df8ed3a964b880ae736736fe1b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 8 May 2023 20:58:29 +0800 Subject: [PATCH 0270/1057] Add solution and test-cases for problem 1572 --- .../1572.Matrix-Diagonal-Sum/README.md | 39 +++++++++++------- .../1572.Matrix-Diagonal-Sum/Solution.go | 16 ++++++- .../1572.Matrix-Diagonal-Sum/Solution_test.go | 23 +++++++---- .../1572.Matrix-Diagonal-Sum/sample_1911.png | Bin 0 -> 13186 bytes 4 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 leetcode/1501-1600/1572.Matrix-Diagonal-Sum/sample_1911.png diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md index a6f2f4ee6..e81e7e8dc 100755 --- a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md +++ b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/README.md @@ -1,28 +1,39 @@ # [1572.Matrix Diagonal 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 square matrix `mat`, return the sum of the matrix diagonals. + +Only include the sum of all the elements on the primary diagonal and all the elements on the secondary diagonal that are not part of the primary diagonal. -**Example 1:** +**Example 1:** + +![example1](./sample_1911.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: mat = [[1,2,3], + [4,5,6], + [7,8,9]] +Output: 25 +Explanation: Diagonals sum: 1 + 5 + 9 + 3 + 7 = 25 +Notice that element mat[1][1] = 5 is counted only once. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Matrix Diagonal Sum -```go ``` +Input: mat = [[1,1,1,1], + [1,1,1,1], + [1,1,1,1], + [1,1,1,1]] +Output: 8 +``` + +**Example 3:** +``` +Input: mat = [[5]] +Output: 5 +``` ## 结语 diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go index d115ccf5e..72ce3d045 100644 --- a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go +++ b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution.go @@ -1,5 +1,17 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(mat [][]int) int { + length := len(mat) + x, y := 0, 0 + x1, y1 := 0, length-1 + ans := 0 + for x < length { + ans += mat[x][y] + if x1 != x || y1 != y { + ans += mat[x1][y1] + } + x, y = x+1, y+1 + x1, y1 = x1+1, y1-1 + } + return ans } diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution_test.go b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution_test.go index 14ff50eb4..d86c31ce3 100644 --- a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/Solution_test.go +++ b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/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, 2, 3}, + {4, 5, 6}, + {7, 8, 9}, + }, 25}, + {"TestCase2", [][]int{ + {1, 1, 1, 1}, + {1, 1, 1, 1}, + {1, 1, 1, 1}, + {1, 1, 1, 1}, + }, 8}, + {"TestCase3", [][]int{{5}}, 5}, } // 开始测试 @@ -30,10 +39,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/sample_1911.png b/leetcode/1501-1600/1572.Matrix-Diagonal-Sum/sample_1911.png new file mode 100644 index 0000000000000000000000000000000000000000..96e64c60fbc80f7b15e0fea38ecc86b211358ecc GIT binary patch literal 13186 zcmbt*Wn7fq7cC4!OLupdq|$>7U4wKBNUC&$;Lsrg(mjBZ(xtR?hja=k4a!LOeSGEr zyZ8J3K+ZhpoPEyOYp=cbo+y~65*`jU4hjkio{BQ`DGCZ|2k`qg76|x$HdZhM{6KYo zs`LbtlY9 z?eC&9d$YRia2EG{ShHxkq21B8DBDwBa*wLvYxBWO#)w#qmkP(qMrzbm0bb7gaL()` z&I=n8zL7$HmA&E*YaI5Ou7M`BmLYONl+QaD(J;~@cQ5cJ@|gSz_qHEI98 zcXZ6E+o;%e&yLT|9*K%tHpuuL7e^9@RzOJXrc3qGM)2vSIP*g_;~}^Mt^Q}mCMJUJ z-d5s%&7T}JOOrWKP#S}~k?48UZQ6BBU!|#zJ57Sa#&7I&ccFmKN1fQ zkAmNnP&>Fk!H~D`7#AIcO2np!L0k+yJ~{D~q94BOi({YwUd{l_6|iWdttFH`6vK&! zY^;xFOY-sY8KRsXEOO+76VQt^vpW@s*Lz~da-@0kyOn`;B$S&p=F6`!FhdFDi63AH zj)^>aq*R~{%s@$8`~h-8GSt=NxrZ?32A+?4wb)?kG+$$btMQXkLmBbs+wyYk$Ic%} zU?EYQa>butUp0K&seVYPt++^H@D?!nPzs;Cf9HWd zG)g-Z%q{uIY00qFPn7&Uup>llz0!a+eWs}R=!wysf=%%dybfRs#hh2(e*9QaAP

      +4T|SAc&BuR1l^43Q6GFE+d)(awj&Lt?up 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 Wiz_Us1D~5gQBlx@Ry=tY{C@zK>7eTX literal 0 HcmV?d00001 From ac923758cd7d4fe7bf4de19b6fc0ae9ca7596124 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 10 May 2023 22:59:45 +0800 Subject: [PATCH 0271/1057] Add solution and test-cases for problem 898 --- .../0898.Bitwise-ORs-of-Subarrays/README.md | 35 ++++++++++------- .../0898.Bitwise-ORs-of-Subarrays/Solution.go | 39 ++++++++++++++++++- .../Solution_test.go | 19 +++++---- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/README.md b/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/README.md index a2c0d885b..14d29749b 100644 --- a/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/README.md +++ b/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/README.md @@ -1,28 +1,37 @@ # [898.Bitwise ORs of 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 `arr`, return the number of distinct bitwise ORs of all the non-empty subarrays of `arr`. + +The bitwise OR of a subarray is the bitwise OR of each integer in the subarray. The bitwise OR of a subarray of one integer is that integer. + +A **subarray** is a contiguous non-empty sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [0] +Output: 1 +Explanation: There is only one possible result: 0. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Bitwise ORs of Subarrays -```go ``` +Input: arr = [1,1,2] +Output: 3 +Explanation: The possible subarrays are [1], [1], [2], [1, 1], [1, 2], [1, 1, 2]. +These yield the results 1, 1, 2, 1, 3, 3. +There are 3 unique values, so the answer is 3. +``` + +**Example 3:** +``` +Input: arr = [1,2,4] +Output: 6 +Explanation: The possible results are 1, 2, 3, 4, 6, and 7. +``` ## 结语 diff --git a/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution.go b/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution.go index d115ccf5e..d77d617ba 100644 --- a/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution.go +++ b/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +// n^2, TLE +func Solution(arr []int) int { + ans := make(map[int]struct{}) + for idx := 0; idx < len(arr); idx++ { + ans[arr[idx]] = struct{}{} + now := arr[idx] + for x := idx - 1; x >= 0; x-- { + now |= arr[x] + ans[now] = struct{}{} + } + } + return len(ans) +} + +// 上一个算法,就是多做了很多无用功,比如某些结果计算不会产生新的数字 +// 所以将数字紧凑一下 将到达i时候能产生的数字放到map中,下一次直接前面的即可,最后把所有整合 +func Solution1(arr []int) int { + dp := make([]map[int]struct{}, len(arr)) + dp[0] = map[int]struct{}{ + arr[0]: {}, + } + + ans := map[int]struct{}{ + arr[0]: {}, + } + for idx := 1; idx < len(arr); idx++ { + dp[idx] = map[int]struct{}{ + arr[idx]: {}, + } + for x := range dp[idx-1] { + dp[idx][arr[idx]|x] = struct{}{} + } + for k := range dp[idx] { + ans[k] = struct{}{} + } + } + return len(ans) } diff --git a/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution_test.go b/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution_test.go index 14ff50eb4..55a1bb9ac 100644 --- a/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution_test.go +++ b/leetcode/801-900/0898.Bitwise-ORs-of-Subarrays/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0}, 1}, + {"TestCase2", []int{1, 1, 2}, 3}, + {"TestCase3", []int{1, 2, 4}, 6}, } // 开始测试 @@ -26,14 +26,19 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = Solution1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 491ecc7bbdab1e573ccdb35194e1b9d90d542df1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 11 May 2023 23:30:54 +0800 Subject: [PATCH 0272/1057] Add solution and test-cases for problem 1238 --- .../README.md | 29 +++++++++--------- .../Solution.go | 30 +++++++++++++++++-- .../Solution_test.go | 21 +++++++------ 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/README.md b/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/README.md index 2a8b77623..2b1cf1a52 100644 --- a/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/README.md +++ b/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/README.md @@ -1,28 +1,29 @@ # [1238.Circular Permutation in Binary Representation][title] -> [!WARNING|style:flat] -> 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 2 integers n and `start`. Your task is return **any** permutation p of `(0,1,2.....,2^n -1)` such that : + +- `p[0] = start` +- `p[i]` and `p[i+1]` differ by only one bit in their binary representation. +- `p[0]` and `p[2^n -1]` must also differ by only one bit in their binary representation. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2, start = 3 +Output: [3,2,0,1] +Explanation: The binary representation of the permutation is (11,10,00,01). +All the adjacent element differ by one bit. Another valid permutation is [3,1,0,2] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Circular Permutation in Binary Representation -```go ``` - +Input: n = 3, start = 2 +Output: [2,6,7,5,4,0,1,3] +Explanation: The binary representation of the permutation is (010,110,111,101,100,000,001,011). +``` ## 结语 diff --git a/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution.go b/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution.go index d115ccf5e..8a6841d9d 100644 --- a/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution.go +++ b/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func g(n int) int { + return n ^ (n >> 1) +} + +func revg(x int) int { + n := 0 + for ; x > 0; x >>= 1 { + n ^= x + } + return n +} + +// k 位的格雷码 +func Solution(n int, start int) []int { + alloc := 1 + for i := 0; i < n; i++ { + alloc *= 2 + } + ans := make([]int, alloc) + ans[0] = start + + startIndex := revg(start) + index := 1 + for next := (startIndex + 1) % alloc; next != startIndex; next = (next + 1) % alloc { + ans[index] = g(next) + index++ + } + return ans } diff --git a/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution_test.go b/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution_test.go index 14ff50eb4..f9640e175 100644 --- a/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution_test.go +++ b/leetcode/1201-1300/1238.Circular-Permutation-in-Binary-Representation/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, start int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 3, []int{3, 2, 0, 1}}, + {"TestCase2", 3, 2, []int{2, 6, 7, 5, 4, 0, 1, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.start) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.start) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bc98bfc563a81df8394524df020c8a6b048d7f78 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 13 May 2023 11:57:57 +0800 Subject: [PATCH 0273/1057] Add solution and test-cases for problem 2466 --- .../README.md | 34 +++++++++++-------- .../Solution.go | 26 ++++++++++++-- .../Solution_test.go | 21 ++++++------ 3 files changed, 54 insertions(+), 27 deletions(-) diff --git a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md index 1ada0fd7c..1b070663d 100755 --- a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md +++ b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/README.md @@ -1,28 +1,34 @@ # [2466.Count Ways To Build Good Strings][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the integers `zero`, `one`, `low`, and `high`, we can construct a string by starting with an empty string, and then at each step perform either of the following: + +- Append the character `'0'` `zero` times. +- Append the character `'1'` `one` times. +This can be performed any number of times. + +A **good** string is a string constructed by the above process having a **length** between `low` and `high` (**inclusive**). + +Return the number of **different** good strings that can be constructed satisfying these properties. Since the answer can be large, return it **modulo** `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: low = 3, high = 3, zero = 1, one = 1 +Output: 8 +Explanation: +One possible valid good string is "011". +It can be constructed as follows: "" -> "0" -> "01" -> "011". +All binary strings from "000" to "111" are good strings in this example. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Ways To Build Good Strings -```go ``` - +Input: low = 2, high = 3, zero = 1, one = 2 +Output: 5 +Explanation: The good strings are "00", "11", "000", "110", and "011". +``` ## 结语 diff --git a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go index d115ccf5e..33f7ed307 100644 --- a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go +++ b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +const mod2466 = 1000000007 + +func Solution(low int, high int, zero int, one int) int { + dp := make([]int, high+1) + ans := 0 + dp[zero] += 1 + dp[one] += 1 + // 0, 1, 1 + i := zero + if one < i { + i = one + } + for ; i <= high; i++ { + if pre := i - zero; pre >= 0 { + dp[i] = (dp[i] + dp[pre]) % mod2466 + } + if pre := i - one; pre >= 0 { + dp[i] = (dp[i] + dp[pre]) % mod2466 + } + } + for i := low; i <= high; i++ { + ans = (ans + dp[i]) % mod2466 + } + return ans } diff --git a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go index 14ff50eb4..488c32a40 100644 --- a/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/Solution_test.go +++ b/leetcode/2401-2500/2466.Count-Ways-To-Build-Good-Strings/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, zero, one int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 3, 1, 1, 8}, + {"TestCase2", 2, 3, 1, 2, 5}, } // 开始测试 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, c.zero, c.one) 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.low, c.high, c.zero, c.one) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5495659ddec2474570e6697143ad839a15e8d1a3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 14 May 2023 13:02:14 +0800 Subject: [PATCH 0274/1057] Add solution and test-cases for problem 1799 --- .../README.md | 43 ++++++++++----- .../Solution.go | 54 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 89 insertions(+), 22 deletions(-) diff --git a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md index b30508b97..5f6e4162e 100755 --- a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md +++ b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/README.md @@ -1,28 +1,45 @@ # [1799.Maximize Score After N 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 `nums`, an array of positive integers of size `2 * n`. You must perform `n` operations on this array. + +In the ith operation **(1-indexed)**, you will: + +- Choose two elements, `x` and `y`. +- Receive a score of `i * gcd(x, y)`. +- Remove `x` and `y` from `nums`. + +Return the maximum score you can receive after performing `n` operations. + +The function `gcd(x, y)` is the greatest common divisor of `x` and `y`. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2] +Output: 1 +Explanation: The optimal choice of operations is: +(1 * gcd(1, 2)) = 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximize Score After N Operations -```go ``` +Input: nums = [3,4,6,8] +Output: 11 +Explanation: The optimal choice of operations is: +(1 * gcd(3, 6)) + (2 * gcd(4, 8)) = 3 + 8 = 11 +``` + +**Example 3:** +``` +Input: nums = [1,2,3,4,5,6] +Output: 14 +Explanation: The optimal choice of operations is: +(1 * gcd(1, 5)) + (2 * gcd(2, 4)) + (3 * gcd(3, 6)) = 1 + 4 + 9 = 14 +``` ## 结语 diff --git a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go index d115ccf5e..0fbafe78c 100644 --- a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go +++ b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func gcd1799(a, b int) int { + for a != b { + if a > b { + a, b = b, a-b + } else { + a, b = b, a + } + } + return b +} + +type gcdItem struct { + i, j, gcd int +} + +func findAns(gcdArray []gcdItem, used []bool, start, index, sum int, ans *int) { + if index <= 0 || start >= len(gcdArray) { + if sum > *ans { + *ans = sum + } + return + } + findAns(gcdArray, used, start+1, index, sum, ans) + x := gcdArray[start] + if !(used[x.i] || used[x.j]) { + used[x.i], used[x.j] = true, true + findAns(gcdArray, used, start+1, index-1, sum+index*x.gcd, ans) + used[x.i], used[x.j] = false, false + } + +} +func Solution(nums []int) int { + ans := 0 + l := len(nums) + used := make([]bool, l) + gcdArray := make([]gcdItem, 0) + for i := 0; i < l; i++ { + for j := i + 1; j < l; j++ { + x := gcd1799(nums[i], nums[j]) + gcdArray = append(gcdArray, gcdItem{i, j, x}) + } + } + sort.Slice(gcdArray, func(i, j int) bool { + return gcdArray[i].gcd > gcdArray[j].gcd + }) + index := l / 2 + findAns(gcdArray, used, 0, index, 0, &ans) + return ans } diff --git a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution_test.go b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution_test.go index 14ff50eb4..0849c1478 100644 --- a/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/Solution_test.go +++ b/leetcode/1701-1800/1799.Maximize-Score-After-N-Operations/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}, 1}, + {"TestCase2", []int{3, 4, 6, 8}, 11}, + {"TestCase3", []int{415, 230, 471, 705, 902, 87}, 23}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 78cadee57ee91398b845166615bb52b60f1f5b4b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 15 May 2023 22:11:33 +0800 Subject: [PATCH 0275/1057] Add solution and test-cases for problem 1721 --- .../README.md | 27 ++- .../Solution.go | 41 ++++- .../Solution_test.go | 156 +++++++++++++++++- .../linked1.jpg | Bin 0 -> 24487 bytes 4 files changed, 199 insertions(+), 25 deletions(-) create mode 100644 leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/linked1.jpg diff --git a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md index 0b75e49ad..5d09c1224 100755 --- a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md +++ b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/README.md @@ -1,28 +1,25 @@ # [1721.Swapping Nodes in 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, and an integer `k`. + +Return the head of the linked list after **swapping** the values of the kth node from the beginning and the kth node from the end (the list is **1-indexed**). + +**Example 1:** -**Example 1:** +![example1](./linked1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [1,2,3,4,5], k = 2 +Output: [1,4,3,2,5] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Swapping Nodes in a Linked List -```go ``` - +Input: head = [7,9,6,6,7,8,3,0,9,5], k = 5 +Output: [7,9,6,6,8,7,3,0,9,5] +``` ## 结语 diff --git a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go index d115ccf5e..981081586 100644 --- a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go +++ b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +type ListNode struct { + Val int + Next *ListNode +} + +func Solution(head *ListNode, k int) *ListNode { + l := 0 + for walker := head; walker != nil; walker = walker.Next { + l++ + } + if k > l/2 { + k = l - k + 1 + } + steps := l - k*2 + 1 + fromHead := head + for i := 1; i < k; i++ { + fromHead = fromHead.Next + } + fromEnd := fromHead + for ; steps > 0; steps-- { + fromEnd = fromEnd.Next + } + fromHead.Val, fromEnd.Val = fromEnd.Val, fromHead.Val + + return head +} + +func Solution1(head *ListNode, k int) *ListNode { + walker := head + for i := 1; i < k; i++ { + walker = walker.Next + } + one := walker + two := head + for ; walker.Next != nil; walker = walker.Next { + two = two.Next + } + one.Val, two.Val = two.Val, one.Val + return head } diff --git a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go index 14ff50eb4..1d05adf5e 100644 --- a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go +++ b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/Solution_test.go @@ -10,18 +10,76 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *ListNode + k int + expect *ListNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &ListNode{Val: 1, Next: &ListNode{Val: 2, Next: &ListNode{Val: 3, Next: &ListNode{Val: 4, Next: &ListNode{Val: 5}}}}}, 2, &ListNode{Val: 1, Next: &ListNode{Val: 4, Next: &ListNode{Val: 3, Next: &ListNode{Val: 2, Next: &ListNode{Val: 5}}}}}}, + {"TestCase2", &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 8, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 5, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, 5, &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 8, + Next: &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 5, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +88,92 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *ListNode + k int + expect *ListNode + }{ + {"TestCase1", &ListNode{Val: 1, Next: &ListNode{Val: 2, Next: &ListNode{Val: 3, Next: &ListNode{Val: 4, Next: &ListNode{Val: 5}}}}}, 2, &ListNode{Val: 1, Next: &ListNode{Val: 4, Next: &ListNode{Val: 3, Next: &ListNode{Val: 2, Next: &ListNode{Val: 5}}}}}}, + {"TestCase2", &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 8, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 5, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }, 5, &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 6, + Next: &ListNode{ + Val: 8, + Next: &ListNode{ + Val: 7, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 9, + Next: &ListNode{ + Val: 5, + }, + }, + }, + }, + }, + }, + }, + }, + }, + }}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(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) + } + }) + } +} + +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/linked1.jpg b/leetcode/1701-1800/1721.Swapping-Nodes-in-a-Linked-List/linked1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cea7c4c02adcbe2f1e94f76ed49b8a68de53296 GIT binary patch literal 24487 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 literal 0 HcmV?d00001 From 06960d753b711bbac8a3ef8245b07e681bd24fde Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 16 May 2023 22:34:01 +0800 Subject: [PATCH 0276/1057] Add solution and test-cases for problem 2415 --- .../README.md | 47 ++++++--- .../Solution.go | 57 +++++++++- .../Solution_test.go | 99 ++++++++++++++++-- .../first_case1.png | Bin 0 -> 16069 bytes .../second_case3.png | Bin 0 -> 9853 bytes 5 files changed, 181 insertions(+), 22 deletions(-) create mode 100644 leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/first_case1.png create mode 100644 leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/second_case3.png diff --git a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md index 638f92e4a..f3cec6259 100755 --- a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md +++ b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/README.md @@ -1,28 +1,49 @@ # [2415.Reverse Odd Levels of 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 **perfect** binary tree, reverse the node values at each **odd** level of the tree. + +- For example, suppose the node values at level 3 are `[2,1,3,4,7,11,29,18]`, then it should become `[18,29,11,7,4,3,1,2]`. + +Return the root of the reversed tree. + +A binary tree is **perfect** if all parent nodes have two children and all leaves are on the same level. + +The **level** of a node is the number of edges along the path between it and the root node. -**Example 1:** +**Example 1:** + +![example1](./first_case1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [2,3,5,8,13,21,34] +Output: [2,5,3,8,13,21,34] +Explanation: +The tree has only one odd level. +The nodes at level 1 are 3, 5 respectively, which are reversed and become 5, 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./second_case3.png) -### 思路1 -> ... -Reverse Odd Levels of Binary Tree -```go ``` +Input: root = [7,13,11] +Output: [7,11,13] +Explanation: +The nodes at level 1 are 13, 11, which are reversed and become 11, 13. +``` + +**Example 3:** +``` +Input: root = [0,1,2,0,0,0,0,1,1,1,1,2,2,2,2] +Output: [0,2,1,0,0,0,0,2,2,2,2,1,1,1,1] +Explanation: +The odd levels have non-zero values. +The nodes at level 1 were 1, 2, and are 2, 1 after the reversal. +The nodes at level 3 were 1, 1, 1, 1, 2, 2, 2, 2, and are 2, 2, 2, 2, 1, 1, 1, 1 after the reversal. +``` ## 结语 diff --git a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go index d115ccf5e..783a9b978 100644 --- a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go +++ b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + q := []*TreeNode{root} + odd := false + alloc := 2 + for len(q) > 0 { + next := make([]*TreeNode, alloc) + start, end := 0, alloc-1 + allNil := false + + for s, e := 0, len(q)-1; s <= e; s, e = s+1, e-1 { + if odd { + q[s].Val, q[e].Val = q[e].Val, q[s].Val + } + if q[s].Left == nil || q[s].Right == nil { + allNil = true + continue + } + + next[start] = q[s].Left + next[start+1] = q[s].Right + next[end] = q[e].Right + next[end-1] = q[e].Left + start += 2 + end -= 2 + + } + + if allNil { + break + } + odd = !odd + alloc *= 2 + q = next + } + return root +} + +func Solution1(root *TreeNode) *TreeNode { + reverseOddLevels12(root.Left, root.Right, true) + return root +} +func reverseOddLevels12(left, right *TreeNode, odd bool) { + if left == nil || right == nil { + return + } + if odd { + left.Val, right.Val = right.Val, left.Val + } + reverseOddLevels12(left.Left, right.Right, !odd) + reverseOddLevels12(left.Right, right.Left, !odd) } diff --git a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go index 14ff50eb4..2c251edcd 100644 --- a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go +++ b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/Solution_test.go @@ -10,12 +10,43 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 8}, + Right: &TreeNode{Val: 13}, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 21}, + Right: &TreeNode{Val: 34}, + }, + }, &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 8}, + Right: &TreeNode{Val: 13}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 21}, + Right: &TreeNode{Val: 34}, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 7, + Left: &TreeNode{Val: 13}, + Right: &TreeNode{Val: 11}, + }, &TreeNode{ + Val: 7, + Left: &TreeNode{Val: 11}, + Right: &TreeNode{Val: 13}, + }}, } // 开始测试 @@ -29,11 +60,65 @@ func TestSolution(t *testing.T) { }) } } +func TestSolution1(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *TreeNode + expect *TreeNode + }{ + {"TestCase1", &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 8}, + Right: &TreeNode{Val: 13}, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 21}, + Right: &TreeNode{Val: 34}, + }, + }, &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 8}, + Right: &TreeNode{Val: 13}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 21}, + Right: &TreeNode{Val: 34}, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 7, + Left: &TreeNode{Val: 13}, + Right: &TreeNode{Val: 11}, + }, &TreeNode{ + Val: 7, + Left: &TreeNode{Val: 11}, + Right: &TreeNode{Val: 13}, + }}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution1(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/first_case1.png b/leetcode/2401-2500/2415.Reverse-Odd-Levels-of-Binary-Tree/first_case1.png new file mode 100644 index 0000000000000000000000000000000000000000..8b549dfbdd403f9133c3b46d59f21cb26653ff5d GIT binary patch literal 16069 zcmbumcQ~8x+Xrlx7DcVvt9H$V2x=s;N9;XHjMxMTv8!6Gy|vV8Rcn<}vqo!|nx*zA zN>QUlZSUIJ1&h5I+>)hw(y00^j^!3!KuCZJrARwU9)Ib;#5D;O2 z>sInBz$?C6avXRg^fOe45mXGY{U9J9OYv7V_xB8RcJ*)~-~++`zT%UTKzsZ7^MMe2 zQd0IlK4Olp_AVHEPd_m)Cx74;@OMvdM^|T8C&$0XNJ&UZiAq33rDTmIW%)oV5|=Mv z2{BnH#PaX)_AX9d{}7ZGlK=<^>e{1Rz5KoX(0m{m@LAK#-^l}b2W|teNF(6I9Qc)# zu#=RslMw4PQpy(~0Ty>-B5 zNRYpeu`WbH+RG7QgjCa1#~b>=R4@=>E_HQ1w&~| zgALq}Y5^Wl2i40Pnjp16q>8q^Cm7;_H*i()GcyaqN_)7t^}3T*}f=R!7F%NDt!X zY7TRkLTdP74ZXl>ng9t8NgquqS$Ag?0s(TxV=?L&fQcYKO{|)^76R<=jx|#=RF~C2 zsaYDUxak>!{Uy+Ty1D^4ZNLrGH1t3)85uKmFgDQL%|RNcht`6~fSk1hHK8CE6Og|f zKugC@-%&Qu!Aw@lNnQI=LRCXuRivi_aOG|2 zv9GSDwv<-@Fv{OgPZwAVxbl$3Sa^78c?4JnxtTb5t2t<4bv-?CLFUeWus{=FfFZ=p z&|K0xP~RBoU~Gs&dm_F4cf2C+2u zakh8W1$a|~sY#iE!4e=t3y80)wxx=yj+?6oQaeZ+2|-AB!X@x-2vaN^1J;2ycWzq$U+0J;)m3dM7ulqsv}TZI74?$qf5DE z_00|a9lSh{zP^&UKn(*xN;N0AldFq|nU{)-0m4L9-NaX2#m7P$6X0U#h|_}@!BB?4 zL}!SL8ytoAgnI>;x&R>zlQneKQ8#dLFgDgzRn>4sOTz4NvZjWre*PdQKRWf%^q&cxuR4I3lqsellQxZxK7(N#a#Z;Xx|eUT~~| zhm5nQpRWp5*VI7W$sGyTKzp0RjU`ll-Bq#DL0CYmYDR&kC`(f`L{?hg(*OjORCDps zmod?CcJV=)VZD81o!qqyEwoWm?!aJwBZxE71!1pt=?PL2SeS;6mYIV-7U>Sw0~im` z(}Sp>9l$Untctp8fRwwV8dz3C+7INeui<5k)RGADKx*nqs=*!gBz<&1?l2QmoS`8W zg7X0;>&rSh1nM}uVYJbgo~&)6DuuQOTWT6hxw{)7H9g(>IjS31>({h&zl+gyp>Erz_c|@s0CCw!9-l||pPn4INhl{j~gQu1X z7G;V@$-t0WNY6k`HEmS`CoLUcM}G%(yst{2o(2X3cZ7k|?X^5i)zq~OG*Kpav<}MH z4C3Gf2nmB(`di{8EcE77l9^1#W>LR=d+*?W7Y9L$VR#mZr2oz=QkK1T_<6ZP|0AfO{R(b5Z^;^J+6;# zh4us2J&l`=G@VQ|792dEdV1;$q{tTy5N)@}NmdEdxVUauD}Pwf0BNq>_t$7VIWwOA z{4{CHs&2cy@vP~h|KlB#;+EB~tGULrC9Ep-%K2eLo{t21B_*p`dmXj>R(F|(Z?zMb@-XJ^-ymX>y`oBpx0*j|I%w*53Xi1V1L z5fbL-|DHeVHON=EVy{j`e1(vPAhL~|tNTjVRUD}XL9}&5{>Oz{Nz>B(2CvyhRVNph zZfa(!TWj2JY??AKetsg@pHn6qKC&w&{u zHa|nr$Z+H*QDp1qv7=254Mz$Aja$AG{C3*>)}aDe+QZq4D8r&1>3>s_{5~z=@`S{- zT5`B5w*ZX3<~MhI40d~>DvH5mYJYv>k!bb7+Hlm_8?gz30%({&IT05Po~Wm)z$K1D zj3)vn7I(|Odh)T$K+Y4E$MIB=4vwr`&iz?c-ClLo_a9RHB@7%8Mxr3ijZ1L(#WkkP zY7~BdUApPjE5XQ828K9*ADfoYlY`f?E_$R{Xd)72WqM$NLIh9$sWLYcKVh9^xxn}v zJ8z?<99dh(&76i0QDoEX*VQTJYVT4LaS;&l&?qM`a9>;eL42)YCnnewk3YT#{0lUA zFx?t{@%ZD%kB=q}xwH@qWPlft0SdYvD6zsD0ZT~CqaWXFj(6(IC=x!}G<|iYM{!je zzlVM=!X(^=W&$_?0h~N7P*dNhQRa3Dv8aiUj~9JiR#p=u^QFFC*2TocY)mDnc-mM*i{gkK(+r;<7T2v=8kOi;;k{rvdJ&LM$>|nWhxY z$Koj4H1$5{H?jNIisoFGy7i?*CB5zDKOCNuZ=+LEQ-4glEU0Md=orUk z{#;Rav22dSGl^^$vJI;ujVI#>S-KMs6K5iE&6byv87#oHMJ{L zEZ`V^WbS6s{?EF3!;^!bu3sx`zPxic>m-?UX)-i46fP+#@mHGG+vU1@=}F^2fV9h< z!YDbSb7<_zpV2v2H&m3Ad}3o~FRxD>RJzESdgrb#ll^&GEi6oN7CY@ZS7a&!FWxJ8 z{kmXc!aTEY<+1V9l}$kR%F0NdmPCQ84UEkEa9S38k}K=+_M2+ZTwf#%|=R0N?&=; zx6Eux@OH=3{AD5?z(lJA`N8jbUHqwbT3SCGR(|w6+*z#gnw4ujJD4_sKfo;;!yi2W z`10q8U@N5y^bgJ;$f%(dyE4aaqF0=X-&{;?%kIvl)Bq^*%OC* z6YolHvQw%MkdSaku!(4JeVm}8$6TRS+-6n>{OwD%3v#Lnx6St=5Lf<<4H^|o-A)`S z!3B8U6&1#i7{O%{>ZEI1uQBWO*TSqvNLn^&u9cwa0R5l<{jdjG-7T=LXN2k>-=){Wf#zb8>QirKF_rVw;{Z#8P>B)ThRn(hNKD9J9_#*i-$bO(1KJk;=<;#^vlv zx6Q#(+wEsMhzo``pKkN=@zutF4aW3m&)DBA``K<*TQxK^Ff?I*mITPMjS?#eh>e-` zuh0&U5*|LX`YZTJ0O#gG5Gv9*FUJYpqqn22i;S80(DcFj{}=i&*_kXC3F(}<%G0QH z)5TZ((x7X~fI-RD*4~BzNj|PPZvN!4Y;D0pxa@(4sK~Wvm1?AgPi3y=+kw4K+56Q)og1B}7 z+@X9~*hd}?)e|do3xs>HP9KZ?CJ$c{`L4)YDB#FJ9zq77pbVg_)D%!qcN_Hdvaa5( zYw434LEA}o*L<4GE=>;L+F=C<2?K--qeViV0hq#NGpM$u5Bkk6)9mE%af7!bJIN^k z=aTLLgy`+>rN$9lgC6bmKyKPCUTntPv zMfqq3{Bay-`z`!dVcjD%C2jM-^vzAcKb030fJG5KRVin;^m}^gBzQeTSBvIm|IE!~ zBlg(5QI!Dq1cW@WggXMnK=6m%5L{j+&!DYq`JLkZL*#o4Z{hI!_zxT;%3NhYsMxZE zEt_jz4(gyzORj4vRml^5W2=jJ9<%m>g{qJWfTNW_W)D8{;qAV5?guE$E8?TmMiUF| z-M&(IXg1fut6{Dwz@!oifJxinacr!zBA>Sr+{Mse5ptB><=cdj4gI znJd8ncW@xXP$|CesrmpK?I4QI;m?X%zm-$hLPlDWn@x5!mwh5aE4t`Oc>rXi2LRY8 zRVeGJ`ZO8ce zbgf9ubs*nz0ZJIULJF0s31RhQkG6gu1H%&6wmhW#$wyVaeWhaObANNGP2Jj6z0c!X)@aOGOguoy*ow+UT5v zg{pm<;P2-g(?>EYmGCIe(Lt&`N&sZQ0D9c_r!_`1M)q@j5V_^tV( zO2U{Rhv0GzVSM@al+X2ArrP&%qYzN{b(*fr`XT_-7s;guY^5sJ`aRJcQh=zrl1OUY zNrq(}SD}*v)dxmEQYL`2#=F$@M#~cs20~4M5K>-|=Jp%GTxlKk#j)OW9Vdv6meI!m zj8+Z-#(wMW+2+Q0kfWkuVql-D{X1Z5_+-gv2nd%G!$Ik!js{{cBAWnn8v^^x3K)kL zLyuXH>Kw=IKXIG}R)Jh0y3>ar)lhRZnmY~1^ zQbpA3Bqyi8?CCK~oHp9Tj?-u9Bp=n4TXz1o5AX;zGsq$W@7p2v9(y}`1yr8L+0~Sn zcN=BXGBA(LI~Ia7`<@xEV!DGA91~)=%w9|yyUJv1&3Xw}ye<`$P)DqY=MFto5C6~@ zbD|Ov8*!aQJz?c>mQR;8)bydtdmn&z8N)3RWYh_DR*w29eQ$toL+rvv7#^wy`+ zo|GhI1KsSDUJw4dKGk={$kgihIl|#bkaTv%O+k5#>?bznpvu}3Io!hf`xO;6N~`%O z68_$w%q_Y!elchRF2%%byR5M9`rOK+6dc9^>{x)fxsX-H-3EMuBp zPg$rJm*hB#mlkqf*nF48zgG|*@sJCg3gXB0zSz6F&lKZcPex+QouAs3j52wY>l07% z3>ARyq9EG}c}Qv0<9YKblwYc`*Ka&S^tmNa1HCue=Ax;#-f{{T{jXNB- zc`MZ7mruf{}eOdg((GUbgz zSRwlN1-=!;W>^7%A24MI?#VCbH3p*E8 zMFetu3MJ|*FCkWoioY>ru+&o(uhyLeu}(q-gmh_>noYsHmWKLWb)RWu!y?sv z5jvu>QOn_D{7ez_r%3ZG>)a>e@GTn#!t&wOXr;sdi&@1eYlZ4 z_18sa@!MGs*izpnp;U8t1>=*O4!cksO%T?Cb zJX|*1-7hV(!Le3fRzBP=Wh7K=&B~TPb6tJ(_E%@$L8!E9iD0|M7rnJ_x=^s2eDiD(Y`6$cUCE#$b`FNfjcD9Cr1>~?EJ60jL{hAyMmZXr*UyxJ3X(&CT(I?E`KV1IcibD zgONIckIlgyZN}GDFmCYYcl*jjAX^3GiLWVSl<&)oFHXsUIVzHwP&0vDBC%1%(bkJ+ zys>Y7j6$U8Sy_oXyJeJ5D?K-I_aO6{6ko3VVUB8B=2PvwBWIKP*W-*E4y;_*%@g~< z_rA>qt;z+9EfH6hmk6JKjOXTxaCtBFYJ?uMN%_Rt({gYNb3uId(}R-Su`S5Fpi;oz z#213WCq{2jH7{5Ru@6kOt*R&6ugsJ+ott_dzdfx#`(m5}D$Zu3oRkE6^;Bws1QnLj zA8I{?iG?r6&^=R|ald@vu~HxQ&T+N>r`1vJouy~#qJh)*n%PMB#pdweD#9R>Ut|Rm za2>!i5o($3I`NzHOvg*nS5K-*@_l1ekVJsY#p0@fD#LWpxX<^p)z6-=(+G9!uRN|3 z`ILAnVNjdN6CEM≷nx;aQ<)-iF(OCOrXX$dG&S0K>#%q0PVR09 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 literal 0 HcmV?d00001 From 29cd951a3c34e46f524ca2b32ce7fc393ccdd060 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 17 May 2023 22:14:53 +0800 Subject: [PATCH 0277/1057] Add solution and test-cases for problem 2130 --- .../README.md | 49 +++++++++++++----- .../Solution.go | 23 +++++++- .../Solution_test.go | 31 ++++++++--- .../eg1drawio.png | Bin 0 -> 12773 bytes .../eg2drawio.png | Bin 0 -> 12532 bytes .../eg3drawio.png | Bin 0 -> 12211 bytes 6 files changed, 81 insertions(+), 22 deletions(-) create mode 100644 leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg1drawio.png create mode 100644 leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg2drawio.png create mode 100644 leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg3drawio.png diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md index 2128e3d1d..6837ea29e 100755 --- a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md +++ b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/README.md @@ -1,28 +1,51 @@ # [2130.Maximum Twin Sum 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 +In a linked list of size `n`, where `n` is **even**, the ith node **(0-indexed)** of the linked list is known as the **twin** of the (n-1-i)th node, if `0 <= i <= (n / 2) - 1`. + +- For example, if `n = 4`, then node `0` is the twin of node `3`, and node `1` is the twin of node `2`. These are the only nodes with twins for `n = 4`. + +The **twin sum** is defined as the sum of a node and its twin. + +Given the `head` of a linked list with even length, return the **maximum twin sum** of the linked list. + +**Example 1:** -**Example 1:** +![example1](./eg1drawio.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [5,4,2,1] +Output: 6 +Explanation: +Nodes 0 and 1 are the twins of nodes 3 and 2, respectively. All have twin sum = 6. +There are no other nodes with twins in the linked list. +Thus, the maximum twin sum of the linked list is 6. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./eg2drawio.png) -### 思路1 -> ... -Maximum Twin Sum of a Linked List -```go ``` +Input: head = [4,2,2,3] +Output: 7 +Explanation: +The nodes with twins present in this linked list are: +- Node 0 is the twin of node 3 having a twin sum of 4 + 3 = 7. +- Node 1 is the twin of node 2 having a twin sum of 2 + 2 = 4. +Thus, the maximum twin sum of the linked list is max(7, 4) = 7. +``` + +**Example 3:** + +![example3](./eg3drawio.png) +``` +Input: head = [1,100000] +Output: 100001 +Explanation: +There is only one node with a twin in the linked list having twin sum of 1 + 100000 = 100001. +``` ## 结语 diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go index d115ccf5e..85e18920e 100644 --- a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution.go +++ b/leetcode/2101-2200/2130.Maximum-Twin-Sum-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) int { + ans := 0 + pairSum1(head, &head, &ans) + return ans +} + +func pairSum1(h1 *ListNode, h2 **ListNode, ans *int) { + if h1.Next != nil { + pairSum1(h1.Next, h2, ans) + } + + h := *h2 + if r := h1.Val + h.Val; r > *ans { + *ans = r + } + *h2 = h.Next } diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go index 14ff50eb4..81ebaeb56 100644 --- a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go +++ b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/Solution_test.go @@ -10,12 +10,29 @@ 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: 5, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 2, + Next: &ListNode{Val: 1}, + }, + }, + }, 6}, + {"TestCase2", &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 2, + Next: &ListNode{Val: 3}, + }, + }, + }, 7}, } // 开始测试 @@ -30,10 +47,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg1drawio.png b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg1drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..49780bc571219a06bc6b38c9ba8fc72f63cb8f4f GIT binary patch literal 12773 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�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 literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg2drawio.png b/leetcode/2101-2200/2130.Maximum-Twin-Sum-of-a-Linked-List/eg2drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..b4c3bc56387125a3953b216598430c558dfb0af6 GIT binary patch literal 12532 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 Jl&U#I{U3cbecS*5 literal 0 HcmV?d00001 From fab66c54012b6830e3685c092d645966809ecd84 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 18 May 2023 21:45:32 +0800 Subject: [PATCH 0278/1057] Add solution and test-cases for problem 1557 --- .../README.md | 31 ++++++++++-------- .../Solution.go | 14 ++++++-- .../Solution_test.go | 20 ++++++----- .../untitled.png | Bin 0 -> 6944 bytes .../untitled22.png | Bin 0 -> 8423 bytes 5 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/untitled.png create mode 100644 leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/untitled22.png diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md index e344285be..7472173fa 100755 --- a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md +++ b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/README.md @@ -1,28 +1,31 @@ # [1557.Minimum Number of Vertices to Reach 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 +Given a **directed acyclic graph**, with `n` vertices numbered from `0` to `n-1`, and an array `edges` where `edges[i] = [fromi, toi]` represents a directed edge from node fromi to node toi. + +Find the smallest set of vertices from which all nodes in the graph are reachable. It's guaranteed that a unique solution exists. + +Notice that you can return the vertices in any order. -**Example 1:** +**Example 1:** + +![example1](./untitled22.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 6, edges = [[0,1],[0,2],[2,5],[3,4],[4,2]] +Output: [0,3] +Explanation: It's not possible to reach all the nodes from a single vertex. From 0 we can reach [0,1,2,5]. From 3 we can reach [3,4,2,5]. So we output [0,3]. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./untitled.png) -### 思路1 -> ... -Minimum Number of Vertices to Reach All Nodes -```go ``` - +Input: n = 5, edges = [[0,1],[2,1],[3,1],[1,4],[2,4]] +Output: [0,2,3] +Explanation: Notice that vertices 0, 3 and 2 are not reachable from any other node, so we must include them. Also any of these vertices can reach nodes 1 and 4. +``` ## 结语 diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go index d115ccf5e..80332c70a 100644 --- a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go +++ b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution.go @@ -1,5 +1,15 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, edges [][]int) []int { + selectNodes := make([]bool, n) + for _, edge := range edges { + selectNodes[edge[1]] = true + } + ans := make([]int, 0) + for i := 0; i < n; i++ { + if !selectNodes[i] { + ans = append(ans, i) + } + } + return ans } diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go index 14ff50eb4..11147347b 100644 --- a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go +++ b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/Solution_test.go @@ -10,18 +10,22 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + inputs [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 6, [][]int{ + {0, 1}, {0, 2}, {2, 5}, {3, 4}, {4, 2}, + }, []int{0, 3}}, + {"TestCase2", 5, [][]int{ + {0, 1}, {2, 1}, {3, 1}, {1, 4}, {2, 4}, + }, []int{0, 2, 3}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.inputs) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +34,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/untitled.png b/leetcode/1501-1600/1557.Minimum-Number-of-Vertices-to-Reach-All-Nodes/untitled.png new file mode 100644 index 0000000000000000000000000000000000000000..2e702b55b178079dbcc049d932fe66ef3930b9ed GIT binary patch literal 6944 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 Date: Fri, 19 May 2023 22:17:01 +0800 Subject: [PATCH 0279/1057] Add solution and test-cases for problem 785 --- .../701-800/0785.Is-Graph-Bipartite/README.md | 36 ++++++---- .../0785.Is-Graph-Bipartite/Solution.go | 62 +++++++++++++++++- .../0785.Is-Graph-Bipartite/Solution_test.go | 18 +++-- .../701-800/0785.Is-Graph-Bipartite/bi1.jpg | Bin 0 -> 7698 bytes .../701-800/0785.Is-Graph-Bipartite/bi2.jpg | Bin 0 -> 9128 bytes 5 files changed, 94 insertions(+), 22 deletions(-) create mode 100644 leetcode/701-800/0785.Is-Graph-Bipartite/bi1.jpg create mode 100644 leetcode/701-800/0785.Is-Graph-Bipartite/bi2.jpg diff --git a/leetcode/701-800/0785.Is-Graph-Bipartite/README.md b/leetcode/701-800/0785.Is-Graph-Bipartite/README.md index 3eb21f208..f47cb7e44 100644 --- a/leetcode/701-800/0785.Is-Graph-Bipartite/README.md +++ b/leetcode/701-800/0785.Is-Graph-Bipartite/README.md @@ -1,28 +1,36 @@ # [785.Is Graph Bipartite?][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is an **undirected** graph with `n` nodes, where each node is numbered between `0` and `n - 1`. You are given a 2D array `graph`, where `graph[u]` is an array of nodes that node `u` is adjacent to. More formally, for each `v` in `graph[u]`, there is an undirected edge between node `u` and node `v`. The graph has the following properties: + +- There are no self-edges (`graph[u]` does not contain `u`). +- There are no parallel edges (`graph[u]` does not contain duplicate values). +- If `v` is in `graph[u]`, then `u` is in `graph[v]` (the graph is undirected). +- The graph may not be connected, meaning there may be two nodes `u` and `v` such that there is no path between them. + +A graph is **bipartite** if the nodes can be partitioned into two independent sets `A` and `B` such that **every** edge in the graph connects a node in set `A` and a node in set `B`. + +Return `true` if and only if it is **bipartite**. -**Example 1:** +**Example 1:** + +![example1](./bi1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: graph = [[1,2,3],[0,2],[0,1,3],[0,2]] +Output: false +Explanation: There is no way to partition the nodes into two independent sets such that every edge connects a node in one and a node in the other. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./bi2.jpg) -### 思路1 -> ... -Is Graph Bipartite? -```go ``` - +Input: graph = [[1,3],[0,2],[1,3],[0,2]] +Output: true +Explanation: We can partition the nodes into two sets: {0, 2} and {1, 3}. +``` ## 结语 diff --git a/leetcode/701-800/0785.Is-Graph-Bipartite/Solution.go b/leetcode/701-800/0785.Is-Graph-Bipartite/Solution.go index d115ccf5e..56e20f748 100644 --- a/leetcode/701-800/0785.Is-Graph-Bipartite/Solution.go +++ b/leetcode/701-800/0785.Is-Graph-Bipartite/Solution.go @@ -1,5 +1,63 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind785 struct { + father []int +} + +func (u *unionFind785) findFather(x int) int { + if u.father[x] != x { + u.father[x] = u.findFather(u.father[x]) + } + return u.father[x] +} +func (u *unionFind785) union(x, y int) { + fx := u.findFather(x) + fy := u.findFather(y) + if fx < fy { + u.father[y] = fx + } else { + u.father[x] = fy + } +} +func Solution(graph [][]int) bool { + n := len(graph) + + u := unionFind785{father: make([]int, n)} + for i := 0; i < n; i++ { + u.father[i] = i + } + + for from, next := range graph { + for _, to := range next { + f1 := u.findFather(from) + f2 := u.findFather(to) + u.union(f1, f2) + } + } + + nodes := make([]int, n) + distinct := make(map[int]struct{}) + for _, x := range u.father { + distinct[u.findFather(x)] = struct{}{} + } + var dfs func(int, int) bool + dfs = func(start, color int) bool { + if nodes[start] != 0 { + return nodes[start] == color + } + nodes[start] = color + + for _, next := range graph[start] { + if !dfs(next, 3-color) { + return false + } + } + return true + } + for k := range distinct { + if !dfs(k, 1) { + return false + } + } + return true } diff --git a/leetcode/701-800/0785.Is-Graph-Bipartite/Solution_test.go b/leetcode/701-800/0785.Is-Graph-Bipartite/Solution_test.go index 14ff50eb4..cdca06436 100644 --- a/leetcode/701-800/0785.Is-Graph-Bipartite/Solution_test.go +++ b/leetcode/701-800/0785.Is-Graph-Bipartite/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs [][]int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 2, 3}, {0, 2}, {0, 1, 3}, {0, 2}, + }, false}, + {"TestCase2", [][]int{ + {1, 3}, {0, 2}, {1, 3}, {0, 2}, + }, true}, + {"TestCase3", [][]int{ + {3}, {2, 4}, {1}, {0, 4}, {1, 3}, + }, true}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0785.Is-Graph-Bipartite/bi1.jpg b/leetcode/701-800/0785.Is-Graph-Bipartite/bi1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b51a95044baa2845956c61e472f433803a548308 GIT binary patch literal 7698 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 G|Gxms=|^Y) literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0785.Is-Graph-Bipartite/bi2.jpg b/leetcode/701-800/0785.Is-Graph-Bipartite/bi2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99f2bce3a25764102e729399783f65cd5abc6681 GIT binary patch literal 9128 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 Date: Sat, 20 May 2023 17:12:20 +0800 Subject: [PATCH 0280/1057] Add solution and test-cases for problem 399 --- .../301-400/0399.Evaluate-Division/README.md | 36 ++++++++----- .../0399.Evaluate-Division/Solution.go | 52 ++++++++++++++++++- .../0399.Evaluate-Division/Solution_test.go | 27 ++++++---- 3 files changed, 89 insertions(+), 26 deletions(-) diff --git a/leetcode/301-400/0399.Evaluate-Division/README.md b/leetcode/301-400/0399.Evaluate-Division/README.md index 1a797c6d9..e684e20fb 100644 --- a/leetcode/301-400/0399.Evaluate-Division/README.md +++ b/leetcode/301-400/0399.Evaluate-Division/README.md @@ -1,28 +1,38 @@ # [399.Evaluate Division][title] -> [!WARNING|style:flat] -> 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 variable pairs `equations` and an array of real numbers `values`, where `equations[i] = [Ai, Bi]` and `values[i]` represent the equation `Ai / Bi = values[i]`. Each Ai or Bi is a string that represents a single variable. + +You are also given some `queries`, where `queries[j] = [Cj, Dj]` represents the jth query where you must find the answer for `Cj / Dj = ?`. + +Return the answers to all queries. If a single answer cannot be determined, return `-1.0`. + +**Note**: The input is always valid. You may assume that evaluating the queries will not result in division by zero and that there is no contradiction. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: equations = [["a","b"],["b","c"]], values = [2.0,3.0], queries = [["a","c"],["b","a"],["a","e"],["a","a"],["x","x"]] +Output: [6.00000,0.50000,-1.00000,1.00000,-1.00000] +Explanation: +Given: a / b = 2.0, b / c = 3.0 +queries are: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? +return: [6.0, 0.5, -1.0, 1.0, -1.0 ] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Evaluate Division -```go ``` +Input: equations = [["a","b"],["b","c"],["bc","cd"]], values = [1.5,2.5,5.0], queries = [["a","c"],["c","b"],["bc","cd"],["cd","bc"]] +Output: [3.75000,0.40000,5.00000,0.20000] +``` + +**Example 3:** +``` +Input: equations = [["a","b"]], values = [0.5], queries = [["a","b"],["b","a"],["a","c"],["x","y"]] +Output: [0.50000,2.00000,-1.00000,-1.00000] +``` ## 结语 diff --git a/leetcode/301-400/0399.Evaluate-Division/Solution.go b/leetcode/301-400/0399.Evaluate-Division/Solution.go index d115ccf5e..2ad7e7466 100644 --- a/leetcode/301-400/0399.Evaluate-Division/Solution.go +++ b/leetcode/301-400/0399.Evaluate-Division/Solution.go @@ -1,5 +1,53 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(equations [][]string, values []float64, queries [][]string) []float64 { + r := make(map[string]map[string]float64) + for i, eq := range equations { + a, b := eq[0], eq[1] + if _, ok := r[a]; !ok { + r[a] = make(map[string]float64) + } + if _, ok := r[b]; !ok { + r[b] = make(map[string]float64) + } + r[a][b] = values[i] + r[b][a] = float64(1) / values[i] + } + + var dfs func(float64, *float64, string, string, map[string]struct{}) + dfs = func(i float64, ans *float64, a, b string, used map[string]struct{}) { + if *ans != -1.0 { + return + } + if a == b { + *ans = i + return + } + if _, ok := used[a]; ok { + return + } + used[a] = struct{}{} + for rel, v := range r[a] { + dfs(i*v, ans, rel, b, used) + } + } + ans := make([]float64, 0) + for _, q := range queries { + a, b := q[0], q[1] + _, ok1 := r[a] + _, ok2 := r[b] + if !ok1 || !ok2 { + ans = append(ans, -1.0) + continue + } + if a == b { + ans = append(ans, 1.0) + continue + } + // dfs + tmp := float64(-1.0) + dfs(float64(1), &tmp, a, b, map[string]struct{}{}) + ans = append(ans, tmp) + } + return ans } diff --git a/leetcode/301-400/0399.Evaluate-Division/Solution_test.go b/leetcode/301-400/0399.Evaluate-Division/Solution_test.go index 14ff50eb4..04298aaae 100644 --- a/leetcode/301-400/0399.Evaluate-Division/Solution_test.go +++ b/leetcode/301-400/0399.Evaluate-Division/Solution_test.go @@ -9,31 +9,36 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + equations [][]string + value []float64 + queries [][]string + expect []float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase", [][]string{ + {"a", "b"}, + {"b", "c"}, + }, []float64{2.0, 3.0}, [][]string{ + {"a", "c"}, {"b", "a"}, {"a", "e"}, {"a", "a"}, {"x", "x"}, + }, []float64{6.00000, 0.50000, -1.00000, 1.00000, -1.00000}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.equations, c.value, c.queries) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.equations, c.value, c.queries) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d2cae23a1c5aea482eb1c5efbb6d95d0b47b3b4e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 20 May 2023 21:59:07 +0800 Subject: [PATCH 0281/1057] Add solution and test-cases for problem 1476 --- .../1476.Subrectangle-Queries/README.md | 71 +++++++++++++++++++ .../1476.Subrectangle-Queries/Solution.go | 39 ++++++++++ .../Solution_test.go | 54 ++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 leetcode/1401-1500/1476.Subrectangle-Queries/README.md create mode 100644 leetcode/1401-1500/1476.Subrectangle-Queries/Solution.go create mode 100644 leetcode/1401-1500/1476.Subrectangle-Queries/Solution_test.go diff --git a/leetcode/1401-1500/1476.Subrectangle-Queries/README.md b/leetcode/1401-1500/1476.Subrectangle-Queries/README.md new file mode 100644 index 000000000..dfa373724 --- /dev/null +++ b/leetcode/1401-1500/1476.Subrectangle-Queries/README.md @@ -0,0 +1,71 @@ +# [1476.Subrectangle Queries][title] + +## Description +Implement the class `SubrectangleQueries` which receives a `rows x cols` rectangle as a matrix of integers in the constructor and supports two methods: + +1. `updateSubrectangle(int row1, int col1, int row2, int col2, int newValue)` + +- Updates all values with `newValue` in the subrectangle whose upper left coordinate is `(row1,col1)` and bottom right coordinate is `(row2,col2)`. + +2. `getValue(int row, int col)` + +Returns the current value of the coordinate `(row,col)` from the rectangle. + +**Example 1:** + +``` +Input +["SubrectangleQueries","getValue","updateSubrectangle","getValue","getValue","updateSubrectangle","getValue","getValue"] +[[[[1,2,1],[4,3,4],[3,2,1],[1,1,1]]],[0,2],[0,0,3,2,5],[0,2],[3,1],[3,0,3,2,10],[3,1],[0,2]] +Output +[null,1,null,5,5,null,10,5] +Explanation +SubrectangleQueries subrectangleQueries = new SubrectangleQueries([[1,2,1],[4,3,4],[3,2,1],[1,1,1]]); +// The initial rectangle (4x3) looks like: +// 1 2 1 +// 4 3 4 +// 3 2 1 +// 1 1 1 +subrectangleQueries.getValue(0, 2); // return 1 +subrectangleQueries.updateSubrectangle(0, 0, 3, 2, 5); +// After this update the rectangle looks like: +// 5 5 5 +// 5 5 5 +// 5 5 5 +// 5 5 5 +subrectangleQueries.getValue(0, 2); // return 5 +subrectangleQueries.getValue(3, 1); // return 5 +subrectangleQueries.updateSubrectangle(3, 0, 3, 2, 10); +// After this update the rectangle looks like: +// 5 5 5 +// 5 5 5 +// 5 5 5 +// 10 10 10 +subrectangleQueries.getValue(3, 1); // return 10 +subrectangleQueries.getValue(0, 2); // return 5 +``` + +**Example 2:** + +``` +Input +["SubrectangleQueries","getValue","updateSubrectangle","getValue","getValue","updateSubrectangle","getValue"] +[[[[1,1,1],[2,2,2],[3,3,3]]],[0,0],[0,0,2,2,100],[0,0],[2,2],[1,1,2,2,20],[2,2]] +Output +[null,1,null,100,100,null,20] +Explanation +SubrectangleQueries subrectangleQueries = new SubrectangleQueries([[1,1,1],[2,2,2],[3,3,3]]); +subrectangleQueries.getValue(0, 0); // return 1 +subrectangleQueries.updateSubrectangle(0, 0, 2, 2, 100); +subrectangleQueries.getValue(0, 0); // return 100 +subrectangleQueries.getValue(2, 2); // return 100 +subrectangleQueries.updateSubrectangle(1, 1, 2, 2, 20); +subrectangleQueries.getValue(2, 2); // return 20 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/subrectangle-queries/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1476.Subrectangle-Queries/Solution.go b/leetcode/1401-1500/1476.Subrectangle-Queries/Solution.go new file mode 100644 index 000000000..7400dc2c3 --- /dev/null +++ b/leetcode/1401-1500/1476.Subrectangle-Queries/Solution.go @@ -0,0 +1,39 @@ +package Solution + +type op struct { + name string + row1, col1, row2, col2 int + v int +} +type SubrectangleQueries struct { + rec [][]int +} + +func Constructor(rectangle [][]int) SubrectangleQueries { + return SubrectangleQueries{rec: rectangle} +} + +func (this *SubrectangleQueries) UpdateSubrectangle(row1 int, col1 int, row2 int, col2 int, newValue int) { + for r := row1; r <= row2; r++ { + for c := col1; c <= col2; c++ { + this.rec[r][c] = newValue + } + } +} + +func (this *SubrectangleQueries) GetValue(row int, col int) int { + return this.rec[row][col] +} + +func Solution(rectangle [][]int, ops []op) []int { + c := Constructor(rectangle) + ans := make([]int, 0) + for _, o := range ops { + if o.name == "UpdateSubrectangle" { + c.UpdateSubrectangle(o.row1, o.col1, o.row2, o.col2, o.v) + continue + } + ans = append(ans, c.GetValue(o.row1, o.col1)) + } + return ans +} diff --git a/leetcode/1401-1500/1476.Subrectangle-Queries/Solution_test.go b/leetcode/1401-1500/1476.Subrectangle-Queries/Solution_test.go new file mode 100644 index 000000000..c23428f7e --- /dev/null +++ b/leetcode/1401-1500/1476.Subrectangle-Queries/Solution_test.go @@ -0,0 +1,54 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + rectangle [][]int + ops []op + expect []int + }{ + {"TestCase1", [][]int{{1, 2, 1}, {4, 3, 4}, {3, 2, 1}, {1, 1, 1}}, []op{ + {"GetValue", 0, 2, 0, 0, 0}, + {"UpdateSubrectangle", 0, 0, 3, 2, 5}, + {"GetValue", 0, 2, 0, 0, 0}, + {"GetValue", 3, 1, 0, 0, 0}, + {"UpdateSubrectangle", 3, 0, 3, 2, 10}, + {"GetValue", 3, 1, 0, 0, 0}, + {"GetValue", 0, 2, 0, 0, 0}, + }, []int{1, 5, 5, 10, 5}}, + {"TestCase2", [][]int{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}, []op{ + {"GetValue", 0, 0, 0, 0, 0}, + {"UpdateSubrectangle", 0, 0, 2, 2, 100}, + {"GetValue", 0, 0, 0, 0, 0}, + {"GetValue", 2, 2, 0, 0, 0}, + {"UpdateSubrectangle", 1, 1, 2, 2, 20}, + {"GetValue", 2, 2, 0, 0, 0}, + }, []int{1, 100, 100, 20}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.rectangle, c.ops) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.rectangle, c.ops) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From aff6f31f8e3112c57d3e6d8e129d3c1d364f8726 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 21 May 2023 15:27:09 +0800 Subject: [PATCH 0282/1057] Add solution and test-cases for problem 934 --- .../901-1000/0934.Shortest-Bridge/README.md | 33 +++++--- .../901-1000/0934.Shortest-Bridge/Solution.go | 84 ++++++++++++++++++- .../0934.Shortest-Bridge/Solution_test.go | 31 +++++-- 3 files changed, 126 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0934.Shortest-Bridge/README.md b/leetcode/901-1000/0934.Shortest-Bridge/README.md index d5da71afe..d6ff94ee7 100644 --- a/leetcode/901-1000/0934.Shortest-Bridge/README.md +++ b/leetcode/901-1000/0934.Shortest-Bridge/README.md @@ -1,28 +1,35 @@ # [934.Shortest Bridge][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `n x n` binary matrix `grid` where `1` represents land and `0` represents water. + +An **island** is a 4-directionally connected group of `1`'s not connected to any other `1`'s. There are **exactly two islands** in `grid`. + +You may change `0`'s to `1`'s to connect the two islands to form **one island**. +Return the smallest number of `0`'s you must flip to connect the two islands. + + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,1],[1,0]] +Output: 1 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Shortest Bridge -```go ``` +Input: grid = [[0,1,0],[0,0,0],[0,0,1]] +Output: 2 +``` + +**Example 3:** +``` +Input: grid = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]] +Output: 1 +``` ## 结语 diff --git a/leetcode/901-1000/0934.Shortest-Bridge/Solution.go b/leetcode/901-1000/0934.Shortest-Bridge/Solution.go index d115ccf5e..cfe9b39d2 100644 --- a/leetcode/901-1000/0934.Shortest-Bridge/Solution.go +++ b/leetcode/901-1000/0934.Shortest-Bridge/Solution.go @@ -1,5 +1,85 @@ package Solution -func Solution(x bool) bool { - return x +type pair934 struct { + x, y int +} + +var dirs934 = [][]int{ + {1, 0}, {0, 1}, {-1, 0}, {0, -1}, +} + +func Solution(grid [][]int) int { + rows, cols := len(grid), len(grid[0]) + x, y := -1, -1 + for i := 0; i < rows; i++ { + for j := 0; j < cols; j++ { + if grid[i][j] == 1 { + x, y = i, j + break + } + } + if x != -1 || y != -1 { + break + } + } + pairs := make([]pair934, 0) + var dfs func(int, int) + dfs = func(x, y int) { + if x < 0 || x >= rows || y < 0 || y >= cols { + return + } + if grid[x][y] == 0 || grid[x][y] == 2 { + return + } + // 第一组陆地 + grid[x][y] = 2 + pairs = append(pairs, pair934{x, y}) + for _, dir := range dirs934 { + nx, ny := x+dir[0], y+dir[1] + dfs(nx, ny) + } + } + dfs(x, y) + var bfs func(int, int) int + visited := make([][]bool, rows) + for r := 0; r < rows; r++ { + visited[r] = make([]bool, cols) + } + bfs = func(x, y int) int { + path := 0 + q := []pair934{{x, y}} + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + visited[r][c] = false + } + } + visited[x][y] = true + for len(q) > 0 { + next := make([]pair934, 0) + for _, item := range q { + if grid[item.x][item.y] == 1 { + return path - 1 + } + for _, dir := range dirs934 { + nx, ny := item.x+dir[0], item.y+dir[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols || grid[nx][ny] == 2 || visited[nx][ny] { + continue + } + visited[nx][ny] = true + next = append(next, pair934{nx, ny}) + } + } + path++ + q = next + } + return -1 + } + ans := -1 + for _, p := range pairs { + path := bfs(p.x, p.y) + if ans == -1 || (path != -1 && path < ans) { + ans = path + } + } + return ans } diff --git a/leetcode/901-1000/0934.Shortest-Bridge/Solution_test.go b/leetcode/901-1000/0934.Shortest-Bridge/Solution_test.go index 14ff50eb4..a441fca30 100644 --- a/leetcode/901-1000/0934.Shortest-Bridge/Solution_test.go +++ b/leetcode/901-1000/0934.Shortest-Bridge/Solution_test.go @@ -10,12 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 1}, {1, 0}, + }, 1}, + {"TestCase2", [][]int{ + {0, 1, 0}, {0, 0, 0}, {0, 0, 1}, + }, 2}, + {"TestCase3", [][]int{ + {1, 1, 1, 1, 1}, + {1, 0, 0, 0, 1}, + {1, 0, 1, 0, 1}, + {1, 0, 0, 0, 1}, + {1, 1, 1, 1, 1}, + }, 1}, + {"TestCase4", [][]int{ + {0, 0, 0, 1, 1}, + {0, 0, 0, 1, 0}, + {0, 0, 0, 1, 1}, + {0, 0, 1, 0, 1}, + {0, 0, 1, 1, 0}, + }, 1}, } // 开始测试 @@ -30,10 +47,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 28fa5737197dad69a8d741dc40d34086a05c9053 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 22 May 2023 22:10:59 +0800 Subject: [PATCH 0283/1057] Add solution and test-cases for problem 347 --- .../0347.Top-K-Frequent-Elements/README.md | 21 +++---- .../0347.Top-K-Frequent-Elements/Solution.go | 58 ++++++++++++++++++- .../Solution_test.go | 9 ++- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/leetcode/301-400/0347.Top-K-Frequent-Elements/README.md b/leetcode/301-400/0347.Top-K-Frequent-Elements/README.md index cc74deb14..d335d5175 100644 --- a/leetcode/301-400/0347.Top-K-Frequent-Elements/README.md +++ b/leetcode/301-400/0347.Top-K-Frequent-Elements/README.md @@ -1,28 +1,21 @@ # [347.Top K Frequent Elements][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer array `nums` and an integer `k`, return the `k` most frequent elements. You may return the answer in **any order**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,1,1,2,2,3], k = 2 +Output: [1,2] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Top K Frequent Elements -```go ``` - +Input: nums = [1], k = 1 +Output: [1] +``` ## 结语 diff --git a/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution.go b/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution.go index b028f65e0..f8be8cb9f 100644 --- a/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution.go +++ b/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution.go @@ -1,6 +1,9 @@ package Solution -import "sort" +import ( + "container/heap" + "sort" +) func topKFrequent(nums []int, k int) []int { tmp := make(map[int]int) @@ -24,3 +27,56 @@ func topKFrequent(nums []int, k int) []int { } return res } + +type fq struct { + v, c int +} + +type fqs []fq + +func (f *fqs) Len() int { + return len(*f) +} + +func (f *fqs) Less(i, j int) bool { + return (*f)[i].c > (*f)[j].c +} + +func (f *fqs) Swap(i, j int) { + (*f)[i], (*f)[j] = (*f)[j], (*f)[i] +} + +func (f *fqs) Push(x interface{}) { + *f = append(*f, x.(fq)) +} + +func (f *fqs) Pop() interface{} { + old := *f + l := len(old) + x := old[l-1] + *f = old[:l-1] + return x +} + +func topKFrequent1(nums []int, k int) []int { + keys := make(map[int]*fq) + for _, n := range nums { + if _, ok := keys[n]; !ok { + keys[n] = &fq{v: n} + } + keys[n].c++ + } + h := fqs([]fq{}) + for _, f := range keys { + heap.Push(&h, *f) + } + ans := make([]int, k) + index := 0 + for k > 0 && h.Len() > 0 { + x := heap.Pop(&h).(fq) + ans[index] = x.v + index++ + k-- + } + return ans +} diff --git a/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution_test.go b/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution_test.go index 14963ddec..3d02b28bb 100644 --- a/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution_test.go +++ b/leetcode/301-400/0347.Top-K-Frequent-Elements/Solution_test.go @@ -26,14 +26,19 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with input1: %v input2: %v", c.expect, got, c.input1, c.input2) } + got = topKFrequent1(c.input1, c.input2) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with input1: %v input2: %v", + c.expect, got, c.input1, c.input2) + } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 613e4b6c13d519d8dd3a8e5df99a9e02aa3d4935 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 28 May 2023 15:32:17 +0800 Subject: [PATCH 0284/1057] Add solution and test-cases for problem 1547 --- .../README.md | 42 ++++++++++------ .../Solution.go | 46 +++++++++++++++++- .../Solution_test.go | 21 ++++---- .../1547.Minimum-Cost-to-Cut-a-Stick/e1.jpg | Bin 0 -> 58949 bytes .../1547.Minimum-Cost-to-Cut-a-Stick/e11.jpg | Bin 0 -> 55797 bytes .../statement.jpg | Bin 0 -> 7206 bytes 6 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/e1.jpg create mode 100644 leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/e11.jpg create mode 100644 leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/statement.jpg diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md index 87ff3d768..db85adb8c 100755 --- a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md +++ b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/README.md @@ -1,28 +1,42 @@ # [1547.Minimum Cost to Cut a Stick][title] -> [!WARNING|style:flat] -> 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 wooden stick of length `n` units. The stick is labelled from `0` to `n`. For example, a stick of length `6` is labelled as follows: + +![example1](./statement.jpg) + +Given an integer array `cuts` where `cuts[i]` denotes a position you should perform a cut at. + +You should perform the cuts in order, you can change the order of the cuts as you wish. + +The cost of one cut is the length of the stick to be cut, the total cost is the sum of costs of all cuts. When you cut a stick, it will be split into two smaller sticks (i.e. the sum of their lengths is the length of the stick before the cut). Please refer to the first example for a better explanation. + +Return the minimum total cost of the cuts. -**Example 1:** +**Example 1:** + +![example2](./e1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 7, cuts = [1,3,4,5] +Output: 16 +Explanation: Using cuts order = [1, 3, 4, 5] as in the input leads to the following scenario: + +The first cut is done to a rod of length 7 so the cost is 7. The second cut is done to a rod of length 6 (i.e. the second part of the first cut), the third is done to a rod of length 4 and the last cut is to a rod of length 3. The total cost is 7 + 6 + 4 + 3 = 20. +Rearranging the cuts to be [3, 5, 1, 4] for example will lead to a scenario with total cost = 16 (as shown in the example photo 7 + 4 + 3 + 2 = 16). ``` -## 题意 -> ... +![example21](./e11.jpg) -## 题解 -### 思路1 -> ... -Minimum Cost to Cut a Stick -```go -``` +**Example 2:** +``` +Input: n = 9, cuts = [5,6,1,4,2] +Output: 22 +Explanation: If you try the given cuts ordering the cost will be 25. +There are much ordering with total cost <= 25, for example, the order [4, 6, 5, 2, 1] has total cost = 22 which is the minimum possible. +``` ## 结语 diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go index d115ccf5e..97734c283 100644 --- a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go +++ b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, cuts []int) int { + dp := make(map[int]map[int]int) + /* + n 很大,这么开内存受不了 + dp := make([][]int, n+1) + for i := 0; i <= n; i++ { + dp[i] = make([]int, n+1) + } + */ + dp[0] = make(map[int]int) + dp[n] = make(map[int]int) + for _, c := range cuts { + dp[c] = make(map[int]int) + } + + var dfs func(int, int) int + dfs = func(start, end int) int { + if dp[start][end] != 0 { + return dp[start][end] + } + need := end - start + if need <= 1 { + return 0 + } + + m := 0 + found := false + for _, pos := range cuts { + if pos > start && pos < end { + found = true + left := dfs(start, pos) + right := dfs(pos, end) + if m == 0 || left+right < m { + m = left + right + } + } + } + if !found { + return 0 + } + dp[start][end] = need + m + return dp[start][end] + } + return dfs(0, n) } diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go index 14ff50eb4..6a763bb44 100644 --- a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go +++ b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + cuts []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 7, []int{1, 3, 4, 5}, 16}, + {"TestCase2", 9, []int{5, 6, 1, 4, 2}, 22}, + {"TestCase3", 2, []int{1}, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.cuts) 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.cuts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/e1.jpg b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ff7f456d2d0c077459a555b8d9e128ec6cf13c36 GIT binary patch literal 58949 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≠cN{p1;<}ZdjtzGCmcS^y(y7F>M5@LUdEigW*p(ZaW z>NWLuhK`79+JF`jOpCuG6paaLjL`z}{r^;$HoLR(P({}h&Am$TR~z*Bk_L`S&{`c1 z?w245ec5yK%5NQoAG^bX@(i;;F82QNB7+#KHc`^cRT! zW%{w!=^RVnC2>;U9xQ*#MQy;ZRhpsS`y6HuY(oeDyg|1?>=IQsFz>h*E!yyA%;VV= z_(($!2m;XeYPKAq5H1= zFO@=%Gqon1D~E==HJf&c_1qTXYL~OZ-kvLKY`{fVJCK(HTeayOGs#zMo1%s_z2mU+J{p;_o~4pT9aqU>Y;l> z_iSP1j7Jj~Z!0BQ|Ni~Jz<{z4HAfZbug}K1WgfUsvY%1@@qHABp$zn??{bnc5QXF z70h(=JX@9)Y2EzxeqeGkd}E?!z8HKrsM>nW&zyTz8w=zF;SK0_Oog7`jx9%9!}hy`kEt(=#*Cl$*8lI1Ow1TjKiqY56a}6x0y<5%EcT=kpIfsC0847spFG3EsyEqZMXK?e9-| zr_Uaqb=aM~Ow3WDf#!aXoBNHSyeJ+H(GGtxx|pg3AK)sj<;;w6eJi_c)-ZW(=a{7# z^wNUst%iD>&|DW5 zFzQ=4o=FQTe8M;dMp7i3zB2HlI$xG9cizz98n<5`g1H08tB*{|69;x(nosr5 z=0z^D2adMDwa#mLA87V&EuO}7%qs}r@+c%Dm+z6rEPq+a#IL#JQQIynC&ESEH#KEo z!ryeE%k2lr(;`qYf7~z{^RX0Ee?!hDUxkjZf!Do6YmaV-3cvN#JAq zdN8`Mc_)3mfdI9?d(y4--Bca{EBKQXFyXV0i8?w(9UN$_h974mjEGD$KEKV(P3+UO za0G@-Ff{B$*l~}`D5YyDWGH1nIh^)x9%xPGvFhmub8X+h1Rp?Qkxa*Y);=~Eq)ikP z@QPbrRo;TXdm+Iv66(2bvb?^Y>g=MnDDrbpq_<#tb*OM>Mag@7`9%}EtYG}S-!^gm z`*PQ^>9cyr?+-$cA$l<jgf7T5}9?#I8D9Dw6oiu{S(8zkUF~ac^909HM0@@vH2~mrulqh z5%t`k>I}io^&|ObW}iIvNw3q5OeaLO$R^3}wbs{WK0F#n>ov?1aa@p+dN#LBy?3ZS zVlC}{?!E~%v4XNFzs4`c^_W3k)Ws!R$s~pKgf($o9CeD=8c0!{dcX0=k19k?x%TeRnRw1e@ao+CpsG#)UD#Z1 zr@Fuk%ns_suz=_JKk28^B|-1rz|(P%Rn@Vu(bv@_Z#o$&UB!^`k(SXB=GY^lo6D|h z-e2Gu$DQ%u|t8{OEWqL4rDBeIgA0;f5NQ^%+DX>mJ9lH^eMU>)#EU zCxJ-diky{cV^zBCJ>6?%;)O}F(Z}(3=GUq-`hBov;+jg_{i8+gfF( zr_Ok0n_!v-s;SOEe@ffHYExma@T5Xe(#6Av# zfzL(IM%}S_)?PRM=%df8@K5)bQn@50SC&B?keY@Jb&BMciHM|gW;35;RTE-&pAad? zb^>Mw2e9iJx&}=X3CU%#igp)Z){IHh8TG~+#2pG_RWVD@B^4bE&C83~Tn>{M&-u8~ z-DVU$TYNiOng^oJ3Bh`T-KBu|#NB;+UGw5**VA&-9U4>gAUrX|okfyLoA*+&*Jfpo z%+EXFJ|!voZgSo(Fa|YqcQh;INj3tiyw2S{R#h`Nb(8v>L8*E_Rw8Ympv+Ud+t>Ll z&QmJFQc4ha@-X@5{iTGvJRoEb4remmaMK;8+?H#1p3;p^H1cqF=H}3|RxT$j4o`dR z^&ageG+XBx4lJjDLHS70WM*&BOaUn0-!nXcC4}$fvQt>ppTl*2zU2KTCpqE3y@uv} z`R0J>lj3Ot2aO1z&k=_``JdxEL&4-Y11kMnVeM(hZ|J1P@z-!KW^hMIAY%l0>pTmM z!>T_I47)@Qug6zaQD^k};jl^w+bPI&4|nHRC+|-gJIOt#^N5WaK&lYfY8bSxQ5ZyG z*5@XM8pwd^f5Lvb;^%E{ckqHx^FK{&P{n1eMI}C9hPbx-r3Hnc%BG@+ zAXk$LjBZ!cT1$_f437b#8$EHK zr95W%czLCd{ezZ8CEj5soGuD$jt8KkazyW7W(d+2Gr?xiJ=745w>&MpB2$$x2q0Ws zTrXdAS%T}XHZPN+ibFSp2@2HgR(+EwLU}LXY{ygjTObj z>$uzSp6`;(r_dr9dtDotfd+pxl1I%q4=(+)1MeCMnF`s1?!7!q{z&XoyWD{^fx#($ zs~3?Wp_q8Y5WSr5Gqj}fkIyrOF@8*m9DG&H!#v?_+QC-l@unNKpN&ujyXev^`FbSk zw5J-UyywD{v5d1@m2-G~ib@1{{oY}gqDo)y*>G`Y(e(@uS+B@?EQ_O7Box=|qu}PC z!EKr!gime`zf+9i7C5=PY1-21t6R2CHLFpKPL%3@^r5=2s15zD9D@pb)3ai{oD~~Z zHZs*xrPQbq`1#|TUvcjmFCdQv(S_p97+49=Oqr~#-!u^?A`L)jDc_0L z?M>L<5!h~|O9iv*c$qfx^YUn{?i3)Dd+**pz8`iiqwz^r|8*?9uNR{DJt?;JOz$}6 z#LL)D;Yx_)&ZZfXd#XKG`wEo`9W(0L_+$YVE#nP&yGC@RzGzImQ>1cSyor*i+tjIS zFZZaU6mu9o^sB_<;|t24jU}40`48TwXP(`!m-YX`VNUI8W7dNih4y++kmr`yq8Mib z=_kGxhoVgyH>7IA#}mY`Jvm0fQLCYi^ zTZX5frgVRp$yLl}3PeW^5>pi-v^1$H(C-A!7aE?weS=#5x^a3W{f>XXBabLaVyh=k zYmMt7_hX)%@^|9BmT{H|OAnv9dpXA5qY{*8Pq*CFp8uX)U`{rb5MJoc((-hpIp^Hr z`2Na)^@MDDNa!GAbznUN3k!?>P)Oy`4-KiBM!U_u;nqm~mc=?jVg`CfP39!-_l-#< zInZesip<>*`R-R@R5$WAI;$ETy;+(ZDGju>Ig(1Zskt`*a@` z!hM|zw%>Qw|4J>zE(A9iFF0DST!Qe_R%fUduOtLB1{<=1@WU~?2_5t94@#ZjyVoiz zEIuwQS%1-AQKwN1##Q(ZMx1Tk%!GT$6#yAqKj`pkPcX{KzTDF-PG~uHUHu_ps&KJ^CqH8x$)UN z)z3sQB+g`uv6JieILB&y&b(uLCyi+99J1Kr^w}csN=3#w>%yL!baGq9rlrpjOKnx~ z#~@<7;HZVYrQX0+duo&S&g9hZ$k0b5ZZmc`uYP4Z8LnxP48oyU^@mnQkJ5wTfB355 z+fApNVU3dC{D`fxB(Q7GQkRW!B64Q0hv9m(qDMzqvlFOn;Bf6(j^XQ;EE;&cCfvfu zxkr_hoK@`N*;C}RPia4&jU1?@bb!iWt5ah%_THdAm?psE}^q||jt za&IIwkHn>*^4wP@%!xe8g^x8WZx7mNyy2ZEA@CL<DpSoB@L=ca?T zlkglwmO(|uW0YO!C+yR(KY1t?(?i?b-WsaU4d&D%5~%X;WU#Nb_*gE(r{KP?p7CWb z@QW1J#+Yn(Zlr55XBM4H4>0|?wCnJ$aI7ZgC82gn)DNPGlCmnID&b+yFnN{kl9v=8 z+fh@3pJ27WKxtX@-=?RadNpOIvEkA32B|Fq5q8dsPbKW*1%h)03OtX*VB%=d=HhrC zX&%pV*eD3ag^iCKDqoq685MH0i^`qEPO)>TgY~G%6lfo7(WZMt#<;856V$>6=Y02nc)Ux%(=EJHuVn)M)qR zy17hexH=xn=9Kr(^N_Z;m{Ah8;Wlk6OQT`;xuXIcoSlcQ8O}EByyekxDY-xKmSJ+P zC#I&-g*#Yzn%Z=hoKObR5aVqrGbRp2vblH#OSu>bd_}S7=&Y*DW#?1(sV$cPnlks` zU=KbSB32I`H20u~7x+XXA4ESwN6{@qyGF!Ynk%CFmg2>h1izxD2Xc+kZDI(9usGh+ zWPdJ5-w=Yuvx&-wVYv3xq+aLK#WVX-+3M^$Iy?!K&5v;-rd_kK!$%!z8JI!$P-+OW zIN4$Wa_f)TAS%UMv^hw0!+{}W&ra_TNV1X1wqBc!b`JlTZVo<{bP%0Op*(@iLB+RA zOUxV&P07ID@@3P+qqUbF-{B}}F1lc+U=R+(vGiRgVSPa&b68>OFU*t_klWxr@JlQoDYVhFrwbJRq0xzyvBsd{#e`28Jt|8{!4VClNK{m z{)LE>_}8~uPz`HIgx+Z*AW-niN{Fc$1dqiGDGr6PX^-kg%qW&T0CT@q)75;oUBP?& z-|wR`KsDd31x`fD#QWO6(JoA0*Pw5=EjP7==uOkEP}GG(WlLKI6#4tg5N2zqi%z0! zrP~wYmYy82eCuZxCFt-e;wjDnQ~9TNQ;^-Mv{aq-iR1LrEqO1S`)Z(vR z;$HEJkA!w&jUCQ~QNZ__&jPvW@NG!U2YtskE0ED3m^Sq`mhQVUvN@gFM<;D+s2I4) zxu;1l=6XzcykE?2AAatUtXTCe&g9!QnO7@N>*>eflrD2q3;jl?F@J;Vm0o96gkvhR zsGiUyzajkG=Xb<^G#(j)9&Y`eHwd2+*Gh0OKR!q{F#Xi(t3+2$1}hrrA;Cb&H<4`n zF_Ty@Y9R2*4H$1NCSbfpPH99bz0d5C55Sc2VBQn5>SqTod|z(OUq|YVUcf|$`75n| zTXJ+sozEtWN_>?&uaL}5FHe4ZMYo=U*pPs|qvpQ-T!5@ zSq|DeOODih+Mu$EYi5^V9FGr1dYZ|*yYu|qA91xke4WuSF$`+$)iL%jbOKa7$>zcA~L#YpGWFa+QvdbmeLQ zIql}2v!`62G19%4g#;Qo$w$ElS#e44g+I$Ffwx))wx5j7qMF#L- z8eA*x5g2buD(Ugad6hSXM)0wj3=$o)Vu)~E1c)JmBypQ&;14fFYw4n7@Pp(6j)3wk zwYwY9Chwj|QoyKWzWK$yyyib4cUZxW zT)Izcok|fcxwTtZiZ>_J6Ww3KoSe|Ts7Z8R(gt?|pxv?h%1h-<-384*2<<7?n&#EHE z#M=*S=51=#jB_emBK9hTA$bZA#X78D6_yR zfsS042M+Xwv zv=}nHLYMa~#_!#;v=ua@e0?^`xUgGnx!B@dSY#rErmfF_B!=qqS~I|D6X zG$?YhqB8S3rw!c3Cb!?`_kJyq;G`_Fk6~wx3 zajFKqwei3P@I#}@ZxL2{ZJlQ4B(rug^c}uAEp})MbP4v26LfYm_Q34rGPd6!guEb# zIXC3TRrjIWGl6Nq&NtvDS%qG!+QBJm;faZo|55EPBdIXad_Jw6wLm=Hp5v&XQJlzqf(egSzqD({yU&*uVKgsVKs zhe$~TUL}fIyx_X0Yj_C$9cu|vKxbqON*8R5i~Hv)OIl@p-SZ^OIOPgIx6R4>S!}xI zKRpizyCRv=Q_R*SPmY$mB}9P}Wy;-C<_EeUD7gP*(taTu6VIT@l|dBgLuba(eI7&4 zz`PneUT;fQ_M~EMG5n9P?;5IYWi?(h9gAy@rQnq?@a}a+F`uFyJ?^C9w-sE)Da=G~ zf-CEDV~&Z(iu)oXQsfrVac<3k0!RZrL!+K&XwD22`9R?50bX;2D~D?V(sw{)V&hN= z_gE<}PUVP1!FHVR8#S`YnQ7^T>G;UxZKz?^>Z*n;)NmKl0<48eXB82|vz68`v(-Eh zphE|TSw7sAd8ngDlL875IKdHMS|~EWYbZ}RH*0s5HLs4c(4X_=$ck`yg|LX7gbW^) zpOhB1g^^@H@?vWA8>ZyZ7lUt~^r#@VenbIB;;e^-2xAf4rXz_Sv#g9WCY83+(f?mB zLB(JhRF1ZYW8CZjA}Df>0xmRI68t0y*&?#%(Og z=ZBFKF@)8T4t_K}Dn9$ya6jK1h?a6KN+7)f<(+>KEgUJIvCTv^e?LAa(2;T#Q-*+@ z-j4R$bjgt;D&2k3BAt5vuGK6OhTN7hUFAmYQgVC(1AMWvljXiNYbOacA1ywfIiky_ zi~AS_;yVfQYZs5VX8YWL>RAn%OomEteam$#abtZ|Lb`I~k;DfuN#}d9;{PJT`v;4w znc=fe^))SZ+b32}tu$=BruI!VB;Z_3L%3njbS)+sIK{_)VEY2kui>fPF% z8YHwRTB2Fve;J_(A{qG?1qiZM<;y?dTC&V6x{8HWd6d9wzSEPWIG}_QOIs@l*qp|> zffp_?23FY4F(*E-9D90jr+ldz%iXo}pQVW*4IbJFNOZL;O-4?tU!IKxXlceRyf z79T#i9SH!{Ogbx(Q2b10BX|pb^yRX&W(&dyC|?t|>>L^>5xzK7ws;bLcVdj|N_ic<|;)Cd*(YAN;b&b?w0N zav3OCFZEmaZPDXHs$8ZxSSa)-ik`bwv@;vte681H^da;4eF^lYZLX!+6Tg`@f}w=} zr9EMoQ5Y}8JwyW_8gv+1(p-cL@7_Isf-8uR{W(1sthE4sV|+3`C}Inqg%p8V_!I^6 z__r25$m+cQb@!2ELiKGqclJyAfE8G*0^8f9NQhs9>-5AHMASzd5T7Y z`(12wwfz9KCFJ&7cDTs@U$;g|47s)uvZ3v;p&o7Yf<#eLD4M_8tjd3Qhc{>Ud|LCT z!q4M92J`ZPOmr%bFCMajIqOSa=-- zzMi8cY9t_e(x%NXyn=+X;t;*DF-oZP$o@$ZNHAJKmM{ZZvS>55wyzaZWRDo6tlTSn z{N2e@tW4+zGJi~De?o{4xc@x4|5OfT#5tpWu|k@z)PwbMll|5Z!aT_S#rbKkCLTK{ zCy$M~ZX4q22i08ore86NA`STN*NKs^jN+%D+SM-%Ydmr@4^y`{ZpFYct<>oqieyxQ zZ`M_+)e}^8T{%kC|6*kd5FWo{(2yii%E)Wy%6|y$jHJj08C4agglybfe4;hq&YDVC zUfZ?;uS+Y3_5^0^cdwFs1zr)8gAv6zfM|_JajcS*9)!R|w0w?^bE9k2IB+Pke67?l zZZtAS&)HLqt})U^;Mc{MKQTIV`>!f=cY<(-THZ`?(EGfzdC;NxIAY~IQeZO^*J}ou zzKUJtE%+CULBn~9yn7mPHbjQm@46FD+Y;5rqC`(3spYR6b1czs88QtCX+9u4n zn^eRsQ2Ipab$5&O2q_Bs%g3Iev+jSL#HX%w@F|>{m4Pjfpo_;j3PD?qLBhKihlX`3 z*ZuLMIwli=1Z@&mMJAC~bq96M$!_)DR<>{vV+Z94s z2a>H-lG{H;gSiV?BqF3pX^KLPQb;6ZNeXFU3`ek?Cv2hsyi`87??8!hDSi%#x)q2R z)~+!=neOL>{t-7UX_Y>V%wJN8)Ct~8mSb46TpRIPUkm7!hx)qhy!3PbYoZg7Am8c89gC}#W;I-|M zpQY1zb1yvy%fH~pUrtxw2`Oj90FN4vR*Pa~;;njVO}k9-!KWhxF_p=(Perki+QviG z-KjO%j2ZdP1SuaQCuHAwJc=Rtgr37D+5}$V?gaT*mN+KTw*$V_qdMxgVK~9ioFK)c z7#&Mj0SYR&^#YIYfWP?dx|l^NU-XR5Y|nmdAbGO+@C2C&*eD65dL+(pg90wUVx8`# z{=?$PnT9@0+2Y$W$p`K~J*u@h%W1`~UjvDh^Ely_gh;z6gllbRDCioz5Waf<4qdZF z%yx}i=uMAOvZbG)tUSlZBC7e!5iZX^JAbpw3I6`w=+4N$w2|FmA-lw9dpEa~7sMym zO9vYrQ*VKTh!3V{!Te+-=0_Yu#J_GF3`$s47#wW(o0z7 z7skLVGCezndei9`rT=RgGj>Wzi2`9qro*JEn3 zh)B99Ot#dlWuXB!su6LkQA6SJX$rYJ;?ZEdi3v(aq*Y$;R-^74q{8IN&${#v2V^lK zr}pdYg{#k-_eqN|@pSv8GL}xV79faSggyg*9eFAj;M*CgM$oA|-36<1h_SlY+dukwsAyimYYW$BX-0f{m_AbR#c9{Vr#53zweNeeK?S0BU5}Qi zM*=?_t)+P9Pj*B&?nw)ax9?n|<)fp38J0CEq~-!?8dW~-;^LQqJKBFIsB)3$Oa$ae zAhWu-B2iuSsE_@Mbql2ZZ1fiG_Vzv%q52vJ$m&LM>n7FrNaapt;NP+v=V3Ct$0Fj;A_W>DqTUe~8 zF?UR*)ni5C8yJc^8Q_>Ia@2y0VaP}6u`RZDdq>8)v#w5KBf9QBO&e6LP-4%aSl9Ar z@4`iLFALO(k6jHST5U5i98XqU8x}va+y_~B?m7N0cgXumthr-sfeOd8Ky#;K`e>vg zWJ76qXJE>CmMiykEMZ6axKf2_a_kKqjJ zipPF?B+R~kZjen&aDMoMfnGuZJis;JSEQ;jDvsZR=}80f|3x(5R7j8k@%61Aez%EF ziEd45z(YzbR+fKRBpYDGCX_)K;j52+oswv$QKpmW@6+e-Qjmp-Uj?Hv0Z%?n$Q;(d zskBdZMnkY6F%8lxK3RT6VhD+11fOJmhEr?jyqO`~UhmYvq5B``R%_5<2ajr2)_M~V zAHaVhC;^yELo|al5J0-Iei#h9w6C3i5cOdu3l#`ycO_9}q<(-v#YAfa(H~vXgB@nS z8o)jkB&!4X1OUVrObDvmYXHp$cgk%JtPinPE}Yx*k?63=S;s;AITxdm54xa`+CCRE z2fOtQkAx{6xn5`SoCK@_e65V&xB&q(uyi{DRm~@-JYG`Q5bgS9o+65Uj%dZ}$CIoq zB#GlL6U20bSg4?LtnhC~)YO2ke_VhRkidQt;_&|#`TtJx|HUqq)isT6D RWd!h_tfZnuiMWy9{|7jpB7Oh> literal 0 HcmV?d00001 From 4416c116109331a4c6ef513f4ee7d7cf763e4610 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 3 Jun 2023 15:11:13 +0800 Subject: [PATCH 0290/1057] Add solution and test-cases for problem 1376 --- .../README.md | 38 +++++++++++++++++ .../Solution.go | 27 ++++++++++++ .../Solution_test.go | 40 ++++++++++++++++++ .../graph.png | Bin 0 -> 12102 bytes 4 files changed, 105 insertions(+) create mode 100644 leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/README.md create mode 100644 leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution.go create mode 100644 leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution_test.go create mode 100644 leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/graph.png diff --git a/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/README.md b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/README.md new file mode 100644 index 000000000..85e9b6962 --- /dev/null +++ b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/README.md @@ -0,0 +1,38 @@ +# [1362.Closest Divisors][title] + +## Description +A company has `n` employees with a unique ID for each employee from `0` to `n - 1`. The head of the company is the one with `headID`. + +Each employee has one direct manager given in the `manager` array where `manager[i]` is the direct manager of the `i-th` employee, `manager[headID] = -1`. Also, it is guaranteed that the subordination relationships have a tree structure. + +The head of the company wants to inform all the company employees of an urgent piece of news. He will inform his direct subordinates, and they will inform their subordinates, and so on until all employees know about the urgent news. + +The `i-th` employee needs `informTime[i]` minutes to inform all of his direct subordinates (i.e., After informTime[i] minutes, all his direct subordinates can start spreading the news). + +Return the number of minutes needed to inform all the employees about the urgent news. + +**Example 1:** + +``` +Input: n = 1, headID = 0, manager = [-1], informTime = [0] +Output: 0 +Explanation: The head of the company is the only employee in the company. +``` + +**Example 2:** + +![example2](./graph.png) + +``` +Input: n = 6, headID = 2, manager = [2,2,-1,2,2,2], informTime = [0,0,1,0,0,0] +Output: 1 +Explanation: The head of the company with id = 2 is the direct manager of all the employees in the company and needs 1 minute to inform them all. +The tree structure of the employees in the company is shown. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/closest-divisors/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution.go b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution.go new file mode 100644 index 000000000..df85c00f5 --- /dev/null +++ b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution.go @@ -0,0 +1,27 @@ +package Solution + +func Solution(n int, headID int, manager []int, informTime []int) int { + managers := make(map[int][]int) + for e, m := range manager { + if _, ok := managers[m]; !ok { + managers[m] = make([]int, 0) + } + managers[m] = append(managers[m], e) + } + var dfs func(int, int, *int) + dfs = func(i, dis int, ans *int) { + v, ok := managers[i] + if !ok { + if dis > *ans { + *ans = dis + } + return + } + for _, employ := range v { + dfs(employ, dis+informTime[i], ans) + } + } + ans := 0 + dfs(headID, 0, &ans) + return ans +} diff --git a/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution_test.go b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution_test.go new file mode 100644 index 000000000..307804c6f --- /dev/null +++ b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/Solution_test.go @@ -0,0 +1,40 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + n, headID int + manager, infoTime []int + expect int + }{ + {"TestCase1", 1, 0, []int{-1}, []int{0}, 0}, + {"TestCase2", 6, 2, []int{2, 2, -1, 2, 2, 2}, []int{0, 0, 1, 0, 0, 0}, 1}, + {"TestCase3", 11, 4, []int{5, 9, 6, 10, -1, 8, 9, 1, 9, 3, 4}, []int{0, 213, 0, 253, 686, 170, 975, 0, 261, 309, 337}, 2560}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.n, c.headID, c.manager, c.infoTime) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.n, c.headID, c.manager, c.infoTime) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/graph.png b/leetcode/1301-1400/1376.Time-Needed-to-Inform-All-Employees/graph.png new file mode 100644 index 0000000000000000000000000000000000000000..21e76041968e4bd73fb2bad6ebf7bd88028b64e5 GIT binary patch literal 12102 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 Date: Tue, 6 Jun 2023 22:56:40 +0800 Subject: [PATCH 0291/1057] Add solution and test-cases for problem 807 --- .../807-ex1.png | Bin 0 -> 47555 bytes .../README.md | 40 +++++++++++------- .../Solution.go | 27 +++++++++++- .../Solution_test.go | 18 +++++--- 4 files changed, 61 insertions(+), 24 deletions(-) create mode 100644 leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/807-ex1.png diff --git a/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/807-ex1.png b/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/807-ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..b975c1f6af42b6b4e79f292cc9bab9de04a14535 GIT binary patch literal 47555 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 [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is a city composed of `n x n` blocks, where each block contains a single building shaped like a vertical square prism. You are given a **0-indexed** `n x n` integer matrix `grid` where `grid[r][c]` represents the **height** of the building located in the block at row `r` and column `c`. -**Example 1:** +A city's **skyline** is the outer contour formed by all the building when viewing the side of the city from a distance. The **skyline** from each cardinal direction north, east, south, and west may be different. + +We are allowed to increase the height of **any number of buildings by any amount** (the amount can be different per building). The height of a 0-height building can also be increased. However, increasing the height of a building should **not** affect the city's **skyline** from any cardinal direction. + +Return the **maximum total sum** that the height of the buildings can be increased by **without** changing the city's **skyline** from any cardinal direction. -``` -Input: a = "11", b = "1" -Output: "100" -``` -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./807-ex1.png) -### 思路1 -> ... -Max Increase to Keep City Skyline -```go ``` +nput: grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]] +Output: 35 +Explanation: The building heights are shown in the center of the above image. +The skylines when viewed from each cardinal direction are drawn in red. +The grid after increasing the height of buildings without affecting skylines is: +gridNew = [ [8, 4, 8, 7], + [7, 4, 7, 7], + [9, 4, 8, 7], + [3, 3, 3, 3] ] +``` + +**Example 2:** +``` +Input: grid = [[0,0,0],[0,0,0],[0,0,0]] +Output: 0 +Explanation: Increasing the height of any building will result in the skyline changing. +``` ## 结语 diff --git a/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution.go b/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution.go index d115ccf5e..841cbb7e1 100644 --- a/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution.go +++ b/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(grid [][]int) int { + rows, cols := len(grid), len(grid[0]) + rowMax := make([]int, rows) + colMax := make([]int, cols) + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + if grid[row][col] > rowMax[row] { + rowMax[row] = grid[row][col] + } + if grid[row][col] > colMax[col] { + colMax[col] = grid[row][col] + } + } + } + ans := 0 + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + a := rowMax[row] + if colMax[col] < a { + a = colMax[col] + } + ans += a - grid[row][col] + } + } + return ans } diff --git a/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution_test.go b/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution_test.go index 14ff50eb4..8c6e01ea9 100644 --- a/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution_test.go +++ b/leetcode/801-900/0807.Max-Increase-to-Keep-City-Skyline/Solution_test.go @@ -10,12 +10,16 @@ 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, 0, 8, 4}, + {2, 4, 5, 7}, + {9, 2, 6, 3}, + {0, 3, 1, 0}, + }, 35}, + {"TestCase2", [][]int{{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}, 0}, } // 开始测试 @@ -30,10 +34,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From de8344aa93cf1e8188ad24f3bc9eba081c835c7f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 7 Jun 2023 22:27:28 +0800 Subject: [PATCH 0292/1057] Add solution and test-cases for problem 1318 --- .../README.md | 32 ++++++++------ .../Solution.go | 41 +++++++++++++++++- .../Solution_test.go | 23 +++++----- .../sample_3_1676.png | Bin 0 -> 2671 bytes 4 files changed, 69 insertions(+), 27 deletions(-) create mode 100644 leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/sample_3_1676.png diff --git a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/README.md b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/README.md index 76f35b12b..f5652fe95 100644 --- a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/README.md +++ b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/README.md @@ -1,28 +1,32 @@ # [1318.Minimum Flips to Make a OR b Equal to c][title] -> [!WARNING|style:flat] -> 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 3 positives numbers `a`, `b` and `c`. Return the minimum flips required in some bits of `a` and `b` to make ( `a` OR `b` == `c` ). (bitwise OR operation). +Flip operation consists of change **any** single bit 1 to 0 or change the bit 0 to 1 in their binary representation. + +**Example 1:** -**Example 1:** +![example1](./sample_3_1676.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: a = 2, b = 6, c = 5 +Output: 3 +Explanation: After flips a = 1 , b = 4 , c = 5 such that (a OR b == c) ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Flips to Make a OR b Equal to c -```go +``` +Input: a = 4, b = 2, c = 7 +Output: 1 ``` +**Example 3:** + +``` +Input: a = 1, b = 2, c = 3 +Output: 0 +``` ## 结语 diff --git a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution.go b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution.go index d115ccf5e..7f46c2d24 100644 --- a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution.go +++ b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" +) + +func Solution(a int, b int, c int) int { + aStr := fmt.Sprintf("%b", a) + bStr := fmt.Sprintf("%b", b) + cStr := fmt.Sprintf("%b", c) + + la := len(aStr) + lb := len(bStr) + need := 0 + ia, ib := la-1, lb-1 + for i := len(cStr) - 1; i >= 0 || ia >= 0 || ib >= 0; i, ia, ib = i-1, ia-1, ib-1 { + aa, bb, cc := byte('0'), byte('0'), byte('0') + if ia >= 0 { + aa = aStr[ia] + } + if ib >= 0 { + bb = bStr[ib] + } + if i >= 0 { + cc = cStr[i] + } + if cc == '0' { + if aa != '0' { + need++ + } + if bb != '0' { + need++ + } + } + if cc == '1' { + if aa == '0' && bb == '0' { + need += 1 + } + } + } + return need } diff --git a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution_test.go b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution_test.go index 14ff50eb4..a62f224ba 100644 --- a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution_test.go +++ b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + a, b, c int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 6, 5, 3}, + {"TestCase2", 4, 2, 7, 1}, + {"TestCase3", 1, 2, 3, 0}, + {"TestCase4", 8, 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.a, c.b, c.c) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.a, c.b, c.c) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/sample_3_1676.png b/leetcode/1301-1400/1318.Minimum-Flips-to-Make-a-OR-b-Equal-to-c/sample_3_1676.png new file mode 100644 index 0000000000000000000000000000000000000000..ae7d4b6a420dbf799fcf162d9cfe1d26b1758016 GIT binary patch literal 2671 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 Wm}kXSMeD*(B4BfZY*|I{N&F9N`mXN) literal 0 HcmV?d00001 From a08c9b725967b95aee6865bfb0319a5829598e37 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 8 Jun 2023 23:15:05 +0800 Subject: [PATCH 0293/1057] Add solution and test-cases for problem 2391 --- .../README.md | 51 ++++++++++++++----- .../Solution.go | 28 +++++++++- .../Solution_test.go | 26 ++++++---- 3 files changed, 78 insertions(+), 27 deletions(-) diff --git a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md index eb8384a37..a43a9b183 100755 --- a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md +++ b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/README.md @@ -1,28 +1,51 @@ # [2391.Minimum Amount of Time to Collect Garbage][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** array of strings `garbage` where `garbage[i]` represents the assortment of garbage at the ith house. `garbage[i]` consists only of the characters `'M'`, `'P'` and `'G'` representing **one** unit of metal, paper and glass garbage respectively. Picking up one unit of any type of garbage takes `1` minute. + +You are also given a **0-indexed** integer array `travel` where `travel[i]` is the number of minutes needed to go from house `i` to house `i + 1`. + +There are three garbage trucks in the city, each responsible for picking up one type of garbage. Each garbage truck starts at house `0` and must visit each house **in order**; however, they do **not** need to visit every house. + +Only **one** garbage truck may be used at any given moment. While one truck is driving or picking up garbage, the other two trucks **cannot** do anything. + +Return the **minimum** number of minutes needed to pick up all the garbage. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: garbage = ["G","P","GP","GG"], travel = [2,4,3] +Output: 21 +Explanation: +The paper garbage truck: +1. Travels from house 0 to house 1 +2. Collects the paper garbage at house 1 +3. Travels from house 1 to house 2 +4. Collects the paper garbage at house 2 +Altogether, it takes 8 minutes to pick up all the paper garbage. +The glass garbage truck: +1. Collects the glass garbage at house 0 +2. Travels from house 0 to house 1 +3. Travels from house 1 to house 2 +4. Collects the glass garbage at house 2 +5. Travels from house 2 to house 3 +6. Collects the glass garbage at house 3 +Altogether, it takes 13 minutes to pick up all the glass garbage. +Since there is no metal garbage, we do not need to consider the metal garbage truck. +Therefore, it takes a total of 8 + 13 = 21 minutes to collect all the garbage. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Amount of Time to Collect Garbage -```go ``` - +Input: garbage = ["MMM","PGM","GP"], travel = [3,10] +Output: 37 +Explanation: +The metal garbage truck takes 7 minutes to pick up all the metal garbage. +The paper garbage truck takes 15 minutes to pick up all the paper garbage. +The glass garbage truck takes 15 minutes to pick up all the glass garbage. +It takes a total of 7 + 15 + 15 = 37 minutes to collect all the garbage. +``` ## 结语 diff --git a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go index d115ccf5e..84eb10f7a 100644 --- a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go +++ b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(garbage []string, travel []int) int { + g, m, p := 0, 0, 0 + cost := 0 + for i := len(garbage) - 1; i >= 0; i-- { + for _, _g := range garbage[i] { + if _g == 'G' { + g++ + } + if _g == 'M' { + m++ + } + if _g == 'P' { + p++ + } + } + if g > 0 && i != 0 { + cost += travel[i-1] + } + if m > 0 && i != 0 { + cost += travel[i-1] + } + if p > 0 && i != 0 { + cost += travel[i-1] + } + } + return g + m + p + cost } diff --git a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go index 14ff50eb4..aaa9183ee 100644 --- a/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go +++ b/leetcode/2301-2400/2391.Minimum-Amount-of-Time-to-Collect-Garbage/Solution_test.go @@ -9,31 +9,35 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + garbage []string + travel []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{ + "G", "P", "GP", "GG", + }, []int{2, 4, 3}, 21}, + {"TestCase2", []string{ + "MMM", "PGM", "GP", + }, []int{3, 10}, 37}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.garbage, c.travel) 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.garbage, c.travel) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f8fb1786d2993b7deafb1d8df3051dbdf7baddc1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 10 Jun 2023 10:56:14 +0800 Subject: [PATCH 0294/1057] Add solution and test-cases for problem 744 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 13 +++++++- .../Solution_test.go | 16 +++++----- 3 files changed, 38 insertions(+), 22 deletions(-) diff --git a/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/README.md b/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/README.md index 045a5157b..a0baefea5 100644 --- a/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/README.md +++ b/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/README.md @@ -1,28 +1,33 @@ # [744.Find Smallest Letter Greater Than 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 +You are given an array of characters `letters` that is sorted in **non-decreasing order**, and a character `target`. There are **at least two different characters** in `letters`. + +Return the smallest character in `letters` that is lexicographically greater than `target`. If such a character does not exist, return the first character in `letters`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: letters = ["c","f","j"], target = "a" +Output: "c" +Explanation: The smallest character that is lexicographically greater than 'a' in letters is 'c'. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Find Smallest Letter Greater Than Target -```go +``` +Input: letters = ["c","f","j"], target = "c" +Output: "f" +Explanation: The smallest character that is lexicographically greater than 'c' in letters is 'f'. ``` +**Example 3:** + +``` +Input: letters = ["x","x","y","y"], target = "z" +Output: "x" +Explanation: There are no characters in letters that is lexicographically greater than 'z' so we return letters[0]. +``` ## 结语 diff --git a/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution.go b/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution.go index d115ccf5e..3dbc66bd2 100644 --- a/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution.go +++ b/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { +func Solution(letters []byte, target byte) byte { + x := uint8(0) + for i := 0; i < len(letters); i++ { + if letters[i] > target { + if x == 0 || letters[i] < x { + x = letters[i] + } + } + } + if x == 0 { + return letters[0] + } return x } diff --git a/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution_test.go b/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution_test.go index 14ff50eb4..5f53f0f50 100644 --- a/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution_test.go +++ b/leetcode/701-800/0744.Find-Smallest-Letter-Greater-Than-Target/Solution_test.go @@ -10,18 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []byte + target byte + expect byte }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []byte{'c', 'f', 'j'}, 'a', 'c'}, + {"TestCase2", []byte{'c', 'f', 'j'}, 'c', 'f'}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.target) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8a287d8295300d96cce98990e59eee490cdb5866 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 11 Jun 2023 15:10:24 +0800 Subject: [PATCH 0295/1057] Add solution and test-cases for problem 1146 --- .../1101-1200/1146.Snapshot-Array/README.md | 33 +++++----- .../1101-1200/1146.Snapshot-Array/Solution.go | 64 ++++++++++++++++++- .../1146.Snapshot-Array/Solution_test.go | 19 +++--- 3 files changed, 88 insertions(+), 28 deletions(-) diff --git a/leetcode/1101-1200/1146.Snapshot-Array/README.md b/leetcode/1101-1200/1146.Snapshot-Array/README.md index 58b5561d2..51ad22cab 100644 --- a/leetcode/1101-1200/1146.Snapshot-Array/README.md +++ b/leetcode/1101-1200/1146.Snapshot-Array/README.md @@ -1,28 +1,29 @@ # [1146.Snapshot 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 +Implement a SnapshotArray that supports the following interface: -**Example 1:** +- `SnapshotArray(int length)` initializes an array-like data structure with the given length. **Initially, each element equals 0**. -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `void set(index, val)` sets the element at the given `index` to be equal to `val`. -## 题意 -> ... +- `int snap()` takes a snapshot of the array and returns the `snap_id`: the total number of times we called `snap()` minus `1`. -## 题解 +- `int get(index, snap_id)` returns the value at the given `index`, at the time we took the snapshot with the given `snap_id` -### 思路1 -> ... -Snapshot Array -```go -``` +**Example 1:** +``` +Input: ["SnapshotArray","set","snap","set","get"] +[[3],[0,5],[],[0,6],[0,0]] +Output: [null,null,0,null,5] +Explanation: +SnapshotArray snapshotArr = new SnapshotArray(3); // set the length to be 3 +snapshotArr.set(0,5); // Set array[0] = 5 +snapshotArr.snap(); // Take a snapshot, return snap_id = 0 +snapshotArr.set(0,6); +snapshotArr.get(0,0); // Get the value of array[0] with snap_id = 0, return 5 +``` ## 结语 diff --git a/leetcode/1101-1200/1146.Snapshot-Array/Solution.go b/leetcode/1101-1200/1146.Snapshot-Array/Solution.go index d115ccf5e..322b97b68 100644 --- a/leetcode/1101-1200/1146.Snapshot-Array/Solution.go +++ b/leetcode/1101-1200/1146.Snapshot-Array/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +type idWithVal struct { + id, val int +} +type SnapshotArray struct { + snpaId int + data [][]idWithVal +} + +func Constructor(length int) SnapshotArray { + data := make([][]idWithVal, length) + for i := 0; i < length; i++ { + data[i] = []idWithVal{{0, 0}} + } + return SnapshotArray{snpaId: 0, data: data} +} + +func (this *SnapshotArray) Set(index int, val int) { + length := len(this.data[index]) + if this.data[index][length-1].id != this.snpaId { + this.data[index] = append(this.data[index], idWithVal{id: this.snpaId, val: val}) + return + } + this.data[index][length-1].val = val +} + +func (this *SnapshotArray) Snap() int { + id := this.snpaId + this.snpaId++ + return id +} + +func (this *SnapshotArray) Get(index int, snap_id int) int { + // 该用二分 + length := len(this.data[index]) + for i := length - 1; i >= 0; i-- { + if this.data[index][i].id <= snap_id { + return this.data[index][i].val + } + } + return 0 +} + +type op struct { + name string + index, val, id int +} + +func Solution(length int, ops []op) []int { + c := Constructor(length) + ans := make([]int, 0) + for _, _op := range ops { + if _op.name == "set" { + c.Set(_op.index, _op.val) + continue + } + if _op.name == "snap" { + ans = append(ans, c.Snap()) + continue + } + ans = append(ans, c.Get(_op.index, _op.id)) + } + return ans } diff --git a/leetcode/1101-1200/1146.Snapshot-Array/Solution_test.go b/leetcode/1101-1200/1146.Snapshot-Array/Solution_test.go index 14ff50eb4..09e23e591 100644 --- a/leetcode/1101-1200/1146.Snapshot-Array/Solution_test.go +++ b/leetcode/1101-1200/1146.Snapshot-Array/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + length int + ops []op + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, []op{{name: "set", index: 0, val: 5}, {name: "snap"}, {name: "set", index: 0, val: 6}, {name: "get", index: 0, id: 0}}, []int{0, 5}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.length, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.length, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ab25093446370656434eb0a992814c7892d682e3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 13 Jun 2023 22:14:15 +0800 Subject: [PATCH 0296/1057] Add solution and test-cases for problem 2352 --- .../2352.Equal-Row-and-Column-Pairs/README.md | 33 ++++++++++-------- .../Solution.go | 29 +++++++++++++-- .../Solution_test.go | 22 ++++++++---- .../2352.Equal-Row-and-Column-Pairs/ex1.jpg | Bin 0 -> 16481 bytes .../2352.Equal-Row-and-Column-Pairs/ex2.jpg | Bin 0 -> 26921 bytes 5 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/ex1.jpg create mode 100644 leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/ex2.jpg diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md index a3b618ede..9465117b4 100755 --- a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md +++ b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/README.md @@ -1,28 +1,33 @@ # [2352.Equal Row and Column Pairs][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a **0-indexed** `n x n` integer matrix `grid`, return the number of pairs `(ri, cj)` such that row ri and column cj are equal. + +A row and column pair is considered equal if they contain the same elements in the same order (i.e., an equal array). + +**Example 1:** -**Example 1:** +![example1](./ex1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[3,2,1],[1,7,6],[2,7,7]] +Output: 1 +Explanation: There is 1 equal row and column pair: +- (Row 2, Column 1): [2,7,7] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./ex2.jpg) -### 思路1 -> ... -Equal Row and Column Pairs -```go ``` - +Input: grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]] +Output: 3 +Explanation: There are 3 equal row and column pairs: +- (Row 0, Column 0): [3,1,2,2] +- (Row 2, Column 2): [2,4,2,2] +- (Row 3, Column 2): [2,4,2,2] +``` ## 结语 diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go index d115ccf5e..af11289d5 100644 --- a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go +++ b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "strings" +) + +func Solution(grid [][]int) int { + length := len(grid) + ans := 0 + cols := make([]strings.Builder, length) + rowsMap := make(map[string]int) + + var ssb strings.Builder + for row := 0; row < length; row++ { + for col := 0; col < length; col++ { + ssb.WriteString(fmt.Sprintf("%d-", grid[row][col])) + cols[col].WriteString(fmt.Sprintf("%d-", grid[row][col])) + } + rowsMap[ssb.String()]++ + ssb.Reset() + } + + for _, sb := range cols { + if count, ok := rowsMap[sb.String()]; ok { + ans += count + } + } + return ans } diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go index 14ff50eb4..f401ff414 100644 --- a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go +++ b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/Solution_test.go @@ -10,12 +10,20 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {3, 2, 1}, + {1, 7, 6}, + {2, 7, 7}, + }, 1}, + {"TestCase2", [][]int{ + {3, 1, 2, 2}, + {1, 4, 4, 5}, + {2, 4, 2, 2}, + {2, 4, 2, 2}, + }, 3}, } // 开始测试 @@ -30,10 +38,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/ex1.jpg b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/ex1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98bac41c6431e8e69989b118a65da120751c9720 GIT binary patch literal 16481 zcmeHO3p|u*+kYmC92&<68KokWrKFsO6iJ#ygss`AoVG+nVn!5Eh@w`7NX|_{qm#+` z&_R-%(ilQH&WQ0ahv&Q1+Ew~?_x*m~_kR2C?r{H}pU3??b6?ke9sk#LBh5$$B(l}S z%mhNAP|$hs10ijYF~l=x&eSjX@PgmD{B!5>^3E0Du%NKSzx+WSL!$gBPn0VU zYAG~F6vZQoLdqcw1fk}F)lMz==MQQQSmQiC{`mreU_zk?GzZ1QGl!RFYSmzNAoxGT zD>_$fiH6ZUam#&tOFbntPsUv5SKOFaBDu4kzHE)7SMYp+g;LUsWR|Z`QeLUDR%@O1 z`VBh9n>L%6ZZX?xWxdPBcDJ3q)BXboon2hrj(YnX^YuIKA9Ct+XxN$Xh}a7kA#RWGn`*;?9i#uRCvDEniC1^1u_9cu-*TctjyA z#IYj95ozzK`BEH-I(D*K5<3#V%a(>`i=SYwq?-<&Mj%0PuJ|h3av5i~BBh18pIcfK zyb6I_ST+c>=2_^ruIg=0iyby}L6|f=ebl4nEH}cLyF&}dHA&^lN3t}C_1h4rc3vg| zRX29y>D{4-onKOxXX zVJifR$v~j6RKipIs1$oj@gH=ZuM;I%Dr8_x+*LxGo;tcqSFB%v;2sCdU zmK|m&pN&9h6V7GI`j1hWxn9cLZGsG%0czXl}QtZjo1m9 zXxLwSpaOw5uR$PXnREnFw2hm!0@GQGMDyc4qOh=z}Av)53Wq%&BW5CSC) z7Z`C;5lDeZ4n!cOCkW&)f=lC3o4il&`-%b=Cr*G5joHu$(1%Bcxdin7zm#ecS(h4v``# zu651nC78JgbO?P4f%pq7Y|Ewg$}*gpxVBq`f@kDMu!U}#tu@`68#BI(34RcByS!I1 z0^&?<+ZSs7&%XX8CBMHLfna6eW*TTs16Szy%?#gDJ|qb@ow(sMOJ3eM>u~>Wyr_8F z_qDtE2fK918?W|CD@C1x2<0%YLI)qEr<&?_Vbguq;j=k*#u>ZcOn6|f@#f{k6gQzR zsXV3yDe48e+ds@^ZbzUCcCa=AIUbBepc~&cWxYV*(SBwG?-+>eZp9}=M+MlW!H%ul zCh#6bg3Frw6r+c$124)9_IKCG5li&B@@xmr^}^u@qR5c?!+p%^!Rxo_gXNKuaS@y6 zm>9LT-FT8+b1tjLq?T+Cy`q!Y5)Mo+M*N+Gz1JA#77-sVFTJ+)bzkXHv#QCK&P@nZ zmHoc?omr}#;sNg;7TIk#;=4YNVt_y$*8z#>l1CV(D+3p)r%SU?FELP{ztd=U*yE~k z)+K$OwXskhsg^~iZP%XH_FNMU9wpw zjq%>{C!zPsJOet)DM12LV~QtN`+-lNT&Oy>lLD-BuMQa8)4)_)r$i`2QzM5Y;g`Re zzCFw*2M)8%dog-;SGztl^~iZ+=`m+VDA#`CBQuK=<*nY@W=&Utv&(hT!a~{FT8$Nz zkvGqWSjJk4Y#cIcxoy(5#N5#aBJD)Qc>4+`@%qyaV)$mcTU6i^r74Xw_L{Ei{G+v*A9jn4b*PYqX+VnuId37%=?U!7+}=# z6Ic2R)=1*6I6*Y|(r4yTyXy^@lDiSs0BGN9;_5Pf+o8Qr*b zdb%=6n{&OPa~qX^tePNtHwhDcaAe=@D^@B?Pug4C9hf+|vu4pTC|L86?9h3Bf)=3x zBSdsQVZMR81TKD3c9V`kscrYo^q;1#SG&E5v}A|hDzb~d#j#>xMraI!r_|px+*`0D z<9$M5j_+ODt>=Pw?=e<9^n>(%(Gn=Cld=eVn9@wNhUe3_mvwqXv56Ue~q6QqALLOFTP)F_64 zx-=qCO%Ck9tE{N2sBWxMSxb(7?8O z%4n#}m_78BCHmRM&Q#Nx?4)B`o67MRw(fP<9~YD;RsRr|VdkmQm*@7fJki?7G`^+> zCwBE(%e%y@KBRzKx+MrCttZtrEb13x_(IRjDWm`X+=do6e@C;sJ+H0TAF97COxELr zGD}LZXd&moqu9n%-yGZHT^6~hZcFK`u>)fw%(%746 z>Vj-uMtg76^1C?UbumYUU-@o>k^;76i-j~cpU>jcJyQ`N3glO>-sf@vmf>U*cN2$x z^Zf_r>%PaA-}Y!-OH+Nn(QJWdlUMH$P{vKu$_Sj<#B<67hS2Cp%?v$ znwuQ>53lK29-K$i%71>)OExj<3^Aez+mg!kWsnEE7(3CeJY7$90~U!7(R)uX+o@1= zMlM-2F~0VAP0zu1-GuQzA^d}LY zT=`e`X4on4AkS?1oOEES0{6NFHU?2bMHn~Sej=SK2z>jBe3}PKZjd+{I$0e5r`80R z!VCt=xEGe~!j$U{V_@G3nclLxMfmN9Z>g_+{qg$o=(iV_sJ!nju8}y}kQ;b?Geq!d zBbF#oE9?tzP{oV&{PL?>1M?5++MK+8WKFf0g&xa@xx;;k6p9gKYtTJPWSmb0U~ZJ9 zy6E`-7}_cqYu0_Od1R<6_Nm#jk9&6g8ZG^y2r1w!>j>eoGxKTFL)A=TX#iJ5W^n-% zft+=4ZSfu&jbt>n;x@ZT|7g`V+a~KBd_B1owwO{S^R}rFwqX3sl29%Fn5xw0Sy}TS z$W0DXeZfTm*QU+J)15oVL)oqw+!s2-5d#H3CEBfZ9i4DAPp;QFbkMy9TJ!^f_Mt6< zl^6jjr+gm3CcPM-(RHlEV>h*n(Fe2R?fzDvjK6S!x9JsIKl>;%G?~{M>K6^s& z%n}zzACKjxZ9iFV*+cO@nHZKv2$>Oe{u3&K2o(Qs2^CSCQ0!qM>_~+zD4pR5bgGIg zhQEzKPaOuZ2U*xw?1xhi#sgE^WKZ-4p{adSjtv8%b88#|t)_50Q@{9Y$~OP!%$N}p zDuZObm)IzdKu<^@X3p-$!+tL5*cq4Jhj{6#cGVsmVuHI?{x|`I8Kp@(73&IjJ zrcy3~FUJzgzK=kxi0GMrOex!+{QtA9#upS6?}Aw@km;0;a59VK0uBKAP-2O5K^Qea zg<}!OJur2UxW72IpW}P}f%e1|gD$5^R*iV(B4cfASD5G$OB%9X0MYf zeWY4Kq2EFvniy+A;X)FVI!L)Y+``K^e!`$meob%hv958?C@%<$N1(5>x#Qo+e3R!; z6tEqU#QAJdhB0>`0OwI;v0fG?f}MN>P-~e~?jl`)J&RJp0E}S{Kx;BtJDbRg>55R;e;P?7b)@t;?@Pt&rFg)G@0G?bsz1Mw=`$g)=LZI3F z!_HzIX;(^+UiRN%CcBYymn#k{mJ;bZaX|#>dOcYhN4CuW5|gj3AP{RFET~IbvpaEv zUbE#KgLgY3i{vsOy6R`HdXOfzdJF(=d-ZaYRx9%i1Bu)}42mo!TnyM3b%5+tg5pW& z_NgMvCJ!3my%-bAc6($K0Rcq%Z!$Hz6Ai19OE6)0Vd6oma34XG&Uc!vnrYG5=I*M# z)l_6%=?9_FH)S?TJs17P8JVBd#zHD!{ z;amc!QIrS~d+rk704?$8|BRn>gknEBV29=-5P9^sL9>t7h#wJXV+A2=MpXUV=o~AM zSZhUeR%czpj!t-f%Adcy^;?h6hSNa#<{RPE4!%bG9bb^+mrz*ZYdttiLLb@uFF>sT z9TYQA_Oqh#onHOWyi4D|uI&Eu+Y>{>%Ub6ToJmz1Ih@aHD@(jUfC5N&a{P{V zg$*jD1ZdLhPLiU+vvI2)QNq;==SCRcS+tDGw3H1fQWh zaxrBjduXyUf(<-D7#aS^jr1+Y!|Rd|C~mBfet|1clfgED+iBP^9dd~|Rp6~VnclLt zNvBKiZt3<|Y5RJ?1qkHl`3xe2*8hw>gFPP{L!gxwoU4?f?-8h>`?DZ?ee;VoYqdL> z`2LWUy8Lnnsvl&^#WHXnK+=AoD}@Fe&_2bL^|P{rAKltiq3sg(q#&khSCnC_-eqig zUYve-dH?`TgRhu(5hDn)bfu_bAvlRvoYpCucBi5DLCnp_G>->GW%dCvh(zQrShr*D>??EMB}>jF*1f4@TVpEclD%z9=z z)E^FpUf#X1nVYN2j@da6UxaGPG^o-XCIGx)0)$dWC{cso>%@%lDbS z1Sw?~hZHi31qfD&>sksL_AtwTQD826W%pnKi{D1t(JDE0aaQUgHFNP-v1acQI6jCEH!C_;U26CSS3e<(u`aFB!4&zz4|w`+ zO!QGdW7@h%dbV+_nHC63w#)RX6810DSU<5Y`ikb0JQJNW?<7Y-*cnKd$F!6&kJB#& zKXuXCeTdtXy`{+Dz$iuUP4q*Fq*b_aCwqwLKaEtfv%f?!e+Srv+qeRSjFfSj(m?Ks zeK*?8T(kY|F!hBGoT9yKk9k+LVRZkw$`jmi24;U#k11PfemaPwWNAAyiTR7S!o_RI zMzE?)6w_YD<5aW<~nO#8nL8Q#y%-8JYynySPnfQHN{9ZX2ea z3q71;5vZ;v`YiuxGAV?;rM`Fxu|$cx!A~VnyvjZ-oGab`{G~yhx7|(`M{kES ziE2G zS8wH`rI+rprm$k6aG5<`Y)DdLH-Gh3BL8Ubv>iJsMUM+KY{@ zNHB(%?Qz(^nA4u#Ouw(P33uh%!z}_neH!>2`~t#;0Dbt8{;2$X#?A1~%$!~FJ^Cu3 zN+apGFr(}*8PA^6YkIZ&hG%S|GM^uU13A%FaRb_K@wb4i#perX_L>$gtPI)~mIy@foj4>v<%%O3p36MyfSkHZ&lk>*ROk!cVvC@On@@!6386 zo0xv^X_7@wKUT<_IynE@jkwYND_3}rDJ@UXJ#IN)DRxUAE|X*l+tRU*vAo`y-otbJ zaNFn=1?7t(&p~Dz77NA7J?K)B4X~=CsZFe{@3A z*x>Ya3e5QoyMHpAzm(9FdB%25mruUFP9;cRhVnlb+`hc|Td(+kugFYq#q@OsRP^6h z52xY$>Fd9&1Je&qU%wG}WDify7LOoM>-4<)`(1RYAUXNVK?C~hvv=n9X&)m-;pkg(bT?y|MQ*vqL-3_iAc-NZPE z5InI3#ICYh1d2v0da(VEaA;c_fH1Yfvz2VW=o?=n>jWR4ZXQ!*QFU;wL@V?}b;Rq~ZJgof zsWvS8n`if1L~S6hT$udnzyUFnj7ps zy9oJzRwSP`#nacnh)JFzV`i^T(^ON{7jVn_-|@B6eJq~>tm%sRjKp%p6*IC?exa?$f)~tS|{|4a(nmGeb8vE2$HM6yCM(vvvMsY>Ap6z0$F{&J3 zQ#v25womH5jKgB93Z1L_aywm<%`PhHs+paNAxs=}l;-VH8UnS;k&w%1T zf-2He&$gl|>TK3oOGV`^3EWP)L_KN&@jzaRUfi0zqPPe_HI-4Rai?# zYf84Fcb>Gz-8fi;gB8bvwJ`jIYRVx>I1MM#Kki?cRh?!Q_9XPpI(a1ODRtgMkFG0N5i|KzvHoK+ zge&O<8>uxPyXU#&)}P#cPj^d+bbky!jVM>F_91BwR}@aK^1nB)ZquC;F$+3`MmWtW ze2wpvL)x=DsPHn|(rdVigy?c~E4m`N-92&Hqr}?Eo?YGJWMvJcE8&oIH-n{3N(C;X z?b_QKl!WCPF30VOZ`>NM($24Nw9<&w6fNd=7DtZ`^Re)?xo57gzO68JWT?~lbcFJ& z2YHjqD=6y3jzoWu7Y;hH9NC*Wsd}bvAR%l$P*!!LVtsYg@f}q{P8ll%cLCg{aH-Y| zmJ| zAAzS^MYo={hr?K#_Oe&M?xwsX$iOyS>7fFST1F8iFk)Eu@Pzrk>T~OMnLZ0POGX>N z3IhpVZc>4@`$2Ld2A1zKcZp7L)Gi9ldEH# z7bc~-G8wI{t%eVFO2=$WQ67a*_)8Q)Vn;5Xk01m~nbX5g8Hl>yH#wbd+Fi!$dqk`% zTbFEmY=c@=tVN(JYcaRI7{kfa!ihJ(FP3W5Gnkb4&O+_d%VpsTaaSP$Z^eE6O>}_O zj7|5u{xL*#zaOQ-o_O-1Qm$XLO-#zm(X%T_LpL_7J(1Y5r`qxrZ9AVo#0HI=!FL0! z8VO7NnrOoV{T&~fxehiDgU5HAUh~mHb;8C|V=?qJ_B+Ls-DEe80IW@?Y=u?nRp62ZDq7ux5AKJPTT89r~v zo~LP&JH|yEpsUec#;;h@F==$|l56U;_(;{o zCn_5{d)6DRzAO5j+Pn?(%mNDJv+f8?8Z*^lL8$>6YXgicMGI`snZS6wUTpY;x{YV+ z{NeoWGnk?B!ifpGNvlU&FIT`Kn{E6s*gOe>RV?){CuoXP9Pa)xMPbzWl23_MViek* z~SuC}XyShkxDx+PL-z)KNG z;4Fr#iwD8Z*T=iQak%QAxBW@^Rybvb1)WMT^ocsqG)0?|7xt2*Q4P=$WW)izQA>v} z0Glbxri@V@u&5`x`zr!bfADBtBcA>m3y#U$3BZD;o0KX9imC^BzY{n`c2=nje2nRiV+q(L&nsYG54L<+G1JPd>IE_HOjfoucuwn2N2>*Njb zmevXX@)5J1r%{&cQuz**@7tmjf;aplXEXmXAAeHw@xSX53IWI{+1BM-MheI0dxVbG z@x!cAuF9+Hj6;P_i18S&aQBS;(ZyF zx0$U)M~6OCylL)faD~RvY};BGKNxq@FFD-N#49T~&w7yp>T1V=xEJ3(MD?wMRsVx~ Id`QcG0eYeXwEzGB literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/ex2.jpg b/leetcode/2301-2400/2352.Equal-Row-and-Column-Pairs/ex2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c536193dd811515a5ebdfd9de3813601d4e25333 GIT binary patch literal 26921 zcmeHw2|Sc*`~Nf6tV4FmD2h-LQjw`-%PAsBs;LwqiHIySQplF5D9R{FDUGa!jD1OE zZ!B465XmxQ8N+P5xmxwyFbd3kvj3GxdH3h)aE2njD15fT;^ z77!4T6cH5@mynPUgiA?Fic2pRmk?jL35*kbhl`t!o10HuNI*#ZU;bg2LZXXcBd|73 z*m8(N6vinEV^=~52!e5g)-E*orym#xXd@5rB0hcrP$5qQ;(&2-a&U1jv>Mb71fN4( zqTGv@X>R2a+kJ$0xrg|=^RagpDQ@MxkMB9Z3l~E|!!CtK#9h61JwD;a z&BVK@_tNgCKX{mtos*lFU-0aCVR=PmRdr2m-OJ{d*0#5V_Kr>>sefSb{m}4-5z6G$ z^bB>DHaEY}FBru6W4FHa?3;dxf_`yuadC3-F7yk=;R7yCQ7-OfnmmiQ?&dw>A+~(o z`9tXoT3mC zVp`uVf!I)RCb|_X#)cg6G@D-X6aAfRXweXrKuzyrLyfCX6;CLSqHX7C*i-r)2IE>q zxB46gQ8Z_Fnu-&X!$1K;d=|!ruAJbc-j87HWkaFy;Eth~Mnw`YYsn?d98b*uVBIYg zi?I;8uP%{|8^_X*#R5kR-23c@aH zFFEL5;noiqIZ2IJfDD3MZBI_b`86Zsu)xmxeC- z)@Gc}=3Ol{vS*Wy3%u(-bda&RAVPY%k@}=w-X;Ewl(@=1$m}tWi`9iFkgCj7J!ny` z+oM9+nY5rQQl$vnm-W{8$7%fLM&9u>30fu_ z5?alMxCPlzib*A$p)10MCWR2>=3cU8!#r2O7B*Dj0cS%Bjl5$!|E@0N!-k$>$F9=N zd@HDL$e0R5M2|x2>ajHj9n7?pk!1PYmT{i$P5ze(&b!M!d|BBa8+$or5;osvByPz& zh+;_Tu})x_)oh4bj<->p#IXc!vmtE@RzHS*1eI|O+HEBMYZq)1$B;mKOF&!*(Sz?I|P#CJ1y2rG1 zR*fExx$G$}1MiBM)4@hzsViNP^M*PBkJu2`9yWBwL8y9ZD7(y|C{(FkbxISmghBgw|5OP}Gl6NFc zeD@Z_bqx8y#N1uX>=HKA#n0S>dx@v5@nJL}>CtRxECiil2?G=GYZvcJJb4dhP7@i9 zp9OoMB`pm>Hje@CLs7Fp3AdzmBYxv^DA48~-TONFEppNoDT5sS;Vou5)Md_=wdf%m zTA4$_(&fhS)1lQR8O+C+fw$;&nD(2G+0X~UHZaqo)~uaQRY>Z_Zp;UvXef{k{euU< zP}eb88jLhuD(L3(7&c@PKQsUE`@(71{KJ28i>cd~DK@mN>eIA*9_THIjBC4%AT(GG zWoPj3!`aX~cQ$lVZN>_(%7*%$_fBnRL*u$^C|_d!;TCQ%3!g5D_r1C9)hlVdWK?B| zUd;Aql%>@Pa%%2r`{R_JCpz~BE7fwHFR`hEZgB=#NKlT+rZdEq`y~?t%{q0gY}Fl0-3cnp0T;yf0Ss~3o@68qt8 zd}oy8N3MrnB84^U?r0X8KI>3AESSyg>q?k*4B}V0`{^=RSl6j+s4kqblMOv{V%=V? z0!j{GK*2gtfMwlYGyFTMaE@gBbVq&_+$FqoFKv}^QXfLRJ77HxNuxn_xv)!N-_d4vy0sBJ-xa8dQ!~TY7#trZNPSlxZi;6f%Vq= zs^cZ!mcOf=3WKU-Z|ScKC8-AYiX*xw1Qys zd`9RWXhYOz%xsJUe6h0>Rz`gqFHLi>OsF?AcR@$kP5hfh@^6}p=uOlh4m@3bQIFf(Nu)9KUqHnRWq@^|e?FUW^JjMF>cd=OT;l+QzK zI$!!S`<7rIA^m;zwWfNlDD@5ErsuDr|0nt%VsfBu1Po5idcUN*weoxqsw|esWdBmMtDFeyt`_78PCQZsS zIqjLxkbQUKdu69JgnOM40>yeBT#X;4$kONz>IrJ4l;V)j6&_Us(&p#cC>%cIWlQ?IjpUeRQQ(+!+ybw>x6T@yx)EZww_-IIGrB6KN zz_u>pbnmQmK`GFK$sZ7yj5wY`Lxv4BZkA?T-dKL*Y?^Trg8=t4Z zGah_iIWc5p8PHP@no;N;ksT(YPYEzhdP z2x`0SRSuqRH%B*_rrAlpe{X-y3cgM9c&!cvRfY^TPy^jfLN^IfQb|j%e!wr%7Qp5V zcdA#8747Tw?0PU-K_TV|xf_8f+N*dqMXm_R`Nwo9?BlIX@j zYt*oz^m@NfI{Di|h`HzUSMEmCQhXwF-C@2?RurjAd1`@(?JY-KBa1$!cgdM*TDW^9X%5Y6$&dui$nVh@GPeRg%3yp5=M_*6xs&RF7<`^?QYQ%pj zwGrZmPJFgs{zQ9)_Y#ZHvz%5yL|lw~5+KvuPtdnXA6a|gfU`SC1GPv2@j7bRvKw*M zmudqzbKjR(WP{GsIVa2J(0MBn7v)vRLlLRmN>4))>YWfX?ZzLjUS6NC)jG?R2kTuS zi8xUeLsL~AlOnPqNm^=|51NCvGga02{@hZVOv4G^{bSG{Lhf~?#XMVi zO2$CzxiNjo$b9z@HssKas-8u!Y|;rlt~0!P`FXEcQOz5PR#n9{he{4tYc&!^38UQ< zHe}4aUn2g2rQhh)ZL*^Ur<}}P(Ap$v*<@;ojlF5AIM~sxxCd z2CUkZIh3oc%GXY8$kY*c9n%+qopd!=1=RGLkD%z}3C@Z6&t?NdoSDIfTq-D2)VsIQ zD)uf7i&f zdg{$3^=7(i8cXE_z2*D}#Z6!A3U0Iws}w(Zt+!K`^&ZJIuqTY9eOuJ{qpAJL$V0Ef zl)B|Xols8MS0zd+geg5iNSi$_#E19cRebSi+8A7S(3}V%!W?&!ddN! z>EWYZD1nh=L?FNP%6Rh+i??6d@do1FB$_qzktRFu_gU$GvK3foa4gL5zMmB5Eim-h zc}W${8LJ2t@c3`e1PiUf9 zF8cw_3_mc{+KZS?iO=z@N;bF&e0!Ftv?QP3cPIxSk%bx z&jY}=`T9VX!U1OB*Dg5ND-VFn;V4E7GcE&Eh4~I-UjhQW7sQVPJ1E_}5cyjbp!tk{ zba&O?JYEI{Tl^6?i~k2IOVVb5Re-0Z)Aa(B3Fu|MS5f4^ z@yOIU`2g92gRKcd?;GRRs{Ja^O2=kd>D!aHJoN~Ctw@72j53uEwyio zaY@I#{=vA^%Vg6ferY)m>bF-OiQ)3nhqthy-;xAizW$z)FKcc+4d`#Ka9RbKP-?J( zayFf0!P#)1hWX)n+o`*`_+sZ|mF3O{Ep_e&S6TKg=JANzM8LA@*$~;n;u1bDA;=pp zwgvw+wx_j4?Jc01$ zHx}95D;_6XE2$4@D5yP`QWZY!iyOZGy>uJ~I*<4g3xwscGY!LrE-aZ~8K$!29#ZhE zP;403L7F9OXkZibAy6$6|1(t|W7`}0o;;`PVaj&vBgnIr3Ht-b^HP~P4OsIyv(;U% zo0M;#)w-)${xW6IL}5k_+cm$S7XG$z7A&hjbm08k#`)TB_@8CtESx~Tb3K3Y=5EA? zA6kEbh^y#bOv`>>Jz-VQIQ?NpMt#&eU`l;=g35)~kcld^8HI>BHr@{+|P;~PEzb3q6 z!-Yc%l%6arR94kshh2`FZi0K|S{&Lw&csNt8-}yQy~2e{S!2pfFm90+kn^NAFbzwj zUsI!9eCtGeyLnVUCWrYy3_-S=bz5k|C??_hYW>|Bq?$5Z#39|bQ}zH;67}|-87^CK zEc9KE@zb>%=M01G_MCoT=?@=XhgZY&Wl$;mS*?hiN)h8L6-%~<%ehF{7>#a$c(?Gn zFs;5=`tZNN{(g=RM~LKFgvfIe0*;XM^0J$>T}_If-8x3XR-$=KC`&xv*7^8V zvs|axI`vmawwWnE#Jxe$)NL<%VIfunW|6+`9lM(J;m*Bxsb}MxE-Qww&VMkwK`!~; z0AUzk-aEJQkSH6<+Kgp|?|?==d$9k2(_3xQiAtuKxYD;`%6`y?k*BO%$8%pJ_mLT* zI&E3P24a8s4zTvw+2_hPI6cULWHp;%%t(i-~&0{)uij7z&)?%60?0qms1}I4!l<(60FF)2K>;7!f-fyz(k-$J-uy)o$kkjeGmM zv-UX_i)x;ii$AdH>Ivl9zGRdAj7D02DytWfD^=d@S_*{CZsN1)&8S+sq4RvmMQgaK z@B4#~-P_^GD;jvC8hM)$9%sa@Ob0c?D~Kd#w(AS9n2lgN-q-3vIC7b5L;!rbT!L8!`CzwuNsHF zQQ_$R32;FCN}sM_%GMx3CuK12EI=O4x&F=qFs0b-|%?w4(nb zE^O1;I~l%pV~TlC3z{?UJu75RQ!3P|WI3vuS1Fy|(tpa|cF1Wofl}0OF?yYhXNhi> zqMA|eXZm<}&L)Q9*57_$wBp@8qUYVlF`F$JQp$HW?<0Ji5r@&t=_df*BU+-taG*Kh zeDQtbIpo>BO)|T%sUvIO-7Ab=BU-vuU8Uwd3~l)iTaLG7L&tD2$p*BUJHElQHCVnG z_Yhmzz*na`yGH6ZEvY)b;^y|J#_d*+5{JR5Vp%ehrXn?(N73j{ubH@TNRf;RYuVf6 zB_l=O^#PaJM_((oyDl!<^l`-r&8;+O5ACDz<8?m9|6H9#?s!Eh! z==l2o6K!b`})q+_K$Ke+iyHtf%LK+?FOTH4oLq+%yhJJfG^o11n2_!fW-s@ ziH>%c#TIV<85LfU-pgW~qXUK&WjK@h4BFkb6%fgS-pdM9B5!js8QW%VRX{~J@T%bFPS? zk-Ngs(OE>^w^V7WxdcyMbKT>PuX07FTj#~1oR-Y7_cj}0%`5govjeiwy9HbB58HDz z3sU-dHspp1Lx>mKK4EB3)d0Yx6QFgxm`x3QQBtEUZc#ghamD#x1?FCtdbJQY2 zUWz;v#gg}pG^PZ;cu^DjWYp1orqFWtvUYRiX8!Zf)((g)8nAtjWr)0=+H-{B*P0t< z6hmLPYNX8ei2tzo|gILQ`-jhUp@6A`lbFasIiUDI=$B0Aocv10kE z`+Bxtt$n#w(Q#()@H^WMHk6GWts*vbm=F)*FHFnaYh9yst$Squ<6%kju6Rpr~xcDrZf0rBc4^RVs;&puP z&$qC^Zy*JqzxMg{UxvUl@WkQX94V%F10%%+%ZUD@r+>*uX~O_#0v8ha62RWSumr&} zOo0RYJuDUd3N>wwoIIa_nbbj$r`#;87b|!Y^P^j| z3=X`a3YflXfLUG{<^;F?>e(iY%}c090Z@ArFcO5U*--4GPp*uwp1$D8AR7Wt#w7$z z^XY;k1DZk6{B%dF0F4Kj6)LjnY)BF4T(~jw27dTHW{?w5sRmpoalkM8bpyU{WYA_? zmV7i_6Vvnq8+ys}5ICq>F%{rMpfSG+JGZ3`IVW5E=(`3W|Kmq!5b2KUBJ^2Q$8;cT z41~z;mofPPW)B0yM&nT(Qsi^V2bsmVsd|o-a^sP43e(ZhER!;Xl`NkXU_C>875Kaw7S7XTLY$ybqYcbl<$A&H)QX(*p z9M5z`oSf=wo>=WrfKr|Gl{)$&C+lV9y}=lzX*mdC+n6`H~do_X~u`aytoZ5XSzZT+d!-B8?IP(49YvM8Gf z#d9+PNn=`-$s4d%z^D$J5!(A!t%$xpWH7kXZ1;iHcjMBo9ODqy3f@GBz?5x9_9bJ5 z@va)d^MuIagPFdmyILO?Z(V;~ZvTq5T+17Aot>7IX70cf+RZthD5CwYy|(c9!~vMnY9gm-{>YbB)o^V46v~*06$&29e~A4AwS%A zx)`|mzE=9@Y`<&40+{nvBe%!{ANn_%_#5$k2v`%}H30G5*f#QJ0LRgP{xCfv;X?4@ z#hR2<$-&}Lo!%a`BMe#|3&n%BAxVqOF1I?iti z@1MBb-=fx^-C*Co{+W!UZ|^;c>#PB!>waZscwz(V%Ii;NrUY`}Z2&Oy9Bva>SK0|} zzsZzOf#ZjNL6Q39L;iqI@0VX+`2Rw*6u2wRg3?lokjuU4tpTIqc2aa6EAfTg!oLVg4mQ2P z`@>Z9ORb3UM-<22GB_QahRSv`l!-AMJqO@$SJ@|6$NZcf2biJE=2gqCup#N_n>Wpd zW>1*azDBqFH2{Z^#FPd@oRfMN#4R4DA zW6~^DsJo2~xoZT?BP!F$LKBs0ri?ua6+8X4vkT*Np0CcS*LrNMU>K0D5#+l87lz8M-t8UG z&9jv|oltG#-YS{i8xN_Os|;MpJ$oQ-H15D5lDYq&O^NS30- z-tTtFd3IUAd{{Z_+^y+-tR^}CcB(*}YtN&}Bo==-U6`RmvnGeOkW4DZB$0f*9V2Ty zdhP6L*^txo2+OhqiegXOf|>6)1dfSaK%Hcj0&FM`8;Qt9RJbpug*q0tz0Xc;_7CUN z(CrvMo^L0e{J5U~>E^nXK?XtphCABx?RB&zAJFQf+ zT=4_79eWp`jB+FZJ~~>e=Lh_Z6DWo|?K|X*v7PG+_G)U01##t6h7*{$9rLS~9y9Vf z{IX)%wE@wOsM}bwr3OuTq8#|Jy(zlU#bU%HcV1d##p%@}CCTGi-P@OLkFAqgf&REy z8uH}bP>b6NKtz)O)3+td&~=*jAFW?Bk$dty?sU9Xlst1XcB{6F*=UKs!t|cqok0ez zzZj{{+^>I|X_uuR*#BC97<0iJBjKC0JJPH%_kryD@o|Tshz*c%TKKYUm-himwS+@e ziFy-*mw4N}(m7IH*C_K`1!|PmoVC~$#YvU)cPC;5!4f3f1`bl(G@(SkNnR>p*`pfS0 zo=Xfk<8`iinZ!NL2P;*|cMR_09Ah!j*#sSOKd~VUy_lx9gNzN)e&!X(`@=;;ch^M> zbIp-AHR`XR=Nw)`{QmD~rd_vAKd*S|1kk@WPIY&b+BksSGBjU()ChYv$s zSI1CEsGQ{M3vP4{X4VY$@*#zS1eOHm{2K0<5N-N-`txy-@#vSLt;cpT7x{#EZi_`Z zp$S;N0CNg~dWMn^#87_R%%?X?p#L^V3T?UKMRUeri&}YW!fhV@sr_dgVae2~G_bKb{RK@1z@G2&N$R zuTYh_3s;WnG9ePic!`K8jNnNFbs8W$Q*0w}c9<;pY0?jSoyHcWqTPU4jSsOOFW@BO zfavT{E5$6;=LLuf;f-%H2CYv;D;N3!^jQ#@y>H)wf)-JeQKjCQvU+haF#?(os0m&t0&D_?C=S83M2 z7cAaixE7I$2%H7k$>$yElBkbD}Np!cG04O3nO`uG>Y=okqs$`cx1$U)JCsioTPWgpYO8&)TtG z`yDt0CkL35;F0^A)z8YFG#aUb5D^~D`552lsc}!y#R$K89X$|5#awZsBx}&p1Jol~->$4&V zg^!zVJ?h!vV=6woXNd#vvn~FFFmxFvYdn?wlJ$`^Th(EYqTz9p&)LwsYvm@J0*E}cp+(4nfuhq(A6n>cvr^oDuhW@<|er78C z={#h30@4NF?x)e|Pr_B;W$OBs$$jLjk8~nF1P_fJ-WAtp_C7rxy-h2xa7gaV%+jC3 zQ~!Lp1eJ(Z0D^m?i(gFTX8)=}RE_J{;@Lg;=P!iZiPWjPVy15_UlwH8PaM7_I4^vC z-VVflp2Sq#(+4uo#E1lJvIaI(&p%&8-NsDx#&(32`MnLv4A|akplI>H1>t61PxlGx z!o`OVX5=;}XYBHU)%HhW&;1-q!OwWaJdYV%h0k?ozQW806ntXne_iwwn|vYif}cU7 zQNWf>DFX3`U6oid^%BhkG{>pEMfT4!`x~R0JJ(e|;CQvB@s?X(h_v+598}6Q2$85^ zY%;9DPJ10%4oq3#AZKLZ?qVG9?Gu%V?Dr2z{x4if)ek94buJx_P|?Vg=gQN}iK_^# z>`?ZVbF0=HaQHCtGbIc#%KkJ({0(#bZ^}Ce1;7Ic=3k+_e@_Qf0bYqAOq&>3nK%#~ z`Cx%xzrcw6s_>h)|CMz{aQ~cBUIH;6BKsbp$jw*|z~<>^N%$}nv0bR+Y$zPdP(r#) z1|&TIppy-CPd8T0y+^t`*&`TTk0IOOXpZ>v1~N1cHpE}VT8tb;~9&>kL+K6+#Ga&YR@*{}#5!VoMf&4RipR2 zCi_>YxnHlDIom#|F`!@gb*cAhF_Z+B2zCrl`vIAYCz&%dshI4*C-Zu^nI1#;4lrDi zw}zsQ1|cyIzr?R)xS#9 zFadb<$0mUL-$_qI7-33w?8{+dvuyjlq>wEwZt%!kx zAczEDQT5x5kVbe`XVdl+i+B$*asi{gfjCg_41bN zaf?$rlA!u3o%c$mmo}zs1I7s-lDvT#g_d_kE76?$*pP^;EvnN1otklCeSxl+TkEM< zpIS=%N!5&~WRCNVwkf}ZX$Jt3x?Vshh-LuOwfqpEAw=(HLxQ&fq2N+)1+ZvVjACeQ zewpHci1vT2<|N3}q5}w}@{JhB-iZ0+n`CV1{MoeQ#MS%XznyHUi1*mZ_0UO8>C#7O z)t99rrGS`)O9TjPERqYoG++la2@nQoMWymml)Y*2$Wv~q#c!uwUF+hOIXRZEom3RL zbNkJ^eszm8D0kLxWn}^Jn!p3OYXNlH?oI@ObBn1+hD*%%8>$UNwE~U!zfu*igE?w( zk+q28#1OyQKNPBi=b>Tj$UR9+Jas9;vbit$4Wa(6!eykY)VAAPc`{HAiUOw6z7 z00^jFmW&<%2u1N>KvtOpT#u50Bwj69glSr`5EpduMGPB~#n~(bV*fAHWQ>ptE>0r> zd|GxY)5}6=xDyjLZGW)G_;y-nT3)eUvG&1y;~!v+K^D!_pGDDOVGE${l!MaHq^&i&0gympHR#gD%dTf=!>?z(DbkSQ03 zNn7g|0`s4lNNk;RYJRBM{n(=sI%_63!fdwGDFNUF3Y3^@K{6x_D+nkV1@h%^^2m@a zd9XSwagV$bt6fy4^`+ue99$t7zxJ?T&=q5kTeib_U$WZ#MIJ_JbR&|y$2|hNN|c8)-Nf z6^<12#)o;-zRdJm6a67bK1O|~;2J4rV@;zhQ?S|FezT8xPHXPR8#pg|tre;BJ&%yw z)51^_t4+a+6y{~2g3p}T@3V9LcFHb^$@DQ3;0ctbdC)a!cZ!#7zMn>#SfX0pe4=oh z3LSalPO8|B8va*lrZ$4@$CaS13J9AfRFa<$L-J^Y31!8Ln3xg)-wS1L#pEJG@KZy4 zx7;U>1%!I77~s93z_ayt6 zRe10IDyuzpR>GXsVKQaa!dsW;=_85VYUO^LpIp7`oS$f%;1aCouO=-ieROxDstN>8 z$&{r`bS6;~$u*-mayGpxkrC+{*k0v?de^79fQq=t#+M#d(p|0Y{=*J#+@}mk*oS40s$$(T6qG?!;iZ2s0nUGXr#wpV@S@ zx?OBZA%`bqBeJYiZ|}A zFd_B6s0tr!j&TCcMZ`Y+(x`X6f8e^&2V!eumDZInd1#e!;PTBV`L=JJ-s_v%#L{ zp1cKFft&z1L&ONtE>PD~#(FOuE?D=$(#Yq2_m0#6DYTa}BEEa8XOCTt<$x_nh`C!e(;xnnyXDVhF*J#IwlJ>0|?uxxo zInvMDIMqm52qYAKwm>Nd?DRp*0;e40(IYX7F;2eAP4Ch&iO>4CNbGi0P?3Xpdbs_& zUsU>>rC10&&Z@oB)H<*(_KHcq+8~zZU9-Sc-`>E6)aHTHP>IlbcJFEDx2N~pZ_n!5 zDqAJ)+9Y8N$(O>mh<)Cnf0|7JD-H0Ysoh~UA^2u`!+MmSx2jJcbf}#gY926M$hNVO z;IL^^OyY_+d&m}VOTZENTM|D=8~~CAfbHnk(4J7*o8wd+6H+2degkNZW4cx9kNnqU zdT?DeNxBv}>$t%Zem$l~s9_NG2%n7~#q>3Fz>NsGy}T})#?yrJJeF3yN*sJ;m7TrH zhHtP+np5yhnKI%0K|~d@BY~J+jhFOwuPo6fm%I8A!tBvEJqZaSb6lJ1UYaa_6#Y_I zZY|@rU&vo-)=10=&`+~Et}w~SZ<6(u%7kb!(PbOvqEz>U zM4eHDcJXM=&!9A2fdE>_2I%+p&LbCuP$gk@cJaXjriDFe(&v^&YVsGrY?YEB2qXlo zLxWs|a>!%79ZAH@gbT&XD0&r5UB&@jMIX{vlIHt@WS#eEsGo*7Lm*g?+6N4Xf0EG` zqokV_wdo6y>=9zl)Es7_e(5pQodZNcSYuA~(gBD&J?H)@IqbKE zKP58#(QpB61fc*pOnBD`fba|%*y5!36~faKDr&vFa@sCIPdNJrF9B*)ix#v zSjhx12BOG5EDA!a`L@_l+#>=wbdVx0apAZ%1Y7)t*Qf9JoV@J4wfu6B-%JV|&WtJc zpszv$_6*!OHZ1@gj?+lyg;4mQ#{f~rhj8;3jDxd!7ce4()xlNb9^3)e;?BN>hSnkQT_C406e_k zCM5tR|5pCmUjVe=DSs8!?VFDLt61>&U;hooO~TPu!AGt8W4Z)b61|LNg}AWk2AT;b z7foOmdFb1-ny3epQP%};)?Ar;v+0S}8+}fev=p_64W)uK%JoCQ`05AwS$}k@S8%Yp zdZ#_`a{(W*jH5BM!>BHQ)@5Bbq;dNU2p$g4Ft^#ntSKoZYm z+$QEX^fF4k8(5kkwfCn((OQkM7XVTRxo;BQ0KP>vz%WC(nFaXae$3 zU5d}2Wy-m;P@9GT^D_1SOZx_J0I*6z=1YM;eUK?uiCqdpg%|$#K>$;44+Z`7jQjex z!bSc5o|&OGM`Ft?{UY>%dBfGg%qoVbbPgvkp?yfFVT|&+2b?=mku#C5zCM~~J7n!a zyo{Edu(?<(;iJv}nXv+?1ApIKUXv|gh~cS?gxp83wXB&bZZk{QQ>F3?bBZYU^VGE} zM{N4NTs>v%%(zX})*9#zmKq@$38-Kkn5#+B| zB;ap+V)K8yZ^SWQZy3DI|DX1GCIgf!crUA!B?jF8q(CuJZ`ic^VwXcsU3t;S%EHG| z35Sjao9TDNwd##~3wMRrLl(>NsNqjpA^+D0&l{E93s|)Mm~uAMSy6$MLMzhxD_E=P r@XnH6Z)Rqo|ATk#S@CZ*68*iq3j!S8dxRX?1Vg3m`NRU}Wq15PTKc#w literal 0 HcmV?d00001 From ce980296c1afbf37f7b848918c199d04e96e986d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 14 Jun 2023 22:11:51 +0800 Subject: [PATCH 0297/1057] Add solution and test-cases for problem 530 --- .../README.md | 27 +++++++-------- .../Solution.go | 31 ++++++++++++++++-- .../Solution_test.go | 31 ++++++++++++++---- .../bst1.jpg | Bin 0 -> 11023 bytes .../bst2.jpg | Bin 0 -> 11531 bytes 5 files changed, 65 insertions(+), 24 deletions(-) create mode 100644 leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/bst1.jpg create mode 100644 leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/bst2.jpg diff --git a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/README.md b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/README.md index 6422d4ac5..e4305c00a 100644 --- a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/README.md +++ b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/README.md @@ -1,32 +1,29 @@ # [530.Minimum Absolute Difference in BST][title] -> [!WARNING|style:flat] -> 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), return the minimum absolute difference between the values of any two different nodes in the tree. + +**Example 1:** -**Example 1:** +![example1](./bst1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [4,2,6,1,3] +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./bst2.jpg) -### 思路1 -> ... -Minimum Absolute Difference in BST -```go ``` - +Input: root = [1,0,48,null,null,12,49] +Output: 1 +``` ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] -[title]: https://leetcode.com/problems/minimum-absolute-difference-in-bst/ +[title]: https://leetcode.com/problems/minimum-absolute-difference-in-bst [me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution.go b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution.go index d115ccf5e..7a8045f87 100644 --- a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution.go +++ b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + target := -1 + ans := -1 + dfs530(root, &target, &ans) + return ans +} + +func dfs530(root *TreeNode, target, ans *int) { + if root == nil { + return + } + if root.Left != nil { + dfs530(root.Left, target, ans) + } + if *target != -1 { + diff := root.Val - *target + if *ans == -1 || diff < *ans { + *ans = diff + } + } + *target = root.Val + if root.Right != nil { + dfs530(root.Right, target, ans) + } } diff --git a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution_test.go b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution_test.go index 14ff50eb4..c123fcdb0 100644 --- a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution_test.go +++ b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/Solution_test.go @@ -10,12 +10,29 @@ 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: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 6}, + }, 1}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 48, + Left: &TreeNode{Val: 12}, + Right: &TreeNode{Val: 49}, + }, + }, 1}, } // 开始测试 @@ -30,10 +47,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/bst1.jpg b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/bst1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..172130eb2cc9ecb3674361878f8e4597c9d64ecd GIT binary patch literal 11023 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 literal 0 HcmV?d00001 diff --git a/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/bst2.jpg b/leetcode/501-600/0530.Minimum-Absolute-Difference-in-BST/bst2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34c3ae7138a51610ece1baf266ea33a9d5e080e2 GIT binary patch literal 11531 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 Date: Sun, 18 Jun 2023 15:56:22 +0800 Subject: [PATCH 0298/1057] Add solution and test-cases for problem 2328 --- .../README.md | 38 ++++++++++------- .../Solution.go | 39 +++++++++++++++++- .../Solution_test.go | 13 +++--- .../griddrawio-4.png | Bin 0 -> 3075 bytes 4 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/griddrawio-4.png diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md index e05a57f1b..58421878e 100755 --- a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md +++ b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/README.md @@ -1,28 +1,36 @@ # [2328.Number of Increasing Paths in a Grid][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an `m x n` integer matrix `grid`, where you can move from a cell to any adjacent cell in all `4` directions. -**Example 1:** +Return the number of **strictly increasing** paths in the grid such that you can start from **any** cell and end at **any** cell. Since the answer may be very large, return it **modulo** `10^9 + 7`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Two paths are considered different if they do not have exactly the same sequence of visited cells. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./griddrawio-4.png) -### 思路1 -> ... -Number of Increasing Paths in a Grid -```go +``` +Input: grid = [[1,1],[3,4]] +Output: 8 +Explanation: The strictly increasing paths are: +- Paths with length 1: [1], [1], [3], [4]. +- Paths with length 2: [1 -> 3], [1 -> 4], [3 -> 4]. +- Paths with length 3: [1 -> 3 -> 4]. +The total number of paths is 4 + 3 + 1 = 8. ``` +**Example 2:** + +``` +Input: grid = [[1],[2]] +Output: 3 +Explanation: The strictly increasing paths are: +- Paths with length 1: [1], [2]. +- Paths with length 2: [1 -> 2]. +The total number of paths is 2 + 1 = 3. +``` ## 结语 diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go index d115ccf5e..37d9c80f2 100644 --- a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go +++ b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution.go @@ -1,5 +1,40 @@ package Solution -func Solution(x bool) bool { - return x +const mod2328 = 1000000007 + +func Solution(grid [][]int) int { + rows, cols := len(grid), len(grid[0]) + dp := make([][]int, rows) + // try dfs + var dirs = [][]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, + } + for row := 0; row < rows; row++ { + dp[row] = make([]int, cols) + } + var dfs func(int, int) int + dfs = func(x, y int) int { + if dp[x][y] != 0 { + return dp[x][y] + } + // self + count := 1 + for _, dir := range dirs { + nx, ny := x+dir[0], y+dir[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols || grid[nx][ny] <= grid[x][y] { + continue + } + count += dfs(nx, ny) + } + dp[x][y] += count % mod2328 + return count + } + ans := 0 + for row := 0; row < rows; row++ { + for col := 0; col < cols; col++ { + ans += dfs(row, col) + ans %= mod2328 + } + } + return ans } diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go index 14ff50eb4..314261afb 100644 --- a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go +++ b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 1}, {3, 4}}, 8}, + {"TestCase2", [][]int{{1, 2}}, 3}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/griddrawio-4.png b/leetcode/2301-2400/2328.Number-of-Increasing-Paths-in-a-Grid/griddrawio-4.png new file mode 100644 index 0000000000000000000000000000000000000000..068c8509d10de825eb7d878e98e51d5293b2946b GIT binary patch literal 3075 zcmcgud010d7RL=89i-KYQv|gt9kd1V5|R*YO9NS7AcO=+hy~5QFJw;;Xl)e{OVuJ3 z1S~a3*+kTcpn?`HtqK+iK|p1yQV>BcxUf6dV!v6zp(w_`0n58T}5+&2(829-rDQ;OXDP~kI_ z9}*$e=nZ}-f*%se(`o~SGM+@oQ|SZMA_HInxk@9HiDe?;j1CfkLcNA zTBV3B;?rbccM=+f4Mbr8+n+{>iHz_=h67qDQ;5Js76}xZS0>?7okj&XBnSZoA_9YP zXebaJ317)Aj2aXI zoC3>N#s;faG{Y5&Ofmu36zPW|f@HqV8c>nF&Qml=1*3=@NDoCQ5G00?538bQoTz!= zw14EA0a6tJ%{YO$T)H5bY9>-a8cBp$p&G_hV&kzKHb-ZR#c*PHY;-i$hG&KYHzawI z&JP(DA|soLLM~2A&~Y&=MuZ9Gn#4i^Ns1uG33L`AY>wa{j1hzgBrO zku)q4#KPHN9iAN~Q(F)iJzfRGMpy;os39S01yVp~vcjcEWi(b6!xF$Kkv=>=R!0>W zjYuV#$fdId1csT+r&tI|oD5|a8q`c0ECr#E&`M&oN-sl70j(z42vRw$R8z$yHIhhz zctRRk0YxG7Iw@B`kBqem*=iIc4r!)@U3`!}<7#18w zmg*#A1eHU9u^0(kFK0{4bPh~rXz6$76_vuldwz{3B@5;WU(jQMGm_j_0SEBEbguaYidx#;RLd9n_DbFo>}*cMeKXw} zKJfJIKFPN;<@6Eb+rXyjy@?;-8$3S)zy_s6JE^; zF!lfP&I+7PI1WG@u4JZ7j<%W}-IA5i3$8RM>?^-;t4-)RXBD)!x0@ciDnBBZS5`Vy z-KRT`^BR{NL>Iin|9bql=0im{9``hm2i6_X<}MFP^x2t@;B7DXD5c9Q@DpjhPv`mM znu1N{z-^k}uH~8@+$esMSD}WeQ{;^*_@xLj}X+h}?A?OJ`4_}amJ7b+h7{mo40;n1|j7ej1M`-4{R-RO%QK9bmw zdOIgD!MnZ?qsmLD)m?r!sxW`JVu$CdOy|mU(bb$CBJ!Wt#((m-r}BDX;mYL6(WLJ) zR=M?@*7U5Td!5|2Y@K`QmildPyINm7?y1?of63;C)bs65=jvw{obM0D4h;>(#l<~u zJn%;7g6VSItuskGJT`Q__mG)3HhekD2ggr-KKM66OW}tKRten!Zt_}VUe>A8r@JP{ zMn)v}uYMC$)0pnrZKrv) z)y=HKAEhk3n>sb#9+-Gey17Q}(Qc{^`sB>shDq%4)>Bni%AECsPkOsS=b63tPRHav z?!#SU#s6%$XS{nU12HntUfy`Ss^U)kwKC`QO}t1{Y&4m=_WRKWujQh~MwZ&WXhUu7 z9UbX&?sjjVx2U41=;DuAz7w9Q`=?8Q$$Zb1r_Lw8c>dDecK(OQ%kR_uU&_fBGf`86 zWV6}KVUC_$m71=&yn7k1wl#UAY?SL=x~OJe=_1LCj^z5}7lHZbMyZ*aTGVjs5psG} z=(f?VhcK!Wb#--599z0Zy8G+vTke8(K=x}ZHqEUk-8pB~7w+uY`g40%)sgY43%BNA z`>r3ZDJ$FHQ9E1wbD1;c{4$qwo=^X@$vQP|JX78qwda{*YTNduGUz(!i<(qvM@bhF}b4XH@-YU1#WLzbYOPGrdIP zxnJE{ftTA|Z@kg6!mxtF@nU1a o>c8JVL%lQa!NGa6y=V8#+Klno%u{t}!C$=_l}INX3){N=-_Tl6YybcN literal 0 HcmV?d00001 From e7b52c0849e18a4bc9336763435f8cfabe867a51 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 18 Jun 2023 16:15:57 +0800 Subject: [PATCH 0299/1057] Add solution and test-cases for problem 329 --- .../README.md | 34 ++++++++++------ .../Solution.go | 38 +++++++++++++++++- .../Solution_test.go | 22 ++++++---- .../grid1.jpg | Bin 0 -> 8566 bytes .../tmp-grid.jpg | Bin 0 -> 9189 bytes 5 files changed, 72 insertions(+), 22 deletions(-) create mode 100644 leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/grid1.jpg create mode 100644 leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/tmp-grid.jpg diff --git a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/README.md b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/README.md index 066dfb23e..4d44e757f 100644 --- a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/README.md +++ b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/README.md @@ -1,28 +1,36 @@ # [329.Longest Increasing Path in a Matrix][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `m x n` integers `matrix`, return the length of the longest increasing path in `matrix`. + +From each cell, you can either move in four directions: left, right, up, or down. You **may not** move **diagonally** or move **outside the boundary** (i.e., wrap-around is not allowed). -**Example 1:** +**Example 1:** + +![example1](./grid1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[9,9,4],[6,6,8],[2,1,1]] +Output: 4 +Explanation: The longest increasing path is [1, 2, 6, 9]. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./tmp-grid.jpg) -### 思路1 -> ... -Longest Increasing Path in a Matrix -```go +``` +Input: matrix = [[3,4,5],[3,2,6],[2,2,1]] +Output: 4 +Explanation: The longest increasing path is [3, 4, 5, 6]. Moving diagonally is not allowed. ``` +**Example 3:** + +``` +Input: matrix = [[1]] +Output: 1 +``` ## 结语 diff --git a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution.go b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution.go index d115ccf5e..6e9df2c13 100644 --- a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution.go +++ b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matrix [][]int) int { + rows, cols := len(matrix), len(matrix[0]) + path := make([][]int, rows) + for i := 0; i < rows; i++ { + path[i] = make([]int, cols) + } + var ( + dfs func(int, int) int + dirs = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} + ) + dfs = func(x, y int) int { + if path[x][y] != 0 { + return path[x][y] + } + selfMaxL := 1 + for _, dir := range dirs { + nx, ny := x+dir[0], y+dir[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols || matrix[nx][ny] <= matrix[x][y] { + continue + } + if r := dfs(nx, ny); r+1 > selfMaxL { + selfMaxL = r + 1 + } + } + path[x][y] = selfMaxL + return selfMaxL + } + ans := 0 + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + if r := dfs(r, c); r > ans { + ans = r + } + } + } + return ans } diff --git a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution_test.go b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution_test.go index 14ff50eb4..560cbbad1 100644 --- a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution_test.go +++ b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/Solution_test.go @@ -10,12 +10,20 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {9, 9, 4}, + {6, 6, 8}, + {2, 1, 1}, + }, 4}, + {"TestCase2", [][]int{ + {3, 4, 5}, + {3, 2, 6}, + {2, 2, 1}, + }, 4}, + {"TestCase3", [][]int{{1}}, 1}, } // 开始测试 @@ -30,10 +38,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/grid1.jpg b/leetcode/301-400/0329.Longest-Increasing-Path-in-a-Matrix/grid1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d53db932b99eb220bbcc3e56ed4068e7ae2e9311 GIT binary patch literal 8566 zcmcI~c|6qZ*Z|3^He4p>_?vLO1{{5ckb^p%1Uh}zL*E#1p=Q`K_~+Pc~R z3JL&#g8Ts-jR7n(**gkgqM{(XNyQGh0+_jG`KpB~%#C~LhV@X;o+($w?l+=n`Vi6=&%yK>pAGU# zbvM+780vNsbiJ0KKd)CW2rj1$OuO}Fy8ZmAoj>s_CC9kzs@}NmFnmJ1^v#Dnnfadt zwOv~^1?+BIB;X%pI2BSVsS>yAUsn?=J;b)S9J8X`0WRVdg#uaDUM&@$vKX|jI&xC- z@X4qp(tFJO#8b7M@#~7%-GoxD#Hb$)FM>&@0MwO3t&X9qP0w#|ud`I`aV#ecP5;rG zSrPsZGH9VS7w?bR-S+ZKE4D^j*3?p)nWBPIt1Ge5?%ssMO0*l8+Y{(-7)H=_ZGbBC zSB7=$O$Yt)1v;Zp#T9mze}dtMjQ9%hiN!(e_M7?D=dL8>hDD>)R{fZ)i=fvR9IwNU7Oo8MmTmtvRa9DFWq z6giT-TcZPYQNLn!K+sRQXqba}_;CuS*InDWe*5;1oVFV3y9IAwt&dHp%+UOcCHVQ;oNVn! z`*PccK7!J(;V04RQc{$(0&FXN+Adkf`x>!Ul@N%kSw328hZrESr6N6NS-W$u@@v(1 zB;u{HJm-f{&K6l@88#v=aF0jio+dhjbr9i&>2(l?f@B*0WkZKYVqfOU3y$~pmQz(D>(1QG;#BB9e;;VkhSHf z-Xg=NNn2b4r|ukU(Pf@HiR`J9*5AdLYE`>HH%ku+`e@e?7S81GH6LdS$G%H;u+A?l zZ@$~&ILRnMOhp#6!HR{_4g(*5?jF|4wY~4(A1qv2zV`@jmbxdQ-iv0FR^|JqrsIbm zz|8Vm*v*U*zYMDH@&{p;5W5^IZ}n%o~JnQ|6?YcNj}XJwWyFM-Tv z#>TG{=>&N=%(S9|gYRZyKZB4T&#^#@9P%eXB7_W z$b8Y8f{Hn+L3yJVo94P&@W_ z?_A7jd(sA=&2r+2^?D)ZIK^3~L1;)#-NJ!|(OO4K7V7*v~@Q03D`d6ZU*S&y}&;pSA zMZ8thr^Z6$_as-sxRV}UfU3L0!UHV`yN@R;Aj2sn} zw(;CeamlZl>rw#QlNQtDZ#4|oQrP^AC+6KU)HeGrq#kvsPZGVM8vPQ!%>N?>DF9?N)#Ez^)PKJVL@Ni+>MjzQAFTQ9Klt4WX1Sa#A9cFe2A8nSYA%f-}9<9cbhU&0n-&6W1)*=P!!1evQ z2%Y5ABxjh`JpWa)Wy;_7!rxO6uoG00=kBF8YUACJ#TAvrW0oR;#U|Fpd<4ut`S~a+ z@t|(BnmHp3bMI$;Vtj<$+sLeE1-^R*1wBwm+OxAAvhVW0&%9#07dsrT2rTA$DlWGH zui8EPP6ser9%qnMR&qb2LmAsg58q-UWu#pa9G+wrgirt*&6w*0s*jm*E8;m2jyZK*4Z-J z8EjUcyo2gQ=@v#D>b7v$>K->S$ZgYim6yKDQ^-Ej8S{H)<7_Ro_BBLP&?-M`cFF61Ba#3nyKm03Ej(Pu03{+Zq(RACdf=P_~zg4rZfAat1+mbiQ zPjyp!!y46MiBdH$aX4ks3y$>V_>rG&t^XST5FL4tYyq$9hr!c>U2%CggX|_VMk~LF zV9vdG@bjAo?-8K<(rd;@>cpYD(RLnB{wTPh{A8tj$$Xg;#`qPWb6~mSvQ@Di2cpxm zpQhM?ELqJF^~^iWyRcD}7a{fU81HOc4rNkN&wt+kC>kH{(Sn9pfqQsu-x_Ui75?C) z@|bUJmnK?1N3!w$ITDR8Kq#zoAF^kD`!zeoiCIek6;C5)TUG1}1xfQNr-O=^%m(8g zmtDP!t86`@C3XD<>vB?`-*1h^10R=C*CyR9X0ZZ95(DGm9AJ^bX*mGJfUd(k-gE0;&@|%deDI zPh?KiBJ9E${*pOSqX`43JpYWLN11n2xcKT=Ieh(rBtg;|OF4Bk7Z5swh4Lb6piwkB ztX766{{IQmkaJI2oKB&-u6C=*Ti?=u=J5=Bkl7cXejbcwhwrL%U{x-GsWTDm>@qKx z=kDxU)?p|qS)tEV(EdSqlG27*9T zI=k2TAOHOum9y&dAYL^RbM2Z~!&cXKBU!gE_aAl}@LnR~l9bm5ozt_)o3HpwdJJKi%g(Zd-33rAjEGCh3i zSyb`C!K3(cSSe_w3gmiM|PGDc9B|yT_~)|9LLQK7C|O?tJF&D(DKW*TIoGQ zb(eWYsKdv0x|-*r?V$QlNP}B6#SOIJj)SaFlQ=C1HAP6ae?e#$3E{Z^&zFtWm3GexSBW* zI5ZI>r&aHh-|-5V740JV4P7{lV0x%k*L?$j%iA<)MH8z$0~f2}tq|?XVN9c;-~bM= zNxV%a5v{B{74=hap^pM?2qH7wzbVsxvStjyzvZ-j(P-Rt^Lminhqse9s%9P89znxn zs;yC|i;&Iq-fKTqg)B@)j04j|uk{VyDR`6^=KRca2{CCM<-V0rERk9=2GT7T#u5p= zOWta2+<+v6fcvflbsWvx3}&flkJD)?lU3~+KwU#ZVjVfv<=gSTUB(9U_$z$@a|_j% z`A>tLN`l&Ac?0peI!u z$>t+YYy+7$%YK=7LgR#In6rDTWVmbTUvYzw_|5((Ff|I7;p$enp!cKj2LCoFr}XE! z%_wQ5bfsr^Dx~Do!Fc_ycEd{X(AvPROBo+8GFMeVmLLL>s7g_UrLrD6y?*hf!v2#z zyUUm`n&}~!dwoN$dokB-lP3gp9tv%HzcuiML;t%mM#`8*h5m_7chMr)oIfVI=%J)K z6!@}cx~N$016a7OoFI9pwkw!>3-B)VlHmOk(OqvvDZgz2urc;^l@C>B7=Us-O(!m*J7zn%j(@k{lZ`+s-R}HWxtvc^Fz=F0558AK>IwNrxnxaU_+kFiHIHab}UdE$l@tKg!EftW-W z41F$2^+K8nfjdZEFiKzUg(cHxA#tsb(b>9S@DV`c9C>1Ycet0`PB`E@{k^k^Z6~Q+ z9?_Bf+{GKF{qh;mH-??9i(Qd}WtU6mmRYPAVhw@8Y{t9u8*$Oe-J2S%es~19lQmgx z0KMS5hA6N-V77;4QGF}tleJVh`n>(ysv+E z(aW*K=-qfMOuTQ^^9XQSU-FfLjdwd#Ug4+KR@x3`O^W7J`13!e`X_ZS?tH+XP3!#j z#-NHZKEhw<<8Y66yR5WS1mks>_7oNyFSv(thV%jCfZXQ^xTNm6E+H|8;H?84y5MHQI#S*4z69mA&FV9A-YQMA2zci~>7<-gKkeVx zS+D!OZ6jKnC|iY-BYG4ixPy?%I@mRkfRz39dxhf79I_rYC69$m#h-EP?B0ILl+;WE z{CtzZ=kRLJt5G`{V#So`>UN6$c&7j9M&OwD-}LuO_NUZ;h?vnzVnnlGh$Q|?B|f)e zKqjivHTjhi!+Kv&Rf*%U4pbwoOI&c&9VFPTQcLP>KEboh6TjC#O8EZ;noeE8Ev}dn`}Rg-Cgm$GJ>+^E1@Q!7 zv-}BiDH{R6E9QsXp%pDtnD7&`;^7onEX&sy6W2X?%*_rbZJwE~49pb~8{H)ljn|y( z27XjHe<>g!7r1fhsNB!B(DxDZLv`1EzC4h%oMU}-=8)U&%iM&FcsS6=qN-s1=7wKf ztBx|!`%HF2A=dntMm^vkWSkvpd%>`DutxBcUqbm;M>2Jdrh79^f#o6jxPZdjQc1dl z$m}>$4+2W+b<1yhil4}CsKloI(p>-Tnm1x70lh!oV&nXzp9Sx!II}cA4Gw$wFU0*% zG3YX~lc;e)WC%Qq!Gy}xmd)sXj4>Fo5qd!ww(9jr4MuyYmIP-qYkgWaA$(y-gnR|O z=lcC5q&NE4>649|iM*%pXIomK_G}eO#GeHi2hcZF+)#99h6zk5{gKgR(Tk#Wh9?ss zn>7E7x1y z*G-kBEB(rAF%OE)VS^+Z_%b)%YAO_}V8+!FhyqtSlJPCUTxiN(inXzX=c9Zs9aY4l z)HI=WF#8raKR$*G^#Dm5b~`S2ZOh?@@l=|eb#^zUH#T!!d)RT9eemk1&`v z+EKk-A?X>*MOkK5LTXFB4QGKR-8o(wq*y?IPJq73n7ifTIAsU~bqQ}5g2%)+s75%2 z9~)h#x_NsL-*C@~)JSpC0zjjFyBPv*{l0``9sNNcdiPO}L)ZkW2fYc~fSH*E>lGH4 z4f%klp?a|aHsnZ=Hg!Ji@&!MfeIyEHlmgw**0tx3@~`riZssg8(Oz>nU11r9Nm(O>mjuujpErmJerTSwf>*Kdoq6bw;V@maDCD4M-dT7%!W-?6POhpO>;9 zF3TH|oH_-((eb9⁡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 Date: Mon, 19 Jun 2023 22:56:53 +0800 Subject: [PATCH 0300/1057] Add solution and test-cases for problem 1315 --- .../README.md | 28 +++++++------- .../Solution.go | 34 ++++++++++++++++- .../Solution_test.go | 35 ++++++++++++++---- .../even1-tree.jpg | Bin 0 -> 26307 bytes .../even2-tree.jpg | Bin 0 -> 2332 bytes 5 files changed, 74 insertions(+), 23 deletions(-) create mode 100644 leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/even1-tree.jpg create mode 100644 leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/even2-tree.jpg diff --git a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/README.md b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/README.md index 7bbe5fa7e..1ea0dad4f 100644 --- a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/README.md +++ b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/README.md @@ -1,28 +1,28 @@ # [1315.Sum of Nodes with Even-Valued Grandparent][title] -> [!WARNING|style:flat] -> 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, return the sum of values of nodes with an **even-valued grandparent**. If there are no nodes with an **even-valued grandparent**, return `0`. + +A **grandparent** of a node is the parent of its parent if it exists. + +**Example 1:** -**Example 1:** +![example1](./even1-tree.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] +Output: 18 +Explanation: The red nodes are the nodes with even-value grandparent while the blue nodes are the even-value grandparents. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./even2-tree.jpg) -### 思路1 -> ... -Sum of Nodes with Even-Valued Grandparent -```go ``` - +Input: root = [1] +Output: 0 +``` ## 结语 diff --git a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution.go b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution.go index d115ccf5e..c61eeced9 100644 --- a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution.go +++ b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + ans := 0 + if root == nil { + return ans + } + var dfs func(*TreeNode, *TreeNode, *int) + dfs = func(current, parent *TreeNode, ans *int) { + if current == nil { + return + } + + if current.Left != nil { + if parent.Val&1 == 0 { + *ans += current.Left.Val + } + dfs(current.Left, current, ans) + } + if current.Right != nil { + if parent.Val&1 == 0 { + *ans += current.Right.Val + } + dfs(current.Right, current, ans) + } + } + dfs(root.Left, root, &ans) + dfs(root.Right, root, &ans) + return ans } diff --git a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution_test.go b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution_test.go index 14ff50eb4..c0772428a 100644 --- a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution_test.go +++ b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/Solution_test.go @@ -10,12 +10,33 @@ 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: 6, + Left: &TreeNode{ + Val: 7, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 9}, + }, + Right: &TreeNode{ + Val: 7, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 4}, + }, + }, + Right: &TreeNode{ + Val: 8, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 5}, + }, + }, + }, 18}, + {"TestCase2", &TreeNode{Val: 1}, 0}, } // 开始测试 @@ -30,10 +51,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/even1-tree.jpg b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/even1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f85fc3b7a3db35514ccb05ff95aa4e3e16c9708d GIT binary patch literal 26307 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 E0sQcow*UYD literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/even2-tree.jpg b/leetcode/1301-1400/1315.Sum-of-Nodes-with-Even-Valued-Grandparent/even2-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dc47d244252a6c4611954df131dc45f18123fb9 GIT binary patch literal 2332 zcmb_adoK$}Sgg1tPEuS#S^|reB1lQ&@OT1VTvCQ8gC{~9FG>OvMIw+GC=f4! zm4MX$5yECbzyNDtg@Ant-~%N>N!~tT;YO#bx%vh+zL9Y?P^j!@DgVhVQVE-dKB*%> z5&`uSTDV+-5YbYedAPteYvNzyi8D?VYEST?DgIs2ZQDXAXFa+DktHEt=7uK zF7RQ_!Mu+*b8*VkStGc7P|a*i?|GqqSL|I{OuC}B7o6;bEIYT4LbFl>45^xs%)7zP zlXD0<(e0l8fxbQuJ_i;yyZU-Z$xWDgT0b5~$zZ=WKia8QW*D7TKihCQNPmXQyvG;B zRKpEuF1rG9CKtYQU-jSZ_=jp~Qa%eaTPa|&U2JJF53PDncQ52Tm@}s~u}Q}7FL5&x z)hCV30^K-PRL|NE>DG!%7glt0Pjr>dJ@bF#(U~X&jS7=#FW#G+uO2w5`!?jdRzX_X z)7fTMCwp2>#eJ;7XwG&`bk-LbC6pDwX$O?8?6ivN-*8E={kgGTewt%^arz67w==TS zxbuQT-Adu{XjUS>9 zIZZ`n_U|R)*~Kc&CK;#KyUjFl$u$)>Z-li=XgoWGi@7yCks?XthiJ%T$%dC|4YGyA=h_bYzu;4z3iRsO+v+%}Uq(19#yD~dPnpRu(J zxNYnHxO)w5&kh;8HfNGhspL3v)aF3_1{EKzBz^E&j)Xg#)-4w*UlnYu^`X2(N-jl# zs^l43j~ff&vP^QF#x)(xyS9xQzB6UsINY;lc&8~xuLqwar0>_8SYTIB5oU5L;C1 z#myhMFE&XvvGRN#MXfa*-Y5>dn$O+SlDxiWUQY-{ui7`)>Y43MtI&9#C%vOir_Ms3 zxe6NCRdLM}Dtm0B#=!8m)=Sk5f7Tw`XF)!3Slb{#mfb#7^bLu1?My2z-hSd>f@#&x z3rNX<3ojK@c#$rZD!O@xq$z2OQD<%AYb+0FGprwcb*c7bY&NTuAlKSkRd~cXTRpK> z{ADsr`QAk13v~ADUSN*gr-bY|8?jOFW0cBxMdSd-_J+S^;QC^8=(Vnl zyzY176o&#uFNUPf=npz?R#JnbYt~XG27+}MJ11ciZA|l#v?m*tMpd#FXYi+y@zKpU zvKrs&K7BZ}=d5E;cH}^-ulq{st6H$fvz%XkQ)xnC6?R|gxO15&&DH5ic>5rR zt5hR!Zj|GQJ$dBUw#N5tIqo=4R-IzuIxnF%IM$ifMoW?Pzj&x;czg0Z&I*>71fw;~ z!Aghp>>j!RAdv-URLpP{cZv=OLbs*GZCm6U26jAo)|o#>pVFJ3qEM(sxMmhZN;j-C zT~RH{?-7&d>L(sH?BPhkpEK5SGCv2x$$h-Y^>nW?z5*RZKN8Og z?dO=D+#Y?qA@xksM$-zj1Kq;vcwRCv{OWb48HXOuzS_aaGvOd6y6ud(`9GKRyO)05 zW;bD-oVcKBw@*QHZAlSkwz4?gXfocuRgvGpxQ^di)RLl@doG#wDgz@9} z(!wF)`FEWBx}d>)Zfs{>n?r2r`s=~`p==@8qSSEqsH)EV`07vfE)}R?mkM{BkpCC? C2~arz literal 0 HcmV?d00001 From 771c0f40491b302ecab4b320f8fbc50fe24a7017 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 20 Jun 2023 22:03:40 +0800 Subject: [PATCH 0301/1057] Add solution and test-cases for problem 2090 --- .../2090.K-Radius-Subarray-Averages/README.md | 50 +++++++++++++----- .../Solution.go | 25 ++++++++- .../Solution_test.go | 21 ++++---- .../2090.K-Radius-Subarray-Averages/eg1.png | Bin 0 -> 3484 bytes 4 files changed, 70 insertions(+), 26 deletions(-) create mode 100644 leetcode/2001-2100/2090.K-Radius-Subarray-Averages/eg1.png diff --git a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md index f9dae9650..77a92b923 100755 --- a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md +++ b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/README.md @@ -1,28 +1,50 @@ # [2090.K Radius Subarray Averages][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** array `nums` of `n` integers, and an integer `k`. + +The **k-radius average** for a subarray of `nums` **centered** at some index `i` with the **radius** `k` is the average of **all** elements in `nums` between the indices `i - k` and `i + k` (**inclusive**). If there are less than `k` elements before **or** after the index `i`, then the **k-radius average** is `-1`. + +Build and return an array `avgs` of length `n` where `avgs[i]` is the **k-radius average** for the subarray centered at index `i`. + +The **average** of `x` elements is the sum of the `x` elements divided by x, using **integer division**. The integer division truncates toward zero, which means losing its fractional part. + +- For example, the average of four elements `2, 3, 1`, and 5 is `(2 + 3 + 1 + 5) / 4 = 11 / 4 = 2.75`, which truncates to `2`. + +**Example 1:** -**Example 1:** +![example1](./eg1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [7,4,3,9,1,8,5,2,6], k = 3 +Output: [-1,-1,-1,5,4,4,-1,-1,-1] +Explanation: +- avg[0], avg[1], and avg[2] are -1 because there are less than k elements before each index. +- The sum of the subarray centered at index 3 with radius 3 is: 7 + 4 + 3 + 9 + 1 + 8 + 5 = 37. + Using integer division, avg[3] = 37 / 7 = 5. +- For the subarray centered at index 4, avg[4] = (4 + 3 + 9 + 1 + 8 + 5 + 2) / 7 = 4. +- For the subarray centered at index 5, avg[5] = (3 + 9 + 1 + 8 + 5 + 2 + 6) / 7 = 4. +- avg[6], avg[7], and avg[8] are -1 because there are less than k elements after each index. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -K Radius Subarray Averages -```go ``` +Input: nums = [100000], k = 0 +Output: [100000] +Explanation: +- The sum of the subarray centered at index 0 with radius 0 is: 100000. + avg[0] = 100000 / 1 = 100000. +``` + +**Example 3:** +``` +Input: nums = [8], k = 100000 +Output: [-1] +Explanation: +- avg[0] is -1 because there are less than k elements before and after index 0. +``` ## 结语 diff --git a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go index d115ccf5e..a474a22f0 100644 --- a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go +++ b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, k int) []int { + ans := make([]int, len(nums)) + for i := 0; i < len(nums); i++ { + ans[i] = -1 + } + start, end := 0, 2*k + if end >= len(nums) { + return ans + } + + windowSize := 2*k + 1 + sum := 0 + for i := 0; i <= end; i++ { + sum += nums[i] + } + ans[end-k] = sum / windowSize + end++ + for ; end < len(nums); start, end = start+1, end+1 { + sum -= nums[start] + sum += nums[end] + ans[end-k] = sum / windowSize + } + return ans } diff --git a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go index 14ff50eb4..9d3086594 100644 --- a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/Solution_test.go +++ b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/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{7, 4, 3, 9, 1, 8, 5, 2, 6}, 3, []int{-1, -1, -1, 5, 4, 4, -1, -1, -1}}, + {"TestCase2", []int{1, 2, 3}, 0, []int{1, 2, 3}}, + {"TestCase3", []int{8}, 10000, []int{-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() { } diff --git a/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/eg1.png b/leetcode/2001-2100/2090.K-Radius-Subarray-Averages/eg1.png new file mode 100644 index 0000000000000000000000000000000000000000..31ba4bd3dae2d491a798a585eb397f023b9860fd GIT binary patch literal 3484 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 literal 0 HcmV?d00001 From 81239469d8232d1ced6cb9ceca64a33626ec2e59 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 21 Jun 2023 23:52:53 +0800 Subject: [PATCH 0302/1057] Add solution and test-cases for problem 2448 --- .../README.md | 35 +++++++++------- .../Solution.go | 42 ++++++++++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 71 insertions(+), 27 deletions(-) diff --git a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md index 7e3f5dd1c..b4567361b 100755 --- a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md +++ b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/README.md @@ -1,28 +1,35 @@ # [2448.Minimum Cost to Make Array Equal][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given two **0-indexed** arrays `nums` and `cost` consisting each of `n` **positive** integers. + +You can do the following operation **any** number of times: + +- Increase or decrease **any** element of the array `nums` by `1`. +- The cost of doing one operation on the ith element is `cost[i]`. + +Return the **minimum** total cost such that all the elements of the array `nums` become **equal**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,5,2], cost = [2,3,1,14] +Output: 8 +Explanation: We can make all the elements equal to 2 in the following way: +- Increase the 0th element one time. The cost is 2. +- Decrease the 1st element one time. The cost is 3. +- Decrease the 2nd element three times. The cost is 1 + 1 + 1 = 3. +The total cost is 2 + 3 + 3 = 8. +It can be shown that we cannot make the array equal with a smaller cost. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Cost to Make Array Equal -```go ``` - +Input: nums = [2,2,2,2,2], cost = [4,2,8,1,3] +Output: 0 +Explanation: All the elements are already equal, so no operations are needed. +``` ## 结语 diff --git a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go index d115ccf5e..aa40899a5 100644 --- a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go +++ b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func cost2448(nums []int, cost []int, target int) int64 { + c := int64(0) + for idx, num := range nums { + diff := num - target + if diff < 0 { + diff = ^diff + 1 + } + c += int64(diff) * int64(cost[idx]) + } + return c +} + +// 这道题和之前的一个相似,忘了, 类似火车运送货物的 +// 也是找到最大最大值,然后二分搜索 +func Solution(nums []int, cost []int) int64 { + max, min := -1, -1 + for _, i := range nums { + if i > max { + max = i + } + if min == -1 || i < min { + min = i + } + } + ans := int64(-1) + for min < max { + mid := (max-min)/2 + min + c1 := cost2448(nums, cost, mid) + c2 := cost2448(nums, cost, mid+1) + ans = c1 + if c2 < c1 { + ans = c2 + } + if c2 < c1 { + min = mid + 1 + continue + } + max = mid + } + return ans } diff --git a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go index 14ff50eb4..d9e6d79b4 100644 --- a/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go +++ b/leetcode/2401-2500/2448.Minimum-Cost-to-Make-Array-Equal/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums, cost []int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 5, 2}, []int{2, 3, 1, 14}, 8}, + {"TestCase2", []int{2, 2, 2, 2, 2}, []int{4, 2, 8, 1, 3}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.cost) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.cost) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e88b9a450913e0c6fa45e80ddc2cbff7e2ec40e0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 23 Jun 2023 11:09:26 +0800 Subject: [PATCH 0303/1057] Add solution and test-cases for problem 1027 --- .../README.md | 34 ++++++++++++------- .../Solution.go | 26 ++++++++++++-- .../Solution_test.go | 15 ++++---- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/README.md b/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/README.md index b57e66eeb..9b1e2913a 100644 --- a/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/README.md +++ b/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/README.md @@ -1,28 +1,36 @@ # [1027.Longest Arithmetic Sequence][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array `nums` of integers, return the length of the longest arithmetic subsequence in `nums`. + +**Note** that: + +- 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. +- A sequence `seq` is arithmetic if `seq[i + 1] - seq[i]` are all the same value (for `0 <= i < seq.length - 1`). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,6,9,12] +Output: 4 +Explanation: The whole array is an arithmetic sequence with steps of length = 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Arithmetic Sequence -```go ``` +Input: nums = [9,4,7,2,10] +Output: 3 +Explanation: The longest arithmetic subsequence is [4,7,10]. +``` + +**Example 3:** +``` +Input: nums = [20,1,15,3,10,5,8] +Output: 4 +Explanation: The longest arithmetic subsequence is [20,15,10,5]. +``` ## 结语 diff --git a/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution.go b/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution.go index d115ccf5e..15c9793db 100644 --- a/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution.go +++ b/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + ans := 0 + cache := make(map[int]map[int]int) + for i := len(nums) - 2; i >= 0; i-- { + cache[i] = make(map[int]int) + for next := i + 1; next < len(nums); next++ { + diff := nums[next] - nums[i] + add := 2 + v, ok := cache[next][diff] + if ok { + add = 1 + } + add += v + if v, ok := cache[i][diff]; !ok || v < add { + cache[i][diff] = add + } + } + for _, v := range cache[i] { + if v > ans { + ans = v + } + } + } + return ans } diff --git a/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution_test.go b/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution_test.go index 14ff50eb4..78c805293 100644 --- a/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution_test.go +++ b/leetcode/1001-1100/1027.Longest-Arithmetic-Sequence/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 6, 9, 12}, 4}, + {"TestCase2", []int{9, 4, 7, 2, 10}, 3}, + {"TestCase3", []int{20, 1, 15, 3, 10, 5, 8}, 4}, + {"TestCase4", []int{24, 13, 1, 100, 0, 94, 3, 0, 3}, 2}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0be952b5634cef82b0be6bbc8ca78db285fc1b80 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 24 Jun 2023 14:00:06 +0800 Subject: [PATCH 0304/1057] Add solution and test-cases for problem 956 --- .../901-1000/0956.Tallest-Billboard/README.md | 33 +++--- .../0956.Tallest-Billboard/Solution.go | 103 +++++++++++++++++- .../0956.Tallest-Billboard/Solution_test.go | 14 +-- 3 files changed, 128 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0956.Tallest-Billboard/README.md b/leetcode/901-1000/0956.Tallest-Billboard/README.md index 38168cc11..5a6027a85 100644 --- a/leetcode/901-1000/0956.Tallest-Billboard/README.md +++ b/leetcode/901-1000/0956.Tallest-Billboard/README.md @@ -1,28 +1,35 @@ # [956.Tallest Billboard][title] -> [!WARNING|style:flat] -> 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 installing a billboard and want it to have the largest height. The billboard will have two steel supports, one on each side. Each steel support must be an equal height. + +You are given a collection of `rods` that can be welded together. For example, if you have rods of lengths `1`, `2`, and `3`, you can weld them together to make a support of length `6`. + +Return the largest possible height of your billboard installation. If you cannot support the billboard, return `0`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: rods = [1,2,3,6] +Output: 6 +Explanation: We have two disjoint subsets {1,2,3} and {6}, which have the same sum = 6. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Tallest Billboard -```go ``` +Input: rods = [1,2,3,4,5,6] +Output: 10 +Explanation: We have two disjoint subsets {2,3,5} and {4,6}, which have the same sum = 10. +``` + +**Example 3:** +``` +Input: rods = [1,2] +Output: 0 +Explanation: The billboard cannot be supported, so we return 0. +``` ## 结语 diff --git a/leetcode/901-1000/0956.Tallest-Billboard/Solution.go b/leetcode/901-1000/0956.Tallest-Billboard/Solution.go index d115ccf5e..e9c31acbf 100644 --- a/leetcode/901-1000/0956.Tallest-Billboard/Solution.go +++ b/leetcode/901-1000/0956.Tallest-Billboard/Solution.go @@ -1,5 +1,104 @@ package Solution -func Solution(x bool) bool { - return x +type pair956 struct { + x, y int +} + +// 参考了解法,subset的算法过不去 +func Solution(rods []int) int { + ans := 0 + /* + var ( + excludePathCanEqual func(path []int, sum int) bool + subset func(l, start, sum int, path []int) + ) + excludePathCanEqual = func(path []int, sum int) bool { + cache := make(map[int]map[int]struct{}) + pre := -1 + pathIdx := 0 + for idx := 0; idx < len(rods); idx++ { + if pathIdx < len(path) && idx == path[pathIdx] { + pathIdx++ + continue + } + cache[idx] = map[int]struct{}{} + if pre == -1 { + cache[idx][rods[idx]] = struct{}{} + pre = idx + continue + } + for sum, count := range cache[pre] { + cache[idx][sum] = count + cache[idx][sum+rods[idx]] = struct{}{} + } + cache[idx][rods[idx]] = struct{}{} + pre = idx + } + for s := range cache[pre] { + if s == sum { + return true + } + } + return false + } + subset = func(l, start, sum int, path []int) { + if l == 0 { + if excludePathCanEqual(path, sum) { + if sum > ans { + ans = sum + } + } + return + } + if start >= len(rods) { + return + } + subset(l-1, start+1, sum+rods[start], append(path, start)) + subset(l, start+1, sum, path) + } + for l := len(rods) - 1; l > 0; l-- { + subset(l, 0, 0, []int{}) + } + */ + var helper func(int, int) map[int]int + helper = func(left, right int) map[int]int { + states := make(map[pair956]struct{}) + states[pair956{0, 0}] = struct{}{} + for i := left; i < right; i++ { + r := rods[i] + newStates := make(map[pair956]struct{}) + for k := range states { + newStates[pair956{k.x + r, k.y}] = struct{}{} + newStates[pair956{k.x, k.y + r}] = struct{}{} + } + for k := range newStates { + states[k] = struct{}{} + } + } + dp := make(map[int]int) + for pair := range states { + l, r := pair.x, pair.y + diff := l - r + v := 0 + if v1, ok := dp[diff]; ok { + v = v1 + } + if l > v { + v = l + } + dp[diff] = v + } + return dp + } + n := len(rods) + firstHalf := helper(0, n/2) + rightHalf := helper(n/2, n) + for diff := range firstHalf { + if _, ok := rightHalf[-diff]; ok { + if r := firstHalf[diff] + rightHalf[-diff]; r > ans { + ans = r + } + } + } + return ans } diff --git a/leetcode/901-1000/0956.Tallest-Billboard/Solution_test.go b/leetcode/901-1000/0956.Tallest-Billboard/Solution_test.go index 14ff50eb4..17a28a3ff 100644 --- a/leetcode/901-1000/0956.Tallest-Billboard/Solution_test.go +++ b/leetcode/901-1000/0956.Tallest-Billboard/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 6}, 6}, + {"TestCase2", []int{1, 2, 3, 4, 5, 6}, 10}, + {"TestCase3", []int{1, 2}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bb5eb52fc884b9e5649df2abe16c02416b1628d7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 25 Jun 2023 21:50:51 +0800 Subject: [PATCH 0305/1057] Add solution and test-cases for problem 1575 --- .../1575.Count-All-Possible-Routes/README.md | 44 +++++++++++++------ .../Solution.go | 43 +++++++++++++++++- .../Solution_test.go | 22 +++++----- 3 files changed, 83 insertions(+), 26 deletions(-) diff --git a/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md b/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md index 3c8f649e8..4a0f2fccf 100755 --- a/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md +++ b/leetcode/1501-1600/1575.Count-All-Possible-Routes/README.md @@ -1,28 +1,46 @@ # [1575.Count All Possible 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 of **distinct** positive integers locations where `locations[i]` represents the position of city `i`. You are also given integers `start`, `finish` and `fuel` representing the starting city, ending city, and the initial amount of fuel you have, respectively. + +At each step, if you are at city `i`, you can pick any city `j` such that `j != i` and `0 <= j < locations.length` and move to city `j`. Moving from city `i` to city `j` reduces the amount of fuel you have by `|locations[i] - locations[j]|`. Please notice that `|x|` denotes the absolute value of `x`. + +Notice that `fuel` **cannot** become negative at any point in time, and that you are **allowed** to visit any city more than once (including `start` and `finish`). + +Return the count of all possible routes from `start` to `finish`. Since the answer may be too large, return it modulo `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: locations = [2,3,6,8,4], start = 1, finish = 3, fuel = 5 +Output: 4 +Explanation: The following are all possible routes, each uses 5 units of fuel: +1 -> 3 +1 -> 2 -> 3 +1 -> 4 -> 3 +1 -> 4 -> 2 -> 3 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count All Possible Routes -```go ``` +Input: locations = [4,3,1], start = 1, finish = 0, fuel = 6 +Output: 5 +Explanation: The following are all possible routes: +1 -> 0, used fuel = 1 +1 -> 2 -> 0, used fuel = 5 +1 -> 2 -> 1 -> 0, used fuel = 5 +1 -> 0 -> 1 -> 0, used fuel = 3 +1 -> 0 -> 1 -> 0 -> 1 -> 0, used fuel = 5 +``` + +**Example 3:** +``` +Input: locations = [5,2,1], start = 0, finish = 2, fuel = 3 +Output: 0 +Explanation: It is impossible to get from 0 to 2 using only 3 units of fuel since the shortest route needs 4 units of fuel. +``` ## 结语 diff --git a/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go index d115ccf5e..ab5a2dfb0 100644 --- a/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go +++ b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +const mod1575 = 1000000007 + +func Solution(locations []int, start int, finish int, fuel int) int { + // 需要dp[i][j] 表示 从第i个城市,还有fuel油量的时候能走的路径 + dp := make([][]int, len(locations)) + for i := 0; i < len(locations); i++ { + dp[i] = make([]int, fuel+1) + // 草,第一版这个dp没有做-1的初始化,直接超时,后来看了题解才想起来 + // 无路可走的时候,dp是等于0的。尴尬 + for j := 0; j <= fuel; j++ { + dp[i][j] = -1 + } + } + + var dfs func(int, int) int + dfs = func(_start, _fuel int) int { + if _fuel < 0 { + return 0 + } + + if dp[_start][_fuel] != -1 { + return dp[_start][_fuel] + } + c := 0 + if _start == finish { + c = 1 + } + for i := 0; i < len(locations); i++ { + if i == _start { + continue + } + diff := locations[i] - locations[_start] + if diff < 0 { + diff = -diff + } + c = (c + dfs(i, _fuel-diff)) % mod1575 + } + dp[_start][_fuel] = c + return c + } + return dfs(start, fuel) } diff --git a/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go index 14ff50eb4..86d24d2b3 100644 --- a/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go +++ b/leetcode/1501-1600/1575.Count-All-Possible-Routes/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + locations []int + start, finish, fuel int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 6, 8, 4}, 1, 3, 5, 4}, + {"TestCase2", []int{22, 74, 92, 86, 12, 68, 64, 19, 79, 10, 69, 13, 62, 18, 87, 88, 33, 96, 78, 73, 57, 42, 91, 17, 55, 26, 27, 67, 60, 46, 72, 41}, 30, 29, 47, 535415296}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.locations, c.start, c.finish, c.fuel) 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.locations, c.start, c.finish, c.fuel) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e2e4e5ea4c5df12b9006e58093193be662f9af53 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 26 Jun 2023 10:55:43 +0800 Subject: [PATCH 0306/1057] Add solution and test-cases for problem 2462 --- .../README.md | 45 ++++++--- .../Solution.go | 93 ++++++++++++++++++- .../Solution_test.go | 22 ++--- 3 files changed, 134 insertions(+), 26 deletions(-) diff --git a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md index c355bf575..2a26b17f1 100755 --- a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md +++ b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/README.md @@ -1,28 +1,45 @@ # [2462.Total Cost to Hire K Workers][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array `costs` where `costs[i]` is the cost of hiring the ith worker. + +You are also given two integers `k` and `candidates`. We want to hire exactly `k` workers according to the following rules: + +- You will run `k` sessions and hire exactly one worker in each session. +- In each hiring session, choose the worker with the lowest cost from either the first `candidates` workers or the last `candidates` workers. Break the tie by the smallest index. + + - For example, if `costs = [3,2,7,7,1,2]` and `candidates = 2`, then in the first hiring session, we will choose the 4th worker because they have the lowest cost `[3,2,7,7,1,2]`. + - In the second hiring session, we will choose 1st worker because they have the same lowest cost as 4th worker but they have the smallest index `[3,2,7,7,2]`. Please note that the indexing may be changed in the process. + +- If there are fewer than candidates workers remaining, choose the worker with the lowest cost among them. Break the tie by the smallest index. +- A worker can only be chosen once. + +Return the total cost to hire exactly `k` workers. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: costs = [17,12,10,2,7,2,11,20,8], k = 3, candidates = 4 +Output: 11 +Explanation: We hire 3 workers in total. The total cost is initially 0. +- In the first hiring round we choose the worker from [17,12,10,2,7,2,11,20,8]. The lowest cost is 2, and we break the tie by the smallest index, which is 3. The total cost = 0 + 2 = 2. +- In the second hiring round we choose the worker from [17,12,10,7,2,11,20,8]. The lowest cost is 2 (index 4). The total cost = 2 + 2 = 4. +- In the third hiring round we choose the worker from [17,12,10,7,11,20,8]. The lowest cost is 7 (index 3). The total cost = 4 + 7 = 11. Notice that the worker with index 3 was common in the first and last four workers. +The total hiring cost is 11. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Total Cost to Hire K Workers -```go ``` - +Input: costs = [1,2,4,1], k = 3, candidates = 3 +Output: 4 +Explanation: We hire 3 workers in total. The total cost is initially 0. +- In the first hiring round we choose the worker from [1,2,4,1]. The lowest cost is 1, and we break the tie by the smallest index, which is 0. The total cost = 0 + 1 = 1. Notice that workers with index 1 and 2 are common in the first and last 3 workers. +- In the second hiring round we choose the worker from [2,4,1]. The lowest cost is 1 (index 2). The total cost = 1 + 1 = 2. +- In the third hiring round there are less than three candidates. We choose the worker from the remaining workers [2,4]. The lowest cost is 2 (index 0). The total cost = 2 + 2 = 4. +The total hiring cost is 4. +``` ## 结语 diff --git a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go index d115ccf5e..1cce6e695 100644 --- a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go +++ b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution.go @@ -1,5 +1,96 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type pair2462 struct { + index, value int +} + +type pairs2462 []pair2462 + +func (p *pairs2462) Len() int { + return len(*p) +} + +func (p *pairs2462) Less(i, j int) bool { + a, b := (*p)[i], (*p)[j] + if a.value == b.value { + return a.index < b.index + } + return a.value < b.value +} + +func (p *pairs2462) Swap(i, j int) { + (*p)[i], (*p)[j] = (*p)[j], (*p)[i] +} + +func (p *pairs2462) Push(x interface{}) { + *p = append(*p, x.(pair2462)) +} + +func (p *pairs2462) Pop() interface{} { + old := *p + l := len(old) + x := old[l-1] + *p = old[:l-1] return x } + +func Solution(costs []int, k int, candidates int) int64 { + left := len(costs) + l, r := pairs2462{}, pairs2462{} + li, ri := 0, left-1 + ans := int64(0) + if candidates+candidates < left { + for ; li < candidates; li, ri = li+1, ri-1 { + heap.Push(&l, pair2462{li, costs[li]}) + heap.Push(&r, pair2462{ri, costs[ri]}) + } + for k > 0 && ri >= li { + a := heap.Pop(&l).(pair2462) + b := heap.Pop(&r).(pair2462) + if a.value == b.value { + ans += int64(a.value) + if a.index < b.index { + heap.Push(&l, pair2462{li, costs[li]}) + heap.Push(&r, b) + li++ + } else { + heap.Push(&r, pair2462{ri, costs[ri]}) + heap.Push(&l, a) + ri-- + } + } else if a.value < b.value { + ans += int64(a.value) + heap.Push(&l, pair2462{li, costs[li]}) + heap.Push(&r, b) + li++ + } else { + ans += int64(b.value) + heap.Push(&r, pair2462{ri, costs[ri]}) + heap.Push(&l, a) + ri-- + } + k-- + } + } else { + for ; li < left; li++ { + heap.Push(&l, pair2462{li, costs[li]}) + } + } + if k > 0 { + for len(r) > 0 { + a := heap.Pop(&r) + heap.Push(&l, a) + } + for k > 0 && len(l) > 0 { + k-- + a := heap.Pop(&l).(pair2462) + ans += int64(a.value) + } + } + + return ans +} diff --git a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go index 14ff50eb4..91f4a0ae6 100644 --- a/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go +++ b/leetcode/2401-2500/2462.Total-Cost-to-Hire-K-Workers/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + costs []int + k, candidates int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{17, 12, 10, 2, 7, 2, 11, 20, 8}, 3, 4, 11}, + {"TestCase2", []int{1, 2, 4, 1}, 3, 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.costs, c.k, c.candidates) 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.costs, c.k, c.candidates) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From da52120081fd209bcb61826cf0b1bdc133c72022 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 26 Jun 2023 20:14:34 +0800 Subject: [PATCH 0307/1057] Add solution and test-cases for problem 1561 --- .../README.md | 41 +++++++++++++------ .../Solution.go | 13 +++++- .../Solution_test.go | 14 +++---- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md index 341d45d91..9829595a1 100755 --- a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md +++ b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/README.md @@ -1,28 +1,43 @@ # [1561.Maximum Number of Coins You Can Get][title] -> [!WARNING|style:flat] -> 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 `3n` piles of coins of varying size, you and your friends will take piles of coins as follows: + +- In each step, you will choose **any** `3` piles of coins (not necessarily consecutive). +- Of your choice, Alice will pick the pile with the maximum number of coins. +- You will pick the next pile with the maximum number of coins. +- Your friend Bob will pick the last pile. +- Repeat until there are no more piles of coins. + +Given an array of integers `piles` where `piles[i]` is the number of coins in the ith pile. + +Return the maximum number of coins that you can have. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: piles = [2,4,1,2,7,8] +Output: 9 +Explanation: Choose the triplet (2, 7, 8), Alice Pick the pile with 8 coins, you the pile with 7 coins and Bob the last one. +Choose the triplet (1, 2, 4), Alice Pick the pile with 4 coins, you the pile with 2 coins and Bob the last one. +The maximum number of coins which you can have are: 7 + 2 = 9. +On the other hand if we choose this arrangement (1, 2, 8), (2, 4, 7) you only get 2 + 4 = 6 coins which is not optimal. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Number of Coins You Can Get -```go ``` +Input: piles = [2,4,5] +Output: 4 +``` + +**Example 3:** +``` +Input: piles = [9,8,7,6,5,1,2,3,4] +Output: 18 +``` ## 结语 diff --git a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go index d115ccf5e..1e05d0f95 100644 --- a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go +++ b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(piles []int) int { + // 1, 2, 2, 4, 7, 8 + sort.Ints(piles) + l, r := 0, len(piles)-2 + ans := 0 + for ; l < r; l, r = l+1, r-2 { + ans += piles[r] + } + return ans } diff --git a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go index 14ff50eb4..f4d52bdb1 100644 --- a/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/Solution_test.go +++ b/leetcode/1501-1600/1561.Maximum-Number-of-Coins-You-Can-Get/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, 1, 2, 7, 8}, 9}, + {"TestCase2", []int{2, 4, 5}, 4}, + {"TestCase3", []int{9, 8, 7, 6, 5, 1, 2, 3, 4}, 18}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 50f02865dd2ba01077f0fab955ab582d837e2747 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 26 Jun 2023 23:31:25 +0800 Subject: [PATCH 0308/1057] Add solution and test-cases for problem 2485 --- .../2485.Find-the-Pivot-Integer/README.md | 33 +++++++++++-------- .../2485.Find-the-Pivot-Integer/Solution.go | 25 ++++++++++++-- .../Solution_test.go | 14 ++++---- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md index 13dc85303..8e467df37 100755 --- a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md +++ b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/README.md @@ -1,28 +1,35 @@ # [2485.Find the Pivot Integer][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a positive integer `n`, find the **pivot integer** `x` such that: + +- The sum of all elements between `1` and `x` inclusively equals the sum of all elements between `x` and `n` inclusively. + +Return the pivot integer `x`. If no such integer exists, return `-1`. It is guaranteed that there will be at most one pivot index for the given input. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 8 +Output: 6 +Explanation: 6 is the pivot integer since: 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find the Pivot Integer -```go ``` +Input: n = 1 +Output: 1 +Explanation: 1 is the pivot integer since: 1 = 1. +``` + +**Example 3:** +``` +Input: n = 4 +Output: -1 +Explanation: It can be proved that no such integer exist. +``` ## 结语 diff --git a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go index d115ccf5e..9fed189ee 100644 --- a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go +++ b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + sum := make([]int, n+1) + + for i := 1; i <= n; i++ { + sum[i] = sum[i-1] + i + } + // 1, 2, 3, 4, 5, 6, 7, 8 + // 1, 3, 6,10, 15,21, 28,36 + left, right := 1, n + for left <= right { + mid := (right-left)/2 + left + a := sum[mid] + b := sum[n] - sum[mid-1] + if a == b { + return mid + } + if a > b { + right = mid - 1 + continue + } + left = mid + 1 + } + return -1 } diff --git a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go index 14ff50eb4..86d85fa14 100644 --- a/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go +++ b/leetcode/2401-2500/2485.Find-the-Pivot-Integer/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 8, 6}, + {"TestCase2", 1, 1}, + {"TestCase3", 4, -1}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3070664d950f49336030d9678f0fa6382d8c6adc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 28 Jun 2023 23:42:54 +0800 Subject: [PATCH 0309/1057] Add solution and test-cases for problem 1514 --- .../1558_ex1.png | Bin 0 -> 6401 bytes .../1558_ex2.png | Bin 0 -> 6551 bytes .../1558_ex3.png | Bin 0 -> 4726 bytes .../README.md | 38 ++++++++----- .../Solution.go | 50 +++++++++++++++++- .../Solution_test.go | 24 +++++---- 6 files changed, 86 insertions(+), 26 deletions(-) create mode 100644 leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex1.png create mode 100644 leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex2.png create mode 100644 leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex3.png diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex1.png b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..bf7705f2935b90e625f0c8cb3aea80e58fb4eb25 GIT binary patch literal 6401 zcmZvBWmHsM*f!nL4?{{L-5p9J0wZ0LLrK>F!q7;AC?Zk=NH@&TF?33IBMs8hO86bu zde{1Xyzh^5_Bwm79rwQTx=yS%SnUY`Edd%D+7tDc%DOP4Lf=ohU(qfX*qQZRn>+jIes2$an74+X(9K#(eX7nishFQLo zV=It~%62Lz#4$C=_sVLf>|kP$T?pcY3B*uu)96#OGO3d3Q0bs|gc6jz#9-qHr_IKq zB<0nA7{t@F~*;(PG zEQ>F*Sjp~c)SI^-A}YI5`N99P!f zKi-}8kHKY*)&7cjZNIenp2DRXP0Vm4*X_^b%S`X&?5s5`Y~wNmY3AIGA!8j;iKj{* z_`pzW`GsLk26pW-jXdx;=f(1V}X$1V;xgA+kMfX;_BXGnH;D!qxHVKKEAFE zSM7a@VQk4a@@s1VW*^p`;UUz>gXB|7;Dad8B*O0+nEZosK$eO+B$on*4v$VMFYX(CJYipzYcncRlq zI?L96zL^Q%|`sG!grhdbIukH8~jeQv>hs0jQz;_bG4IAbjc8R zcr*#}_7KX6AFOY>O=w9GcfB7NWb~t0_%)?|??sa^iU(ZoThEjmy{_~(<1WC8Xvdq5 zidlVDmt+Cn-r64e+;8r;YUi@tFlt<56=r(Tq<`tR!J^5^;+xZnRFdK!S$6Mmy+7+A z>3@$;k$}q>sI8(adGh@W&#_UH+TK9%M0QiS$)d(A{%5_h9w@>!>N3;TjH)u)QPlW!oJ5#g-;1jfJ47G@;uraNTP#F z`{*u@W{Bw>x_3MnR$}|bEU;=;TcBnF4(BSJg4R3H^Bt#)`e%(SEB|NWhrpC+?^lE8 z1B@Y}kB@imSGR+oSo*OlCSnzy>~~1o(5g&u>av?v#ftR zsn{&!IO+%jG;6HwByy1KYpr<7qjC)6TE;1XaIv!qeAS-N4v)lBytkLABd#mHHe)Rpte zh8LKoeKk(h@o_=y@3BHi!V>8uGOiBit0~wi$Wxqm5W5W0&=MIAivRHT0J~44cm_^0 zZ-MHB_jWrsMn!UW#DfI*mvZ*_!`SyAlLI9sCEDGfF|{dd4EvEZq5kej!r4$FReJdI zAk)4s5gB+)^yet&X6XZ=R{^uux+iM4D+2eJl^{LFjs)*~f=1G{nbXOzHBb!n^LS=1 z)76UZkhp-kMiQo!&UaebxF*a2&U)K+yBU9N(G?pb$Momw&>;}en(BDAT;lkPzbiEr ztq%zjg8Ww*&Q&^YBt18S9+YD$UN#tLIrQH|f}uaB3bP3rsJ|{Xx?B3}!j3)kB3C^n@A%7p7%nb|*@10(BMR#1yy-Cao z{!{9fgWu|JuAZ4u&sv+6hNVCt6WzdJ$$t40Hy(74sNlAOU> zwIKrI2K(E^B4g0yCzKJIr%hm}V7{*jHIr745GSp;OG!Tp<^7vAn0tvLZh$u9 zyLI%foRCKy>{KkoQTDIx&#!4k>_-Hb8eE-^7Hgl8uU-|9eoXT2!Uj>}l04N6A_z0~ zCFxYlk@7BDvR6GUiHV~Ohn+O5i5as;c47?krx3$cptQe?reZ0@Ub64Deo{OG9DD&b z9cz3oYz-0EJOB(Zw!mHURD1T zDA_d0Z+duOxU^m1#i&GSCPbIFmGEi6J~KPCJE6MmJPsxCd}2{7;PUMkCUNIEUYL7a zCvpJ$9z2}K-BD}V5xl$66MgJ}R7#h!7*@RE8_rl9Z&FJ_gUC9j^dv;)RuNs<@iub! zh}lEz7S)YV57*0I>;iVv9TJLjf=zuQ9U>mKON>D=0dhV@(tal{FAj+-elH+wX2pLC z7+*IjUgv|E-(Afb9ix6Si9>!gy5}JLPA&37{yrXf-khw?1}rzYI>GVp)Wh?v4T&Ab zvUIFf@6Edt0zMQ-UM$!om3nMvy0@oK8?${{h*|YAnORZR$`I8_A`?oi1d>4MKzdDw z-|5=HrWNg_Zo0T@MqKCmDS41OhA7e}F;9wtK(4|+3rg)co2NoJ?d3cI zWX?rce8k_Zzh&Cd@Qb!)DMkwl9>m?~<5;))qTv>rx!AfKbzD*1-w(aZ@#@SqSQT@ZmTzNBT^DLL+Mb#yb}k}$;$!pt z6Ju7xNwbJW+8_TMUavug9H$CeC@}&IFTxh!s6}lT{e*VnytmTFtS@y1u1TKX%3pmD zzS2nkciVpsC^23*kC1BR8@=)SgRNfH2TuF6ro$93JY?Mu$t|N9$&{$JB0&F1*D{WY zEcCWj6t)C}nhC75{^*3zQ)1AF8hrLT+vQYCpbxCqQxVA4@A!j(;L3iho!7EmcEa>( z&ssuX50_%+`~qJ@mr6-e1CYE4Uk;fg*?RHYpxkgLar91syYD2ci{I6{U$H5@2nTV| zG6H7j$3i7Vx?1d+b>qnufsdYnvjkhAKl2{X%F4K5)$7Ve()l21^@6GvH0;C}@pa2! zz(Uzp7`bN>H>@PCsCHFcy>Dnyfi(KzdDpdlDrJV?SsK}=f z9A+2%&j!FO4TFnioHPCANCnm>z$1_{b@Ye9H(d4){r6*427)g z_45`K-&#W{!`Za-KEE9XQ?Y)+!m5q;V?$Yuz>UDM@o3YPQ zCb+`7+6uy9Nf&kr+)!?Dg6JErjlM2srVz4jBlo=~5%*WA5Yno3} z*WCXkXk%wrNbp7H>!&b`@Wy@0@FuX{XX@dxm#pu>X+ro6OgitM&Pcx2`;0dX7T*d* z$JFlw4oaHM$`KH=l&NERU2>zhH#3#0$Wf`)(wV|>AQ zZ)Ghg4#1jnqNxv<2uhj40@(FY>7&bV_W~@Ei8-PcX^e7mm6{B9!>bcC8@qe_Lls6tweKmD98 zp8sM`h-0EiGf^HRSY}|3PW-%&`|xsBo`v zDw8;kXg9(s!!dD*m681k?hpqK95+W9-y`ir(6f8y)fOMU#`Zw(U!?YIYH%~3^XVZy zP#)n08yWG3it^Y66a;`l_C7xKj`-<>B_)ybK&mo8&Eppq%J>`^TPY&1Gu@yR~q zL9w_q>5E9ac*NUD79V2P$mGD-nYp=)RQbb-I(83lK(_}30#vU=&YrH7C)qUfJB=Pu zdorwK8pZ+ICVE9B;}&g)I8=Ua_nq)cP7mIfa`L+eMR2t z6JJKbX4pjk$)S5yalEUiZ+n-YSvjHvthZ%)1pa0d`@l5)eW01Zfc9IzW;_+&NWj%W z`kO|#`kSaE9>n3CIAPumU7-JSLc$!HO0v8sZhU+EuRhoP$LCv|G)96?;JP6L-Cr+l zWxFN35~q`Ja}jr0n2>#UmWz@wi=%4&0KeO5*;cwc3;J`3xM3r7ySrpRqxb~5dRViZq;)1^KTOfAxu}(%&QSJhnWcV|+$fsj9B~?|1&7#{YY>q3XJIIo? zT>!b148)`b!~u{>FG<8Y{kIPv!jVoIy*(`IDs}y=Gl*#dCncsq)6I z=yS@bi93f3^z4lMeup#kbnJ%ftlkE@UHWMn0559ayXO}$HNe-i(6@-&_{W+t6%_;)uS zKkgVx?=k`Ip=5FOlLu*LiGK;={mK?+{>D4l$iA2y6uvgl-S8-o&ka?seDGR=?NAT9 ztlu2|4J9ly4%#)yd7cY;=fgWiB}p7oL@Gy`EuMUNlIlF_9YzdQV>RVeJws5)yz}Sn zk|E7%*vDHXOk!d*dl^Wa;~-{rjA|Z|;eD<4`n;{+ZJRWe(%+Z?avOWJ>z%Kb!E00P zL9n}7#g7xMTG5O;lw%ZR)E&%7rNkish?nDiIEf!pwLpkar4XRMPdGO~=ftV*v%q`Y zcL6B^CH9#AN{f$ke(=NK*YQ}{%Q_0f0*N$lTa$NpG=Dvvx}6xed22F^j@n`^Dgtpi zsd~XxSj|j3@*_TjADPRn$c5%DgMX`x+K(XF4)e?GVGPz| zS(k3&dAdW^D^L@!xU428F>^-!27wbDl09Pm(a-|r%G|f#o#=^Kp>+WSf$4uUT-fac zE6v`7Yskdx&Mk-n%tux+_}gzc zz4=4U2;KC78ApD7Bx8Mv5^L0D2J>%Gn_gQ14#`GG_h{z*BTgpK!E}2`Do3}Gea4U% zXMfznVDm`3;R=xAZuenc6bNTh11ckuDKx_4I}r@4dZYAle|ZPsw;-Q(53g3kV|_); zIZ{W0j4b>MJttK_i>K$H^CAz8{9Ka3yBBZu;#$n?-_O+86e|cgPhvA&Hs!D`rRk3RcD2M7t%{Su(+O-uDp3sSx1Qq6X z*c8>plea$V+#Z?n?ewp#b~CE8;=T zJzQ(;*V(d;|JWfdc^!f!$(+4L)@#Vb&-S^@pi>;*ZU+-k`k$kc1l`xP#bCH_Wq(Im zx%$BooqL-#I9qm+UM`?c%41#rVmH%WywW$+v7Tnef6$CKY)Q?Fgq;|GAFeNiM=ekR z>Bq~B0_9D~V+nOD=CE;-I4YUEX@5N13?Q5i_4PS$a19HM(Mv-ISL&U={vLXkla}gk z*02EoNIdqdLZ)$v|BD$!pe2VMgkzar!{|&~*|+xiD$HhjqBFAVnPzRyQ}(mv^vbg_ znNv}>rVSiewFFS!D^~)j$;2?$>$t_Xfz^yXa-C-@llfhq=N&u8W!?}?^d@@D-#CaSJQ*^IQMVIRt77wpJP`xaBb zs%wk>N6^hG_tDE21W)vL$It1P;hs+(>#h@x0e)3)E{1X~zPc!Bz_^czt~(qi>5x_K zwWL>HUvCd6d)AYR*Vu~Ryk+L-M@NTKNopMNTib(TTZA(;k#jSx4@;qfl-Mx6`eMxq zsT2J-z3r5Rtu)2U4SMe}QX{VW>t*+{wy5VfV}&!!(Ppx3j9T`(`dKK_mHwE|$dAgW zSRl6PAG-~Gn^-@xh|6_rc_KY>8NTv>3P~4}vBU~F2zN(kb&_vLH|u(P5EJyze<*T( zo=@F+#M{Vo-iQ4c%nMp&Oc|9q>qYKGMA_S8;y8D*^fFdFV}^`5q&4e>Hp+Km@rFFy z<7FqeF{OmH$49TuO;H$aXDD_04fC@xx~?J$jBhS@ozNsJ1FG)1XdHP{o-D?F`SRtv z`E31tM3gF*v1`ldXR7B?;~JPJ_;AGHC!sB`$6cD z^iqAJsfpih2^W|w;bB8sKqV)oSIBYWiIA+6LOejutFwTOEENjCjZxSdNie;^C02Wj zVm>KC5J@S1p_%AZDH|4sBP-i)yG(Qeks!7=arnld#8*@!G-?8&G3I!b%9=?$gb|^_ zwYG4y$AT507 zd4GQI`(vMdopqh->~r?I*SgoecGO!k0u^O>2r#z;qZJn$xZX{ve+H%} z9uOrtw5l<>-@px~jjV<&8d`0_(|a>4;2z|vY~X>0M%eS;crxHpY6%#bJQegk-?&?u zdD^)+GwRwoS)siE3yMpC#U);V83jcoL|#gWfPXdCP@thvJ*vpd>iU=*=h?-QLn$L- z6vz{ULuKWkh=GGclY-?(Ow~~=va$-jxS?*c@_B-xa?FQBByShV6Q84lg?tFowPJK;;3nx z%R61^X`6>dn?%ube`ND2-A`L6gu~1u|1;3k;ZrX)I@QNNmvOE%Y8rDASIZG~+TNcj zOPMWFA!~vnpHT$h>NnV@K@AMJ+f zfXLW$SuW-(jbc8Ncxw32!$Oajntt#>Q4BjfJNEyCuqJsvSsl(*HnP~q#?i%39RHp! zQS)P`llnMgQezr&tbcQG<%;Pdx#|7But-kfy(w`8?C8}Pj)ba#fx%xt3Fib)JT`Ie zTXcxFwl<&U0R0&>*I~Y@fmY0!_jIMj!^ZD)wf#g$RYUgz%Y1*La5i*&zLf)`(EDIU zMH<6f=~Dp}MZgm(nZPz&61Cj2wR|39sn{Q3eK6QwXX!ph|6$KoC^>q#Gq1FChdV#_ zEm~Lm&(YWZvMs{M_4>Gk@iay8m}u$O5%|>1aF*}-_|0{w8_!oCJjUQ~B3zc22q!_D zRQ7Z&9NqG_lQ`j7{@jfYvXNVUuC~G@c%yar!4?DYP>xuruI`{yEn{(4?H~7odjusZF_typ?ViM3?Co1l?%UU3xS08Hni7L=Z#lFg{R5IML%$&KwrnX|irqKPQlv`G zO-bQ7+Tnb4#*%zia@Gs;UfjdVrqw#d1O}%M`x9LUYn`194)gq1i%0ABI(mBSS0sVU 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 N6$MTCDml~8{|7ew&)fh2 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex3.png b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/1558_ex3.png new file mode 100644 index 0000000000000000000000000000000000000000..a97890611bc9479769085eda4994e43a9649ad0a GIT binary patch literal 4726 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 [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an undirected weighted graph of n nodes (0-indexed), represented by an edge list where `edges[i] = [a, b]` is an undirected edge connecting the nodes `a` and `b` with a probability of success of traversing that edge `succProb[i]`. + +Given two nodes `start` and `end`, find the path with the maximum probability of success to go from `start` to `end` and return its success probability. + +If there is no path from `start` to `end`, **return 0**. Your answer will be accepted if it differs from the correct answer by at most **1e-5**. -**Example 1:** +**Example 1:** + +![example1](./1558_ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.2], start = 0, end = 2 +Output: 0.25000 +Explanation: There are two paths from start to end, one having a probability of success = 0.2 and the other has 0.5 * 0.5 = 0.25. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./1558_ex2.png) -### 思路1 -> ... -Path with Maximum Probability -```go +``` +Input: n = 3, edges = [[0,1],[1,2],[0,2]], succProb = [0.5,0.5,0.3], start = 0, end = 2 +Output: 0.30000 ``` +**Example 3:** + +![example3](./1558_ex3.png) + +``` +Input: n = 3, edges = [[0,1]], succProb = [0.5], start = 0, end = 2 +Output: 0.00000 +Explanation: There is no path between 0 and 2. +``` ## 结语 diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go index d115ccf5e..a8e40eb3b 100644 --- a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go +++ b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution.go @@ -1,5 +1,51 @@ package Solution -func Solution(x bool) bool { - return x +// 哈哈哈哈哈, challengeProgrammingDatastructure/13-3-single-source-shortest-path-1.go dijkstra模板 +func Solution(n int, edges [][]int, succProb []float64, start int, end int) float64 { + adj := make(map[int]map[int]float64) + for idx, edge := range edges { + f, t := edge[0], edge[1] + if _, ok := adj[f]; !ok { + adj[f] = make(map[int]float64) + } + if _, ok := adj[t]; !ok { + adj[t] = make(map[int]float64) + } + adj[f][t] = succProb[idx] + adj[t][f] = succProb[idx] + } + edgesProb := make([]float64, n) + for i := 0; i < n; i++ { + edgesProb[i] = -1 + } + edgesProb[start] = 1 + visited := make([]bool, n) + for i := 0; i < n-1; i++ { + selectNode := -1 + for from, prob := range edgesProb { + if prob == -1 { + continue + } + if !visited[from] && (selectNode == -1 || edgesProb[from] > edgesProb[selectNode]) { + selectNode = from + } + } + + if selectNode == -1 { + break + } + visited[selectNode] = true + for next, prob := range adj[selectNode] { + if prob == -1 { + continue + } + if edgesProb[next] == -1.0 || prob*edgesProb[selectNode] > edgesProb[next] { + edgesProb[next] = prob * edgesProb[selectNode] + } + } + } + if edgesProb[end] == -1 { + return 0 + } + return edgesProb[end] } diff --git a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go index 14ff50eb4..0ab2d9147 100644 --- a/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go +++ b/leetcode/1501-1600/1514.Path-with-Maximum-Probability/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, start, end int + edges [][]int + succProb []float64 + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 0, 2, [][]int{{0, 1}, {1, 2}, {0, 2}}, []float64{0.5, 0.5, 0.2}, 0.25000}, + {"TestCase2", 3, 0, 2, [][]int{{0, 1}, {1, 2}, {0, 2}}, []float64{0.5, 0.5, 0.3}, 0.30000}, + {"TestCase3", 3, 0, 2, [][]int{{0, 1}}, []float64{0.5}, 0.00000}, } // 开始测试 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.succProb, c.start, c.end) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v %v", + c.expect, got, c.n, c.edges, c.succProb, c.start, c.end) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4825f46441af89c8a49dcae1fdb5367dc023fc42 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 30 Jun 2023 23:13:51 +0800 Subject: [PATCH 0310/1057] Add solution and test-cases for problem 1970 --- .../1.png | Bin 0 -> 21139 bytes .../2.png | Bin 0 -> 5138 bytes .../3.png | Bin 0 -> 33980 bytes .../README.md | 45 +++++++++---- .../Solution.go | 60 +++++++++++++++++- .../Solution_test.go | 29 +++++---- 6 files changed, 108 insertions(+), 26 deletions(-) create mode 100644 leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/1.png create mode 100644 leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/2.png create mode 100644 leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/3.png diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/1.png b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/1.png new file mode 100644 index 0000000000000000000000000000000000000000..1e866a56f8c2325615853481888e002c3d6749f4 GIT binary patch literal 21139 zcmbTd2UHZ#);%f%Lr#)2l5S0R$v7q9Bqpl94oIkTgmfM2V84#6ds= zCFdZ##^1g7yZ`sSwcdJfEufq3>aIFfUFV$IdsmE}jw%5z4eq^r_XyP09vR%b2Z93U z@31j}zuiImwZH+**FaVAUhN3o7Vr;-^F!^2_wF?$;$7Q;f&X!!YUaN8?h*Ff{i5}G z!5#12GvHKz^w8+J^-dm^8JX!q)M$ag#RP8yrQUsV@?h2O7r6cn0i?jG((jHlYm&B@ z4j%i5%3w5dvit7!XUoCCH)p>I-={FW`1<{KU$D)rZ}-Ruf6wpWkq_my_j&~JfgcC` zdZf_ZNsk#7FZAz;AO$8K-QT-$uew2f{}i+P|6eRh8GA8DGwj^q(orj4>um!GY_ou8 zR4{Jjc`$vL`xCo2)zbrp4Nz6qWgcCjxMf7>Gx{f5LZ>x`KlT*X(Q8dq%4P8Tw!xEe z41!J!;tZX|GRe=zJCL%{Yw>bovG3rP?oD1R3_HJOm5(0!LeG1#dXDz^8IkQDs-WjT z+bq16kz`-k#5?meE30+U8_F6^Z`uy*!qwPGm0~j^1YWZZhV7 zt_;*fk$Rg(68t!OPTWb~_#=3&dL-6(6BIy=_iIyCqYn*obzt}*LFr*I^f=>iAF1c4 zv-Wy`qe-xqV}I9#kV}K8m&*ya=X1OSqW&Z0`*NEx=G51l zYLgA+6UvtjgUj8H=RHM;pQU4|vh&OIbta1)^n`QUk2Hk0T&g;^IvA}9_veeV87xpJ zIaO-5HY_7<6Y@j+NPk7m3QoD5(1;!U$`V5mi&cg_j~eUheYdhtKG*C_kv%S>-S@S} zMnv_U(uIuLjUmlC|IUkTKTC(K(Z1z)yPI^%*^I&o32Kxev`+X-n)E*P63NI#^?}kM zFQ@+7?f28R)$xLrv*5jl=gkQXUNzs|GGpf<0s`#TFZ4|Fv^WvK=I#l?M&4Q>#-<_VwbiMX-h_?UTK0J3mt2b2?DD$KC z%ll*oxH%`!bSL>6<9D;ozoVU08My@}D1k95pPQ2u2vf^oFfIds-{H7YSy>y|vfXyc zX3;ETh8BFJSzfp%*2qaDA{_3st)rl7o1uPb;eqz;m%%fk!B)6c&wdV-<5N6 z*3Uzm>!b?NATO!JfC4(?bC@R6f?%5xTS<#|_t=I}W*gD>#SRGs!s*_}<1N^QyW`47 z3I_`c#UC2QK8NZc2-aQcuF|~8 z5`*(!ew}yuZCT!`yc=>c<~|H=PZtPzMz`ix-XkIJtk6tYT>tvVH`@C#B1~-!h+y)P z;q5rI@QGjk;ML!Grcqs`63@a37jsmT&x`X244!-?YO-ha;G_0s80K4%!l~Ejy?vCSV=V||E8$Z8*+=h`$4>0`Un z0l(+GEYlt1l(%Y|LoF^Y-f!*!xvrB#R>AE<853@d>GkZ!bV3%L4|d6St^d%D(`I-z zRD=p$8zE>x_?tgFKh-|`^1xtIVRIvsz&B)l?itz0#+w1V_ROpp`O%Rbg|14jr1^OY zNgv~$F)_R6*W5voC!ap~*K<#x1#9=#QU;8!4zl#@JENwPz56p|I2LEA-H!s1&mm@b zj;`0z{HmiWx!v%2C%uoe?AuP%>|yQU-dNJA#*Z?z%#(S7`5`SfFZ(%0l!u|-K6zW?c_a|oh=bp>$4#-_xm}|M8TCRaRlua>-+fWH6k-gUn}r-$57(cyRK`94{uE`ySp z8P%s3rrk^3n95jJGzD!496mfpm2Wq4g5xql!`e@etD~N#N3X(Vn!X4g{2<7eMMP}K zax-W8sg&G&p{NO$eC(JG*1P z)g*ner9I~?hlZ_RXy@Wc%($U?h2Tk}48yl^qH-JZn5ES|g*$H=&r9$^Dc*EXYZf_X zrXz~9?6aO9+(%|#h~#C~5k6hXprM(r$!ZAD>3^Yduy zgC8$6?nwwTr|;%x4hM_DlYkzY!13YO$XhZ5k-+^e3EE-JA1@-SjWvpXyY6>1Qi2Fr z^2i_@X5^l+dBCG@&-Zs3{Nr8X;^bLXW7+OU#jiE`0(FmiMcHW#z2~&9ZYnYvA{&Zt zngOqN9=0C@Mj|&<`i!0B=+&Bu5tL2T$8oy34$G?}18nfrn_$NZVdCi0?#DOf$c}J7 zMl6a`mFXAYI0n>u#Nyi&Che+M2m!ps2hb0;rp_dIR__i@$yAKA@qR@adRuGEblTMq z=@W?b6w{pIVd%Qwqs@7fMNh)!mnqcCC!v8awuJ6Xu!&|Fze%lpu!=cz27mL^SY-_% z%%v0ZAhlh+;CMkdfm#s1mfz!z(aaY?C5G?e_h06dYrYE!-%AV*v&prI?hOp{|T~PRop;JZ3+Z2jw+sifNK6unVqq^#7jTSc+odFsUd$!VHy%$ z^s<>=s^*PU^(9(PTY7}{5H*79uFoWshdk`#+H~5xSB@5#eQ##=6F!`oJO8vq)q>X& zKXf8WWYT25Nl<_%oRo{-MiXRqb;&^kuI3CnM|M0O08U|mHaxlE3BA+sFR6vl z-9IFYowcL-nN4|N$@j-BATcpcxqGi>%qQaV}dNo3nDM#54$23Cs!7s zR3KtpM(_I^efFHJ6Wuq1?q=Oz-1$d~LUvQBU{LD;gLb%p=c_n#ciXpiN{S?~RVQKQ z$2H#=B@{kwN<=(13BGRmE&@7}0u{S&L_c0zITJFq*47Aj!@z3KSe2iN_F*Q5R6 zMCVTQ%+|uNU3^Yd(eLq&W`^dSr~1K_2it~R?yGn?Ov9t4LMJbUHx{`OnO`Gpvj4!^ z7|)OuIE&I&R$FL1?xwtB7q9+YQXqz|1aDfOKt0EC85kJSGN4?RbR$cq-?LUp3u}Ll z<7j!fL_Y(&eJcKC`xWnF{IBjK{Who&WXi96_L*Xv_=z6#sBXWAZTYGgqzlup@jA|4 zR{ZlEO-QUInus1xI6GPGHwK2{TgACyNY)~4cDWuC3bfM8G;sKXJH(k#VLF>&Y+kR5 z0a|B>f6BikC=b#2U4S}opXtwGp{#7)SJ(vKJU>2XrD(1L<$$K+#g=PCveSnX$TsF3 zT36fmo#*CC?}dGxp|Z3Onx7QOT3BS*`dwAzv3Zl#e7mMLBzXHNSO)uXEWaNuvbm$d zL{?_|U0S4wh1Ow@$41C5N4S?tx$s*%!%jAt%TeTrFA>y!&6aG~802R$?*1`Ab)k2| z)+-ZyLP;%f71ZJ^czB)0z(-N=+M9pEFxO(@KG=8eQ)va3)Yqj~(gz(mCqKs(W@`u0 z*$4K2LNbmI6kc5pr&)N!V%EOWM;tslf5fePyerk-G05brgC**|K;9#M8{bD6&^_5K zdT8Y0_Wbdc&Mw?~o$`9>8K&nzalmMTgUc&XHB)a4kL-}aSWW4%;&$@tyq{jDdH8#V zm+hZyZlm=Iq8tvY)v4seWSl@{b&K(|LL<7tey;KqBUy0=shf6&FTIs*WShVu?AnF1 zTA$~WED_Kt+J#T)9$n>`4dH8UPl-B6Ld8(3)~LM*r!1kjH_IvX=L=B9J?A8lX(bs{ z=n|KTo$HXyPMXr;MUe@Y;SbxkBy%6 zjw}-6sx=O~n-T0(p3}HRxfYzpG6Q+300KhmRQf$Ux}zJ?RE{zCC%nk~R0;2E6#MU3 z(Pft1of_!#I*UZ)Q6m24c<85Jme`BeZAGUXdU^7%_wuOCP$`0@tBp@H463FAZW>7X z7`b$ny>B7ny!lZvYa9-+E+6CLFX(0vzjv!*cz^g&hcU8qK|fjZhrWkg5%&eu^n6^p zuP2SOVf|9#iEi=ih;0paCR^jGO^XEM9LzxO&6G*m6+I+z{@ZIycEGqXxuegb*qU>OkFRspDxa1K$ zrfE3%4otwxJp=Ubm&!c9E6tve0JOykIQ>t<*qBF`()?%{YPD>s=>NOLcQ>l7s9(Ph zWb}y|XZr6(GuK(8rE@m`???Oh`|m2l#-npkSA+eU)eS@n;scf}wqZe}8-Y9EyF2*w zxcIbXGPYDvU>&>?gmD$7m1!q$fgLXzU~5VeNFoFQ^aB+Igzx$3*Yi@;VF@&IFNK`<_XTAm>bq7S@Us~yZQx-M9zRS-G8wrTqnY zkW3E7CxkSy4cw!BY>m#h2^_i%JnnDDU-Tt1I*j~&nqacDezDtAt^6B%p$t*>K7EhY&7g{`wut*6`3QahI27jA33VNml#b@!L z@r$AMEJUnBtF3yShBA5Fv&P@VQVJLlXw8P!3~uCzIdD6@QRc0(D$f+?`(sr79M5WY z*SbGNv9PFEVTa^WJ5m@VAIhR97^@I^`PhSj&!DPAAx9BZ#09n(AGIi*+Kd%D4wAUM z$RmdMNg0?A#Zlx+QKK<+D&e*Tsl9FEH<+IucQW`U@j}g*gsZdE->KI^EWUc-$1AX6 z*!`bI5e(AsQA&~bOO|YuKflH5vd?C}*GVwKQcmXfQks?;SBBHGjT&dprz@0RgZ$PO zRze>-)(nREIX!`Gn1IB-#Wx##YHg`G8GTleHR?>dltD8qn&Rkboid+OIC4t4Dz zj?Pj1gUII9fabvC6rC zsKV6#+UxVI2pNL|(uIpi3+bc!?N2W3hZ?}3)#JwcrPkMwz=wZLmb)J{Wgh!(9w`Es zJ7=vVk|`RRVhE)EutZU)Aq2zY0UGkF|6_a>_kPy;&J=d#0^9b{m$;{AJ60GnS8;kX z!o}p%RmKk)TED?%zrS?1`sppML*jmohOXkVocU27+XCmT1 zzF8MfZ?M}DcH#@q2ZlOvS!ukISqvTs3U<9W=B^k{$*E)@*4~V?`)m7miN_CI;K)Di z$G%y}{I@`pGeRdZPA5k}lAT{-3;_q>bGa^5@}B>-M#l^NZz9C$!SrKJm8bGixzlAu z_Dm!d^8Xkvs}Q*$8%#rdrN1;{P$2NcvCYf;VPSv`1*9e!lvy>8VYCxq)U0z%OgZ|% z=;!^HO>Y|=c5GqD=cfTSB=XxVf1Zr>MlO2mX(J^PJl5~=EexW8l<^vnuEW{nnn}Et z;CV=bUJYr-qc{33B*V!aQ(jRk(?7;FD+wS8j^;xSYabDeht4ofTQk%#9-h^2z!Nd@ zLbv}p%twPqSYx=MO2AF*|GAmm{4wASlFbz6+l=AgfDH9BLp2fM<*JhyqSo&{FMr_o zgeA`MjoZ-|3JSJ8 z(+w&QHA88A0`=7+zx?aM|L5!GRaYFiR<*qQ0ih%a$mu38^as$yySA|kf%&HlQ6~D^ zf-3KkTR0SmIiO;BGt`s=F#<;gCcOX{2ekHYGg&K;vQDSB_Es4Ecq056x}zlvmVL0JW{T*p%OI7p>TA4HU0R1DK5W+|ag z^;Lb$%yr%-NlrD4H4#%l9^3Q7e0PH5q-sgw-^m{(qTd{Zgg6kwj&c+ud74Y%7P1<9 zw2zuE4+1MEdqU&=XtmJ2t-3%uos@XFfr7Ef6S=rbqpIo4SD%z4EySXc0~ROcXE-sH z#)EeAg>#fAGI+VWf{93Qck_yOWWUi?&1uNBgB%P`CH-cq7LzWr%K6hmdfXSBMLC*B zgee%qPdUfRvK4-9gRFNjLR^9b#pYkC<<5XMb?G%8{Gl_=$wg4;Z&JphrgRv zB8Ne6@nza*BXWz#1I$lc`=>|0v`>Z1??kaP2v4uJ&yGZ}IdF}k2COq4H1ZN^|fE++`w_WiTbduQ2Q#a=t~8X#Y69RjSL&cO$1$Jm7yn&&F5k{BbUqx$m? z=82-`t?TRLC`zRnwV-V&4V0E3l4@3kOssuxj1|{CjBj;o%;}Nsaucvhgs)sm^(C12Ak8(ip~4!>S|S zN6wSy)6cm$4qK!&cDPsHyXpgD8t=n4knU#z8=2Bei1n|2_ z1cel*Bh|ZcAHZ^qO&`z?Y^bF)rD|g6d?o*>^yw`x9zn*j1cM}C3&AkP$k78aJ)5*= zwQ&UolrN1RnqKGrR&{)q4x+5&fu#n&2}sRK|N20$f{CCW4?Lo`V6n+$o2pf4AyR4R zX6mEo2%Dsw$F_PvAp8(|;~^;Q{PhLdhi&F!W9|^I1roNl{+=7Rx|rZ5GDx7tAS{N} z%?U$z9*4KA&l&C|EBy9lf_Rz;MF|06koAlxUT)`@7D|SwNMqEG)2!rPr|#a%>I)52 z7gx32!t;U~jD%jaOny8&XXjW(;Wp-~$DSdXW!S$hU$OJSM1F_nXs4*WNYDA~%%Yu| zvaV~;lu2V{p7POP8XV%n5Ga>B9~{DOfs?y<)siWdM)3{fO{&%9z{txotg&FvJ#O2x zScPZ}P^%^$M!Y?2l5~CthW8HUPDz)e{V@4Q&g#SyDuYt>sN?j^Egcl0L0hi1HZo(| zZvwkA)J^Hi^?|gYbzw(GgfSWo*#=U567avTo`6(O%*GvX-c03SZH~|;*Ak5vlsdGrqM?DfU z2#vxEm)Jo*5wYcYkhGfp`UgUvI;6fET-yi7k)NqPB;^2_^tW4Z7d^M(gJt(!#s<&L zG%~Gbl8Qj3H5fGGh0ou%Fh>HeeGA896o&WGeWe(#L2r`2(w=mfS#ZJuHOgTUbqS=P ztS>*asLVZLFK5hW7L1zT(VYRUsTkBu6!wG41w>`BY6GyRw_T@xf57~(BeJE7g0JAQ z!Yp@~lH{B9r|_FKMhAMz!j>?ex~w7CWAfS+rSx#=ruVj<0MScf!58&{fKtF{kMRYr zC&7LwZXS?>$k0s6gQl-`mAIT$uQ`kj$RKWo-G4A}ODUn19QBirPzmv*E*a4+oi4V? zZKGW+$N{B}&OC6n0nSvwtr02#pA`C)du+@amEtf#j+pgY=IYwQ^8o9_m~vW$PgfxI zcU}PtQr_10Xk^o2C3DHh_$uCgbPs4;(MKmBV$WNDR!H9T@VBY4gyEI(x^gDT@OeDb z<5M{~F+iQ3Jbm<7HK!qQ&K7Ghp7XV8=z*iw3l~uPwIra=b(3>H_sI5{E z-_`=6ndGx;Tz|&6&uwRW>0Fl&xNsNs-Q@WWam`YZd{?>16DAmsP8Z;KUzBh{HEHp# z4+TJ`>0q7AdL)|@tQd{$wPU%;6PS+>QPIS4uOzs7o#EwxXu$-0jaHke$bbWtq*7=d zrv#6V#!f4{EyDSeH>5L##-j30Q2xJR zS91`g8ZY6JqF`tV`~9U@z#h9WYHK#JMEMfE?j0V7)dH={(5tCus^p2X_XOq`93-Z7M8& zw|qkxUy~NMq_nfylyRG-B8q6NR|qdR%oe8k3BPMw+gkom) zD%9^9=DhqBG*yP?uu|kZC}KnD0Zx$0>a>H4uhY4;Fut%cU{mUK%h7illQh~3S91cw zhX||~V@zdKe7?T_VdOi9P#RlG>|FCl=;pL&v~KR&3;KBmJA<c*(rrNB7Xa4>4> z!V(y|!V6{m$kFba75_QP`cDBZ9(ujMq}&MPaAz@^z{3~`%(|sGRL<>EQg7+wu?*u{ z@8cv>BAm$k4OMKX9qkbDY6>J22w&4(U>acUVCaO!!VWA6+z91f4HD$6U8R{PRc+`8 zg^(Cu>8&gojufBHkE;5@Qd?!IpW`-TzWOxY47y4ENQL_h5^bUMN&Wi^lBQ}3HmHHs zi$2_AUY>nYoSdpi1p*r6p+S#_D*Bi;jpMbkHRY@eJCy7LC4U6whaap@2dXjL4EhYx zrSjT8U|gP3Vwc1AGunx)3@8wCwEAUho)EvqnE54>l+U4mWWBR-a@!C4eQ7mJ_Asih z#gf0xj6i*-_9mp69Xc=TYlMkLth+@Kq2E@<3{cnW){sld*mXWXOgHo|7;fproGI#s z7D{Mdk}iW6DfLL%kVBF@RS(73uqyAJ85XDQSyftC>KRP>-llk}tz{v5^-+fMVFCDa zcuf+!F1=a$&u9bsYn0+i<;`VyVg|?=5~tyZm^3U5(ODY~UV?l1jp+Qb(}z{C#FP9` zl@!!Ky%F({X(gNE+jD@Qh6x>ZF++!17`~)vGYztY7QRIebT)6&ka4e&ygf2j#jJ{p z$|<=`YsMAc^n%Hpm=^mKL_+n0J?P$5AgOoJTQN>cX^`9nJQHP_DnpmD26Hnnjk{Yo z$3pO|Nb2u8Uiffqr27EWla2SRieoGtGfzks-fe)MzVfNCylx^T4<_%&`G;oQXX3rT zy8=D_z(N=eRJVl^@xx_NLu&#w+ntG-7zsU|!))EKRywJpg;H-`<^+V!afo~oCFp=s1!-9cti2| zm;E_$Ga!ykRb1yOpFuhULS^~@4j9i6$e9?jjoKg}8cO;+%^tJhyYJ;x`&so$39d>I z&-^D;9j999##J<>zno30pS$w}Sm>&X(|Z!O9AypD9*6y9e<* zR!-L$YVZ!gkPA5vx+TTSJ+*_0s2fl~0#i=s>HAzY`96(}IXs!%CC&cgyyE)R`XNE- zkw)4MV(1Yn?Kx&oMUQyTD}tC%9Xeo=~-z@%Xv83?79DgC?@UitMc;-59} zeT3(g>mS4L`2k8}_3z?47eOR_|Ezga(!jgN7nc2|0hn}4racuq+>PbAT309VxljQ= zLGE{sNr;^&JlfM&tjl~Vz`|1(@MGnp*6;S39j?$q>^kh zWgJJX#>_ zU~w07p~9h?e*7q>gadjAAK(BQhDRE6bc6dJE3-fWFK(iKTV3}}tZf0f3xzL^)i^s| zoPDVQrw!lKg{u1E&7(UD{?=}oap{0+%A=BVZZ#Jq@gkmjztch?4-qQu^L@`L8 z$=r(;H~1a`Wx4Mq^a(KAysBFXqc)>Fe&f`}24&q579E{vLv^Uer)%w&(wD|DYP~wj zR|GwM%><1aRn%D2iTv!L?ik|$`@5!B*Mdo3R2}fI-mICSzsAgUGx&bWK9Ucifb8^uoJjyU2FQ#bexJW8EOqlfn7*U)#xHfXo_^XWwW(=N!>sj-Db`wGCUXJN^;DacZfaP?FW1q&GBAazz z7pai26nIb`w>w1BM_qmPI1su0ugXI4a%ISf*}Q+u{~i4GLQa9s>Q5NLqCeR@N5RW$3c%?8Z#)h9}_s^K}Dkj0IjZ%DMTOTHvYR zsH8V9be=;Wqqc2R?-`sK>RqZZ7xL%FwJ_}P6`0+R>~+Z&5qU_)!-w9TqkMm40eCB21)(5-OXtr}nZO|$vurBVh}qtOuhBSPwDde z6nb<=K01Z zq>ei*Ss9#-s00vypKorHzYf1`ergL)*Frg#eD+JTX)EpcTw~LQd#nAHyv1p88bI#{ z9u8#+8(LqdH9&+j4h?p~Pg3wpgVu7^B~cxLdG9miiSVpIELfd^ffzFj?~z}443>k= zi=X{6rV@21Hy`1V^1GxHE+cVKr4O^D-X1&2(wPQxQ;^k{1pzC{TWg04@cG8a^P)$M z7iNttRu_yUgaCy54#QKGf&y{g3vILs)Un!3kE&Y=y0y+Zu~i41IYilWzEvvJBsjS- z71+{RQ}CxjpYfV6tKJyxiPj^f3jDb>SO;MAI4?)PE5W_rl*^E9Bno?&IH2%t8uQ4) zem`e@vwn%$=Sn|xQr&WMlH_YtuqK0%8>_d({)1_%HUwL2Ik|aZi7~;$#IFChETVQ* zJM4nEGAMz!s7pix<*B?q6pZ(h*BHRjQ;wO8Qv30~ylJ(9jTDQo?zEi^h9?X1ZV^|? zd>Zd)L6#Z=pL%Bhq%$`Kv03N5s`*esw1B;u?fSrqGtDGY#o(8GzJUFC2w9-7ME=n! zs-Y!XTN@|w^&_+eFO=>tvs&lole*}adZC0D!-!UhXam1}VSGI4vBbs~3AEx1<|qUk zF?mV*hq_N=-`e)~2k@LOnqdO=dWqH3k?3(N67)0Xwr5WP&V+ry`m-&GBqpR~;iV0h z$D>E<_V73GZiX9cba+2dIp+r;8}WELxCF5S{a5TF;fk1lZcL%MD^+>KvD_m+mM+Pj_T*MmXc5|IQ{yeG{^5)p+rR>UqxDl#Ffg|q zYZ!KwK%0+tipvig=0k*1OE7dKpVF{-aeQsso{C1YiI?*) zDz0_X>h~I<@X>9X+LwgZG9&shflv!%492cq*cUmx(MmZ4oYPM_%-2wz3{JA*v_w~D z2FVD{K=%$3r6-r)t(kYko&X_U4(tiGx_U_^jtK(A!WQj3&VhnP8rf{|1HOKg;yhpitr-U&7ozU2Sw%9j>_2_#a2fMuqgx2R^|dYO)0fD~h}Let@lOiBBA+~q-upvldl4cdW!vJsk^kE}V8 zz0pUlUnYK3uanv2`_A*9o?>ml@Femhp>(4<`?QmjCJNT^M4Q=Zpj+zo`0^+EGD!jl z_>S#hN6K6Nmii5wu*5UYYZ|~0|Md{L%+RGj>6Wjkh;kSt)>UMHAdcZG4!3*IFCqKHr&;iS7F&F-3LnrgZi7U*vQ)LfP*{pW3oEBO(3ol`- z4PZD{e?5Lm`pO)m_RP+x^kKC{mmY$u*52qX2ZPYRxwLpU)3hF=f~&MmbCeoN%2VOO z^9Jft)xYqKcCgU~>j>M5*y>7kESNzxec5faPyPo9B66xgWxDcN209HS7NFL`Xs!tj z)^ZJ03j>{CPxwJgYKV4ML7XyH$5$?VP_(98EO;@s`m3>O627`Bg%ur;v};nk36Cq@ z;ziY&_f^>UmCYSr01J6fLBvOFwqlHo+-{L^uh>e7H<2S0 zXz+Vh=R@gnO@F^>_v|XRIwSsX25$O#cNJvaB*b(zLvieD#8|0WssGJCwH>+hCc-!R zgmc`jgMVH7T@7+PN_kJuh!#rhw0-(;SHqffTrR>*dnbeIAa(}Sns_;?B>H0%&bY(- zIE;MmkzbG?Y{Xt4#DO)XK$4HvWFI?+Em}rCKB500Km|4^TK}|kvvj($L!5scfWjxS z8olBauq-;?NxDc@M7mm7A=w)hdi+I+Q;?4f(S$2-bFG1LB_)5RlWDSQ6iO#pRgCIJ zzG1wlyq~25h>D+w?Us!jp?==tm+3t5*My}sg@_H}DFyQ>H)q#XBMnlT6)a|CMLAVI za#5~)UZZ_PSR+Y-GT8^7k^h+?QaIte0U zs(e1RF|D}snaFS|vGX07+4ePavd}4Ar?4#(+3*EaPKm8moPIPU09t|{U=Aszao5Fb zHUR|CK9(MbaHL$}v$q(%2_%q*LqRW=eed~k4!p;%_9aHlWJ%EibaYWVa;My4N#3ZC z#>0iINTn@S>V=3Adhlf`YiXJ5l;rtD;rm;>+o%i>$C<^sK`?jzLu9&}uuHPHxkOUP z4>gs^Y(3dYiV`|90?HNEhp@JwU-v0I@W+>|9Xv4jiTMqd!{}dYQNRD5DHES8sp<9) zyO%qbjvO#F0Krd#^l#rv5_vpG{+eg4h)zwAGVF`%Sa=i6CEHc7Ed~fvD|c4UJx~@e zf7y;&k^xxXCX>D{^LqU6T;{l>LC*m%s=@o~q9f zCGAhOF4UEGb9t|`?Ypp9pAQ$MnQI0%~ymUSfCLIR#W?c^#Mn4%W zmj}O-5-~O0NW&+5u*Q1z0qP;MZu$H8WSwtSQn-=`>_{f!4ShzDSuq=Y&WYuays0-p zeAtfziZ+$$SsGu6>x!{xp)XzN&sIKkq?IYb2Giskn@%m$zk(>rr&c0sR>%*gYsKRU z?ij%C(oJ!QXg(U&*<+~Z7)ZXP>4ise$463xLglF3E0?bV{Ph{)!XVeko&vY&aBL4M zXEM%5v}cxZ@vdhAxf|GY1QZWNQPU&5sNX8gk8bPf9M2|jacFtQKI=Rnttr`H)j9lc zN-!6m>Z*_z2duH*S2HPrH7s%PSy<#(UW0YKT$rK9Qh|ymW~Q)QaaK1648nozlCAEv zF9aB2W%K*24ObHu(^@F_siF&Y5IJeR0B`-XcL%u=J)q* z$hAjdze1^uF>@8;^WBpcnk8N5xoz&lu6X<*?Fw-K+?nPD?3aCU-UT4 z0F{w~xYYu!q+%A<@k5W#HZb)j7n{(GUWiA$ncnxl@RTPTI} z)?-$eOn;f69IwnL^d3+*GwPBw!cSSio;E}z5Rx`GJ~b5FBr$nxiBtOspBWarwsLKA zA0i9*@PVYyCxjCKy{pYoHqVo+U-+C4jWHWw0{YZY^Li_JWraxQZOv2w2<+j`fKfoo zkntk8RzW0)E|Pj-QF4T5???$O8=0J(sLcgUkjnles&+ZBX|&AIa>qUc1k&er0Rn~! zpJZh6gSWVg1*}l{Ej3hvf%AlLodN|3B9T_%4Kh9x7Q8SGA`|xD*LaQBJq9TT(t$1Htv-Fbi zmzX+}!KPn0vKbUhb&yQ)3Xf?VwZXf@p@oOrod*UeiwR#|=tspyCAcVY9MeTZ!~HC& z%Sk0To+~;l^>mc!t$-Ke?%88bZd=pWn5wA&`&l8bn*97vuCnbXPB&9upwm?hNFhB; zQ!Stm>Qf(2P3FmEIl!I)rm&}7*i)W>C8~F1yscx8&Sjip@Y2r)89E|%Lo$W0C2ABn)cD(M!vm$ z!w%v~!4ut66H_1Y$-eCI=3nQfc5$#~c%>fEXqJW?KoiTN@v?DtYZnzX;bccC3a4?< z#@rX132kEjFFte^35CskaWxki_sJlJyKp3BJ`H)`$7$;N;JWQTp9nBqV;ZP+=b+ba zw#{t{gn>#{ZjQzk6mJ|$KGrbRXZ*OBSXk-@QqL%-(t>bN3N_U{4V-z4YJ->Cu^G+c zF+ap5T_%nWcTWK+pdu|G>(JaohkA-IhzCAS9vDFz2qPiB9ez3Wp_0jAe3^5r0gK<- zrX@g06DC5ZQW~_lp&VM-ex%^;a{h);+!|fW%a?9P^n#{hZda zol&5S%@V%E@ITbac4q#%j1Ec0~vK-DGrJf6q{K ztz#JzTJiX#4BuS3FVc)ZDnWxuDFhe74iO$+Fh__O(z z`jyL^b8V-Qq0OtDM#1>FMmxHRs_*8!mf_d0XlaGBap}J78(WZq*_&egGY&-A`{UzY z0;vv8Zk!d9&%IRi%(&HD`t*zMw1B!UOwa&QoMEWqFB2xZBMg93f30!m>7rkEAkcfv zw$9V^?p-r-fC{ts!}t)lSBl%m%p^d~=@N{6B3Ma?t=gQm#i&72mZ${RPY$h;DgEKl z_AV=|OYqL{Q#wcrBFyf#dK%3Ro^mfR6_5hr7j+(zIu~7P_2;+3%}S7Oc`Wd(o+jr3 zxV;>3`z!e!TL`S)2F}rd&|U3d5^5{+gWUAz%QuyZA44=l=*m$q+;77$f3^eFu<$RPad1|C8ADANA}1 z7Qz0%Tz5XRf;ljNBs6g`;)*Qd*DkXE4=wBN$4Dd&O#}hGri?P|Z_WSF%yL0jchpfD z*yo7=v-NL_W4NF`vo|p&fDGym$+*)W0ub6ihksE%QNVRISexR``BSAJARoc|OKjXp zWdBNpflU^7po}hlmx&4L8L9H}cSM*O>g%04_#ct*sX7_#*RCWPeI>S)m8%s~(D20u zXaf&VYnzi;9nfm0qIe6_JIzq}q&10zq6j`w9m70{47%cro-Jp)Hn02MDPSGV1p35B z$yO^UNR7jX{OOr42A_m&-`wa3-}{vds1fz>=_-u?$N_K{Bh;!`k3b_BXU0#BU zz1xdh43pY#Z~*-$^@8CMNXBtZZrUE7OHzqE?4s6wE9Xndt}S#^E1pO}t%)OGj!A3L zVi+n{`&RZUKqm0e>~8mfOxQJc9GAlxlPy{)AB97JKLCSW|m5jNTWU@wo)2(Ree4&xbmb&&JcL zJMM{9`}1Ts+mE~M#{4V4sZ)iVvK#gcs_u8N4w~0meW?D&00$$NC7QX`yX`R)FET0X z{c8?^jXz)WWh2_!fHNw<`A~>H<&-D@w);3RJ=+5DT9g3$W#}8dS;pRh_is9cVSo3> zxJ+U1$6Uok;}_#e1z=JLnA~lT0i@tr;s4rg#KuhY=jh^L9NXPapIbmr4oo2`%@SiC zV5f~Ru&d~Q3IZy3Gu*qqJw(9liU21xJi04scjfQUA&h@?AJ~lJGJ`+Yta;aDU^7v% z^X>{3A>F+fk+AzL5rgS47S)I(V$^jYYDwBjB}zTJ9vO<`BXKicjEo}a^I+(V7f110WuKgH#L2&RPVq188{Pn4pE-B9-zteii;36aYkWDPV!b-pBGjCh3y z6LpQydK=-@1)eAazjqY!WV3FEf9)5PQn7yZ(WmsT=c0Z)2cNvt|G!!}6K^QE|BsiQ zjG+vJF%y-wj2VP!kaZrr;%kc-5+TNteaSYmWQh^kDnz#MBxHDoX)I&kv&0NS3du5v zeCPX|-=FaN2ktrdp7(j(_dTEcekbE)$L{rUKv1RqpA-#+g__}C$7NsMjEN3XIQh-$ zJ1?VzNFB^bEL<)+r>^#A|IRK{?J$?&p%}KbY)GQ6k7)*t%P_ZVaz4?Xb%)ZkgKR&P z`smu5#n}vDY$058_4N6|e#s|=F*pp;l%dId&rW7^22rMpcPPtz*;UzGKe6j4iu0WVF(F8VT4dH)cS zc*zz+1H|Y6fcE!E?7}xrYIX?j2RK7sSkb3|sgeF(F9)7q9XT5q+$sSn+ul=EZdsO` z)3iu=YIBT8?IJdZv$R@2>>3e!N04>up_9Ah%|*Jr(K??#?0tqt2*9r`2RiqiZx(J6 zAo`*3z)j!~RAX2-$^CSi%j6~}vrRzg_=Oa}(@a9-_xV3Z=bCZaOnn$^iqFOyy5e6K zyAP!|&Xi!ZuKv<^T24i8uWDMKSo60eGjwPgZnq;s_jx_$)a+?11C~Y3&#p4eTz3}h z!AR0M4b!7Zi3`?Cy8&)RaGJqSnd}n;C%Q??>doad?YNjsVsuhZTMEME^Tm+8)Y=KC zh5>eG`^LeqR@NfY6G;(^>Iwh3uqu;L^_(j>2Hz{E>Ei8&AClM5fiieG5kwHTj!*O< zp?Isv8`E8&J`%`R4C(X09E^J&Y@UvGG?HJYH=+X9z|}J_?%NgcWr^#7aw&@-PWo`9 z+vxMUd)zO=Q91_OexQFz-r;yyy z3X`=2OT`dd;s_i5I>!aTfg{Y+`tYl<`knDMHm~B?!P}y4 zulOJ~uCRV*RJhQN27aop`L{&F%w*U4ES1ePBzeG*dc}dZ+=82^Vhvc4xsZE#An$91 z*K@$5a@Z{?5AsRf+lpS6ZVztmxym$3CZ!(UnQb`3pVSNb-}T5nN26ZvS#W{Y%4BKM z>9YN>Z%G~b4D3Q@3@*SwwnSI<{mCURbJO$(T2Dy@ngENg5pJ`z0Y$elhxff%z-ucF zB*ctggthLy-n-()F6tknM#7ct`Rr0jm%K*GtE(x>n-9L7HB(Uxq)6^o*|I5oVV(&2 z#DdpvfTI;vB7obItCefnIUv+u2<1;h?2Xb|11ZCgMmgdW60nQ|RL_eEjuRr`%SHHU z7pySlQaHiP76id7o`!lXc_dnCm1>VAxTo$YrgG@@`*3}~3R3i2NJwuC+Zfa(TJ3Ka z=PjJkigLVs+>?<2=%a7!wCAQ!ZPva1T|^+U@bv8hck{j!#mh;MD$JFd#3pi zJJD2feLN3@tmk*1eSNi2r>woo4_WEk7Q_lHlBa|PsfdCO`D7ccx(`(Ts2S{itZ$0Dd>SDH!MGczUm2YOPO7!9+LB zb{rH2i>28O^C*y6d4XHvx$zC`$uFM=?}lnIfTsFayu6f;PU4XX*z<#LLrpWThZ^03 z+v>cXc!t|l6zEWWI#hgj7-EOap~RD9E`$UA=}@SHPeR*O-OK|8Ea&_s%vZl2*bc(e zU5WYP-j0d%f0g2HU1B$~d_X|~llAv%1{)Q-Y-A?`yhg_7dA^3#>RJsQF3z!x*AFJ~ zd8JxPuAK19EDFjeBYjfx8Hi|aI9S>$puDi2zTHlGOlBDR@; zd~L-5GpP7LkNqw^}4eoQ)ov@e^+Q`YoF)Q ziMZL-hbf&ORO;5Ux9wQr5hLot#jM>PDRh3%>o)y>=wJ2LPHjriMoey|` zPSV`i|53b=*{97HJ03@zVP`l@TSQlW%Y&M~SLaN_njj!LjRuVZH*hy9eIxgHn2`aB zXv=v(z;m4{tu)DX@9d@~#%tY{f(rDt0;om@zSgW~b(~XM$_BG=F28G)353@WodJi} zN)cO_a8i}(Rw`z3{tFqu3Ce8!!KMeZ438^3=_6N8Iu}H7ptUps1SQbT1@SjF7>tWi z0y=`PVEPG)v-WVy;^bq9J`FPaPCpRlFEW~);?6Z%F-$zJN@}ef^l+=fw zd{Ai3#uy5z85r}jJZD$w-mv+H@>H8mLJ#K$Ka^kb<8c zi@$lUTcpC}pf9AR^oq-&{eHm9qnfAn+zv}iPRL#teWy1+M|U3(m$x&wE0~7Q!!VmfSjR_tGF+2QX-Ao)38+i+JNm3~ z->n4&7|I(dYhBO*u5_0^-`si?cc1nL%UkIY$5NAXb8n_4@fCQ*p4V-L!ryGrf}IL2 zd$klA8FX!3$c&@AV>Ub7udw@B8YpA`x0Q$T>3b{>*+cuFpQGnlo0PRoxd3H(8Fnq> zQur*GWi<`L_h{QazIw9Uc1i_yJNrQrD;4juoHio!aPPwC6qGECP@M6*FS5QuO-5Pj zW^*GB!mo&aCfw`;vrN@`^H~+$N2jm-Nz<+y%43JhXD?kcXF&|B3rGEB!$#i!sn45g zkU^?hx8R+0Bfbn9%MT8&Z_iiqSMTC)Zgt#QFd_5hPO6n{r=_xmS{+F{ZTm2 zq5kYtSf5Bdl;rpu2N%?>D(#FOohi9ph^iY zLbgqg$*cb5v$Ne#Y$rw168-vD9?yGbzNsxfpw%k z6f0P%b*AIRyi=OtXn{Q*6|^9!Z^k*U_;x}{{K%z=Xh1(kjyDXZ8;k)B&dmXwj_uJG zAkq+JvydS6R)eX>j(=h+jNU!8FIW1=@Hktpv%l69#~>j@w^tM9#{VVW!7qQ%>vqP!XNPgLY>T->ZCYrE_3C`-17Il-}K4rd0qPsS4D<5^@Rj1OO$LtShOw|JaaNpHP($o87hkl=7 zhOa+U^rbV2+*!#j0mX>_T*FxplkKE->p2v8Qa z`?^i!~X+#BT-uFWTkEFcU@FtL=AjUGc2xLHH{v!3?SatdT1AHoAZAKi;B$W u)xWihIsY&Hii@oOF2?Js&HUhT8voiXJLJ7dII~FdjG?}nUagLE?0*5-OlMgD literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/2.png b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/2.png new file mode 100644 index 0000000000000000000000000000000000000000..1524d574797ad626f512b1a39f8d765de7acd86a GIT binary patch literal 5138 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 C|CjFo literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/3.png b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/3.png new file mode 100644 index 0000000000000000000000000000000000000000..dc661c1301a8d371ae01709890818d397ed7904b GIT binary patch literal 33980 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

      ZHH6|;~8+HMDp7GN%FT&1hCJ#&y$fCh8v}_ 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 [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is a **1-based** binary matrix where `0` represents land and `1` represents water. You are given integers `row` and `col` representing the number of rows and columns in the matrix, respectively. + +Initially on day 0, the **entire** matrix is **land**. However, each day a new cell becomes flooded with **water**. You are given a **1-based** 2D array `cells`, where `cells[i] = [ri, ci]` represents that on the ith day, the cell on the rith row and cith column (**1-based** coordinates) will be covered with **water** (i.e., changed to `1`). + +You want to find the **last** day that it is possible to walk from the **top** to the **bottom** by only walking on land cells. You can start from **any** cell in the top row and end at **any** cell in the bottom row. You can only travel in the **four** cardinal directions (left, right, up, and down). + +Return the **last** day where it is possible to walk from the **top** to the **bottom** by only walking on land cells. + + +**Example 1:** -**Example 1:** +![example1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: row = 2, col = 2, cells = [[1,1],[2,1],[1,2],[2,2]] +Output: 2 +Explanation: The above image depicts how the matrix changes each day starting from day 0. +The last day where it is possible to cross from top to bottom is on day 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./2.png) -### 思路1 -> ... -Last Day Where You Can Still Cross -```go ``` +Input: row = 2, col = 2, cells = [[1,1],[1,2],[2,1],[2,2]] +Output: 1 +Explanation: The above image depicts how the matrix changes each day starting from day 0. +The last day where it is possible to cross from top to bottom is on day 1. +``` + +**Example 3:** + +![example3](./3.png) +``` +Input: row = 3, col = 3, cells = [[1,2],[2,1],[3,3],[2,2],[1,1],[1,3],[2,3],[3,2],[3,1]] +Output: 3 +Explanation: The above image depicts how the matrix changes each day starting from day 0. +The last day where it is possible to cross from top to bottom is on day 3. +``` ## 结语 diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go index d115ccf5e..ad82302c8 100644 --- a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go +++ b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(row int, col int, cells [][]int) int { + + var ( + bfs func(int) bool + dirs = [][]int{ + // 开始想只向下搜索,缺少-1,0这个方向,结果过了115个例子 + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, + } + ) + bfs = func(day int) bool { + matrix := make([][]int, row) + for i := 0; i < row; i++ { + matrix[i] = make([]int, col) + } + for _, cell := range cells[:day] { + x, y := cell[0]-1, cell[1]-1 + matrix[x][y] = 1 + } + + queue := [][2]int{} + for i := 0; i < col; i++ { + if matrix[0][i] == 0 { + queue = append(queue, [2]int{0, i}) + matrix[0][i] = -1 + } + } + + for len(queue) > 0 { + next := make([][2]int, 0) + for _, item := range queue { + if item[0] == row-1 { + return true + } + for _, dir := range dirs { + nx, ny := item[0]+dir[0], item[1]+dir[1] + if nx >= 0 && nx < row && ny >= 0 && ny < col && matrix[nx][ny] == 0 { + next = append(next, [2]int{nx, ny}) + matrix[nx][ny] = -1 + } + } + } + queue = next + } + return false + + } + // + left, right := 1, len(cells) + for left < right { + //mid := (right-left)/2 + left + mid := right - (right-left)/2 + if bfs(mid) { + left = mid + } else { + right = mid - 1 + } + } + return left } diff --git a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go index 14ff50eb4..ec34174d6 100644 --- a/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go +++ b/leetcode/1901-2000/1970.Last-Day-Where-You-Can-Still-Cross/Solution_test.go @@ -9,31 +9,38 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + row, col int + cells [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 2, [][]int{ + {1, 1}, {2, 1}, {1, 2}, {2, 2}, + }, 2}, + {"TestCase2", 2, 2, [][]int{ + {1, 1}, {1, 2}, {2, 1}, {2, 2}, + }, 1}, + {"TestCase3", 3, 3, [][]int{ + {1, 2}, {2, 1}, {3, 3}, {2, 2}, {1, 1}, {1, 3}, {2, 3}, {3, 2}, {3, 1}, + }, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.row, c.col, c.cells) 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.row, c.col, c.cells) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0c2beab87697af28e6c0554c1e8b88456980f55b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 1 Jul 2023 15:29:11 +0800 Subject: [PATCH 0311/1057] Add solution and test-cases for problem 2305 --- .../README.md | 36 +++++++++++-------- .../Solution.go | 28 +++++++++++++-- .../Solution_test.go | 22 ++++++------ 3 files changed, 59 insertions(+), 27 deletions(-) diff --git a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md index 39502e3e3..ee188d16a 100755 --- a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md +++ b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/README.md @@ -1,28 +1,36 @@ # [2305.Fair Distribution of Cookies][title] -> [!WARNING|style:flat] -> 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 `cookies`, where `cookies[i]` denotes the number of cookies in the ith bag. You are also given an integer `k` that denotes the number of children to distribute **all** the bags of cookies to. All the cookies in the same bag must go to the same child and cannot be split up. + +The **unfairness** of a distribution is defined as the **maximum total** cookies obtained by a single child in the distribution. + +Return the **minimum** unfairness of all distributions. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: cookies = [8,15,10,20,8], k = 2 +Output: 31 +Explanation: One optimal distribution is [8,15,8] and [10,20] +- The 1st child receives [8,15,8] which has a total of 8 + 15 + 8 = 31 cookies. +- The 2nd child receives [10,20] which has a total of 10 + 20 = 30 cookies. +The unfairness of the distribution is max(31,30) = 31. +It can be shown that there is no distribution with an unfairness less than 31. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Fair Distribution of Cookies -```go ``` - +Input: cookies = [6,1,3,2,2,4,1,2], k = 3 +Output: 7 +Explanation: One optimal distribution is [6,1], [3,2,2], and [4,1,2] +- The 1st child receives [6,1] which has a total of 6 + 1 = 7 cookies. +- The 2nd child receives [3,2,2] which has a total of 3 + 2 + 2 = 7 cookies. +- The 3rd child receives [4,1,2] which has a total of 4 + 1 + 2 = 7 cookies. +The unfairness of the distribution is max(7,7,7) = 7. +It can be shown that there is no distribution with an unfairness less than 7. +``` ## 结语 diff --git a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go index d115ccf5e..f241810ba 100644 --- a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go +++ b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +// 这道题看数据量很小,尝试了一下暴力算法,还行,过了 +func Solution(cookies []int, k int) int { + ans := -1 + var lookup func(int, []int) + lookup = func(index int, child []int) { + if index == len(cookies) { + m := -1 + for i := 0; i < k; i++ { + if child[i] > m { + m = child[i] + } + } + if ans == -1 || ans > m { + ans = m + } + return + } + for i := 0; i < k; i++ { + // 第i个孩子得到这个饼干 + child[i] += cookies[index] + lookup(index+1, child) + child[i] -= cookies[index] + } + } + lookup(0, make([]int, k)) + return ans } diff --git a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go index 14ff50eb4..169612fb7 100644 --- a/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go +++ b/leetcode/2301-2400/2305.Fair-Distribution-of-Cookies/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + cookies []int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{8, 15, 10, 20, 8}, 2, 31}, + {"TestCase2", []int{6, 1, 3, 2, 2, 4, 1, 2}, 3, 7}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.cookies, 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.cookies, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6b5eb466f2906012abe129e38875c2057d1eaf3b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 2 Jul 2023 16:07:00 +0800 Subject: [PATCH 0312/1057] Add solution and test-cases for problem 1601 --- .../README.md | 49 +++++++++++++----- .../Solution.go | 26 +++++++++- .../Solution_test.go | 29 +++++++---- .../move1.jpg | Bin 0 -> 79639 bytes .../move2.jpg | Bin 0 -> 42451 bytes 5 files changed, 78 insertions(+), 26 deletions(-) create mode 100644 leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/move1.jpg create mode 100644 leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/move2.jpg diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md index 3e3a2942e..f247c90ab 100755 --- a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md +++ b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/README.md @@ -1,28 +1,51 @@ # [1601.Maximum Number of Achievable Transfer Requests][title] -> [!WARNING|style:flat] -> 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 `n` buildings numbered from `0` to `n - 1`. Each building has a number of employees. It's transfer season, and some employees want to change the building they reside in. + +You are given an array `requests` where `requests[i] = [fromi, toi]` represents an employee's request to transfer from building fromi to building toi. + +**All buildings are full**, so a list of requests is achievable only if for each building, the **net change in employee transfers is zero**. This means the number of employees **leaving** is **equal** to the number of employees **moving in**. For example if `n = 3` and two employees are leaving building `0`, one is leaving building `1`, and one is leaving building `2`, there should be two employees moving to building `0`, one employee moving to building `1`, and one employee moving to building `2`. + +Return the maximum number of achievable requests. + +**Example 1:** -**Example 1:** +![example1](./move1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 5, requests = [[0,1],[1,0],[0,1],[1,2],[2,0],[3,4]] +Output: 5 +Explantion: Let's see the requests: +From building 0 we have employees x and y and both want to move to building 1. +From building 1 we have employees a and b and they want to move to buildings 2 and 0 respectively. +From building 2 we have employee z and they want to move to building 0. +From building 3 we have employee c and they want to move to building 4. +From building 4 we don't have any requests. +We can achieve the requests of users x and b by swapping their places. +We can achieve the requests of users y, a and z by swapping the places in the 3 buildings. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./move2.jpg) -### 思路1 -> ... -Maximum Number of Achievable Transfer Requests -```go ``` +Input: n = 3, requests = [[0,0],[1,2],[2,1]] +Output: 3 +Explantion: Let's see the requests: +From building 0 we have employee x and they want to stay in the same building 0. +From building 1 we have employee y and they want to move to building 2. +From building 2 we have employee z and they want to move to building 1. +We can achieve all the requests. +``` + +**Example 3:** +``` +Input: n = 4, requests = [[0,3],[3,1],[1,2],[2,0]] +Output: 4 +``` ## 结语 diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go index d115ccf5e..0d8bf4ab0 100644 --- a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go +++ b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, requests [][]int) int { + var lookup func(int, int, []int) + ans := 0 + lookup = func(index, count int, in []int) { + if index == len(requests) { + for i := 0; i < len(in); i++ { + if in[i] != 0 { + return + } + } + if count > ans { + ans = count + } + return + } + in[requests[index][0]]-- + in[requests[index][1]]++ + lookup(index+1, count+1, in) + in[requests[index][0]]++ + in[requests[index][1]]-- + lookup(index+1, count, in) + } + lookup(0, 0, make([]int, n)) + return ans } diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go index 14ff50eb4..978301d66 100644 --- a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go +++ b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/Solution_test.go @@ -9,31 +9,38 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + requests [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, [][]int{ + {0, 1}, {1, 0}, {0, 1}, {1, 2}, {2, 0}, {3, 4}, + }, 5}, + {"TestCase2", 3, [][]int{ + {0, 0}, {1, 2}, {2, 1}, + }, 3}, + {"TestCase3", 4, [][]int{ + {0, 3}, {3, 1}, {1, 2}, {2, 0}, + }, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.requests) 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.requests) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/move1.jpg b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/move1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0c397190b09f5811ef28d3917e5ef718d9cf6f9a GIT binary patch literal 79639 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

      Oe()Ly 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 literal 0 HcmV?d00001 diff --git a/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/move2.jpg b/leetcode/1601-1700/1601.Maximum-Number-of-Achievable-Transfer-Requests/move2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3ada3a31f7d815009736bd1bbe40aa66a51703b GIT binary patch literal 42451 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 Date: Mon, 3 Jul 2023 22:11:57 +0800 Subject: [PATCH 0313/1057] Add solution and test-cases for problem 859 --- leetcode/801-900/0859.Buddy-Strings/README.md | 33 +++++++++------ .../801-900/0859.Buddy-Strings/Solution.go | 42 ++++++++++++++++++- .../0859.Buddy-Strings/Solution_test.go | 22 +++++----- 3 files changed, 71 insertions(+), 26 deletions(-) diff --git a/leetcode/801-900/0859.Buddy-Strings/README.md b/leetcode/801-900/0859.Buddy-Strings/README.md index 503fbab0b..b915ea6ba 100644 --- a/leetcode/801-900/0859.Buddy-Strings/README.md +++ b/leetcode/801-900/0859.Buddy-Strings/README.md @@ -1,28 +1,35 @@ # [859.Buddy Strings][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two strings `s` and `goal`, return `true` if you can swap two letters in `s` so the result is equal to `goal`, otherwise, return `false`. + +Swapping letters is defined as taking two indices `i` and `j` (0-indexed) such that `i != j` and swapping the characters at `s[i]` and `s[j]`. + +- For example, swapping at indices `0` and `2` in `"abcd"` results in `"cbad"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ab", goal = "ba" +Output: true +Explanation: You can swap s[0] = 'a' and s[1] = 'b' to get "ba", which is equal to goal. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Buddy Strings -```go ``` +Input: s = "ab", goal = "ab" +Output: false +Explanation: The only letters you can swap are s[0] = 'a' and s[1] = 'b', which results in "ba" != goal. +``` + +**Example 3:** +``` +Input: s = "aa", goal = "aa" +Output: true +Explanation: You can swap s[0] = 'a' and s[1] = 'a' to get "aa", which is equal to goal. +``` ## 结语 diff --git a/leetcode/801-900/0859.Buddy-Strings/Solution.go b/leetcode/801-900/0859.Buddy-Strings/Solution.go index d115ccf5e..7f4d16799 100644 --- a/leetcode/801-900/0859.Buddy-Strings/Solution.go +++ b/leetcode/801-900/0859.Buddy-Strings/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, goal string) bool { + if len(s) != len(goal) { + return false + } + + a := make([]int, 26) + b := make([]int, 26) + diff := 0 + //aa, aa + for i := 0; i < len(s); i++ { + if s[i] == goal[i] { + a[s[i]-'a']++ + continue + } + diff++ + b[goal[i]-'a']++ + b[s[i]-'a']-- + } + // ab,ab + if diff == 0 { + // ab,ab + // aa, aa + // diff 是0 的时候表明每个位置,都是一样的,需要看是否有重复元素,有就可以调整 + for i := 0; i < 26; i++ { + if a[i] >= 2 { + return true + } + } + return false + } + // aac, bac + if diff == 2 { + for i := 0; i < 26; i++ { + if b[i] != 0 { + return false + } + } + return true + } + return false } diff --git a/leetcode/801-900/0859.Buddy-Strings/Solution_test.go b/leetcode/801-900/0859.Buddy-Strings/Solution_test.go index 14ff50eb4..525f31360 100644 --- a/leetcode/801-900/0859.Buddy-Strings/Solution_test.go +++ b/leetcode/801-900/0859.Buddy-Strings/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + s, goal string + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ab", "ba", true}, + {"TestCase2", "ab", "ab", false}, + {"TestCase3", "aa", "aa", true}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.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.s, c.goal) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 63f3b424ef9ce30e83ae7c79b168b379b12735c1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 4 Jul 2023 22:18:48 +0800 Subject: [PATCH 0314/1057] Add solution and test-cases for problem 1028 --- .../README.md | 38 +++++++---- .../Solution.go | 38 ++++++++++- .../Solution_test.go | 64 ++++++++++++++++-- ...recover-a-tree-from-preorder-traversal.png | Bin 0 -> 54444 bytes .../screen-shot-2019-04-10-at-114101-pm.png | Bin 0 -> 37913 bytes .../screen-shot-2019-04-10-at-114955-pm.png | Bin 0 -> 38768 bytes 6 files changed, 118 insertions(+), 22 deletions(-) create mode 100644 leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/recover-a-tree-from-preorder-traversal.png create mode 100644 leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/screen-shot-2019-04-10-at-114101-pm.png create mode 100644 leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/screen-shot-2019-04-10-at-114955-pm.png diff --git a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/README.md b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/README.md index f7b506381..370c56dd9 100644 --- a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/README.md +++ b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/README.md @@ -1,28 +1,40 @@ # [1028.Recover a Tree From Preorder Traversal][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +We run a preorder depth-first search (DFS) on the `root` of a binary tree. + +At each node in this traversal, we output D dashes (where `D` is the depth of this node), then we output the value of this node. If the depth of a node is `D`, the depth of its immediate child is `D + 1`. The depth of the `root` node is `0`. + +If a node has only one child, that child is guaranteed to be **the left child**. + +Given the output `traversal` of this traversal, recover the tree and return its `root`. + +**Example 1:** -**Example 1:** +![example1](./recover-a-tree-from-preorder-traversal.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: traversal = "1-2--3--4-5--6--7" +Output: [1,2,5,3,4,6,7] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./screen-shot-2019-04-10-at-114101-pm.png) -### 思路1 -> ... -Recover a Tree From Preorder Traversal -```go ``` +Input: traversal = "1-2--3---4-5--6---7" +Output: [1,2,5,3,null,6,null,4,null,7] +``` + +**Example 3:** + +![example3](./screen-shot-2019-04-10-at-114955-pm.png) +``` +Input: traversal = "1-401--349---90--88" +Output: [1,401,null,349,88,90] +``` ## 结语 diff --git a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution.go b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution.go index d115ccf5e..174df2d60 100644 --- a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution.go +++ b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +import "strconv" + +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(traversal string) *TreeNode { + curDep, backIndex := 0, 0 + return recoverTree(traversal, 0, 0, &curDep, &backIndex) +} + +func recoverTree(traversal string, index, nodeDep int, curDep, backIndex *int) *TreeNode { + if index >= len(traversal) { + return nil + } + node := &TreeNode{} + next := index + 1 + for ; next < len(traversal) && traversal[next] >= '0' && traversal[next] <= '9'; next++ { + } + v, _ := strconv.Atoi(traversal[index:next]) + node.Val = v + dep := 0 + for ; next < len(traversal) && traversal[next] == '-'; next++ { + dep++ + } + + *curDep = dep + *backIndex = next + if dep > nodeDep { + node.Left = recoverTree(traversal, next, dep, curDep, backIndex) + } + if nodeDep < *curDep { + node.Right = recoverTree(traversal, *backIndex, *curDep, curDep, backIndex) + } + return node } diff --git a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution_test.go b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution_test.go index 14ff50eb4..b7d4efa7c 100644 --- a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution_test.go +++ b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/Solution_test.go @@ -10,12 +10,62 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "1-2--3--4-5--6--7", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + }, + Right: &TreeNode{ + Val: 4, + }, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 7}, + }, + }}, + {"TestCase2", "1-2--3---4-5--6---7", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 4, + }, + }, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 6, + Left: &TreeNode{ + Val: 7, + }, + }, + }, + }}, + {"TestCase3", "1-401--349---90--88", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 401, + Right: &TreeNode{ + Val: 88, + }, + Left: &TreeNode{ + Val: 349, + Left: &TreeNode{ + Val: 90, + }, + }, + }, + }}, } // 开始测试 @@ -30,10 +80,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/recover-a-tree-from-preorder-traversal.png b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/recover-a-tree-from-preorder-traversal.png new file mode 100644 index 0000000000000000000000000000000000000000..48d777d2c71ff1d9d37c38db4373058f6938e333 GIT binary patch literal 54444 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 Q4EU22lNGHH*7N^=0O8_7-~a#s literal 0 HcmV?d00001 diff --git a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/screen-shot-2019-04-10-at-114101-pm.png b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/screen-shot-2019-04-10-at-114101-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..ff925bad23cb902b4fd5d24affdc4b06b9353456 GIT binary patch literal 37913 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 literal 0 HcmV?d00001 diff --git a/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/screen-shot-2019-04-10-at-114955-pm.png b/leetcode/1001-1100/1028.Recover-a-Tree-From-Preorder-Traversal/screen-shot-2019-04-10-at-114955-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..a133057e6caed7f1edc4c8ccd1dcb8927df3b24a GIT binary patch literal 38768 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 literal 0 HcmV?d00001 From baea60441cee4e57212a2ca2c492f9231723094c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 5 Jul 2023 22:46:19 +0800 Subject: [PATCH 0315/1057] Add solution and test-cases for problem 1493 --- .../README.md | 37 ++++++++++++++ .../Solution.go | 48 +++++++++++++++++++ .../Solution_test.go | 39 +++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/README.md create mode 100644 leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution.go create mode 100644 leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution_test.go diff --git a/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/README.md b/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/README.md new file mode 100644 index 000000000..b1d319d09 --- /dev/null +++ b/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/README.md @@ -0,0 +1,37 @@ +# [1493.Longest Subarray of 1's After Deleting One Element][title] + +## Description +Given a binary array `nums`, you should delete one element from it. + +Return the size of the longest non-empty subarray containing only `1`'s in the resulting array. Return `0` if there is no such subarray. + +**Example 1:** + +``` +Input: nums = [1,1,0,1] +Output: 3 +Explanation: After deleting the number in position 2, [1,1,1] contains 3 numbers with value of 1's. +``` + +**Example 2:** + +``` +Input: nums = [0,1,1,1,0,1,1,0,1] +Output: 5 +Explanation: After deleting the number in position 4, [0,1,1,1,1,1,0,1] longest subarray with value of 1's is [1,1,1,1,1]. +``` + +**Example 3:** + +``` +Input: nums = [1,1,1] +Output: 2 +Explanation: You must delete one element. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/longest-subarray-of-1s-after-deleting-one-element +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution.go b/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution.go new file mode 100644 index 000000000..aaf27ff28 --- /dev/null +++ b/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution.go @@ -0,0 +1,48 @@ +package Solution + +func Solution(nums []int) int { + onlyOneZeroIndices := make([]int, 0) + l := len(nums) + zeroCount := 0 + singleMax := 0 + haveZero := false + for idx := 0; idx < l; idx++ { + if nums[idx] == 0 { + haveZero = true + zeroCount++ + continue + } + if zeroCount == 1 { + onlyOneZeroIndices = append(onlyOneZeroIndices, idx-1) + } + zeroCount = 0 + if idx > 0 { + nums[idx] += nums[idx-1] + } + if nums[idx] > singleMax { + singleMax = nums[idx] + } + } + if len(onlyOneZeroIndices) == 0 { + if !haveZero { + singleMax-- + } + return singleMax + } + + for _, idx := range onlyOneZeroIndices { + base := 0 + if idx > 0 { + base = nums[idx-1] + } + next := idx + 1 + for ; next < l && nums[next] > 0; next++ { + } + base += nums[next-1] + if base > singleMax { + singleMax = base + } + } + + return singleMax +} diff --git a/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution_test.go b/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution_test.go new file mode 100644 index 000000000..13ce923d9 --- /dev/null +++ b/leetcode/1401-1500/1493.LongestSubarray-of-1s-After-Deleting-One-Element/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + nums []int + expect int + }{ + {"TestCase1", []int{1, 1, 0, 1}, 3}, + {"TestCase2", []int{0, 1, 1, 1, 0, 1, 1, 0, 1}, 5}, + {"TestCase3", []int{1, 1, 1}, 2}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.nums) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.nums) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 234f3235d2401040c1be514ab018c5bc91eafaa7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 6 Jul 2023 23:10:31 +0800 Subject: [PATCH 0316/1057] Add solution and test-cases for problem 899 --- leetcode/801-900/0899.Orderly-Queue/README.md | 29 +++++------ .../801-900/0899.Orderly-Queue/Solution.go | 50 ++++++++++++++++++- .../0899.Orderly-Queue/Solution_test.go | 20 ++++---- 3 files changed, 73 insertions(+), 26 deletions(-) diff --git a/leetcode/801-900/0899.Orderly-Queue/README.md b/leetcode/801-900/0899.Orderly-Queue/README.md index abf98042b..8e60fd785 100644 --- a/leetcode/801-900/0899.Orderly-Queue/README.md +++ b/leetcode/801-900/0899.Orderly-Queue/README.md @@ -1,28 +1,29 @@ # [899.Orderly Queue][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a string `s` and an integer `k`. You can choose one of the first `k` letters of `s` and append it at the end of the string.. + +Return the lexicographically smallest string you could have after applying the mentioned step any number of moves. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "cba", k = 1 +Output: "acb" +Explanation: +In the first move, we move the 1st character 'c' to the end, obtaining the string "bac". +In the second move, we move the 1st character 'b' to the end, obtaining the final result "acb". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Orderly Queue -```go ``` - +Input: s = "baaca", k = 3 +Output: "aaabc" +Explanation: +In the first move, we move the 1st character 'b' to the end, obtaining the string "aacab". +In the second move, we move the 3rd character 'c' to the end, obtaining the final result "aaabc". +``` ## 结语 diff --git a/leetcode/801-900/0899.Orderly-Queue/Solution.go b/leetcode/801-900/0899.Orderly-Queue/Solution.go index d115ccf5e..9df25a520 100644 --- a/leetcode/801-900/0899.Orderly-Queue/Solution.go +++ b/leetcode/801-900/0899.Orderly-Queue/Solution.go @@ -1,5 +1,51 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(s string, k int) string { + l := len(s) + bs := []byte(s) + // abc k = 2 + // bcad k = 2 + // cadb + // adbc + // abcd + + // dcba k = 2 + // cbad + // badc + // bdca + // dcab + + if k != 1 { + sort.Slice(bs, func(i, j int) bool { + return bs[i] < bs[j] + }) + return string(bs) + } + ans := s + cache := make(map[string]struct{}) + cache[s] = struct{}{} + for { + maxIndex := 0 + for i := 1; i < k; i++ { + if bs[i] >= bs[maxIndex] { + maxIndex = i + } + } + sourceByte := bs[maxIndex] + for next := maxIndex + 1; next < l; next++ { + bs[next-1] = bs[next] + } + bs[l-1] = sourceByte + r := string(bs) + if _, ok := cache[r]; ok { + break + } + cache[r] = struct{}{} + if r < ans { + ans = r + } + } + return ans } diff --git a/leetcode/801-900/0899.Orderly-Queue/Solution_test.go b/leetcode/801-900/0899.Orderly-Queue/Solution_test.go index 14ff50eb4..145e9d3c8 100644 --- a/leetcode/801-900/0899.Orderly-Queue/Solution_test.go +++ b/leetcode/801-900/0899.Orderly-Queue/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "cba", 1, "acb"}, + {"TestCase2", "baaca", 3, "aaabc"}, } // 开始测试 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 613c7934a6a59386df10f9d894e8326e54207bb5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 7 Jul 2023 20:55:15 +0800 Subject: [PATCH 0317/1057] Add solution and test-cases for problem 712 --- .../README.md | 29 +++++++-------- .../Solution.go | 35 +++++++++++++++++-- .../Solution_test.go | 19 +++++----- 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/README.md b/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/README.md index 451559cde..f8c601657 100644 --- a/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/README.md +++ b/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/README.md @@ -1,28 +1,29 @@ # [712.Minimum ASCII Delete Sum for Two Strings][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two strings `s1` and `s2`, return the lowest **ASCII** sum of deleted characters to make two strings equal. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s1 = "sea", s2 = "eat" +Output: 231 +Explanation: Deleting "s" from "sea" adds the ASCII value of "s" (115) to the sum. +Deleting "t" from "eat" adds 116 to the sum. +At the end, both strings are equal, and 115 + 116 = 231 is the minimum sum possible to achieve this. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum ASCII Delete Sum for Two Strings -```go ``` - +Input: s1 = "delete", s2 = "leet" +Output: 403 +Explanation: Deleting "dee" from "delete" to turn the string into "let", +adds 100[d] + 101[e] + 101[e] to the sum. +Deleting "e" from "leet" adds 101[e] to the sum. +At the end, both strings are equal to "let", and the answer is 100+101+101+101 = 403. +If instead we turned both strings into "lee" or "eet", we would get answers of 433 or 417, which are higher. +``` ## 结语 diff --git a/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution.go b/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution.go index d115ccf5e..f29a2b808 100644 --- a/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution.go +++ b/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s1 string, s2 string) int { + l1, l2 := len(s1), len(s2) + dp := make([][]int, l1+1) + for i := 0; i <= l1; i++ { + + dp[i] = make([]int, l2+1) + if i > 0 { + dp[i][0] = dp[i-1][0] + int(s1[i-1]) + } + for j := 1; j <= l2; j++ { + dp[i][j] = dp[i][j-1] + int(s2[j-1]) + } + } + for r := 1; r <= l1; r++ { + for c := 1; c <= l2; c++ { + x := dp[r-1][c-1] + if s1[r-1] == s2[c-1] { + dp[r][c] = x + continue + } + y := dp[r-1][c] + z := dp[r][c-1] + a := x + int(s1[r-1]) + int(s2[c-1]) + if b := y + int(s1[r-1]); r < a { + a = b + } + if b := z + int(s2[c-1]); b < a { + a = b + } + dp[r][c] = a + } + } + return dp[l1][l2] } diff --git a/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution_test.go b/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution_test.go index 14ff50eb4..e9a6bb481 100644 --- a/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution_test.go +++ b/leetcode/701-800/0712.Minimum-ASCII-Delete-Sum-for-Two-Strings/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s1, s2 string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "sea", "eat", 231}, + {"TestCase2", "delete", "leet", 403}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b583af6cce2f8b763b94e8365562ac0b8aef3045 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 7 Jul 2023 21:42:10 +0800 Subject: [PATCH 0318/1057] Add solution and test-cases for problem 2024 --- .../README.md | 40 +++++++++++++------ .../Solution.go | 27 ++++++++++++- .../Solution_test.go | 21 +++++----- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md index bf33ba746..9ab970b16 100755 --- a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md +++ b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/README.md @@ -1,28 +1,42 @@ # [2024.Maximize the Confusion of an Exam][title] -> [!WARNING|style:flat] -> 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 teacher is writing a test with n true/false questions, with `'T'` denoting true and `'F'` denoting false. He wants to confuse the students by **maximizing** the number of **consecutive** questions with the **same** answer (multiple trues or multiple falses in a row). + +You are given a string `answerKey`, where `answerKey[i]` is the original answer to the ith question. In addition, you are given an integer `k`, the maximum number of times you may perform the following operation: + +- Change the answer key for any question to `'T'` or `'F'` (i.e., set `answerKey[i]` to `'T'` or `'F'`). + +Return the **maximum** number of consecutive `'T'`s or `'F'`s in the answer key after performing the operation at most `k` times. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: answerKey = "TTFF", k = 2 +Output: 4 +Explanation: We can replace both the 'F's with 'T's to make answerKey = "TTTT". +There are four consecutive 'T's. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximize the Confusion of an Exam -```go ``` +Input: answerKey = "TFFT", k = 1 +Output: 3 +Explanation: We can replace the first 'T' with an 'F' to make answerKey = "FFFT". +Alternatively, we can replace the second 'T' with an 'F' to make answerKey = "TFFF". +In both cases, there are three consecutive 'F's. +``` + +**Example 3:** +``` +Input: answerKey = "TTFTTFTT", k = 1 +Output: 5 +Explanation: We can replace the first 'F' to make answerKey = "TTTTTFTT" +Alternatively, we can replace the second 'F' to make answerKey = "TTFTTTTT". +In both cases, there are five consecutive 'T's. +``` ## 结语 diff --git a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go index d115ccf5e..f8c959fef 100644 --- a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go +++ b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(answerKey string, k int) int { + count := make(map[byte]int) + for i := 0; i < k; i++ { + count[answerKey[i]]++ + } + ans := k + left := 0 + for right := k; right < len(answerKey); right++ { + count[answerKey[right]]++ + for { + a := count['T'] + if count['F'] < a { + a = count['F'] + } + if a <= k { + break + } + count[answerKey[left]]-- + left++ + } + if r := right - left + 1; r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go index 14ff50eb4..6d2fb6618 100644 --- a/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go +++ b/leetcode/2001-2100/2024.Maximize-the-Confusion-of-an-Exam/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + ans string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "TTFF", 2, 4}, + {"TestCase2", "TFFT", 1, 3}, + {"TestCase3", "TTFTTFTT", 1, 5}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.ans, 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.ans, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 963b5c7ba6d73462ce2bee93e5f761a7db94e2c0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 8 Jul 2023 22:38:07 +0800 Subject: [PATCH 0319/1057] Add solution and test-cases for problem 1920 --- .../README.md | 31 ++++++++++--------- .../Solution.go | 8 +++-- .../Solution_test.go | 13 ++++---- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md b/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md index 211c57b9a..37619b1ca 100755 --- a/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md +++ b/leetcode/1901-2000/1920.Build-Array-from-Permutation/README.md @@ -1,28 +1,31 @@ # [1920.Build Array from 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 **zero-based permutation** nums (**0-indexed**), build an array ans of the **same length** where `ans[i] = nums[nums[i]]` for each `0 <= i < nums.length` and return it. + +A **zero-based permutation** `nums` is an array of **distinct** integers from `0` to `nums.length - 1` (**inclusive**). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [0,2,1,5,3,4] +Output: [0,1,2,4,5,3] +Explanation: The array ans is built as follows: +ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]] + = [nums[0], nums[2], nums[1], nums[5], nums[3], nums[4]] + = [0,1,2,4,5,3] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Build Array from Permutation -```go ``` - +Input: nums = [5,0,1,2,3,4] +Output: [4,5,0,1,2,3] +Explanation: The array ans is built as follows: +ans = [nums[nums[0]], nums[nums[1]], nums[nums[2]], nums[nums[3]], nums[nums[4]], nums[nums[5]]] + = [nums[5], nums[0], nums[1], nums[2], nums[3], nums[4]] + = [4,5,0,1,2,3] +``` ## 结语 diff --git a/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go index d115ccf5e..fcea94fe2 100644 --- a/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go +++ b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution.go @@ -1,5 +1,9 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + ans := make([]int, len(nums)) + for idx, item := range nums { + ans[idx] = nums[item] + } + return ans } diff --git a/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go index 14ff50eb4..5bf1d5ab3 100644 --- a/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go +++ b/leetcode/1901-2000/1920.Build-Array-from-Permutation/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 2, 1, 5, 3, 4}, []int{0, 1, 2, 4, 5, 3}}, + {"TestCase2", []int{5, 0, 1, 2, 3, 4}, []int{4, 5, 0, 1, 2, 3}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 70eb86a74b92261a5df1aa0147ba28be17de400a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 9 Jul 2023 11:58:54 +0800 Subject: [PATCH 0320/1057] Add solution and test-cases for problem 1512 --- .../1512.Number-of-Good-Pairs/README.md | 30 +++++++++++-------- .../1512.Number-of-Good-Pairs/Solution.go | 15 ++++++++-- .../Solution_test.go | 14 ++++----- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md b/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md index 9ec3b2a0d..c837f9a7b 100755 --- a/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md +++ b/leetcode/1501-1600/1512.Number-of-Good-Pairs/README.md @@ -1,28 +1,32 @@ # [1512.Number of Good Pairs][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array of integers `nums`, return the number of **good pairs**. + +A pair `(i, j)` is called good if `nums[i] == nums[j]` and `i < j`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,1,1,3] +Output: 4 +Explanation: There are 4 good pairs (0,3), (0,4), (3,4), (2,5) 0-indexed. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Number of Good Pairs -```go +``` +Input: nums = [1,1,1,1] +Output: 6 +Explanation: Each pair in the array are good. ``` +**Example 3:** + +``` +Input: nums = [1,2,3] +Output: 0 +``` ## 结语 diff --git a/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go index d115ccf5e..07e836226 100644 --- a/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go +++ b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + count := make([]int, 101) + for _, item := range nums { + count[item]++ + } + ans := 0 + for i := 1; i <= 100; i++ { + if count[i] > 1 { + n := (count[i] - 1) * count[i] + ans += n / 2 + } + } + return ans } diff --git a/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go index 14ff50eb4..5b006e12e 100644 --- a/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go +++ b/leetcode/1501-1600/1512.Number-of-Good-Pairs/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 1, 1, 3}, 4}, + {"TestCase2", []int{1, 1, 1, 1}, 6}, + {"TestCase3", []int{1, 2, 3}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f098656ada877ad240391b43403e7abe4858d16d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 11 Jul 2023 22:48:51 +0800 Subject: [PATCH 0321/1057] Add solution and test-cases for problem 114 --- .../Solution.go | 24 ++++++++++++++ .../Solution_test.go | 31 +++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution.go b/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution.go index 19953ce0f..0fc72b52b 100644 --- a/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution.go +++ b/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution.go @@ -22,3 +22,27 @@ func Solution(root *TreeNode) { } Solution(root.Right) } + + +func flatten114(root *TreeNode) (*TreeNode, *TreeNode) { + if root == nil { + return nil, nil + } + end := root + rightStart, rightEnd := flatten114(root.Right) + leftStart, leftEnd := flatten114(root.Left) + if leftStart != nil { + end.Right = leftStart + end = leftEnd + } + if rightStart != nil { + end.Right = rightStart + end = rightEnd + } + root.Left = nil + return root, end +} +func Solution2(root *TreeNode) { + flatten114(root) + return +} diff --git a/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution_test.go b/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution_test.go index 9798700f3..04dab6021 100644 --- a/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution_test.go +++ b/leetcode/101-200/0114.Flatten-Binary-Tree-to-Linked-List/Solution_test.go @@ -33,11 +33,38 @@ func TestSolution(t *testing.T) { }) } } +func TestSolution2(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *TreeNode + expect *TreeNode + }{ + { + "TestCase", &TreeNode{1, &TreeNode{2, &TreeNode{Val: 3}, &TreeNode{Val: 4}}, &TreeNode{Val: 5, Right: &TreeNode{Val: 6}}}, + &TreeNode{Val: 1, Right: &TreeNode{Val: 2, Right: &TreeNode{Val: 3, Right: &TreeNode{Val: 4, Right: &TreeNode{Val: 5, Right: &TreeNode{Val: 6}}}}}}, + }, + {"TestCase", &TreeNode{}, &TreeNode{}}, + {"TestCase", &TreeNode{Val: 0}, &TreeNode{Val: 0}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + temp := c.inputs + Solution2(c.inputs) + if !reflect.DeepEqual(c.inputs, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, c.inputs, temp) + } + }) + } +} -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bcab0727876d063485ae70ae9569fa5c11bcdce1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 12 Jul 2023 22:34:53 +0800 Subject: [PATCH 0322/1057] Add solution and test-cases for problem 802 --- .../0802.Find-Eventual-Safe-States/README.md | 34 +++++++------ .../Solution.go | 46 +++++++++++++++++- .../Solution_test.go | 22 ++++++--- .../picture1.png | Bin 0 -> 33929 bytes 4 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 leetcode/801-900/0802.Find-Eventual-Safe-States/picture1.png diff --git a/leetcode/801-900/0802.Find-Eventual-Safe-States/README.md b/leetcode/801-900/0802.Find-Eventual-Safe-States/README.md index 3a5894959..caf248de2 100644 --- a/leetcode/801-900/0802.Find-Eventual-Safe-States/README.md +++ b/leetcode/801-900/0802.Find-Eventual-Safe-States/README.md @@ -1,28 +1,32 @@ # [802.Find Eventual Safe States][title] -> [!WARNING|style:flat] -> 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 directed graph of `n` nodes with each node labeled from `0` to `n - 1`. The graph is represented by a **0-indexed** 2D integer array `graph` where `graph[i]` is an integer array of nodes adjacent to node `i`, meaning there is an edge from node `i` to each node in `graph[i]`. -**Example 1:** +A node is a **terminal node** if there are no outgoing edges. A node is a **safe node** if every possible path starting from that node leads to a **terminal node** (or another safe node). -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return an array containing all the **safe nodes** of the graph. The answer should be sorted in **ascending** order. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./picture1.png) -### 思路1 -> ... -Find Eventual Safe States -```go +``` +Input: graph = [[1,2],[2,3],[5],[0],[5],[],[]] +Output: [2,4,5,6] +Explanation: The given graph is shown above. +Nodes 5 and 6 are terminal nodes as there are no outgoing edges from either of them. +Every path starting at nodes 2, 4, 5, and 6 all lead to either node 5 or 6. ``` +**Example 2:** + +``` +Input: graph = [[1,2,3,4],[1,2],[3,4],[0,4],[]] +Output: [4] +Explanation: +Only node 4 is a terminal node, and every path starting at node 4 leads to node 4. +``` ## 结语 diff --git a/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution.go b/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution.go index d115ccf5e..ec24dd8fa 100644 --- a/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution.go +++ b/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution.go @@ -1,5 +1,47 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(graph [][]int) []int { + ans := make([]int, 0) + cache := make(map[int]struct{}) + var dfs func(int, []bool) bool + // 根据终端节点反推? + dfs = func(node int, visited []bool) bool { + if _, ok := cache[node]; ok { + // 已经确定某个节点可以到 + return true + } + if visited[node] { + // 遇到访问过的,那肯定是出现环了 + return false + } + + visited[node] = true + for _, next := range graph[node] { + if !dfs(next, visited) { + return false + } + } + cache[node] = struct{}{} + return true + } + l := len(graph) + visited := make([]bool, l) + for i := 0; i < l; i++ { + if len(graph[i]) == 0 { + cache[i] = struct{}{} + } + } + for i := 0; i < l; i++ { + if _, ok := cache[i]; ok { + ans = append(ans, i) + continue + } + for i := 0; i < l; i++ { + visited[i] = false + } + if dfs(i, visited) { + ans = append(ans, i) + } + } + return ans } diff --git a/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution_test.go b/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution_test.go index 14ff50eb4..0620e5abe 100644 --- a/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution_test.go +++ b/leetcode/801-900/0802.Find-Eventual-Safe-States/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,25 @@ 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}, + {"TestCase", [][]int{ + {1, 2}, {2, 3}, {5}, {0}, {5}, {}, {}, + }, []int{2, 4, 5, 6}}, + {"TestCase2", [][]int{ + {1, 2, 3, 4}, {1, 2}, {3, 4}, {0, 4}, {}, + }, []int{4}}, + {"TestCase3", [][]int{ + {}, {0, 2, 3, 4}, {3}, {4}, {}, + }, []int{0, 1, 2, 3, 4}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { got := Solution(c.inputs) + 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 +38,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0802.Find-Eventual-Safe-States/picture1.png b/leetcode/801-900/0802.Find-Eventual-Safe-States/picture1.png new file mode 100644 index 0000000000000000000000000000000000000000..fb1f30ceae0f065bf9802c55ca1b4a6565eea870 GIT binary patch literal 33929 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 literal 0 HcmV?d00001 From bad5908580c55581f2d9f1b5838450da848a0008 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 13 Jul 2023 20:54:24 +0800 Subject: [PATCH 0323/1057] Add solution and test-cases for problem 207 --- .../201-300/0207.Course-Schedule/README.md | 29 ++++++------ .../201-300/0207.Course-Schedule/Solution.go | 45 ++++++++++++++++++- .../0207.Course-Schedule/Solution_test.go | 18 ++++---- 3 files changed, 67 insertions(+), 25 deletions(-) diff --git a/leetcode/201-300/0207.Course-Schedule/README.md b/leetcode/201-300/0207.Course-Schedule/README.md index d76ecc328..97301d083 100644 --- a/leetcode/201-300/0207.Course-Schedule/README.md +++ b/leetcode/201-300/0207.Course-Schedule/README.md @@ -1,28 +1,29 @@ # [207.Course 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 +There are a total of `numCourses` courses you have to take, labeled from 0 to `numCourses - 1`. You are given an array `prerequisites` where `prerequisites[i] = [ai, bi]` indicates that you **must** take course bi first if you want to take course ai. + +- For example, the pair `[0, 1]`, indicates that to take course `0` you have to first take course `1`. + +Return `true` if you can finish all courses. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: numCourses = 2, prerequisites = [[1,0]] +Output: true +Explanation: There are a total of 2 courses to take. +To take course 1 you should have finished course 0. So it is possible. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Course Schedule -```go ``` - +Input: numCourses = 2, prerequisites = [[1,0],[0,1]] +Output: false +Explanation: There are a total of 2 courses to take. +To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible. +``` ## 结语 diff --git a/leetcode/201-300/0207.Course-Schedule/Solution.go b/leetcode/201-300/0207.Course-Schedule/Solution.go index d115ccf5e..1f4da20d8 100644 --- a/leetcode/201-300/0207.Course-Schedule/Solution.go +++ b/leetcode/201-300/0207.Course-Schedule/Solution.go @@ -1,5 +1,46 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(numCourses int, prerequisites [][]int) bool { + if len(prerequisites) == 0 { + // 随便学 + return true + } + + order := make(map[int][]int) + inDegree := make([]int, numCourses) + for _, item := range prerequisites { + who, dep := item[0], item[1] + inDegree[who]++ + if _, ok := order[dep]; !ok { + order[dep] = make([]int, 0) + } + order[dep] = append(order[dep], who) + } + + queue := make([]int, 0) + left := numCourses + for i := 0; i < numCourses; i++ { + if inDegree[i] == 0 { + queue = append(queue, i) + left-- + } + } + + for len(queue) > 0 { + nextQ := make([]int, 0) + for _, item := range queue { + for _, next := range order[item] { + inDegree[next]-- + if inDegree[next] == 0 { + nextQ = append(nextQ, next) + } + } + } + left -= len(nextQ) + if len(nextQ) == 0 { + break + } + queue = nextQ + } + return left == 0 } diff --git a/leetcode/201-300/0207.Course-Schedule/Solution_test.go b/leetcode/201-300/0207.Course-Schedule/Solution_test.go index 14ff50eb4..522412052 100644 --- a/leetcode/201-300/0207.Course-Schedule/Solution_test.go +++ b/leetcode/201-300/0207.Course-Schedule/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + n int + p [][]int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, [][]int{{1, 0}}, true}, + {"TestCase2", 2, [][]int{{1, 0}, {0, 1}}, false}, } // 开始测试 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.p) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.p) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9fe0caf25e3e6f53c9de8c5575e416e68785f5f6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 14 Jul 2023 21:39:29 +0800 Subject: [PATCH 0324/1057] Add solution and test-cases for problem 1218 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 22 +++++++++++-- .../Solution_test.go | 23 ++++++++------ 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/README.md b/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/README.md index cc0d4f788..5def869ec 100644 --- a/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/README.md +++ b/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/README.md @@ -1,28 +1,33 @@ # [1218.Longest Arithmetic Subsequence of Given 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 +Given an integer array `arr` and an integer `difference`, return the length of the longest subsequence in `arr` which is an arithmetic sequence such that the difference between adjacent elements in the subsequence equals `difference`. + +A **subsequence** is a sequence that can be derived from `arr` 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 = [1,2,3,4], difference = 1 +Output: 4 +Explanation: The longest arithmetic subsequence is [1,2,3,4]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest Arithmetic Subsequence of Given Difference -```go +``` +Input: arr = [1,3,5,7], difference = 1 +Output: 1 +Explanation: The longest arithmetic subsequence is any single element. ``` +**Example 3:** + +``` +Input: arr = [1,5,7,8,5,3,4,2,1], difference = -2 +Output: 4 +Explanation: The longest arithmetic subsequence is [7,5,3,1]. +``` ## 结语 diff --git a/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution.go b/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution.go index d115ccf5e..774cb2fd0 100644 --- a/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution.go +++ b/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int, difference int) int { + l := len(arr) + cache := make(map[int]int) + cache[arr[0]] = 1 + + ans := 1 + // 4,12,10,0,-2,7,-8,9,-9,-12,-12,8,8 + // diff = 0 + for i := 1; i < l; i++ { + target := arr[i] - difference + if v, ok := cache[target]; !ok { + cache[arr[i]] = 1 + } else if v+1 > cache[arr[i]] { + cache[arr[i]] = v + 1 + } + if cache[arr[i]] > ans { + ans = cache[arr[i]] + } + } + return ans } diff --git a/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution_test.go b/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution_test.go index 14ff50eb4..5af82c62e 100644 --- a/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution_test.go +++ b/leetcode/1201-1300/1218.Longest-Arithmetic-Subsequence-of-Given-Difference/Solution_test.go @@ -10,30 +10,33 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + arr []int + diff int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4}, 1, 4}, + {"TestCase2", []int{1, 3, 5, 7}, 1, 1}, + {"TestCase3", []int{1, 5, 7, 8, 5, 3, 4, 2, 1}, -2, 4}, + {"TestCase4", []int{7, 7, 7, 7, 7, 7, 7}, 0, 7}, + {"TestCase5", []int{4, 12, 10, 0, -2, 7, -8, 9, -9, -12, -12, 8, 8}, 0, 2}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.arr, c.diff) 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.diff) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8d37d722cb00cd8ff2a8af3cc43aac12c73b48a9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 15 Jul 2023 22:13:34 +0800 Subject: [PATCH 0325/1057] Add solution and test-cases for problem 1108 --- .../1108.Defanging-an-IP-Address/README.md | 23 ++++++++----------- .../1108.Defanging-an-IP-Address/Solution.go | 17 ++++++++++++-- .../Solution_test.go | 13 +++++------ 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/leetcode/1101-1200/1108.Defanging-an-IP-Address/README.md b/leetcode/1101-1200/1108.Defanging-an-IP-Address/README.md index d9e4dfa1b..1a50b0604 100644 --- a/leetcode/1101-1200/1108.Defanging-an-IP-Address/README.md +++ b/leetcode/1101-1200/1108.Defanging-an-IP-Address/README.md @@ -1,28 +1,23 @@ # [1108.Defanging an 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 valid (IPv4) IP `address`, return a defanged version of that IP address. + +A defanged IP address replaces every period `"."` with `"[.]"`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: address = "1.1.1.1" +Output: "1[.]1[.]1[.]1" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Defanging an IP Address -```go ``` - +Input: address = "255.100.50.0" +Output: "255[.]100[.]50[.]0" +``` ## 结语 diff --git a/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution.go b/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution.go index d115ccf5e..9cab4b913 100644 --- a/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution.go +++ b/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(address string) string { + ans := make([]byte, len(address)+6) + index := 0 + for _, b := range address { + if b == '.' { + ans[index] = '[' + ans[index+1] = '.' + ans[index+2] = ']' + index += 3 + continue + } + ans[index] = byte(b) + index++ + } + return string(ans) } diff --git a/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution_test.go b/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution_test.go index 14ff50eb4..15389a235 100644 --- a/leetcode/1101-1200/1108.Defanging-an-IP-Address/Solution_test.go +++ b/leetcode/1101-1200/1108.Defanging-an-IP-Address/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", "1.1.1.1", "1[.]1[.]1[.]1"}, + {"TestCase2", "255.100.50.0", "255[.]100[.]50[.]0"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3601c6a392e9801ab47df1f2834f0560f627d8f4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 16 Jul 2023 00:48:09 +0800 Subject: [PATCH 0326/1057] Add solution and test-cases for problem 1751 --- .../README.md | 41 ++++++--- .../Solution.go | 84 +++++++++++++++++- .../Solution_test.go | 27 +++--- .../screenshot-2021-01-11-at-60048-pm.png | Bin 0 -> 94247 bytes .../screenshot-2021-01-11-at-60150-pm.png | Bin 0 -> 94364 bytes .../screenshot-2021-01-11-at-60703-pm.png | Bin 0 -> 120718 bytes 6 files changed, 127 insertions(+), 25 deletions(-) create mode 100644 leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60048-pm.png create mode 100644 leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60150-pm.png create mode 100644 leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60703-pm.png diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md index 1aa13dd0f..aab7c1384 100755 --- a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md +++ b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/README.md @@ -1,28 +1,43 @@ # [1751.Maximum Number of Events That Can Be Attended II][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an array of `events` where `events[i] = [startDayi, endDayi, valuei]`. The ith event starts at startDayi and ends at endDayi, and if you attend this event, you will receive a value of valuei. You are also given an integer `k` which represents the maximum number of events you can attend. + +You can only attend one event at a time. If you choose to attend an event, you must attend the **entire** event. Note that the end day is **inclusive**: that is, you cannot attend two events where one of them starts and the other ends on the same day. + +Return the **maximum sum** of values that you can receive by attending events. -**Example 1:** +**Example 1:** + +![example1](./screenshot-2021-01-11-at-60048-pm.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: events = [[1,2,4],[3,4,3],[2,3,1]], k = 2 +Output: 7 +Explanation: Choose the green events, 0 and 1 (0-indexed) for a total value of 4 + 3 = 7. ``` -## 题意 -> ... -## 题解 +**Example 2:** + +![example2](./screenshot-2021-01-11-at-60150-pm.png) -### 思路1 -> ... -Maximum Number of Events That Can Be Attended II -```go ``` +Input: events = [[1,2,4],[3,4,3],[2,3,10]], k = 2 +Output: 10 +Explanation: Choose event 2 for a total value of 10. +Notice that you cannot attend any other event as they overlap, and that you do not have to attend k events. +``` + +**Example 3:** + +![example3](./screenshot-2021-01-11-at-60703-pm.png) +``` +Input: events = [[1,1,1],[2,2,2],[3,3,3],[4,4,4]], k = 3 +Output: 9 +Explanation: Although the events do not overlap, you can only attend 3 events. Pick the highest valued three. +``` ## 结语 diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go index d115ccf5e..75bfe749a 100644 --- a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go +++ b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution.go @@ -1,5 +1,85 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func Solution(events [][]int, k int) int { + // dp[i][k] 以i结尾的选择k个的最大值 + sort.Slice(events, func(i, j int) bool { + e1, e2 := events[i], events[j] + if e1[1] == e2[1] { + return e1[0] < e2[0] + } + return e1[1] < e2[1] + }) + row := len(events) + + var bsearch func(int, int) int + + bsearch = func(source, end int) int { + // 1, 2, 3, 4, 5, 6, 7, 8, + // 找到最后一个小于6个元素 + l, r := 0, end + for l < r { + m := (r-l)/2 + l + if events[m][1] < source { + l = m + 1 + continue + } + r = m + } + return l + } + + ans := events[0][2] + + dp := make([][]int, row+1) + for i := 0; i <= row; i++ { + dp[i] = make([]int, k+1) + } + for i := 1; i <= row; i++ { + if events[i-1][2] > ans { + ans = events[i-1][2] + } + } + if k == 1 { + return ans + } + for i := 1; i <= k; i++ { + dp[1][i] = events[0][2] + } + + // m * m * k 这肯定超时了 + for i := 2; i <= row; i++ { + start := events[i-1][0] + v := events[i-1][2] + dp[i][1] = v + if v > ans { + ans = v + } + + index := bsearch(start, i) + if index == -1 || index == i { + continue + } + for pre := index + 1; pre > 0; pre-- { + if events[pre-1][1] >= start { + continue + } + + for ik := k - 1; ik >= 1; ik-- { + if dp[pre][ik] == 0 { + continue + } + if r := dp[pre][ik] + v; r > dp[i][ik+1] { + dp[i][ik+1] = r + } + if dp[i][ik+1] > ans { + ans = dp[i][ik+1] + } + } + } + } + return ans } diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go index 14ff50eb4..791b84cb0 100644 --- a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go +++ b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 2, 4}, {3, 4, 3}, {2, 3, 1}, + }, 2, 7}, + {"TestCase2", [][]int{ + {1, 2, 4}, {3, 4, 3}, {2, 3, 10}, + }, 2, 10}, + {"TestCase3", [][]int{ + {1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}, + }, 3, 9}, } // 开始测试 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() { } diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60048-pm.png b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60048-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..f207837cc8e640b8e5945c7464176ef80d939062 GIT binary patch literal 94247 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 literal 0 HcmV?d00001 diff --git a/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60703-pm.png b/leetcode/1701-1800/1751.Maximum-Number-of-Events-That-Can-Be-Attended-II/screenshot-2021-01-11-at-60703-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..99041385d477ab663547f74a10f620edc6b4740a GIT binary patch literal 120718 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νFMI1y)&^`0XD<5n5-1#6b|asHAovPo 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 literal 0 HcmV?d00001 From b1b737e9654e6a7304a4e60b0bec61ae334b353c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 16 Jul 2023 14:28:58 +0800 Subject: [PATCH 0327/1057] Add solution and test-cases for problem 1125 --- .../1125.Smallest-Sufficient-Team/README.md | 29 ++++---- .../1125.Smallest-Sufficient-Team/Solution.go | 66 ++++++++++++++++++- .../Solution_test.go | 29 +++++--- 3 files changed, 98 insertions(+), 26 deletions(-) diff --git a/leetcode/1101-1200/1125.Smallest-Sufficient-Team/README.md b/leetcode/1101-1200/1125.Smallest-Sufficient-Team/README.md index eeb7b9f1b..b5d2dc271 100644 --- a/leetcode/1101-1200/1125.Smallest-Sufficient-Team/README.md +++ b/leetcode/1101-1200/1125.Smallest-Sufficient-Team/README.md @@ -1,28 +1,29 @@ # [1125.Smallest Sufficient Team][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +In a project, you have a list of required skills `req_skills`, and a list of people. The ith person `people[i]` contains a list of skills that the person has. + +Consider a sufficient team: a set of people such that for every required skill in `req_skills`, there is at least one person in the team who has that skill. We can represent these teams by the index of each person. + +- For example, `team = [0, 1, 3]` represents the people with skills `people[0]`, `people[1]`, and `people[3]`. + +Return any sufficient team of the smallest possible size, represented by the index of each person. You may return the answer in **any order**. + +It is **guaranteed** an answer exists. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: req_skills = ["java","nodejs","reactjs"], people = [["java"],["nodejs"],["nodejs","reactjs"]] +Output: [0,2] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Smallest Sufficient Team -```go ``` - +Input: req_skills = ["algorithms","math","java","reactjs","csharp","aws"], people = [["algorithms","math","java"],["algorithms","math","reactjs"],["java","csharp","aws"],["reactjs","csharp"],["csharp","math"],["aws","java"]] +Output: [1,2] +``` ## 结语 diff --git a/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution.go b/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution.go index d115ccf5e..476698e10 100644 --- a/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution.go +++ b/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(req_skills []string, people [][]string) []int { + skillOrder := make(map[string]int) + targetSkill := [16]bool{} + for idx, r := range req_skills { + skillOrder[r] = idx + targetSkill[idx] = true + } + + l := len(people) + dp := make(map[[16]bool][]int) + for idx := 0; idx < l; idx++ { + if len(people[idx]) == 0 { + continue + } + + self := [16]bool{} + for _, str := range people[idx] { + self[skillOrder[str]] = true + } + + tmp := make(map[[16]bool][]int) + tmp[self] = []int{idx} + for v, path := range dp { + if p1, ok := tmp[v]; !ok || len(p1) > len(path) { + tmp[v] = path + } + tmpCopy := [16]bool{} + // v = 1, 2, 3 + // self = 2, 3 -> v + // self = 1, 2, 3 -> self(只有1个) + // self = 1, 2, 3,4 -> self + // self = 4,5 -> v + 1 + addSelf := false + addV := false + for i := 0; i < 16; i++ { + if self[i] && !v[i] { + addSelf = true + } + if v[i] && !self[i] { + addV = true + } + tmpCopy[i] = self[i] || v[i] + } + var n []int + if !addSelf && !addV { + n = []int{idx} + } else if addSelf && addV { + x := make([]int, len(path)) + copy(x, path) + x = append(x, idx) + n = x + } else if addSelf { + n = []int{idx} + } else if addV { + n = path + } + + if p1, ok := tmp[tmpCopy]; !ok || len(p1) > len(n) { + tmp[tmpCopy] = n + } + } + dp = tmp + } + return dp[targetSkill] } diff --git a/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution_test.go b/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution_test.go index 14ff50eb4..55642f591 100644 --- a/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution_test.go +++ b/leetcode/1101-1200/1125.Smallest-Sufficient-Team/Solution_test.go @@ -10,30 +10,39 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + people [][]string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"java", "nodejs", "reactjs"}, [][]string{ + {"java"}, {"nodejs"}, {"nodejs", "reactjs"}, + }, []int{0, 2}}, + {"TestCase2", []string{"algorithms", "math", "java", "reactjs", "csharp", "aws"}, [][]string{ + {"algorithms", "math", "java"}, + {"algorithms", "math", "reactjs"}, + {"java", "csharp", "aws"}, + {"reactjs", "csharp"}, + {"csharp", "math"}, + {"aws", "java"}, + }, []int{1, 2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.people) 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.people) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 1b4a94e71c4b004af90440d190e41e7b9637188d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 17 Jul 2023 00:18:16 +0800 Subject: [PATCH 0328/1057] Add solution and test-cases for problem 331 --- .../README.md | 40 ++++++++----- .../Solution.go | 54 +++++++++++++++++- .../Solution_test.go | 17 ++++-- .../pre-tree.jpg | Bin 0 -> 13230 bytes 4 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/pre-tree.jpg diff --git a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/README.md b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/README.md index cba1d75a2..f35fd15c3 100644 --- a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/README.md +++ b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/README.md @@ -1,28 +1,42 @@ # [331.Verify Preorder Serialization of a 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 +One way to serialize a binary tree is to use **preorder traversal**. When we encounter a non-null node, we record the node's value. If it is a null node, we record using a sentinel value such as `'#'`. + +![example](./pre-tree.jpg) + +For example, the above binary tree can be serialized to the string `"9,3,4,#,#,1,#,#,2,#,6,#,#"`, where `'#'` represents a null node. + +Given a string of comma-separated values `preorder`, return `true` if it is a correct preorder traversal serialization of a binary tree. + +It is **guaranteed** that each comma-separated value in the string must be either an integer or a character `'#'` representing null pointer. + +You may assume that the input format is always valid. + +- For example, it could never contain two consecutive commas, such as `"1,,3"`. + +**Note**: You are not allowed to reconstruct the tree. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: preorder = "9,3,4,#,#,1,#,#,2,#,6,#,#" +Output: true ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Verify Preorder Serialization of a Binary Tree -```go +``` +Input: preorder = "1,#" +Output: false ``` +**Example 3:** + +``` +Input: preorder = "9,#,#,1" +Output: false +``` ## 结语 diff --git a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution.go b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution.go index d115ccf5e..9870bef6b 100644 --- a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution.go +++ b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +type pair331 struct { + sharp, index int +} + +func Solution(preorder string) bool { + if preorder == "#" { + return true + } + items := strings.Split(preorder, ",") + l := len(items) + if l < 3 { + return false + } + pairs := make([]pair331, 0) + for i := 0; i < l; i++ { + if items[i] != "#" { + pairs = append(pairs, pair331{index: i}) + continue + } + last := len(pairs) - 1 + if last == -1 { + return false + } + if items[pairs[last].index] == "#" || pairs[last].sharp >= 2 { + pairs = append(pairs, pair331{index: i}) + continue + } + pairs[last].sharp++ + } + + stack := []int{-1, -1} + for _, pair := range pairs { + if pair.sharp == 1 { + stack = append(stack, pair.index) + continue + } + if pair.sharp == 0 && items[pair.index] != "#" { + stack = append(stack, pair.index, pair.index) + continue + } + ll := len(stack) + if ll == 0 { + break + } + for ll >= 2 && stack[ll-1] != stack[ll-2] { + ll-- + } + stack = stack[:ll-1] + } + return len(stack) == 1 } diff --git a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution_test.go b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution_test.go index 14ff50eb4..c930b7f00 100644 --- a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution_test.go +++ b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/Solution_test.go @@ -10,12 +10,17 @@ 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", "9,3,4,#,#,1,#,#,2,#,6,#,#", true}, + {"TestCase2", "1,#", false}, + {"TestCase3", "9,3,#,1", false}, + {"TestCase4", "9,#,93,#,9,9,#,#,#", true}, + {"TestCase5", "9,9,91,#,#,9,#,49,#,#,#", true}, + {"TestCase6", "8,#,5,#,2,5,#,7,9,#,8,#,#,#,#", true}, + {"TestCase7", "1,#,#,#,#", false}, + {"TestCase8", "1,#,#", true}, } // 开始测试 @@ -30,10 +35,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/pre-tree.jpg b/leetcode/301-400/0331.Verify-Preorder-Serialization-of-a-Binary-Tree/pre-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a501f8d0ef9aed0c9c8230dcc5d49ae2110ff51 GIT binary patch literal 13230 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 literal 0 HcmV?d00001 From 9f0b1b9b68ee6754cf6f039c73ac88fbb324b030 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 18 Jul 2023 23:28:44 +0800 Subject: [PATCH 0329/1057] Add solution and test-cases for problem 1038 --- .../README.md | 31 +++++----- .../Solution.go | 47 +++++++++++++++- .../Solution_test.go | 53 +++++++++++++++--- .../tree.png | Bin 0 -> 21234 bytes 4 files changed, 107 insertions(+), 24 deletions(-) create mode 100644 leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/tree.png diff --git a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/README.md b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/README.md index decb4e7b9..ac5d7e4ff 100644 --- a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/README.md +++ b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/README.md @@ -1,28 +1,29 @@ # [1038.Binary Search Tree to Greater Sum 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), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST. -**Example 1:** +As a reminder, a binary search tree is a tree that satisfies these constraints: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- The left subtree of a node contains only nodes with keys **less than** the node's key. +- The right subtree of a node contains only nodes with keys **greater than** the node's key. +- Both the left and right subtrees must also be binary search trees. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./tree.png) -### 思路1 -> ... -Binary Search Tree to Greater Sum Tree -```go +``` +Input: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8] +Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8] ``` +**Example 2:** + +``` +Input: root = [0,null,1] +Output: [1,null,1] +``` ## 结语 diff --git a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution.go b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution.go index d115ccf5e..0a0336f85 100644 --- a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution.go +++ b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + sum := 0 + var preOrder func(*TreeNode) + preOrder = func(root *TreeNode) { + if root == nil { + return + } + sum += root.Val + if root.Left != nil { + preOrder(root.Left) + } + if root.Right != nil { + preOrder(root.Right) + } + } + preOrder(root) + /* + tmp := sum + for i := 0; i < len(nodes); i++ { + tmp -= nodes[i] + nodes[i] += tmp + } + */ + tmpSum := 0 + var inOrder func(*TreeNode) + inOrder = func(root *TreeNode) { + if root == nil { + return + } + if root.Left != nil { + inOrder(root.Left) + } + tmpSum += root.Val + root.Val += sum - tmpSum + if root.Right != nil { + inOrder(root.Right) + } + } + inOrder(root) + return root } diff --git a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution_test.go b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution_test.go index 14ff50eb4..02ffc971a 100644 --- a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution_test.go +++ b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/Solution_test.go @@ -10,12 +10,51 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 3}, + }, + }, + Right: &TreeNode{ + Val: 6, + Left: &TreeNode{Val: 5}, + Right: &TreeNode{ + Val: 7, + Right: &TreeNode{Val: 8}, + }, + }, + }, &TreeNode{ + Val: 30, + Left: &TreeNode{ + Val: 36, + Left: &TreeNode{ + Val: 36, + }, + Right: &TreeNode{ + Val: 35, + Right: &TreeNode{Val: 33}, + }, + }, + Right: &TreeNode{ + Val: 21, + Left: &TreeNode{Val: 26}, + Right: &TreeNode{ + Val: 15, + Right: &TreeNode{Val: 8}, + }, + }, + }}, + {"TestCase2", &TreeNode{Val: 0, Right: &TreeNode{Val: 1}}, &TreeNode{Val: 1, Right: &TreeNode{Val: 1}}}, } // 开始测试 @@ -30,10 +69,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/tree.png b/leetcode/1001-1100/1038.Binary-Search-Tree-to-Greater-Sum-Tree/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2cfb5431d75b29bc806c1064766e8c16e4047c GIT binary patch literal 21234 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 HoD!M<71z+c literal 0 HcmV?d00001 From a1cd87ace7c5a8db8e4a675a6f6555f99d89d328 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 19 Jul 2023 21:43:58 +0800 Subject: [PATCH 0330/1057] Add solution and test-cases for problem 435 --- .../0435.Non-overlapping-Intervals/README.md | 29 ++++++----- .../Solution.go | 49 ++++++++++++++++++- .../Solution_test.go | 21 +++++--- 3 files changed, 77 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0435.Non-overlapping-Intervals/README.md b/leetcode/401-500/0435.Non-overlapping-Intervals/README.md index 776c2393e..cace48812 100644 --- a/leetcode/401-500/0435.Non-overlapping-Intervals/README.md +++ b/leetcode/401-500/0435.Non-overlapping-Intervals/README.md @@ -1,28 +1,31 @@ # [435.Non-overlapping Intervals][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an array of `intervals` intervals where `intervals[i] = [starti, endi]`, return the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: intervals = [[1,2],[2,3],[3,4],[1,3]] +Output: 1 +Explanation: [1,3] can be removed and the rest of the intervals are non-overlapping. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Non-overlapping Intervals -```go +``` +Input: intervals = [[1,2],[1,2],[1,2]] +Output: 2 +Explanation: You need to remove two [1,2] to make the rest of the intervals non-overlapping. ``` +**Example 3:** + +``` +Input: intervals = [[1,2],[2,3]] +Output: 0 +Explanation: You don't need to remove any of the intervals since they're already non-overlapping. +``` ## 结语 diff --git a/leetcode/401-500/0435.Non-overlapping-Intervals/Solution.go b/leetcode/401-500/0435.Non-overlapping-Intervals/Solution.go index d115ccf5e..d68f359fe 100644 --- a/leetcode/401-500/0435.Non-overlapping-Intervals/Solution.go +++ b/leetcode/401-500/0435.Non-overlapping-Intervals/Solution.go @@ -1,5 +1,50 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(intervals [][]int) int { + sort.Slice(intervals, func(i, j int) bool { + if intervals[i][1] == intervals[j][1] { + return intervals[i][0] < intervals[j][0] + } + return intervals[i][1] < intervals[j][1] + }) + // 最长递增子序列 + l := len(intervals) + dp := make([]int, l) + dp[0] = 1 + maxl := 1 + + var bsearch func(int, int) int + bsearch = func(end, target int) int { + l, r := 0, end + ans := -1 + mid := 0 + for l < r { + mid = (r-l)/2 + l + if intervals[mid][1] <= target { + ans = mid + l = mid + 1 + continue + } + r = mid + } + return ans + } + // 通过二分找到第一个end < start 的那么后面的就都是 + for i := 1; i < l; i++ { + dp[i] = 1 + index := bsearch(i+1, intervals[i][0]) + if index != -1 { + for pre := index; pre >= 0; pre-- { + if r := dp[pre] + 1; r > dp[i] { + dp[i] = r + } + } + } + if dp[i] > maxl { + maxl = dp[i] + } + } + return l - maxl } diff --git a/leetcode/401-500/0435.Non-overlapping-Intervals/Solution_test.go b/leetcode/401-500/0435.Non-overlapping-Intervals/Solution_test.go index 14ff50eb4..f1342cbff 100644 --- a/leetcode/401-500/0435.Non-overlapping-Intervals/Solution_test.go +++ b/leetcode/401-500/0435.Non-overlapping-Intervals/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{ + {1, 2}, {2, 3}, {3, 4}, {1, 3}, + }, 1}, + {"TestCase2", [][]int{ + {1, 2}, {1, 2}, {1, 2}, + }, 2}, + {"TestCase3", [][]int{ + {1, 2}, {2, 3}, + }, 0}, + {"TestCase4", [][]int{{1, 2}}, 0}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 67eaf03ea90d0154cebb1e5148a502df3141cf00 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 20 Jul 2023 22:48:59 +0800 Subject: [PATCH 0331/1057] Add solution and test-cases for problem 735 --- .../701-800/0735.Asteroid-Collision/README.md | 34 ++++++++++------- .../0735.Asteroid-Collision/Solution.go | 37 ++++++++++++++++++- .../0735.Asteroid-Collision/Solution_test.go | 15 ++++---- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/leetcode/701-800/0735.Asteroid-Collision/README.md b/leetcode/701-800/0735.Asteroid-Collision/README.md index 4f907bdba..e3c966ab5 100644 --- a/leetcode/701-800/0735.Asteroid-Collision/README.md +++ b/leetcode/701-800/0735.Asteroid-Collision/README.md @@ -1,28 +1,36 @@ # [735.Asteroid Collision][title] -> [!WARNING|style:flat] -> 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 are given an array `asteroids` of integers representing asteroids in a row. + +For each asteroid, the absolute value represents its size, and the sign represents its direction (positive meaning right, negative meaning left). Each asteroid moves at the same speed. + +Find out the state of the asteroids after all collisions. If two asteroids meet, the smaller one will explode. If both are the same size, both will explode. Two asteroids moving in the same direction will never meet. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: asteroids = [5,10,-5] +Output: [5,10] +Explanation: The 10 and -5 collide resulting in 10. The 5 and 10 never collide. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Asteroid Collision -```go ``` +Input: asteroids = [8,-8] +Output: [] +Explanation: The 8 and -8 collide exploding each other. +``` + +**Example 3:** +``` +Input: asteroids = [10,2,-5] +Output: [10] +Explanation: The 2 and -5 collide resulting in -5. The 10 and -5 collide resulting in 10. +``` ## 结语 diff --git a/leetcode/701-800/0735.Asteroid-Collision/Solution.go b/leetcode/701-800/0735.Asteroid-Collision/Solution.go index d115ccf5e..e1f96af4d 100644 --- a/leetcode/701-800/0735.Asteroid-Collision/Solution.go +++ b/leetcode/701-800/0735.Asteroid-Collision/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(asteroids []int) []int { + latestIndex := 0 + + for idx := 1; idx < len(asteroids); idx++ { + if latestIndex < 0 || asteroids[latestIndex] < 0 || asteroids[idx] > 0 { + latestIndex++ + asteroids[latestIndex] = asteroids[idx] + continue + } + // latest > 0 && asteroids[idx] < 0 + add := true + rev := -asteroids[idx] + for latestIndex >= 0 { + if asteroids[latestIndex] < 0 { + break + } + + if asteroids[latestIndex] == rev { + latestIndex-- + add = false + break + } + if asteroids[latestIndex] > rev { + add = false + break + } + latestIndex-- + } + + if add { + latestIndex++ + asteroids[latestIndex] = asteroids[idx] + } + } + return asteroids[:latestIndex+1] } diff --git a/leetcode/701-800/0735.Asteroid-Collision/Solution_test.go b/leetcode/701-800/0735.Asteroid-Collision/Solution_test.go index 14ff50eb4..2b5d3e3f4 100644 --- a/leetcode/701-800/0735.Asteroid-Collision/Solution_test.go +++ b/leetcode/701-800/0735.Asteroid-Collision/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{5, 10, -5}, []int{5, 10}}, + {"TestCase2", []int{8, -8}, []int{}}, + {"TestCase3", []int{10, 2, -5}, []int{10}}, + {"TestCase4", []int{1, -1, -2, -2}, []int{-2, -2}}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b98cbd3a02bd472350a6dd824acf3bc2764d785a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 22 Jul 2023 15:58:11 +0800 Subject: [PATCH 0332/1057] Add solution and test-cases for problem 688 --- .../README.md | 35 ++++++----- .../Solution.go | 55 +++++++++++++++++- .../Solution_test.go | 21 ++++--- .../knight.png | Bin 0 -> 15150 bytes 4 files changed, 84 insertions(+), 27 deletions(-) create mode 100644 leetcode/601-700/0688.Knight-Probability-in-Chessboard/knight.png diff --git a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/README.md b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/README.md index 9d79ddc81..87899e358 100644 --- a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/README.md +++ b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/README.md @@ -1,28 +1,35 @@ # [688.Knight Probability in Chessboard][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +On an `n x n` chessboard, a knight starts at the cell `(row, column)` and attempts to make exactly k moves. The rows and columns are **0-indexed**, so the top-left cell is `(0, 0)`, and the bottom-right cell is `(n - 1, n - 1)`. + + +A chess knight has eight possible moves it can make, as illustrated below. Each move is two cells in a cardinal direction, then one cell in an orthogonal direction. + +![e](./knight.png) + +Each time the knight is to move, it chooses one of eight possible moves uniformly at random (even if the piece would go off the chessboard) and moves there. + +The knight continues moving until it has made exactly `k` moves or has moved off the chessboard. + +Return the probability that the knight remains on the board after it has stopped moving. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, k = 2, row = 0, column = 0 +Output: 0.06250 +Explanation: There are two moves (to (1,2), (2,1)) that will keep the knight on the board. +From each of those positions, there are also two moves that will keep the knight on the board. +The total probability the knight stays on the board is 0.0625. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Knight Probability in Chessboard -```go ``` - +Input: n = 1, k = 0, row = 0, column = 0 +Output: 1.00000 +``` ## 结语 diff --git a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution.go b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution.go index d115ccf5e..2ba4378c9 100644 --- a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution.go +++ b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, k int, row int, column int) float64 { + var ( + dfs func(int, int, int) float64 + dirs = [][]int{ + {-1, -2}, {1, -2}, {2, -1}, {2, 1}, + {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, + } + ) + // dp[i][j][k] = floatx 表示在i,j的位置走k步留在棋盘的概率 + // 看数据量,n=100,dfs如果不做cache,100% TLE + dp := make([][][]float64, n) + for i := 0; i < n; i++ { + dp[i] = make([][]float64, n) + for j := 0; j < n; j++ { + dp[i][j] = make([]float64, k+1) + for z := 0; z <= k; z++ { + dp[i][j][z] = -1 + } + dp[i][j][0] = 1 + } + } + dfs = func(x, y, steps int) float64 { + if steps == 0 { + if x >= 0 && x < n && y >= 0 && y < n { + return 1 + } + return 0 + } + + if x < 0 || x >= n || y < 0 || y >= n { + return 0 + } + if dp[x][y][steps] != -1 { + return dp[x][y][steps] + } + + dp[x][y][steps] = 0 + for _, dir := range dirs { + nx, ny := dir[0]+x, dir[1]+y + + r := dfs(nx, ny, steps-1) + if r == 0 { + continue + } + + dp[x][y][steps] += r / 8.0 + } + + return dp[x][y][steps] + } + + dfs(row, column, k) + return dp[row][column][k] } diff --git a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution_test.go b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution_test.go index 14ff50eb4..36649fc43 100644 --- a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution_test.go +++ b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, k, c, r int + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 2, 0, 0, 0.0625}, + {"TestCase2", 1, 0, 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.n, c.k, c.r, c.c) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.n, c.k, c.r, c.c) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0688.Knight-Probability-in-Chessboard/knight.png b/leetcode/601-700/0688.Knight-Probability-in-Chessboard/knight.png new file mode 100644 index 0000000000000000000000000000000000000000..b3cd5dd8e528f755cca23c4f05f67e12217592db GIT binary patch literal 15150 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 Aw*UYD literal 0 HcmV?d00001 From e23849946c3ec060c2dc6edbbfd340d4762ea2e6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Jul 2023 11:40:09 +0800 Subject: [PATCH 0333/1057] Add solution and test-cases for problem 894 --- .../README.md | 29 +++-- .../Solution.go | 29 ++++- .../Solution_test.go | 109 ++++++++++++++++-- .../fivetrees.png | Bin 0 -> 34552 bytes 4 files changed, 143 insertions(+), 24 deletions(-) create mode 100644 leetcode/801-900/0894.All-Possible-Full-Binary-Trees/fivetrees.png diff --git a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/README.md b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/README.md index c3387891b..53a75620d 100644 --- a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/README.md +++ b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/README.md @@ -1,28 +1,27 @@ # [894.All Possible Full Binary Trees][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an integer `n`, return a list of all possible **full binary trees** with `n` nodes. Each node of each tree in the answer must have `Node.val == 0`. -**Example 1:** +Each element of the answer is the root node of one possible tree. You may return the final list of trees in **any order**. -``` -Input: a = "11", b = "1" -Output: "100" -``` +A **full binary tree** is a binary tree where each node has exactly `0` or `2` children. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./fivetrees.png) -### 思路1 -> ... -All Possible Full Binary Trees -```go +``` +Input: n = 7 +Output: [[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]] ``` +**Example 2:** + +``` +Input: n = 3 +Output: [[0,0,0]] +``` ## 结语 diff --git a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution.go b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution.go index d115ccf5e..b27707849 100644 --- a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution.go +++ b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution.go @@ -1,5 +1,30 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(n int) []*TreeNode { + cache := make([][]*TreeNode, 21) + cache[1] = []*TreeNode{{Val: 0}} + cache[3] = []*TreeNode{{Val: 0, Left: &TreeNode{Val: 0}, Right: &TreeNode{Val: 0}}} + + var buildTree func(left int) []*TreeNode + buildTree = func(left int) []*TreeNode { + result := make([]*TreeNode, 0) + for leftNode := 1; leftNode < left; leftNode += 2 { + for li := 0; li < len(cache[leftNode]); li++ { + for ri := 0; ri < len(cache[left-leftNode-1]); ri++ { + result = append(result, &TreeNode{Val: 0, Left: cache[leftNode][li], Right: cache[left-leftNode-1][ri]}) + } + } + } + return result + } + + for start := 5; start <= n; start += 2 { + cache[start] = buildTree(start) + } + return cache[n] } diff --git a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution_test.go b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution_test.go index 14ff50eb4..0ef568176 100644 --- a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution_test.go +++ b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/Solution_test.go @@ -10,12 +10,107 @@ 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", 5, []*TreeNode{ + &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 0, + Right: &TreeNode{Val: 0}, + Left: &TreeNode{Val: 0}, + }, + }, + &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + Right: &TreeNode{Val: 0}, + Left: &TreeNode{Val: 0}, + }, + Right: &TreeNode{ + Val: 0, + }, + }, + }}, + {"TestCase2", 7, []*TreeNode{ + &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }, + }, + }, + &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }, + Right: &TreeNode{Val: 0}, + }, + }, + &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }, + Right: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }, + }, + &TreeNode{ + Val: 0, + Right: &TreeNode{ + Val: 0, + }, + Left: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }, + }, + }, + &TreeNode{ + Val: 0, + Right: &TreeNode{Val: 0}, + Left: &TreeNode{ + Val: 0, + Right: &TreeNode{Val: 0}, + Left: &TreeNode{ + Val: 0, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 0}, + }, + }, + }, + }}, + {"TestCase3", 3, []*TreeNode{{Val: 0, Left: &TreeNode{Val: 0}, Right: &TreeNode{Val: 0}}}}, } // 开始测试 @@ -30,10 +125,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/fivetrees.png b/leetcode/801-900/0894.All-Possible-Full-Binary-Trees/fivetrees.png new file mode 100644 index 0000000000000000000000000000000000000000..89d1fb33cdd6eeb22b1a2c5c324c70ceaa175598 GIT binary patch literal 34552 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 V#BUUPofo&Bgs6;2nb23?{{s?Hl4Sq@ literal 0 HcmV?d00001 From c9ef792624c4a2db1d160a636a7494e3373598c0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Jul 2023 15:27:40 +0800 Subject: [PATCH 0334/1057] Add solution and test-cases for problem 2181 --- .../README.md | 38 +++++++---- .../Solution.go | 20 +++++- .../Solution_test.go | 64 ++++++++++++++++-- .../ex1-1.png | Bin 0 -> 18018 bytes .../ex2-1.png | Bin 0 -> 19975 bytes 5 files changed, 99 insertions(+), 23 deletions(-) create mode 100644 leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/ex1-1.png create mode 100644 leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/ex2-1.png diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md index 92c5165f7..68db94dc0 100755 --- a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md +++ b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/README.md @@ -1,28 +1,38 @@ # [2181.Merge Nodes in Between Zeros][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given the `head` of a linked list, which contains a series of integers **separated** by `0`'s. The **beginning** and **end** of the linked list will have `Node.val == 0`. + +For **every** two consecutive `0`'s, **merge** all the nodes lying in between them into a single node whose value is the **sum** of all the merged nodes. The modified list should not contain any `0`'s. + +Return the `head` of the modified linked list. -**Example 1:** +**Example 1:** + +![example1](./ex1-1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: head = [0,3,1,0,4,5,2,0] +Output: [4,11] +Explanation: +The above figure represents the given linked list. The modified list contains +- The sum of the nodes marked in green: 3 + 1 = 4. +- The sum of the nodes marked in red: 4 + 5 + 2 = 11. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example1](./ex2-1.png) -### 思路1 -> ... -Merge Nodes in Between Zeros -```go ``` - +Input: head = [0,1,0,3,0,2,2,0] +Output: [1,3,4] +Explanation: +The above figure represents the given linked list. The modified list contains +- The sum of the nodes marked in green: 1 = 1. +- The sum of the nodes marked in red: 3 = 3. +- The sum of the nodes marked in yellow: 2 + 2 = 4. +``` ## 结语 diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go index d115ccf5e..89ba31c96 100644 --- a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go +++ b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +type ListNode struct { + Val int + Next *ListNode +} + +func Solution(head *ListNode) *ListNode { + skipNode := head + walker := head.Next + for ; walker.Next != nil; walker = walker.Next { + if walker.Val == 0 { + skipNode.Next = walker + skipNode = walker + continue + } + skipNode.Val += walker.Val + } + skipNode.Next = nil + return head } diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution_test.go b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution_test.go index 14ff50eb4..b0365d9a5 100644 --- a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/Solution_test.go +++ b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/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: 0, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 5, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 0, + }, + }, + }, + }, + }, + }, + }, + }, &ListNode{ + Val: 4, + Next: &ListNode{ + Val: 11, + }, + }}, + {"TestCase2", &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 3, + Next: &ListNode{ + Val: 0, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 0, + }, + }, + }, + }, + }, + }, + }, + }, &ListNode{Val: 1, Next: &ListNode{Val: 3, Next: &ListNode{Val: 4}}}}, } // 开始测试 @@ -30,10 +80,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/ex1-1.png b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/ex1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d677e01bd557db097dbc09429ec31052d20b0da GIT binary patch literal 18018 zcmch-g0YY*&`o6#Woio1s-EsaoV=%~OXYIAuUVF_o=X{=LlA^DtK|#h$1_FU7v@}%> zK_J39;MnL2G4R_dMeP9izza0gPzHS%zPSMc5kZ60%!9ncT-?2!L7ZYLe~&mth24Au zgE+-hIYmY7{rv7ax!b!2*n0=w^>GdYP66M0`#QP1xH~)jZ6hiyDk>;^`C}|1#VMvF zAp!gnm$)k>CT#h)y}hfm&p#bX+!Y2o;4yReaq zn4~x_a7M|`&&%1&*+JVKxVyT9nABY{N#Hb(wx+SJ4yULJaO~yo=?r{mI6Hd!US6W& z7U1g*oKcsNx+{EFTvA5#u8a(D-pJm?KEVCI^m6$y&O!FBe;>rjP)$bJQ{Pz3ST)4e z#97T*S=06J1B5sS1iJhB{B0&8c~|1D*xxUL!u_28x!5_x-4VE_D5sbjFqi*K8qmM{ zKhxwUDro89>8S?M7Y!7>@97Wq&@}wpiH|)n*gw;)56qOH$lp#REPZqw{Q^VPwd`HO zJVW%2lw3p2jO>Gj!z1h+g2F8$e2jctmBKxBeI2zeoOL-xm0c`M3@so!I-W}67WV$Y z30)UA5hsX_G;pXQZKM{V=VECotmz@H5+v@SCao)>VPY)p?d7haWFM~TVrHx@6{HgC z=x(oW;TvM$DH9OnpagWQE~ON1q8;QXsiWbkX5^|ItQ6tl7wo2@uBvXX=V9QltP$>D zVHDyTVXE#S8KCQ7;p}DP;vaE&PgP+{b!|TnUsFGz8w-0i7cUh(4?m3%vmm7iGXuB# z2C7mPnrdENy5Z`fO5u?E{yvVvmJw2V<`Vv`74!0UkZ{vC^_I|%&{xvGZ(?9>VBn?%+*QfV*C))- zUszg2IMB@lxWZUj%gfo{LMK!uOf5joNKC@r1Ol8E4mLJ2@zu6e4hZlLG}d-jHuo}> zG1hi836%EN)EDy?HB<9+R}T-Daujnm?H?lUAD|{F9qa@V2gV_OIhD%d7W#UYmXZ$MY8HA1z~2!r_6`!BK3*0E z;bz|9fF&qO!;w14Jy%T!0HDwZk@6L|O--bNEkspROdY~} zj9f&t#Z-cWJxz_BwN(N|%q%1<0pn2D6_+vbF$21@@Kgzxa?q0r3-&QlH4}yaGoT*f zpsOq*=B(+V;_K(Eq!c2e6L4vI>H#tyo?&J__uW+kz3)3(+8b+XIRU37#0?xB)pdkL zR6TwCB~&9I=1P}C7njtsjL_874G%I_74>x#moT?*@{;j1bqO&v(^Ih*GnTNo^b8i3 zQqeTj^$Ah|%v9Z3U&KSrS5w?MNJ+{_OE*GWSkqhFMaLn~%PdgRz+TT&#@E73!$3Pw z)kGyM!ctq+)dX0&>MnZ1_S(V{S|%Q95>ifKA|^ifB@A>;oI_P4g&n=5e1iQ=#e78^ z)OA(FOjJce!}V0{C8Qu4hDr|3p7t_+uF5hNM&?c~=3;(f7NIf@_r)M)x>DYO%3_YH z_R6AR5)g4Ub^ZI&etu5AlID)aPU05EMxxT8K8_;dAz{G%fu8_jj}T1}F&{nCKo<#> zK!0f|UuW1TKsG8e~cga`=7m3Ol|s^&u0*b4Wy;2WE^I@^OD@$#Q7M9 z5MnqbO>uv9J)^kzc*L{Vq9A`2#K%MCA!*Y>7{*lRB`T<< zUJMK9Gw36w;th}zr~vQdEkzYjA&3v}Dc;Acuc#F9VrW4bpgy9<1V29?&%VAs&Q0{| z1M6tp;K?xyF`fGA!vz^AR|n8Wr3≶?kc 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 literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/ex2-1.png b/leetcode/2101-2200/2181.Merge-Nodes-in-Between-Zeros/ex2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..940ae4a22768ddc3765059d958f4456b046e1f48 GIT binary patch literal 19975 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 literal 0 HcmV?d00001 From 448098cb58aba7a138ed6f478ce47b10eb5f9e8b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Jul 2023 22:02:16 +0800 Subject: [PATCH 0335/1057] Add solution and test-cases for problem 1255 --- .../README.md | 40 ++++++++---- .../Solution.go | 63 ++++++++++++++++++- .../Solution_test.go | 24 +++---- 3 files changed, 101 insertions(+), 26 deletions(-) diff --git a/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/README.md b/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/README.md index 2c557270d..20020319e 100644 --- a/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/README.md +++ b/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/README.md @@ -1,28 +1,42 @@ # [1255.Maximum Score Words Formed by Letters][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a list of `words`, list of single `letters` (might be repeating) and `score` of every character. + +Return the maximum score of **any** valid set of words formed by using the given letters (`words[i]` cannot be used two or more times). + +It is not necessary to use all characters in `letters` and each letter can only be used once. Score of letters `'a'`, `'b'`, `'c'`, ... ,`'z'` is given by `score[0]`, `score[1]`, ... , `score[25]` respectively. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["dog","cat","dad","good"], letters = ["a","a","c","d","d","d","g","o","o"], score = [1,0,9,5,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0] +Output: 23 +Explanation: +Score a=1, c=9, d=5, g=3, o=2 +Given letters, we can form the words "dad" (5+1+5) and "good" (3+2+2+5) with a score of 23. +Words "dad" and "dog" only get a score of 21. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Score Words Formed by Letters -```go ``` +Input: words = ["xxxz","ax","bx","cx"], letters = ["z","a","b","c","x","x","x"], score = [4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,10] +Output: 27 +Explanation: +Score a=4, b=4, c=4, x=5, z=10 +Given letters, we can form the words "ax" (4+5), "bx" (4+5) and "cx" (4+5) with a score of 27. +Word "xxxz" only get a score of 25. +``` + +**Example 3:** +``` +Input: words = ["leetcode"], letters = ["l","e","t","c","o","d"], score = [0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0] +Output: 0 +Explanation: +Letter "e" can only be used once. +``` ## 结语 diff --git a/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution.go b/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution.go index d115ccf5e..6764fc03e 100644 --- a/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution.go +++ b/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string, letters []byte, score []int) int { + var ( + match func(a, b [26]int) bool + search func(int, int, [26]int) + ) + + letterCount := [26]int{} + for _, c := range letters { + letterCount[c-'a']++ + } + match = func(a, b [26]int) bool { + for i := 0; i < 26; i++ { + if a[i] > b[i] { + return false + } + } + return true + } + + restoreWords := make([]string, 0) + wordHash := make(map[string][26]int) + for _, word := range words { + store := [26]int{} + for _, b := range word { + store[b-'a']++ + } + + if match(store, letterCount) { + restoreWords = append(restoreWords, word) + wordHash[word] = store + } + } + + ans := 0 + search = func(index int, s int, count [26]int) { + if index == len(restoreWords) { + if s > ans { + ans = s + } + return + } + + w := restoreWords[index] + if match(wordHash[w], count) { + tmp := s + for i := 0; i < 26; i++ { + count[i] -= wordHash[w][i] + tmp += wordHash[w][i] * score[i] + } + search(index+1, tmp, count) + + for i := 0; i < 26; i++ { + count[i] += wordHash[w][i] + } + } + search(index+1, s, count) + } + + search(0, 0, letterCount) + + return ans } diff --git a/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution_test.go b/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution_test.go index 14ff50eb4..1aca434fd 100644 --- a/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution_test.go +++ b/leetcode/1201-1300/1255.Maximum-Score-Words-Formed-by-Letters/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + words []string + letters []byte + score []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"dog", "cat", "dad", "good"}, []byte{'a', 'a', 'c', 'd', 'd', 'd', 'g', 'o', 'o'}, []int{1, 0, 9, 5, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 23}, + {"TestCase2", []string{"xxxz", "ax", "bx", "cx"}, []byte{'z', 'a', 'b', 'c', 'x', 'x', 'x'}, []int{4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 10}, 27}, + {"TestCase3", []string{"leetcode"}, []byte{'l', 'e', 't', 'c', 'o', 'd'}, []int{0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 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.words, c.letters, c.score) 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.words, c.letters, c.score) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f737633f62834dedb6e422aca43c6ae4a5d13d1f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 23 Jul 2023 22:38:43 +0800 Subject: [PATCH 0336/1057] Add solution and test-cases for problem 1074 --- .../README.md | 36 +++++++++------ .../Solution.go | 42 +++++++++++++++++- .../Solution_test.go | 23 +++++----- .../mate1.jpg | Bin 0 -> 7243 bytes 4 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/mate1.jpg diff --git a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/README.md b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/README.md index 59215317b..34081c1e3 100644 --- a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/README.md +++ b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/README.md @@ -1,28 +1,36 @@ # [1074.Number of Submatrices That Sum 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 a `matrix` and a `target`, return the number of non-empty submatrices that sum to target. + +A submatrix `x1`, `y1`, `x2`, `y2` is the set of all cells `matrix[x][y]` with `x1 <= x <= x2` and `y1 <= y <= y2`. + +Two submatrices `(x1, y1, x2, y2)` and `(x1', y1', x2', y2')` are different if they have some coordinate that is different: for example, if `x1 != x1'`. -**Example 1:** +**Example 1:** + +![example1](./mate1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[0,1,0],[1,1,1],[0,1,0]], target = 0 +Output: 4 +Explanation: The four 1x1 submatrices that only contain 0. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Number of Submatrices That Sum to Target -```go ``` +Input: matrix = [[1,-1],[-1,1]], target = 0 +Output: 5 +Explanation: The two 1x2 submatrices, plus the two 2x1 submatrices, plus the 2x2 submatrix. +``` + +**Example 3:** +``` +Input: matrix = [[904]], target = 0 +Output: 0 +``` ## 结语 diff --git a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution.go b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution.go index d115ccf5e..d2de5cc5f 100644 --- a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution.go +++ b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matrix [][]int, target 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) + } + + /* + 0 1 0 + 1 1 1 + 0 1 0 + -- [5 4 1 0] + -- [4 3 1 0] + -- [1 1 0 0] + -- [0 0 0 0] + */ + for r := rows - 1; r >= 0; r-- { + for c := cols - 1; c >= 0; c-- { + cache[r][c] = matrix[r][c] + cache[r+1][c] + cache[r][c+1] - cache[r+1][c+1] + } + } + + ans := 0 + + for x1 := 0; x1 < rows; x1++ { + for y1 := 0; y1 < cols; y1++ { + for x2 := x1; x2 < rows; x2++ { + for y2 := y1; y2 < cols; y2++ { + diff := cache[x1][y1] + cache[x2+1][y2+1] - cache[x1][y2+1] - cache[x2+1][y1] + //fmt.Printf("(%d,%d), (%d,%d) = %d\n", x1, y1, x2, y2, diff) + if diff == target { + ans++ + } + } + } + } + } + return ans } diff --git a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution_test.go b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution_test.go index 14ff50eb4..ebb49094f 100644 --- a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution_test.go +++ b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/Solution_test.go @@ -10,30 +10,33 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 1, 0}, {1, 1, 1}, {0, 1, 0}, + }, 0, 4}, + {"TestCase2", [][]int{{1, -1}, {-1, 1}}, 0, 5}, + {"TestCase3", [][]int{{904}}, 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.inputs, c.target) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/mate1.jpg b/leetcode/1001-1100/1074.Number-of-Submatrices-That-Sum-to-Target/mate1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d0934987512386100eac97110dd73840d1e78e44 GIT binary patch literal 7243 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 Date: Tue, 25 Jul 2023 22:17:26 +0800 Subject: [PATCH 0337/1057] Add solution and test-cases for problem 852 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 25 ++++++++++++- .../Solution_test.go | 15 ++++---- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/README.md b/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/README.md index 66373f499..6de530cea 100644 --- a/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/README.md +++ b/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/README.md @@ -1,28 +1,39 @@ # [852.Peak Index in a 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 +An array `arr` a **mountain** if the following properties hold: + +- `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 `arr`, return the index `i` such that `arr[0] < arr[1] < ... < arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]`. + + +You must solve it in `O(log(arr.length))` time complexity. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [0,1,0] +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Peak Index in a Mountain Array -```go ``` +Input: arr = [0,2,1,0] +Output: 1 +``` + +**Example 3:** +``` +Input: arr = [0,10,5,2] +Output: 1 +``` ## 结语 diff --git a/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution.go b/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution.go index d115ccf5e..b2a9bb9f9 100644 --- a/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution.go +++ b/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int) int { + ll := len(arr) + s := make([]int, ll+2) + + copy(s[1:], arr) + s[0] = arr[0] - 1 + s[ll+1] = arr[ll-1] - 1 + + l, r := 1, ll+2 + ans := 0 + for l < r { + mid := r - (r-l)/2 + if s[mid] > s[mid+1] && s[mid] > s[mid-1] { + ans = mid + break + } + if s[mid] > s[mid+1] { + r = mid - 1 + continue + } + l = mid + } + return ans - 1 } diff --git a/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution_test.go b/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution_test.go index 14ff50eb4..a3ca9cf6b 100644 --- a/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution_test.go +++ b/leetcode/801-900/0852.Peak-Index-in-a-Mountain-Array/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 0}, 1}, + {"TestCase2", []int{0, 2, 1, 0}, 1}, + {"TestCase3", []int{0, 10, 5, 2}, 1}, + {"TestCase4", []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 4, 2, 1}, 8}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5a8415b4ca506b040fe3103025b986cc5a8a9c8a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 26 Jul 2023 22:17:56 +0800 Subject: [PATCH 0338/1057] Add solution and test-cases for problem 1870 --- .../README.md | 45 +++++++++++++------ .../Solution.go | 35 ++++++++++++++- .../Solution_test.go | 22 ++++----- 3 files changed, 77 insertions(+), 25 deletions(-) diff --git a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md index bc406036b..c0418ca55 100755 --- a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md +++ b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/README.md @@ -1,28 +1,47 @@ # [1870.Minimum Speed to Arrive on Time][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a floating-point number `hour`, representing the amount of time you have to reach the office. To commute to the office, you must take `n` trains in sequential order. You are also given an integer array `dist` of length `n`, where `dist[i]` describes the distance (in kilometers) of the ith train ride. + +Each train can only depart at an integer hour, so you may need to wait in between each train ride. + +- For example, if the `1st` train ride takes `1.5` hours, you must wait for an additional `0.5` hours before you can depart on the 2nd train ride at the 2 hour mark. + +Return the **minimum positive integer** speed (**in kilometers per hour**) that all the trains must travel at for you to reach the office on time, or `-1` if it is impossible to be on time. + +Tests are generated such that the answer will not exceed 107 and `hour` will have **at most two digits after the decimal point**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: dist = [1,3,2], hour = 6 +Output: 1 +Explanation: At speed 1: +- The first train ride takes 1/1 = 1 hour. +- Since we are already at an integer hour, we depart immediately at the 1 hour mark. The second train takes 3/1 = 3 hours. +- Since we are already at an integer hour, we depart immediately at the 4 hour mark. The third train takes 2/1 = 2 hours. +- You will arrive at exactly the 6 hour mark. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Speed to Arrive on Time -```go ``` +Input: dist = [1,3,2], hour = 2.7 +Output: 3 +Explanation: At speed 3: +- The first train ride takes 1/3 = 0.33333 hours. +- Since we are not at an integer hour, we wait until the 1 hour mark to depart. The second train ride takes 3/3 = 1 hour. +- Since we are already at an integer hour, we depart immediately at the 2 hour mark. The third train takes 2/3 = 0.66667 hours. +- You will arrive at the 2.66667 hour mark. +``` + +**Example 3:** +``` +Input: dist = [1,3,2], hour = 1.9 +Output: -1 +Explanation: It is impossible because the earliest the third train can depart is at the 2 hour mark. +``` ## 结语 diff --git a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go index d115ccf5e..0dcdb182d 100644 --- a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go +++ b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(dist []int, hour float64) int { + l, r := 1, 1000000001 + var canReach func(int) bool + canReach = func(speed int) bool { + cost := float64(0) + for idx, dis := range dist { + tmp := float64(dis) / float64(speed) + if dis%speed != 0 && idx != len(dist)-1 { + tmp = float64(dis/speed + 1) + } + cost += tmp + } + return hour >= cost + } + + ans := -1 + for l <= r { + if l == r { + if canReach(l) { + ans = l + } + break + } + + mid := r - (r-l)/2 + if canReach(mid) { + r = mid - 1 + ans = mid + continue + } + l = mid + } + return ans } diff --git a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go index 14ff50eb4..4dc0fafc0 100644 --- a/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go +++ b/leetcode/1801-1900/1870.Minimum-Speed-to-Arrive-on-Time/Solution_test.go @@ -10,30 +10,32 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + dist []int + hour float64 + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 2}, float64(6), 1}, + {"TestCase2", []int{1, 3, 2}, 2.7, 3}, + {"TestCase3", []int{1, 3, 2}, 1.9, -1}, + {"TestCase4", []int{1, 1, 100000}, 2.01, 10000000}, } // 开始测试 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.hour) 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.hour) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0978fc75522b93fc16d43e470074180275c90801 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 27 Jul 2023 00:03:28 +0800 Subject: [PATCH 0339/1057] Add solution and test-cases for problem 1305 --- .../README.md | 25 ++++---- .../Solution.go | 59 +++++++++++++++++- .../Solution_test.go | 27 +++++--- .../q2-e1.png | Bin 0 -> 10332 bytes .../q2-e5-.png | Bin 0 -> 8376 bytes 5 files changed, 85 insertions(+), 26 deletions(-) create mode 100644 leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/q2-e1.png create mode 100644 leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/q2-e5-.png diff --git a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/README.md b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/README.md index 9e6df6f42..64825a05e 100644 --- a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/README.md +++ b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/README.md @@ -1,28 +1,25 @@ # [1305.All Elements in Two Binary Search Trees][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two binary search trees `root1` and `root2`, return a list containing all the integers from both trees sorted in **ascending** order. + +**Example 1:** -**Example 1:** +![example1](./q2-e1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root1 = [2,1,4], root2 = [1,0,3] +Output: [0,1,1,2,3,4] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example1](./q2-e5-.png) -### 思路1 -> ... -All Elements in Two Binary Search Trees -```go ``` - +Input: root1 = [1,null,8], root2 = [8,1] +Output: [1,1,8,8] +``` ## 结语 diff --git a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution.go b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution.go index d115ccf5e..c2e4e33c3 100644 --- a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution.go +++ b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root1 *TreeNode, root2 *TreeNode) []int { + stack1 := make([]*TreeNode, 0) + stack2 := make([]*TreeNode, 0) + + a, b := true, true + ans := make([]int, 0) + for len(stack1) > 0 || len(stack2) > 0 || root1 != nil || root2 != nil { + if a { + for ; root1 != nil; root1 = root1.Left { + stack1 = append(stack1, root1) + } + } + if b { + for ; root2 != nil; root2 = root2.Left { + stack2 = append(stack2, root2) + } + } + l1, l2 := len(stack1), len(stack2) + if l1 > 0 && l2 > 0 { + x := stack1[l1-1] + y := stack2[l2-1] + if x.Val < y.Val { + stack1 = stack1[:l1-1] + ans = append(ans, x.Val) + root1 = x.Right + a, b = true, false + } else { + stack2 = stack2[:l2-1] + ans = append(ans, y.Val) + root2 = y.Right + a, b = false, true + } + continue + } + + if l1 > 0 { + x := stack1[l1-1] + ans = append(ans, x.Val) + stack1 = stack1[:l1-1] + root1 = x.Right + a, b = true, false + continue + } + if l2 > 0 { + x := stack2[l2-1] + stack2 = stack2[:l2-1] + ans = append(ans, x.Val) + root2 = x.Right + a, b = false, true + } + } + return ans } diff --git a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution_test.go b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution_test.go index 14ff50eb4..568592823 100644 --- a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution_test.go +++ b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + t1, t2 *TreeNode + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 4}, + }, &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 3}, + }, []int{0, 1, 1, 2, 3, 4}}, + {"TestCase2", &TreeNode{Val: 1, Right: &TreeNode{Val: 8}}, &TreeNode{Val: 8, Left: &TreeNode{Val: 1}}, []int{1, 1, 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.t1, c.t2) 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.t1, c.t2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/q2-e1.png b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/q2-e1.png new file mode 100644 index 0000000000000000000000000000000000000000..26ab00c47b568e9c867a075df039d1240b7506e0 GIT binary patch literal 10332 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 D(Tdmk literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/q2-e5-.png b/leetcode/1301-1400/1305.All-Elements-in-Two-Binary-Search-Trees/q2-e5-.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2fdb54ab9b5ec479be688c597db2305b87337b GIT binary patch literal 8376 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 CQ!?xT literal 0 HcmV?d00001 From 76200c7509de6a86a92fc8209c405c900cfb5deb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 29 Jul 2023 12:37:38 +0800 Subject: [PATCH 0340/1057] Add solution and test-cases for problem 732 --- .../701-800/0732.My-Calendar-III/README.md | 37 +++++++------- .../701-800/0732.My-Calendar-III/Solution.go | 48 ++++++++++++++++++- .../0732.My-Calendar-III/Solution_test.go | 14 +++--- 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/leetcode/701-800/0732.My-Calendar-III/README.md b/leetcode/701-800/0732.My-Calendar-III/README.md index dfaf0adc2..ffb52e280 100644 --- a/leetcode/701-800/0732.My-Calendar-III/README.md +++ b/leetcode/701-800/0732.My-Calendar-III/README.md @@ -1,28 +1,33 @@ # [732.My Calendar 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 +A k-booking happens when `k` events have some non-empty intersection (i.e., there is some time that is common to all `k` events.) -**Example 1:** +You are given some events `[startTime, endTime)`, after each given event, return an integer `k` representing the maximum `k`-booking between all the previous events. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `MyCalendarThree` class: -## 题意 -> ... +- `MyCalendarThree()` Initializes the object. +- `int book(int startTime, int endTime)` Returns an integer `k` representing the largest integer such that there exists a `k`-booking in the calendar. -## 题解 +**Example 1:** -### 思路1 -> ... -My Calendar III -```go ``` - +Input +["MyCalendarThree", "book", "book", "book", "book", "book", "book"] +[[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]] +Output +[null, 1, 1, 2, 3, 3, 3] + +Explanation +MyCalendarThree myCalendarThree = new MyCalendarThree(); +myCalendarThree.book(10, 20); // return 1 +myCalendarThree.book(50, 60); // return 1 +myCalendarThree.book(10, 40); // return 2 +myCalendarThree.book(5, 15); // return 3 +myCalendarThree.book(5, 10); // return 3 +myCalendarThree.book(25, 55); // return 3 +``` ## 结语 diff --git a/leetcode/701-800/0732.My-Calendar-III/Solution.go b/leetcode/701-800/0732.My-Calendar-III/Solution.go index d115ccf5e..964a74078 100644 --- a/leetcode/701-800/0732.My-Calendar-III/Solution.go +++ b/leetcode/701-800/0732.My-Calendar-III/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type MyCalendarThree struct { + store map[int]int + keys []int +} + +// 这种感觉 +// 从一个端点开始,在没有遇到结束端点的时候,我们多次遇到其他的开始端点,那就是重合 +// 例如开始写入 1, 20, 然后跟进2,15 +func Constructor732() MyCalendarThree { + return MyCalendarThree{ + store: make(map[int]int), + keys: make([]int, 0), + } +} + +func (this *MyCalendarThree) Book(startTime int, endTime int) int { + _, ok1 := this.store[startTime] + _, ok2 := this.store[endTime] + this.store[startTime]++ + this.store[endTime]-- + if !ok1 { + this.keys = append(this.keys, startTime) + } + if !ok2 { + this.keys = append(this.keys, endTime) + } + sort.Ints(this.keys) + cur, ans := 0, 0 + for _, key := range this.keys { + cur += this.store[key] + if cur > ans { + ans = cur + } + } + return ans +} + +func Solution(events [][]int) []int { + c := Constructor732() + ans := make([]int, len(events)) + for idx, event := range events { + ans[idx] = c.Book(event[0], event[1]) + } + return ans } diff --git a/leetcode/701-800/0732.My-Calendar-III/Solution_test.go b/leetcode/701-800/0732.My-Calendar-III/Solution_test.go index 14ff50eb4..5b9283fe1 100644 --- a/leetcode/701-800/0732.My-Calendar-III/Solution_test.go +++ b/leetcode/701-800/0732.My-Calendar-III/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {10, 20}, {50, 60}, {10, 40}, {5, 15}, {5, 10}, {25, 55}, + }, []int{1, 1, 2, 3, 3, 3}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8e32bc9bf6e21a834cb937d312d707dcf2134662 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 29 Jul 2023 13:32:53 +0800 Subject: [PATCH 0341/1057] Add solution and test-cases for problem 731 --- .../701-800/0731.My-Calendar-II/README.md | 39 ++++++----- .../701-800/0731.My-Calendar-II/Solution.go | 68 ++++++++++++++++++- .../0731.My-Calendar-II/Solution_test.go | 14 ++-- 3 files changed, 96 insertions(+), 25 deletions(-) diff --git a/leetcode/701-800/0731.My-Calendar-II/README.md b/leetcode/701-800/0731.My-Calendar-II/README.md index 45204c261..7a1d8a291 100644 --- a/leetcode/701-800/0731.My-Calendar-II/README.md +++ b/leetcode/701-800/0731.My-Calendar-II/README.md @@ -1,28 +1,35 @@ # [731.My Calendar II][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are implementing a program to use as your calendar. We can add a new event if adding the event will not cause a **triple booking**. -**Example 1:** +A **triple booking** happens when three events have some non-empty intersection (i.e., some moment is common to all the three events.). -``` -Input: a = "11", b = "1" -Output: "100" -``` +The event can be represented as a pair of integers `start` and `end` that represents a booking on the half-open interval `[start, end)`, the range of real numbers `x` such that `start <= x < end`. -## 题意 -> ... +Implement the `MyCalendarTwo` class: -## 题解 +- `MyCalendarTwo()` Initializes the calendar object. +- `boolean book(int start, int end)` Returns `true` if the event can be added to the calendar successfully without causing a **triple booking**. Otherwise, return `false` and do not add the event to the calendar. -### 思路1 -> ... -My Calendar II -```go -``` +**Example 1:** +``` +Input +["MyCalendarTwo", "book", "book", "book", "book", "book", "book"] +[[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]] +Output +[null, true, true, true, false, true, true] + +Explanation +MyCalendarTwo myCalendarTwo = new MyCalendarTwo(); +myCalendarTwo.book(10, 20); // return True, The event can be booked. +myCalendarTwo.book(50, 60); // return True, The event can be booked. +myCalendarTwo.book(10, 40); // return True, The event can be double booked. +myCalendarTwo.book(5, 15); // return False, The event cannot be booked, because it would result in a triple booking. +myCalendarTwo.book(5, 10); // return True, The event can be booked, as it does not use time 10 which is already double booked. +myCalendarTwo.book(25, 55); // return True, The event can be booked, as the time in [25, 40) will be double booked with the third event, the time [40, 50) will be single booked, and the time [50, 55) will be double booked with the second event. +``` ## 结语 diff --git a/leetcode/701-800/0731.My-Calendar-II/Solution.go b/leetcode/701-800/0731.My-Calendar-II/Solution.go index d115ccf5e..5abe89b7e 100644 --- a/leetcode/701-800/0731.My-Calendar-II/Solution.go +++ b/leetcode/701-800/0731.My-Calendar-II/Solution.go @@ -1,5 +1,69 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +type MyCalendarTwo struct { + store map[int]int + keys []int +} + +func Constructor731() MyCalendarTwo { + return MyCalendarTwo{ + store: make(map[int]int), + keys: make([]int, 0), + } +} + +func (this *MyCalendarTwo) Book(start int, end int) bool { + _, ok1 := this.store[start] + _, ok2 := this.store[end] + tmp := make([]int, len(this.keys)) + copy(tmp, this.keys) + this.store[start]++ + this.store[end]-- + + needSort := false + if !ok1 { + needSort = true + tmp = append(tmp, start) + } + if !ok2 { + needSort = true + tmp = append(tmp, end) + } + if needSort { + sort.Ints(tmp) + } + ans := 0 + m := 0 + for _, key := range tmp { + ans += this.store[key] + if ans > m { + m = ans + } + } + if m >= 3 { + if !ok1 { + delete(this.store, start) + } else { + this.store[start]-- + } + if !ok2 { + delete(this.store, end) + } else { + this.store[end]++ + } + return false + } + this.keys = tmp + return true +} + +func Solution(inputs [][]int) []bool { + c := Constructor731() + ans := make([]bool, len(inputs)) + for idx, in := range inputs { + ans[idx] = c.Book(in[0], in[1]) + } + return ans } diff --git a/leetcode/701-800/0731.My-Calendar-II/Solution_test.go b/leetcode/701-800/0731.My-Calendar-II/Solution_test.go index 14ff50eb4..9329612f9 100644 --- a/leetcode/701-800/0731.My-Calendar-II/Solution_test.go +++ b/leetcode/701-800/0731.My-Calendar-II/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {10, 20}, {50, 60}, {10, 40}, {5, 15}, {5, 10}, {25, 55}, + }, []bool{true, true, true, false, true, true}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f1bdfa6b5ff50d0c4a582278f430d2372670b25b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 29 Jul 2023 20:34:43 +0800 Subject: [PATCH 0342/1057] Add solution and test-cases for problem 1944 --- .../README.md | 36 +++++++------ .../Solution.go | 51 +++++++++++++++++- .../Solution_test.go | 13 +++-- .../queue-plane.jpg | Bin 0 -> 93140 bytes 4 files changed, 76 insertions(+), 24 deletions(-) create mode 100644 leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/queue-plane.jpg diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md index 9901cb42c..b9f2b8e4a 100755 --- a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md +++ b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/README.md @@ -1,28 +1,34 @@ # [1944.Number of Visible People in a Queue][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There are `n` people standing in a queue, and they numbered from `0` to `n - 1` in **left to right** order. You are given an array `heights` of **distinct** integers where `heights[i]` represents the height of the ith person. -**Example 1:** +A person can **see** another person to their right in the queue if everybody in between is **shorter** than both of them. More formally, the ith person can see the jth person if `i < j` and `min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1])`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Return an array `answer` of length n where `answer[i]` is the **number of people** the ith person can **see** to their right in the queue. -## 题意 -> ... +**Example 1:** -## 题解 +![example](./queue-plane.jpg) -### 思路1 -> ... -Number of Visible People in a Queue -```go +``` +Input: heights = [10,6,8,5,11,9] +Output: [3,1,2,1,1,0] +Explanation: +Person 0 can see person 1, 2, and 4. +Person 1 can see person 2. +Person 2 can see person 3 and 4. +Person 3 can see person 4. +Person 4 can see person 5. +Person 5 can see no one since nobody is to the right of them. ``` +**Example 2:** + +``` +Input: heights = [5,1,2,3,10] +Output: [4,1,1,1,0] +``` ## 结语 diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go index d115ccf5e..bd24d8a47 100644 --- a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go +++ b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution.go @@ -1,5 +1,52 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(heights []int) []int { + // 单调栈 + // 1, 2, 3 + l := len(heights) + ans := make([]int, l) + ans[l-1] = 0 + stack := make([]int, l) + stack[l-1] = heights[l-1] + index := l - 1 + // a, b, c, d, e + for idx := l - 2; idx >= 0; idx-- { + if heights[idx] < stack[index] { + index-- + stack[index] = heights[idx] + ans[idx] = 1 + continue + } + + for ; index < l && heights[idx] > stack[index]; index++ { + ans[idx]++ + } + if index != l { + ans[idx]++ + } + index-- + stack[index] = heights[idx] + } + // abc c是b的nextGreater,a可以看到 + // 单调增和减 + // 先尝试n^2 + /* + m := make([]int, l) + // 10, 8, 6, 7 + for idx := 0; idx < l-2; idx++ { + // +1 是可以看到的 + ans[idx] = 1 + max := heights[idx+1] + for next := idx + 2; next < l; next++ { + if heights[idx] < heights[next] && heights[idx] > max || + heights[idx] > heights[next] && heights[next] > max { + ans[idx]++ + } + if heights[next] > max { + max = heights[next] + } + } + } + */ + return ans } diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go index 14ff50eb4..595210d97 100644 --- a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go +++ b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{10, 6, 8, 5, 11, 9}, []int{3, 1, 2, 1, 1, 0}}, + {"TestCase2", []int{5, 1, 2, 3, 10}, []int{4, 1, 1, 1, 0}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/queue-plane.jpg b/leetcode/1901-2000/1944.Number-of-Visible-People-in-a-Queue/queue-plane.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f90721d1ba8608e8ed5abee0ac44eadcf2bed53a GIT binary patch literal 93140 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 H?2!C#ISJXG literal 0 HcmV?d00001 From cef234c044d9d00215e59f8c3ffba22e2f7cd659 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 29 Jul 2023 22:54:20 +0800 Subject: [PATCH 0343/1057] Add solution and test-cases for problem 895 --- .../0895.Maximum-Frequency-Stack/README.md | 42 ++++++----- .../0895.Maximum-Frequency-Stack/Solution.go | 72 ++++++++++++++++++- .../Solution_test.go | 23 ++++-- 3 files changed, 112 insertions(+), 25 deletions(-) diff --git a/leetcode/801-900/0895.Maximum-Frequency-Stack/README.md b/leetcode/801-900/0895.Maximum-Frequency-Stack/README.md index 70dc9e882..2c01be3d8 100644 --- a/leetcode/801-900/0895.Maximum-Frequency-Stack/README.md +++ b/leetcode/801-900/0895.Maximum-Frequency-Stack/README.md @@ -1,28 +1,38 @@ # [895.Maximum Frequency Stack][title] -> [!WARNING|style:flat] -> 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 stack-like data structure to push elements to the stack and pop the most frequent element from the stack. -**Example 1:** +Implement the `FreqStack` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `FreqStack()` constructs an empty frequency stack. +- `void push(int val)` pushes an integer `val` onto the top of the stack. +- `int pop()` removes and returns the most frequent element in the stack. -## 题意 -> ... + - If there is a tie for the most frequent element, the element closest to the stack's top is removed and returned. -## 题解 +**Example 1:** -### 思路1 -> ... -Maximum Frequency Stack -```go ``` - +Input +["FreqStack", "push", "push", "push", "push", "push", "push", "pop", "pop", "pop", "pop"] +[[], [5], [7], [5], [7], [4], [5], [], [], [], []] +Output +[null, null, null, null, null, null, null, 5, 7, 5, 4] + +Explanation +FreqStack freqStack = new FreqStack(); +freqStack.push(5); // The stack is [5] +freqStack.push(7); // The stack is [5,7] +freqStack.push(5); // The stack is [5,7,5] +freqStack.push(7); // The stack is [5,7,5,7] +freqStack.push(4); // The stack is [5,7,5,7,4] +freqStack.push(5); // The stack is [5,7,5,7,4,5] +freqStack.pop(); // return 5, as 5 is the most frequent. The stack becomes [5,7,5,7,4]. +freqStack.pop(); // return 7, as 5 and 7 is the most frequent, but 7 is closest to the top. The stack becomes [5,7,5,4]. +freqStack.pop(); // return 5, as 5 is the most frequent. The stack becomes [5,7,4]. +freqStack.pop(); // return 4, as 4, 5 and 7 is the most frequent, but 4 is closest to the top. The stack becomes [5,7]. +``` ## 结语 diff --git a/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution.go b/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution.go index d115ccf5e..4fbb0e4e9 100644 --- a/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution.go +++ b/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution.go @@ -1,5 +1,73 @@ package Solution -func Solution(x bool) bool { - return x +type FreqStack struct { + stack, freq []int + item map[int]int +} + +func Constructor895() FreqStack { + return FreqStack{ + stack: make([]int, 0), + freq: make([]int, 0), + item: make(map[int]int), + } +} + +func (this *FreqStack) Push(val int) { + // 5, 7, 5, 4, + // 5, 7, 5, 5, + this.item[val]++ + l := len(this.freq) + this.stack = append(this.stack, val) + if l == 0 { + this.freq = append(this.freq, val) + return + } + latest := this.freq[l-1] + count := this.item[latest] + if count <= this.item[val] { + latest = val + } + this.freq = append(this.freq, latest) +} + +func (this *FreqStack) Pop() int { + l := len(this.freq) - 1 + which := this.freq[l] + + this.item[which]-- + store := make([]int, 0) + for ; l >= 0; l-- { + if this.stack[l] == which { + break + } + store = append(store, this.stack[l]) + this.item[this.stack[l]]-- + } + + this.stack = this.stack[:l] + this.freq = this.freq[:l] + for i := len(store) - 1; i >= 0; i-- { + this.Push(store[i]) + } + + return which +} + +type opt struct { + name string + v int +} + +func Solution(ops []opt) []int { + c := Constructor895() + ans := make([]int, 0) + for _, op := range ops { + if op.name == "push" { + c.Push(op.v) + continue + } + ans = append(ans, c.Pop()) + } + return ans } diff --git a/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution_test.go b/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution_test.go index 14ff50eb4..ed6b02b0f 100644 --- a/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution_test.go +++ b/leetcode/801-900/0895.Maximum-Frequency-Stack/Solution_test.go @@ -10,12 +10,21 @@ 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{ + {"push", 5}, + {"push", 7}, + {"push", 5}, + {"push", 7}, + {"push", 4}, + {"push", 5}, + {"", 0}, + {"", 0}, + {"", 0}, + {"", 0}, + }, []int{5, 7, 5, 4}}, } // 开始测试 @@ -30,10 +39,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6cb86e0b992cb78d72c4a28c1260d5526096c864 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 31 Jul 2023 20:40:00 +0800 Subject: [PATCH 0344/1057] Add solution and test-cases for problem 1551 --- .../README.md | 28 +++++++++---------- .../Solution.go | 12 ++++++-- .../Solution_test.go | 13 ++++----- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md index f27cca8d5..b7d3d4cb8 100755 --- a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md +++ b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/README.md @@ -1,28 +1,28 @@ # [1551.Minimum Operations to Make Array 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 have an array `arr` of length `n` where `arr[i] = (2 * i) + 1` for all valid values of `i` (i.e., `0 <= i < n`). + +In one operation, you can select two indices `x` and `y` where `0 <= x, y < n` and subtract `1` from `arr[x]` and add `1` to `arr[y]` (i.e., perform `arr[x] -=1` and `arr[y] += 1`). The goal is to make all the elements of the array **equal**. It is **guaranteed** that all the elements of the array can be made equal using some operations. + +Given an integer `n`, the length of the array, return the minimum number of operations needed to make all the elements of arr equal. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3 +Output: 2 +Explanation: arr = [1, 3, 5] +First operation choose x = 2 and y = 0, this leads arr to be [2, 3, 4] +In the second operation choose x = 2 and y = 0 again, thus arr = [3, 3, 3]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Operations to Make Array Equal -```go ``` - +Input: n = 6 +Output: 9 +``` ## 结语 diff --git a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go index d115ccf5e..404170cc9 100644 --- a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go +++ b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + ans := 0 + for i := 0; i < n; i++ { + r := 2*i + 1 + if r >= n { + break + } + ans += n - r + } + return ans } diff --git a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go index 14ff50eb4..f738d8945 100644 --- a/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go +++ b/leetcode/1501-1600/1551.Minimum-Operations-to-Make-Array-Equal/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, 2}, + {"TestCase2", 6, 9}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b82a2f0ceafc4e50d62759a830c54566aca36e37 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 31 Jul 2023 21:22:20 +0800 Subject: [PATCH 0345/1057] Add solution and test-cases for problem 2079 --- .../2001-2100/2079.Watering-Plants/README.md | 54 ++++++++++++++----- .../2079.Watering-Plants/Solution.go | 15 +++++- .../2079.Watering-Plants/Solution_test.go | 21 ++++---- 3 files changed, 65 insertions(+), 25 deletions(-) diff --git a/leetcode/2001-2100/2079.Watering-Plants/README.md b/leetcode/2001-2100/2079.Watering-Plants/README.md index 484b63234..1028bddf5 100755 --- a/leetcode/2001-2100/2079.Watering-Plants/README.md +++ b/leetcode/2001-2100/2079.Watering-Plants/README.md @@ -1,28 +1,56 @@ # [2079.Watering Plants][title] -> [!WARNING|style:flat] -> 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 water `n` plants in your garden with a watering can. The plants are arranged in a row and are labeled from `0` to `n - 1` from left to right where the ith plant is located at `x = i`. There is a river at `x = -1` that you can refill your watering can at. + +Each plant needs a specific amount of water. You will water the plants in the following way: + +- Water the plants in order from left to right. +- After watering the current plant, if you do not have enough water to **completely** water the next plant, return to the river to fully refill the watering can. +- You **cannot** refill the watering can early. + +You are initially at the river (i.e., `x = -1`). It takes **one step** to move **one unit** on the x-axis. + +Given a **0-indexed** integer array `plants` of `n` integers, where `plants[i]` is the amount of water the ith plant needs, and an integer `capacity` representing the watering can capacity, return the **number of steps** needed to water all the plants. + + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: plants = [2,2,3,3], capacity = 5 +Output: 14 +Explanation: Start at the river with a full watering can: +- Walk to plant 0 (1 step) and water it. Watering can has 3 units of water. +- Walk to plant 1 (1 step) and water it. Watering can has 1 unit of water. +- Since you cannot completely water plant 2, walk back to the river to refill (2 steps). +- Walk to plant 2 (3 steps) and water it. Watering can has 2 units of water. +- Since you cannot completely water plant 3, walk back to the river to refill (3 steps). +- Walk to plant 3 (4 steps) and water it. +Steps needed = 1 + 1 + 2 + 3 + 3 + 4 = 14. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Watering Plants -```go +``` +Input: plants = [1,1,1,4,2,3], capacity = 4 +Output: 30 +Explanation: Start at the river with a full watering can: +- Water plants 0, 1, and 2 (3 steps). Return to river (3 steps). +- Water plant 3 (4 steps). Return to river (4 steps). +- Water plant 4 (5 steps). Return to river (5 steps). +- Water plant 5 (6 steps). +Steps needed = 3 + 3 + 4 + 4 + 5 + 5 + 6 = 30. ``` +**Example 3:** + +``` +Input: plants = [7,7,7,7,7,7,7], capacity = 8 +Output: 49 +Explanation: You have to refill before watering each plant. +Steps needed = 1 + 1 + 2 + 2 + 3 + 3 + 4 + 4 + 5 + 5 + 6 + 6 + 7 = 49. +``` ## 结语 diff --git a/leetcode/2001-2100/2079.Watering-Plants/Solution.go b/leetcode/2001-2100/2079.Watering-Plants/Solution.go index d115ccf5e..daf948a17 100644 --- a/leetcode/2001-2100/2079.Watering-Plants/Solution.go +++ b/leetcode/2001-2100/2079.Watering-Plants/Solution.go @@ -1,5 +1,16 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(plants []int, capacity int) int { + cost := 0 + sum := 0 + for idx, water := range plants { + sum += water + if sum <= capacity { + cost++ + continue + } + cost += 2*idx + 1 + sum = water + } + return cost } diff --git a/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go b/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go index 14ff50eb4..5a793515a 100644 --- a/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go +++ b/leetcode/2001-2100/2079.Watering-Plants/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + n int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 2, 3, 3}, 5, 14}, + {"TestCase2", []int{1, 1, 1, 4, 2, 3}, 4, 30}, + {"TestCase3", []int{7, 7, 7, 7, 7, 7, 7}, 8, 49}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.n) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.n) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f1a51edb5c931b8b644432b390e7562f5249f606 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 31 Jul 2023 21:44:27 +0800 Subject: [PATCH 0346/1057] Add solution and test-cases for problem 1877 --- .../README.md | 34 +++++++++++-------- .../Solution.go | 13 +++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md index 9a3acedd6..1df6803ca 100755 --- a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md +++ b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/README.md @@ -1,28 +1,34 @@ # [1877.Minimize Maximum Pair Sum in Array][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +The **pair sum** of a pair `(a,b)` is equal to `a + b`. The **maximum pair sum** is the largest **pair sum** in a list of pairs. + +- For example, if we have pairs `(1,5)`, `(2,3)`, and `(4,4)`, the **maximum pair sum** would be `max(1+5, 2+3, 4+4) = max(6, 5, 8) = 8`. + +Given an array `nums` of **even** length `n`, pair up the elements of `nums` into `n / 2` pairs such that: + +- Each element of `nums` is in **exactly one** pair, and +- The **maximum pair sum** is **minimized**. + +Return the minimized **maximum pair sum** after optimally pairing up the elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,5,2,3] +Output: 7 +Explanation: The elements can be paired up into pairs (3,3) and (5,2). +The maximum pair sum is max(3+3, 5+2) = max(6, 7) = 7. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimize Maximum Pair Sum in Array -```go ``` - +Input: nums = [3,5,4,2,4,6] +Output: 8 +Explanation: The elements can be paired up into pairs (3,5), (4,4), and (6,2). +The maximum pair sum is max(3+5, 4+4, 6+2) = max(8, 8, 8) = 8. +``` ## 结语 diff --git a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go index d115ccf5e..41206bd4f 100644 --- a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go +++ b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) int { + sort.Ints(nums) + ans := 0 + for s, e := 0, len(nums)-1; s < e; s, e = s+1, e-1 { + if r := nums[s] + nums[e]; r > ans { + ans = r + } + } + return ans } diff --git a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go index 14ff50eb4..b455eddb3 100644 --- a/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go +++ b/leetcode/1801-1900/1877.Minimize-Maximum-Pair-Sum-in-Array/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 5, 2, 3}, 7}, + {"TestCase2", []int{3, 5, 4, 2, 4, 6}, 8}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c5ff94d06fa08be3a5c9fd9a1ea4378a9e4d8fc8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 1 Aug 2023 22:05:56 +0800 Subject: [PATCH 0347/1057] Add solution and test-cases for problem 1261 --- .../README.md | 67 ++++++++++++++---- .../Solution.go | 48 ++++++++++++- .../Solution_test.go | 40 ++++++++--- .../untitled-diagram-4-1-1.jpg | Bin 0 -> 11253 bytes .../untitled-diagram-4-1.jpg | Bin 0 -> 5443 bytes .../untitled-diagram-4.jpg | Bin 0 -> 12898 bytes 6 files changed, 129 insertions(+), 26 deletions(-) create mode 100644 leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4-1-1.jpg create mode 100644 leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4-1.jpg create mode 100644 leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4.jpg diff --git a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/README.md b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/README.md index 481676f1e..a1b08da8c 100644 --- a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/README.md +++ b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/README.md @@ -1,28 +1,69 @@ # [1261.Find Elements in a Contaminated 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 a binary tree with the following rules: + +1. `root.val == 0` +2. If `treeNode.val == x` and `treeNode.left != null`, then `treeNode.left.val == 2 * x + 1` +3. If `treeNode.val == x` and `treeNode.right != null`, then `treeNode.right.val == 2 * x + 2` + +Now the binary tree is contaminated, which means all `treeNode.val` have been changed to `-1`. + +Implement the `FindElements` class: + +- `FindElements(TreeNode* root)` Initializes the object with a contaminated binary tree and recovers it. +- `bool find(int target)` Returns `true` if the `target` value exists in the recovered binary tree. + +**Example 1:** -**Example 1:** +![example1](./untitled-diagram-4-1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input +["FindElements","find","find"] +[[[-1,null,-1]],[1],[2]] +Output +[null,false,true] +Explanation +FindElements findElements = new FindElements([-1,null,-1]); +findElements.find(1); // return False +findElements.find(2); // return True ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./untitled-diagram-4.jpg) -### 思路1 -> ... -Find Elements in a Contaminated Binary Tree -```go ``` +Input +["FindElements","find","find","find"] +[[[-1,-1,-1,-1,-1]],[1],[3],[5]] +Output +[null,true,true,false] +Explanation +FindElements findElements = new FindElements([-1,-1,-1,-1,-1]); +findElements.find(1); // return True +findElements.find(3); // return True +findElements.find(5); // return False +``` + +**Example 3:** + +![example3](./untitled-diagram-4-1-1.jpg) +``` +Input +["FindElements","find","find","find","find"] +[[[-1,null,-1,-1,null,-1]],[2],[3],[4],[5]] +Output +[null,true,false,false,true] +Explanation +FindElements findElements = new FindElements([-1,null,-1,-1,null,-1]); +findElements.find(2); // return True +findElements.find(3); // return False +findElements.find(4); // return False +findElements.find(5); // return True +``` ## 结语 diff --git a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution.go b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution.go index d115ccf5e..03ff1cd3f 100644 --- a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution.go +++ b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution.go @@ -1,5 +1,49 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +type FindElements struct { + cache map[int]struct{} +} + +func (f *FindElements) dfs(root *TreeNode) { + if root == nil { + return + } + f.cache[root.Val] = struct{}{} + if root.Left != nil { + root.Left.Val = 2*root.Val + 1 + f.dfs(root.Left) + } + if root.Right != nil { + root.Right.Val = 2*root.Val + 2 + f.dfs(root.Right) + } +} + +func Constructor1261(root *TreeNode) FindElements { + o := FindElements{cache: make(map[int]struct{})} + // add root + root.Val = 0 + o.dfs(root) + + return o +} + +func (this *FindElements) Find(target int) bool { + _, ok := this.cache[target] + return ok +} + +func Solution(tree *TreeNode, targets []int) []bool { + ans := make([]bool, len(targets)) + o := Constructor1261(tree) + for idx, target := range targets { + ans[idx] = o.Find(target) + } + + return ans } diff --git a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution_test.go b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution_test.go index 14ff50eb4..ef8dffea4 100644 --- a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution_test.go +++ b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/Solution_test.go @@ -9,31 +9,49 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs *TreeNode + targets []int + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{Val: -1, Right: &TreeNode{Val: -1}}, []int{1, 2}, []bool{false, true}}, + {"TestCase2", &TreeNode{ + Val: -1, + Left: &TreeNode{ + Val: -1, + Left: &TreeNode{Val: -1}, + Right: &TreeNode{Val: -1}, + }, + Right: &TreeNode{Val: -1}, + }, []int{1, 3, 5}, []bool{true, true, false}}, + {"TestCase3", &TreeNode{ + Val: -1, + Right: &TreeNode{ + Val: -1, + Left: &TreeNode{ + Val: -1, + Left: &TreeNode{Val: -1}, + }, + }, + }, []int{2, 3, 4, 5}, []bool{true, false, false, true}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, 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", + c.expect, got, c.inputs, c.targets) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4-1-1.jpg b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4-1-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e16319eae1aab2bb229ca1be2fffb737c3ffc8ab GIT binary patch literal 11253 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 O@Q`Kk?|dlS;QkNCk(M0* literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4-1.jpg b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9360fd6ecf725389caeca6b885d4719905a4d053 GIT binary patch literal 5443 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 KN%w%H@qYm3pFXt! literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4.jpg b/leetcode/1201-1300/1261.Find-Elements-in-a-Contaminated-Binary-Tree/untitled-diagram-4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0a43f4062eb09defdb70b7834cfee648e185b68 GIT binary patch literal 12898 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 Date: Wed, 2 Aug 2023 22:49:08 +0800 Subject: [PATCH 0348/1057] Add solution and test-cases for problem 701 --- .../README.md | 34 ++++++---- .../Solution.go | 17 ++++- .../Solution_test.go | 60 +++++++++++++++--- .../bst.jpg | Bin 0 -> 12747 bytes .../insertbst.jpg | Bin 0 -> 21751 bytes 5 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/bst.jpg create mode 100644 leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/insertbst.jpg diff --git a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/README.md b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/README.md index cb4b7c91d..dfb48c407 100644 --- a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/README.md +++ b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/README.md @@ -1,28 +1,36 @@ # [701.Insert into a 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 +You are given the `root` node of a binary search tree (BST) and a `value` to insert into the tree. Return the root node of the BST after the insertion. It is **guaranteed** that the new value does not exist in the original BST. + +**Notice** that there may exist multiple valid ways for the insertion, as long as the tree remains a BST after insertion. You can return **any of them**. -**Example 1:** +**Example 1:** + +![example1](./insertbst.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [4,2,7,1,3], val = 5 +Output: [4,2,7,1,3,5] +Explanation: Another accepted tree is: ``` -## 题意 -> ... +![result](./bst.jpg) + -## 题解 +**Example 2:** -### 思路1 -> ... -Insert into a Binary Search Tree -```go ``` +Input: root = [40,20,60,10,30,50,70], val = 25 +Output: [40,20,60,10,30,50,70,null,null,25] +``` + +**Example 3:** +``` +Input: root = [4,2,7,1,3,null,null,null,null,null,null], val = 5 +Output: [4,2,7,1,3,5] +``` ## 结语 diff --git a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution.go b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution.go index d115ccf5e..962d7ef14 100644 --- a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution.go +++ b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, val int) *TreeNode { + if root == nil { + return &TreeNode{Val: val} + } + if root.Val < val { + root.Right = Solution(root.Right, val) + } else if root.Val > val { + root.Left = Solution(root.Left, val) + } + return root } diff --git a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution_test.go b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution_test.go index 14ff50eb4..e054a2116 100644 --- a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution_test.go +++ b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/Solution_test.go @@ -10,30 +10,70 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + val int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 7}, + }, 5, &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 7, Left: &TreeNode{Val: 5}}, + }}, + {"TestCase2", &TreeNode{ + Val: 40, + Left: &TreeNode{ + Val: 20, + Left: &TreeNode{Val: 10}, + Right: &TreeNode{Val: 30}, + }, + Right: &TreeNode{ + Val: 60, + Left: &TreeNode{Val: 50}, + Right: &TreeNode{Val: 70}, + }, + }, 25, &TreeNode{ + Val: 40, + Left: &TreeNode{ + Val: 20, + Left: &TreeNode{Val: 10}, + Right: &TreeNode{Val: 30, Left: &TreeNode{Val: 25}}, + }, + Right: &TreeNode{ + Val: 60, + Left: &TreeNode{Val: 50}, + Right: &TreeNode{Val: 70}, + }, + }}, } // 开始测试 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.val) 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.val) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/bst.jpg b/leetcode/701-800/0701.Insert-into-a-Binary-Search-Tree/bst.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c14f1c0021f8827d8d9cdd0f09406ba3504ef637 GIT binary patch literal 12747 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 Z9|FhGKPVYJ=DfUKO3#1(%U%C5`Y%jD>gE6d literal 0 HcmV?d00001 From 9a6ab3ab42e16a79c0951c792b15fb37f59830fd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 3 Aug 2023 22:02:26 +0800 Subject: [PATCH 0349/1057] Add solution and test-cases for problem 538 --- .../README.md | 31 +++++----- .../Solution.go | 47 +++++++++++++++- .../Solution_test.go | 53 +++++++++++++++--- .../0538.Convert-BST-to-Greater-Tree/tree.png | Bin 0 -> 21234 bytes 4 files changed, 107 insertions(+), 24 deletions(-) create mode 100644 leetcode/501-600/0538.Convert-BST-to-Greater-Tree/tree.png diff --git a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/README.md b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/README.md index 4024acf31..c6423e166 100644 --- a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/README.md +++ b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/README.md @@ -1,28 +1,29 @@ # [538.Convert BST to Greater 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), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus the sum of all keys greater than the original key in BST. -**Example 1:** +As a reminder, a binary search tree is a tree that satisfies these constraints: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- The left subtree of a node contains only nodes with keys **less than** the node's key. +- The right subtree of a node contains only nodes with keys **greater than** the node's key. +- Both the left and right subtrees must also be binary search trees. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./tree.png) -### 思路1 -> ... -Convert BST to Greater Tree -```go +``` +Input: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8] +Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8] ``` +**Example 2:** + +``` +Input: root = [0,null,1] +Output: [1,null,1] +``` ## 结语 diff --git a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution.go b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution.go index d115ccf5e..0a0336f85 100644 --- a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution.go +++ b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution.go @@ -1,5 +1,48 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + sum := 0 + var preOrder func(*TreeNode) + preOrder = func(root *TreeNode) { + if root == nil { + return + } + sum += root.Val + if root.Left != nil { + preOrder(root.Left) + } + if root.Right != nil { + preOrder(root.Right) + } + } + preOrder(root) + /* + tmp := sum + for i := 0; i < len(nodes); i++ { + tmp -= nodes[i] + nodes[i] += tmp + } + */ + tmpSum := 0 + var inOrder func(*TreeNode) + inOrder = func(root *TreeNode) { + if root == nil { + return + } + if root.Left != nil { + inOrder(root.Left) + } + tmpSum += root.Val + root.Val += sum - tmpSum + if root.Right != nil { + inOrder(root.Right) + } + } + inOrder(root) + return root } diff --git a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution_test.go b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution_test.go index 14ff50eb4..02ffc971a 100644 --- a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution_test.go +++ b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/Solution_test.go @@ -10,12 +10,51 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 3}, + }, + }, + Right: &TreeNode{ + Val: 6, + Left: &TreeNode{Val: 5}, + Right: &TreeNode{ + Val: 7, + Right: &TreeNode{Val: 8}, + }, + }, + }, &TreeNode{ + Val: 30, + Left: &TreeNode{ + Val: 36, + Left: &TreeNode{ + Val: 36, + }, + Right: &TreeNode{ + Val: 35, + Right: &TreeNode{Val: 33}, + }, + }, + Right: &TreeNode{ + Val: 21, + Left: &TreeNode{Val: 26}, + Right: &TreeNode{ + Val: 15, + Right: &TreeNode{Val: 8}, + }, + }, + }}, + {"TestCase2", &TreeNode{Val: 0, Right: &TreeNode{Val: 1}}, &TreeNode{Val: 1, Right: &TreeNode{Val: 1}}}, } // 开始测试 @@ -30,10 +69,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/tree.png b/leetcode/501-600/0538.Convert-BST-to-Greater-Tree/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..fb2cfb5431d75b29bc806c1064766e8c16e4047c GIT binary patch literal 21234 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 HoD!M<71z+c literal 0 HcmV?d00001 From 740fdf13a301d7645a3918454de632fd6c5e58a2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 4 Aug 2023 22:50:45 +0800 Subject: [PATCH 0350/1057] Add solution and test-cases for problem 919 --- .../README.md | 37 ++++--- .../Solution.go | 94 +++++++++++++++++- .../Solution_test.go | 26 +++-- .../lc-treeinsert.jpg | Bin 0 -> 20616 bytes 4 files changed, 129 insertions(+), 28 deletions(-) create mode 100644 leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/lc-treeinsert.jpg diff --git a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/README.md b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/README.md index 0d9d5412b..07df8f20c 100644 --- a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/README.md +++ b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/README.md @@ -1,28 +1,33 @@ # [919.Complete Binary Tree Inserter][title] -> [!WARNING|style:flat] -> 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 **complete binary tree** is a binary tree in which every level, except possibly the last, is completely filled, and all nodes are as far left as possible. -**Example 1:** +Design an algorithm to insert a new node to a complete binary tree keeping it complete after the insertion. -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `CBTInserter` class: -## 题意 -> ... +- `CBTInserter(TreeNode root)` Initializes the data structure with the `root` of the complete binary tree. +- `int insert(int v)` Inserts a `TreeNode` into the tree with value `Node.val == val` so that the tree remains complete, and returns the value of the parent of the inserted `TreeNode`. +- `TreeNode get_root()` Returns the root node of the tree. -## 题解 +**Example 1:** -### 思路1 -> ... -Complete Binary Tree Inserter -```go -``` +![example1](./lc-treeinsert.jpg) +``` +Input +["CBTInserter", "insert", "insert", "get_root"] +[[[1, 2]], [3], [4], []] +Output +[null, 1, 2, [1, 2, 3, 4]] + +Explanation +CBTInserter cBTInserter = new CBTInserter([1, 2]); +cBTInserter.insert(3); // return 1 +cBTInserter.insert(4); // return 2 +cBTInserter.get_root(); // return [1, 2, 3, 4] +``` ## 结语 diff --git a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution.go b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution.go index d115ccf5e..def517dd8 100644 --- a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution.go +++ b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution.go @@ -1,5 +1,95 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +type CBTInserter struct { + root *TreeNode + cache []*TreeNode +} + +func Constructor919(root *TreeNode) CBTInserter { + o := CBTInserter{ + root: root, + cache: make([]*TreeNode, 0), + } + queue := []*TreeNode{root} + need := 1 + for len(queue) > 0 { + next := make([]*TreeNode, 0) + if len(queue) == need { + o.cache = queue + } + for i := range queue { + if queue[i].Left != nil { + next = append(next, queue[i].Left) + } + if queue[i].Right != nil { + next = append(next, queue[i].Right) + } + } + queue = next + need *= 2 + } + return o +} + +func (this *CBTInserter) Insert(val int) int { + isLastRight := false + n := &TreeNode{Val: val} + ans := 0 + for idx, node := range this.cache { + if node.Left == nil { + this.cache[idx].Left = n + ans = node.Val + break + } + if node.Right == nil { + this.cache[idx].Right = n + isLastRight = idx == len(this.cache)-1 + ans = node.Val + break + } + } + if isLastRight { + next := make([]*TreeNode, len(this.cache)*2) + index := 0 + for i := 0; i < len(this.cache); i++ { + next[index] = this.cache[i].Left + next[index+1] = this.cache[i].Right + index += 2 + } + this.cache = next + } + return ans +} + +func (this *CBTInserter) Get_root() *TreeNode { + return this.root +} + +type opt struct { + name string + val int +} + +type result struct { + val int + tree *TreeNode +} + +func Solution(root *TreeNode, opts []opt) []result { + ans := make([]result, 0) + o := Constructor919(root) + for _, op := range opts { + if op.name == "insert" { + item := o.Insert(op.val) + ans = append(ans, result{val: item}) + continue + } + ans = append(ans, result{tree: o.Get_root()}) + } + return ans } diff --git a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution_test.go b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution_test.go index 14ff50eb4..b35a5910f 100644 --- a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution_test.go +++ b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/Solution_test.go @@ -10,30 +10,36 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + tree *TreeNode + opts []opt + expect []result }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{Val: 1, Left: &TreeNode{Val: 2}}, []opt{{"insert", 3}, {"insert", 4}, {}}, []result{{1, nil}, {2, nil}, {0, &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.tree, c.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.tree, c.opts) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/lc-treeinsert.jpg b/leetcode/901-1000/0919.Complete-Binary-Tree-Inserter/lc-treeinsert.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4cfbea1a8e3ab18718a9e785dc544bdd1ca2caa8 GIT binary patch literal 20616 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ⅆ_niqF{_lyZ<954r$?WLlG=AiYMCgjPf2;g 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 literal 0 HcmV?d00001 From bba821088c1273ee601163b3876b7638e69a5d99 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 5 Aug 2023 13:54:51 +0800 Subject: [PATCH 0351/1057] Add solution and update readme for problem 287 --- .../0287.Find-the-Duplicate-Number/README.md | 64 +++---------------- .../Solution.go | 32 ++++++++-- .../Solution_test.go | 9 ++- 3 files changed, 45 insertions(+), 60 deletions(-) diff --git a/leetcode/201-300/0287.Find-the-Duplicate-Number/README.md b/leetcode/201-300/0287.Find-the-Duplicate-Number/README.md index d2626e11d..00779532d 100644 --- a/leetcode/201-300/0287.Find-the-Duplicate-Number/README.md +++ b/leetcode/201-300/0287.Find-the-Duplicate-Number/README.md @@ -1,74 +1,30 @@ -# [# [1. Add Sum][title] +# [287.Find the Duplicate Number][title] ## Description -给定一个数组 nums 包含 n + 1 个整数,每个整数在 1 到 n 之间,包括 1 和 n。现在假设数组中存在一个重复的数字,找到该重复的数字。 +Given an array of integers `nums` containing `n + 1` integers where each integer is in the range `[1, n]` inclusive. -注意 - 不能修改数组元素,假设数组是只读的。 - 仅可以使用常数即O(1)O(1)的额外空间。 - 时间复杂度需要低于O(n2)O(n2)。 - 数组中仅有一个重复数字,但它可能重复超过1次。 +There is only **one repeated number** in `nums`, return this repeated number. + +You must solve the problem **without** modifying the array `nums` and uses only constant extra space. **Example 1:** ``` -Example 1: - -Input: [1,3,4,2,2] +Input: nums = [1,3,4,2,2] Output: 2 -Example 2: - -Input: [3,1,3,4,2] -Output: 3 ``` -**Tags:** Math, String - -## 题意 -> 这道题目主要应用了抽屉原理和分治的思想。 - - 抽屉原理:n+1 个苹果放在 n 个抽屉里,那么至少有一个抽屉中会放两个苹果。 - - 用在这个题目中就是,一共有 n+1 个数,每个数的取值范围是1到n,所以至少会有一个数出现两次。 - - 然后我们采用分治的思想,将每个数的取值的区间[1, n]划分成[1, n/2]和[n/2+1, n]两个子区间,然后分别统计两个区间中数的个数。 - 注意这里的区间是指 数的取值范围,而不是 数组下标。 - - 划分之后,左右两个区间里一定至少存在一个区间,区间中数的个数大于区间长度。 - 这个可以用反证法来说明:如果两个区间中数的个数都小于等于区间长度,那么整个区间中数的个数就小于等于n,和有n+1个数矛盾。 - - 因此我们可以把问题划归到左右两个子区间中的一个,而且由于区间中数的个数大于区间长度,根据抽屉原理,在这个子区间中一定存在某个数出现了两次。 - - 依次类推,每次我们可以把区间长度缩小一半,直到区间长度为1时,我们就找到了答案。 - - 作者:extrovert - 链接:https://www.acwing.com/solution/LeetCode/content/2814/ - 来源:AcWing - 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 - -- 复杂度分析 -时间复杂度:每次会将区间长度缩小一半,一共会缩小 O(logn) 次。每次统计两个子区间中的数时需要遍历整个数组,时间复杂度是 O(n)。所以总时间复杂度是 O(nlogn)。 -空间复杂度:代码中没有用到额外的数组,所以额外的空间复杂度是 O(1)。 - -## 题解 - -### 思路1 -> 。。。。 - -```go +**Example 2:** ``` - -### 思路2 -> 思路2 -```go - +Input: nums = [3,1,3,4,2] +Output: 3 ``` ## 结语 如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] -[title]: https://leetcode.com/problems/two-sum/description/ +[title]: https://leetcode.com/problems/find-the-duplicate-number [me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution.go b/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution.go index f1796147c..e564c3a39 100644 --- a/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution.go +++ b/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution.go @@ -5,7 +5,7 @@ import ( "sort" ) -// 二分 +// 二分 func findDuplicate(nums []int) int { left, right := 0, len(nums)-1 for left < right { @@ -25,7 +25,7 @@ func findDuplicate(nums []int) int { return left } -// 排序 +// 排序 func findDuplicate2(nums []int) int { sort.Ints(nums) for i := 1; i < len(nums); i++ { @@ -36,7 +36,7 @@ func findDuplicate2(nums []int) int { return 0 } -// map +// map func findDuplicate3(nums []int) int { found := -1 m := make(map[int]int) @@ -50,7 +50,7 @@ func findDuplicate3(nums []int) int { return found } -// 排序 +// 排序 func findDuplicate4(nums []int) int { for i := range nums { tmp := int(math.Abs(float64(nums[i]))) @@ -61,3 +61,27 @@ func findDuplicate4(nums []int) int { } return -1 } + +func findDuplicate5(nums []int) int { + ans := -1 + for idx := range nums { + x := nums[idx] + if x < 0 { + x = -x + } + index := x - 1 + r := nums[index] + if r < 0 { + ans = x + break + } + + nums[index] = -nums[index] + } + for idx := range nums { + if nums[idx] < 0 { + nums[idx] = -nums[idx] + } + } + return ans +} diff --git a/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution_test.go b/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution_test.go index 7b9d79cb6..622fe1f25 100644 --- a/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution_test.go +++ b/leetcode/201-300/0287.Find-the-Duplicate-Number/Solution_test.go @@ -25,14 +25,19 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } + got = findDuplicate5(c.inputs) + if !reflect.DeepEqual(got, 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 a7ea1a063b9dee25b1a1f7c692fc015df96ef099 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 6 Aug 2023 23:17:51 +0800 Subject: [PATCH 0352/1057] Add solution and test-cases for problem 1235 --- .../README.md | 40 +++++++--- .../Solution.go | 74 +++++++++++++++++- .../Solution_test.go | 22 +++--- .../sample1_1584.png | Bin 0 -> 6095 bytes .../sample22_1584.png | Bin 0 -> 8981 bytes .../sample3_1584.png | Bin 0 -> 6314 bytes 6 files changed, 110 insertions(+), 26 deletions(-) create mode 100644 leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample1_1584.png create mode 100644 leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample22_1584.png create mode 100644 leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample3_1584.png diff --git a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/README.md b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/README.md index c05697114..433f62300 100644 --- a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/README.md +++ b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/README.md @@ -1,28 +1,42 @@ # [1235.Maximum Profit in Job Scheduling][title] -> [!WARNING|style:flat] -> 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 `n` jobs, where every job is scheduled to be done from `startTime[i]` to `endTime[i]`, obtaining a profit of `profit[i]`. + +You're given the `startTime`, `endTime` and `profit` arrays, return the maximum profit you can take such that there are no two jobs in the subset with overlapping time range. + +If you choose a job that ends at time `X` you will be able to start another job that starts at time `X`. -**Example 1:** +**Example 1:** + +![example1](./sample1_1584.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: startTime = [1,2,3,3], endTime = [3,4,5,6], profit = [50,10,40,70] +Output: 120 +Explanation: The subset chosen is the first and fourth job. +Time range [1-3]+[3-6] , we get profit of 120 = 50 + 70. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./sample22_1584.png) -### 思路1 -> ... -Maximum Profit in Job Scheduling -```go +``` +Input: startTime = [1,2,3,4,6], endTime = [3,5,10,6,9], profit = [20,20,100,70,60] +Output: 150 +Explanation: The subset chosen is the first, fourth and fifth job. +Profit obtained 150 = 20 + 70 + 60. ``` +**Example 3:** + +![example3](./sample3_1584.png) + +``` +Input: startTime = [1,1,1], endTime = [2,3,4], profit = [5,6,4] +Output: 6 +``` ## 结语 diff --git a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution.go b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution.go index d115ccf5e..fdcf255f5 100644 --- a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution.go +++ b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution.go @@ -1,5 +1,75 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +type ScheduleData struct { + startTime, endTime, profit []int +} + +func (s *ScheduleData) Len() int { + return len(s.profit) +} + +func (s *ScheduleData) Swap(i, j int) { + s.startTime[i], s.startTime[j] = s.startTime[j], s.startTime[i] + s.endTime[i], s.endTime[j] = s.endTime[j], s.endTime[i] + s.profit[i], s.profit[j] = s.profit[j], s.profit[i] +} + +func (s *ScheduleData) Less(i, j int) bool { + return s.endTime[i] < s.endTime[j] +} + +func Solution(startTime []int, endTime []int, profit []int) int { + l := len(profit) + + sd := ScheduleData{ + startTime: startTime, + endTime: endTime, + profit: profit, + } + sort.Sort(&sd) + + var bsearch func(int, int) int + + bsearch = func(end, target int) int { + l, r := 0, end + ans := -1 + for l < r { + mid := (r-l)/2 + l + if endTime[mid] <= startTime[end] { + l = mid + 1 + ans = mid + continue + } + r = mid + } + return ans + } + + dp := make([]int, l) + dp[0] = profit[0] + ans := 0 + for idx := 1; idx < l; idx++ { + index := bsearch(idx, startTime[idx]) + dp[idx] = profit[idx] + + if index < 0 || index == idx { + if dp[idx] > ans { + ans = dp[idx] + } + continue + } + for pre := index; pre >= 0; pre-- { + if r := dp[pre] + profit[idx]; r > dp[idx] { + dp[idx] = r + } + } + if dp[idx] > ans { + ans = dp[idx] + } + } + return ans } diff --git a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution_test.go b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution_test.go index 14ff50eb4..01739054f 100644 --- a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution_test.go +++ b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + startTime, endTime, profit []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 3}, []int{3, 4, 5, 6}, []int{50, 10, 40, 70}, 120}, + {"TestCase2", []int{1, 2, 3, 4, 6}, []int{3, 5, 10, 6, 9}, []int{20, 20, 100, 70, 60}, 150}, + {"TestCase3", []int{1, 1, 1}, []int{2, 3, 4}, []int{5, 6, 4}, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.startTime, c.endTime, c.profit) 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.startTime, c.endTime, c.profit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample1_1584.png b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample1_1584.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b72bf7a080aa7483e01a4e0b4f9ffeb6530e4c GIT binary patch literal 6095 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 literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample22_1584.png b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample22_1584.png new file mode 100644 index 0000000000000000000000000000000000000000..b61ffa04d62b17331a7106b0a2e19646882c9b86 GIT binary patch literal 8981 zcmb_>cRXBe*X~3jqDu%t7^0UDJ%$-IdKo1|52BaoeUzw?=s}{5-g}8oLi8F&5WPg1 z=!`OivpvuIzR!2gKj%B=_x-Ugvwy#P?R#D8TGw9p+Hc`%^27u*1RxNISW!V%69mG! z1pZIGg9H3c%(}w^m>aH|^3tI4;fI^Rk6Tt!s!||ORSe;UDK79E-$_Bw6$HBHc75HL zw*-5EK#z(QWu>&ejJMMf_7v;sJ?obZBI(-coNsiRSRp0Rk>t5kirQtaMTN=I!Rn5$ zPW(cLg3JsWUmhzE(iV0~`#Do`I#7Pl92Z=Seb@)Vv6W`Horv1Wd-^-~^!+`qwL5@& zH-oon$7<1zc>{{BBQt};Gi_gns|7~xbekY{PJ`qI|v69h!==ez|}zEN}e+l_C@P@0sSpt0UW%@ zkqHBVNO3T61cjt~6mT%$ISBBK!t(-dfW8C+kH$gY6bEjA7Ns&_nn0i#zzxtI0~}lg zcvZiS+>7k5$3(_9e~9!D#O(zuXrvquS;{r{N-U2rKbJo4aJrC{vu{xI@V77ItxfxL zDXCS+1`|%c&r98_LL&by+}@hSo#)p#!pmF#_@-bMxtk;XeRLkI%o@)$u2+IJj7XSl zmMh7D>1vr`XKt$g&R(tW!Oqb3CXJ1H+DmD_1*ABT<3i0KYQ`1OSnl_wruSUupA2?du#-`@^APm1*|XLCV78)q7F0O?Q2kuT z{~vtRr9Mux%h*)e6!@S!%Sx;U`P=K9Vkza--Yy@JJ!f3G_0V+b$pm9-^zMJqz9@y+ z6w}M9mKTKAoiU_rnJGowb+2AeFp6sF=xup$w{I93aZ+ca$3GXhq-bO|)%@PApw})8 zze1%rwVlC9H_&C>EbFDrgDVM5gKhl!Z#mAgGI$ZNv?mF`nx zL_}LD_)|S|^D4QSEZyN9B}Wf+E)M4G1S(2KnV<{pIERjblr=-24m%I8=j_@~vkM$$ z5#{+C6_cLZG&8R{H7rkgdI;4~-ZcMaTE`W79Om-O-qox6oh5UN+N;^8?43Q&wi>^P z+j&hyR5DYcdZ3i!ZcfVhA@V}u<|oM<&0AqNuWK(EU~TB`L=UXST*<@KJtd)L>%Nqf z%?kzhc&ZL_L(7&N*t?oO5^P-E+0)wqnL&;K`-}Eku~X;%<0@n&<{9_6>L;`4$)4bOpc=r}=}!^x%c(Bp|s{htltU`Iw=jw01Y zWhR8+6=byS^$&hAw*2iabg-Zm2;@Wylm>v+7UHUlxs|m4>5@f}mRE<}tNY$xyYMR_ z$I@KK_sLS%BGX(@5Byzy2b*a9PUwz@!T(9_rMl}5?YORp<;Te*S54%y&9IMIEFs$U zkZd*UQvhoE}nhdbs+Ye$=TK z$Jk6;DP?(tce%Zf-uU1{Gug#F7xhv+3QrHvF`>UvENH9~V$flw7&#>hA?jW%gf(qU zB?$`ZYb#=w6rTlo9FP-m+ju4H#nCo(*E&SM4>3*Q7HMuz-?>e10%-okwYJ<_#d5!5 zjfa-0_@w+i4`)+J0d$A`8U3rT>_sqJM}NWo^uCGNl))*VV*$dKpUegT9e~ufZoG{# zI;c7!`%l^7kEaD8|4R}7cjPM+If18e=f5La|3w+yFrRS0+;qa6U7ob_e!c-(lp{l= z0yUQVri2vG_(jkBg2RFBWSHH}tHWNh|1m(VYc z)+c=6adDwct0Fzb?N8M`9JzU5uQH36`2Ap9#!ujCbfDR52@idE8+ZYTP|E#yqWgkM zl{LOki?H|^g5TV9#d4xowa1{3*F_V&ubIiw^7zy21Qo$()ZWG$uTL6)1H)^b{@a0o z3%SOalWr7++pTj3`2F6DcYJz`Qz$FvM@q&7vfbtHaD-B$@f3&3Q9>GU9boBo!2ep> zFzr^rZ#E-WH^C-`{Mk`kz(--rdR0@bZu#NzvRq>vZ&02m=LX4-Jg$$)epYY zT)J|j1!xPvqL$}(YZM`}-v$PXZUzoqXFIkNguZDgPt=<4Pn%0AHXmCT#PCt5L~X9ADh_)Ez@ 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 dCaLFFVCahJ+-C7v2(SR8_)JZ9mk{{@DECrkhU literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample3_1584.png b/leetcode/1201-1300/1235.Maximum-Profit-in-Job-Scheduling/sample3_1584.png new file mode 100644 index 0000000000000000000000000000000000000000..dfe7bfe94da3812dd299ce299e1751a43812bfb0 GIT binary patch literal 6314 zcmb7JcQjmIyB)t=kInUnfthL|0&%2-fJnsp6rLI6h#z+PL04S6cAus>{pAv^t zNbqrY^)lVNxCfpyOhFb<+Rwa!YuvJyQIi1x%07`_ni1mKr0*2AI`O`V=dK9crp;jo!BS_Tw_~r@0D4=mvR)`mIS1m~!6Q%4 zsd@Bfk9xa=yL=qN3^Hq=|6tcPzZ1ASs$$fGZ>Yaq99>pr*xGN)u-;3+!UAn$>7)(mWaRXT8e`U0HMWr`8KGkDi?Ot zs3}U%1uW*s<~m>OUXFJ5pRgJnTaELsNYw@G-h$#$>+3e~yWVXoY21iWs#epDqZ2Tk zSixRU*m#Rmz#!@e4JRy?uD5wiZK;8PSeLoA*8^1jNkm21P;3F*OUt2f2=ly|1q24P zzx%>p=DmjLb(upw)kI<+Qh+W53`AS%eX_Mi{lTPH>A}b0D@GQE zNSIw2+0JgAlZ&h;iZ|xI5SJa_7)e{N5HGJanK&Y*`-um!W$fe6nG6+a@P~)n(s4J(VwQ$AYc;ID^5E|DSA7?5)l&WsyadJqU>CITl9Hu5vd*}@Wdbq~&|A%t1@?Ii8~dDr*hRCV5Z z&!*U(7ZP2>qoQ61F8F1aM51z&ryVgwyV;&*1CgHTV6)KhdbeMYFOh_8sd5?2P`qq4 zI$#Ze@Nq12i6^N5QJ3yYVOYxC-2Eaw%@tA%`a#W#gZaRe?O1Yzyvpb_bJmDDR?@`b zLmT`A#$sO~yiyTB*?iBx0Fc}%bT&zTHhd<_Z-j~Jbr4WfT;!55(V*%HoX!39sg+a+ zTAXvds3A$M;$So>EnxGTyjp`+PH--}yWU zoyz_imGEPo-1IIk-NTIbqa|nIdw0gAA0;B-&Sb!hm}Vl{KDH=nRjhmcWQ7)E)n^Zz z%bM@ogCP>pSSBv@(lR}SrEcb@m@%DkTBC%(E{s@2@<$u{WW{&gbva=IuFHWV({kir z@O=*Kv-5)XBudiEcW&$KZB(AN4^G_Iow>oa0N8kYtU8y`@K@kjGDG#wO5kZuA}tSNGI|pZ0>~1A~KiJR_bp zO9uT}-(jcJi^yvwM`y(R?6P(|tHduU3q_h#`%ukz^wNfdh~*=v8Sv4$Z3l(rl#I28 zSCr>LOXst&TJCyvnze$GLC1IQ?)RG|xiA-3XnL<4m<kq|ocIXQ&0KlIF@?S7AQ|R={S5*t}@gMtfugvPk zjt+q?^V@MOs_Jg?QdOZ1E#Px@*dl$1W6@jeV0k5@IH5h{ZvCDVDU#qt&D?d9%tq20 zm(=qmHu;csL;-!-?`Cl-Np_#>i-lzu07=on%|TL~Nn^F%NsNOr*fDU5bYvO;V8@5z z7@7mO_5W`WYPa|+F+56xM~XicTl4m8DS`!A(b{g&;LSVq4Le#YH-{D?kUIW4jU6@s zdL4UcNT!)hP8?uv_8$Sth@g1T%@Z%-Efs89eaWZ;>Me3M%R91~3X?WnUU|82?r>;Z zr?G zg~A#p`pee{-w&G#$2p{nRo?i(cBS;r)7)ua;46;;JQ<6?{!`9#b4u$&a)|4 zxD-XwcBL;HazIz5+i8Rt1VJadl@sg`Um_W+2Sts}XZM)7yFIR_Xy>Vq-bGJ|u6x@X zb07)+!qJjyPp$>i#67l69a;zEEapgeRz$9S0mKb_B+PHn!6x`q)Jb^EXw_Bhj-Ww^3FZ+kpzJ2CbCOEpj#MAXa?9Gq|7UMo%*OK z@Sg4Y>_ubK_;BW|&-JM^S^f%opq!;+p%5lTz216Mx!#zxpuA-}6KzGMrc<#$*(tPY zm}pXMuSQu}gC!-1cw`@xdwKCw9=I@<;d3M@WxQlJ*GWXD-Qgo1AJF&fIK6OCc-9OZ zTXA)ow`do2u+cT=mugP~e{g7}(szBHsJZ8*l%8m!b(Ni@BaqVJ)uOd{Q#X*^n9Qh8>#S!~`c#A4Gah;o^yEQ# zzU!XU=q9hsDknP(cSLOz(jV-1ysi3ZfH2fNlq@;=E0@XdT+r|Z;s$cIeJo8_6sXW7 zB(ZJkt&8}b7yefnR_TXt#7L;;g#)Cc?3v|7)AlR=MW7ks=y=df5_B)%v%_n`zgTfe zqcMq`Q(61On5X*FSly1Nvx(n(@BzZ+@KyOsr<3g+3MCnT`hWuejW@ODCg`U*d#l1H z==0c+pfSwrFtU^FT1KO7+T{~A>2-DkPKt#nTB^GpyXS#hai=@V*)anM0&8G(pv_R{E6EUKp4!KM%SY*3m9beQVF( z%p8pSN>Hg)VQ;sy_ML?u{$jB|Uj1LGr*^@N>x{6zFdx)I~#`-Sx3 z-(T$PW7S4P5zK^(>J$UE4&jXEeIM(H_IxNHlCAXho7IHMNH}VMm$rb!Tqs7I~cjs)Yx@vSVJTY#|t7u+4r`r1zAlZ?}-r2njT?~Guz(U&9D z_oPlI4p%_}cvjsg>EmCG;bQE0+2)7W)gGh(tJ_)Tl%dDdo%%{*EKYJ%CUJ%Oex;Xw!+Y5=0n}v+PB7^ z7xqMRFgs5bpLlrg?a&1aa8dL>u~v`r)T^*;VFf&%0fDWWwxk5SqBEqW^`airY2}B7 z!+zuJg)?;)2fmS27zDPHwN+ZDrXRq7$T>21K5Ua}lx)`So9-*!DxJp9REe{d``NZA zoGqmh;Suy)3{+zw<1sh2BojCQXOET0v$txKxBnJ2)n=fu3dU#AlGm~2r>zR{yIv%y z{;c>t-r^SC;}8&-BX`24UtK_2EhSB7OC)zMRM635Gg#hCf;vkrDGfe>6x6$&^3v(- z?!#j*#&O;_=P3II<&rkrx$pYxrM$X4IlA@uf*c9f1|>*Zu)bjKVDodm_-v}F0LolO z9T*)0ZVl!6DIDk@#XN9pc5=Ae`04o^3?eT)PL6IJ2Zw4rX8$s zEOrt>^f^NJiht?YdFSU$$Ck~EkSok{^w$fXy=RnuGmwK`Ay83OLP6rKLIDwkH^@x0 zac?_4+iwvF2&IL*{3}aV^X3kc*jS41>oyfzOHjvbEWp&EGNCMwR`cS~e6x?1!1fpD zz^Ar9@|^p1q->s01Jgm3M{?}yyVIXIo%2p(5nn53<;_^Y$d1_ou+}!q%FV44tdo0L z<_>?&UzV&Cyl8LYq7GgVWv#j~It(FpDOzoQGztB$Q4ba>ktzRtb{VesnwK_e$)M zB~k)B_WF}fLsPzK_kz$4`KbkOUvB0QUvhOzoXl?C=8t4~-!vUB9^Mx+>k7FHbDfaAkE@1XDq(>dVl1u?shv1rLv&S z6K*E0ADTWcN>Sl;k#!BFu`Cyo6x#B{U1V-=c*J})dbhTga^JyL8~IdCnTodOW#%D1 z{LbI!)xaa%eJdtRfL`vpdaIAo4`;tojFfrY%!EZO`(9q+ zNEUD>;9t!F#J_tHdm)Gu=M{ASK=L@gUu-0^DZk{!(euFBHBSu^pZ&mG5=Xpjg2>`g zqhxl~SIjg-^x11*BP*RES7=7PnWj$pATQ`lzu}5tDSWJ%xNmj&DCdQt4q|TP-mIl! z#stQ|W8BG%t!wxQjbY(vg};cig$KX+Ws^x^s~i&pk?pb-svc}OWe9l4#JOe{k1{&- zRZ4`x32Tvuj~FfK#PSdx?1@7i1vsRhfat+0}m=4_VhPt|(obyY$ICDdc{ z7&i6VKj@|Q_n$fyHAdvC_sJf3Q4et+7_hq*#n@h{P@VsXLGrD*w zq9Tt34#4--?pr(@QgVVXKcdbpjcJTo5zhH_T-FK%em}sFXX$YEcql!Vc39D!zaS1t zZR>gN@`hOc`!Mwx<8ukLlw2vS%c)ROrIxth@Ntv}6*cf2QKWjn43lbQdS=5eR!T$X zsE~PA9A(13H2oqJ5wQ1->IvOYi7Sh+b=(dxW&4vz$V2eKZ}9b zE2V&V2ewx77ms$UN@HyQ(W?=w@Qe;a_PW1fH)xF=SnsV&5YPZW{pj?cGWGvj(yH)V z6kj`38J7TVF*}24{i#2N3u~DAGnkHn=g?0XlT&Xj+PUJ6t#cAFjJ+HujONlH%P%0^ zTy_HrBaky5L%pJp|I^dpmqh`T!`iUSG_re#iKKI>1uQ^`cOa3IEp-aidsz+2+~B zd5zixh|Q>XhnWxrA=B8XUlGYHpy?#&aehV@3O*^(QfSTP8LBw^E{~X)_^DzRtMjIt z)9vM#Gq+4${d1$Sjku31==)D3N+>F#oQZQCxJ(#P8Jyb8jvv<(LDR&kr^?IHZZQ)LgS+)Q_d8_~^--@PnWe)Jkev`5r~$ zW|^vc%b|qLlf>_9cI=JME!`g`&01L;6R#(1mYGq&bBgGFpZa@i<2RZ0-@&{sGp|c= zjGc;(C|5mk#XclZXA0QjIjpE$BKa<&c|i(WCbkgq>7_ zWaXtp*#Q1qJtwskHg7R%^zu3ljh98(6Lwq3HKr~&1>O>uU$A!n%F{Mo!J0Xn=QBTa z9OjhsDxaykz8~L8w#LyIiZRON^$%J6N_xF^9h#V@`&cA1d zGeZ#KF*FrS@<4iRNbchI2Tb?#V=raqMa&tdPQs8={)+Xo2EZww)`Y0mvC1DwjL~r& zJSz Date: Mon, 7 Aug 2023 22:22:10 +0800 Subject: [PATCH 0353/1057] Add solution and test-cases for problem 1508 --- .../README.md | 30 ++++++----- .../Solution.go | 54 ++++++++++++++++++- .../Solution_test.go | 23 ++++---- 3 files changed, 82 insertions(+), 25 deletions(-) diff --git a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md index 8c51fb80f..87cf64736 100755 --- a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md +++ b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/README.md @@ -1,28 +1,32 @@ # [1508.Range Sum of Sorted Subarray Sums][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given the array `nums` consisting of `n` positive integers. You computed the sum of all non-empty continuous subarrays from the array and then sorted them in non-decreasing order, creating a new array of `n * (n + 1) / 2` numbers. + +Return the sum of the numbers from index `left` to index `right` (**indexed from 1**), inclusive, in the new array. Since the answer can be a huge number return it modulo `10^9 + 7`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4], n = 4, left = 1, right = 5 +Output: 13 +Explanation: All subarray sums are 1, 3, 6, 10, 2, 5, 9, 3, 7, 4. After sorting them in non-decreasing order we have the new array [1, 2, 3, 3, 4, 5, 6, 7, 9, 10]. The sum of the numbers from index le = 1 to ri = 5 is 1 + 2 + 3 + 3 + 4 = 13. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Range Sum of Sorted Subarray Sums -```go +``` +Input: nums = [1,2,3,4], n = 4, left = 3, right = 4 +Output: 6 +Explanation: The given array is the same as example 1. We have the new array [1, 2, 3, 3, 4, 5, 6, 7, 9, 10]. The sum of the numbers from index le = 3 to ri = 4 is 3 + 3 = 6. ``` +**Example 3:** + +``` +Input: nums = [1,2,3,4], n = 4, left = 1, right = 10 +Output: 50 +``` ## 结语 diff --git a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go index d115ccf5e..3b06717df 100644 --- a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go +++ b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution.go @@ -1,5 +1,57 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +const mod1508 = 1000000007 + +type ints []int + +func (i *ints) Len() int { + return len(*i) +} + +func (ii *ints) Swap(i, j int) { + (*ii)[i], (*ii)[j] = (*ii)[j], (*ii)[i] +} + +func (ii *ints) Less(i, j int) bool { + return (*ii)[i] < (*ii)[j] +} + +func (i *ints) Push(x interface{}) { + *i = append(*i, x.(int)) +} + +func (i *ints) Pop() interface{} { + old := *i + l := len(old) + x := old[l-1] + *i = old[:l-1] return x } + +func Solution(nums []int, n int, left int, right int) int { + h := ints{nums[0]} + for i := 1; i < n; i++ { + nums[i] += nums[i-1] + heap.Push(&h, nums[i]) + for pre := i; pre > 0; pre-- { + heap.Push(&h, nums[i]-nums[pre-1]) + } + } + sum, index := 0, 0 + for len(h) > 0 { + index++ + x := heap.Pop(&h).(int) + if index < left { + continue + } + if index > right { + break + } + sum = (sum + x) % mod1508 + } + return sum +} diff --git a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go index 14ff50eb4..57beee57e 100644 --- a/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go +++ b/leetcode/1501-1600/1508.Range-Sum-of-Sorted-Subarray-Sums/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + nums []int + n, left, right int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4}, 4, 1, 5, 13}, + {"TestCase2", []int{1, 2, 3, 4}, 4, 3, 4, 6}, + {"TestCase3", []int{1, 2, 3, 4}, 4, 1, 10, 50}, } // 开始测试 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.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 %v", + c.expect, got, c.nums, c.n, c.left, c.right) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 48de49930b709e4bd520868413236c2e84f0d152 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 9 Aug 2023 00:20:09 +0800 Subject: [PATCH 0354/1057] Add solution and test-cases for problem 241 --- .../Solution.go | 93 +++++++++++++++++++ .../Solution_test.go | 25 ++++- 2 files changed, 114 insertions(+), 4 deletions(-) diff --git a/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution.go b/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution.go index cfc60fd35..5b3c16b41 100644 --- a/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution.go +++ b/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution.go @@ -53,3 +53,96 @@ func ways(input string, cache map[string][]int) []int { return ans } + +// Solution2 +type operation struct { + val int + op byte +} + +func calResult(a, b int, op byte) int { + if op == '*' { + return a * b + } + if op == '+' { + return a + b + } + return a - b +} + +func diffWaysToCompute2(expression string) []int { + opts := make([]operation, 0) + base := 1 + c := 0 + // 245 + for idx := len(expression) - 1; idx >= 0; idx-- { + if expression[idx] >= '0' && expression[idx] <= '9' { + c = base*int(expression[idx]-'0') + c + base *= 10 + continue + } + opts = append(opts, operation{val: c}, operation{op: expression[idx]}) + base, c = 1, 0 + } + opts = append(opts, operation{val: c}) + + length := len(opts) + if length == 1 { + return []int{opts[0].val} + } + for s, e := 0, length-1; s < e; s, e = s+1, e-1 { + opts[s], opts[e] = opts[e], opts[s] + } + + ans := make([]int, 0) + dp := make([][]map[int]int, length) + // 需要明确dp[i][j] 能计算出多少种结果 + for i := 0; i < length; i++ { + dp[i] = make([]map[int]int, length) + for j := 0; j < length; j++ { + dp[i][j] = make(map[int]int) + } + if i&1 == 0 { + dp[i][i][opts[i].val] = 1 + } + } + + // 2 - 1 - 1-1 + // n=2 0-2, 2-4, 4-6 + // n=3,0-4, 2-6 + // n=4,0-6 + // n = 4 end=6 + // length=7 + // 2-1 + // 2 有一个操作数,3有两个,4有3个 + // 2 = 1+0 + // 3 = 2+1 + // 4 = 3 + 2 + // length - 1 - n+1 -n+2 + + for n := 2; n <= length/2+1; n++ { + for start := 0; start < length+2-2*n; start += 2 { + end := start + 2*(n-1) + for k := start; k < end; k += 2 { + for v1, c1 := range dp[start][k] { + for v2, c2 := range dp[k+2][end] { + r := calResult(v1, v2, opts[k+1].op) + dp[start][end][r] += c1 * c2 + } + } + } + } + } + for idx := length - 1; idx > 0; idx -= 2 { + op := opts[idx-1].op + for v1, c1 := range dp[idx][length-1] { + for v2, c2 := range dp[0][idx-2] { + r := calResult(v2, v1, op) + for loop := c1 * c2; loop > 0; loop-- { + ans = append(ans, r) + } + } + } + } + return ans +} diff --git a/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution_test.go b/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution_test.go index f0df87d76..e942286e8 100644 --- a/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution_test.go +++ b/leetcode/201-300/0241.Different-Ways-to-Add-Parentheses/Solution_test.go @@ -1,6 +1,7 @@ package Solution import ( + "sort" "strconv" "testing" ) @@ -12,8 +13,9 @@ func TestSolution(t *testing.T) { inputs string expect []int }{ - {"TestCase", "2-1-1", []int{0, 2}}, - {"TestCase", "2*3-4*5", []int{-34, -14, -10, -10, 10}}, + {"TestCase1", "2-1-1", []int{0, 2}}, + {"TestCase2", "2*3-4*5", []int{-34, -14, -10, -10, 10}}, + {"TestCase3", "10+5", []int{15}}, } // 开始测试 @@ -32,14 +34,29 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } } + + got = diffWaysToCompute2(c.inputs) + sort.Ints(got) + if len(got) != len(c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) + } + m = make(map[int]int) + for v := range got { + m[v]++ + } + for v := range c.expect { + if _, ok := m[v]; !ok { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) + } + } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 21cc5e8e6e3dabecc6096663396c4855bc6a8634 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 12 Aug 2023 00:06:15 +0800 Subject: [PATCH 0355/1057] Add solution and test-cases for problem 166 --- .../README.md | 38 +++++++++++ .../Solution.go | 67 ++++++++++++++++++- .../Solution_test.go | 20 +++--- 3 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 leetcode/101-200/0166.Fraction-to-Recurring-Decimal/README.md diff --git a/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/README.md b/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/README.md new file mode 100644 index 000000000..487ecc051 --- /dev/null +++ b/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/README.md @@ -0,0 +1,38 @@ +# [166.Fraction to Recurring Decimal][title] + +## Description +Given two integers representing the `numerator` and `denominator` of a fraction, return the fraction in string format. + +If the fractional part is repeating, enclose the repeating part in parentheses. + +If multiple answers are possible, return **any of them**. + +It is **guaranteed** that the length of the answer string is less than `10^4` for all the given inputs. + +**Example 1:** + +``` +Input: numerator = 1, denominator = 2 +Output: "0.5" +``` + +**Example 2:** + +``` +Input: numerator = 2, denominator = 1 +Output: "2" +``` + +**Example 3:** + +``` +Input: numerator = 4, denominator = 333 +Output: "0.(012)" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/fraction-to-recurring-decimal +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution.go b/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution.go index d115ccf5e..aac4edc87 100644 --- a/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution.go +++ b/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution.go @@ -1,5 +1,68 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "bytes" + "fmt" +) + +func Solution(numerator int, denominator int) string { + const maxn = 65536 + var flag bool + if numerator*denominator < 0 { + flag = false + } else { + flag = true + } + if numerator%denominator == 0 { + return fmt.Sprintf("%d", numerator/denominator) + } + if numerator < 0 { + numerator = -numerator + } + if denominator < 0 { + denominator = -denominator + } + quotient := make([]int, maxn) + cf := make([]int, maxn) + cf[0] = numerator % denominator + quotient[0] = numerator / denominator + buf := bytes.NewBufferString("") + if flag { + buf.WriteString(fmt.Sprintf("%d.", quotient[0])) + } else { + buf.WriteString(fmt.Sprintf("-%d.", quotient[0])) + } + for i := 0; i < denominator-1; i++ { + tmp := (cf[i] * 10) % denominator + quotient[i+1] = (cf[i] * 10) / denominator + if tmp == 0 { + for index := 1; index <= i+1; index++ { + buf.WriteString(fmt.Sprintf("%d", quotient[index])) + } + return buf.String() + } + cf[i+1] = tmp + for index := 0; index <= i; index++ { + if cf[i+1] == cf[index] { + if index != 0 { + for inner := 1; inner <= index; inner++ { + buf.WriteString(fmt.Sprintf("%d", quotient[inner])) + } + buf.WriteString("(") + for inner := index + 1; inner <= i+1; inner++ { + buf.WriteString(fmt.Sprintf("%d", quotient[inner])) + } + buf.WriteString(")") + } else { + buf.WriteString("(") + for inner := 1; inner <= i+1; inner++ { + buf.WriteString(fmt.Sprintf("%d", quotient[inner])) + } + buf.WriteString(")") + } + return buf.String() + } + } + } + return "" } diff --git a/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution_test.go b/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution_test.go index 14ff50eb4..edc385ad9 100644 --- a/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution_test.go +++ b/leetcode/101-200/0166.Fraction-to-Recurring-Decimal/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, d int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 2, "0.5"}, + {"TestCase2", 2, 1, "2"}, + {"TestCase3", 4, 333, "0.(012)"}, } // 开始测试 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.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", + c.expect, got, c.n, c.d) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 02c6ee961c145e686e19c71254a42f90d5b0cd28 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 12 Aug 2023 16:01:35 +0800 Subject: [PATCH 0356/1057] Add solution and test-cases for problem 1237 --- .../README.md | 51 ++++++++++++++----- .../Solution.go | 25 ++++++++- .../Solution_test.go | 29 +++++++---- 3 files changed, 81 insertions(+), 24 deletions(-) diff --git a/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/README.md b/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/README.md index 9597a1cab..555fccd7d 100644 --- a/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/README.md +++ b/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/README.md @@ -1,28 +1,53 @@ # [1237.Find Positive Integer Solution for a Given 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 +Given a callable function `f(x, y)` **with a hidden formula** and a value `z`, reverse engineer the formula and return all positive integer pairs `x` and y where `f(x,y) == z`. You may return the pairs in any order. -**Example 1:** +While the exact formula is hidden, the function is monotonically increasing, i.e.: + +- `f(x, y) < f(x + 1, y)` +- `f(x, y) < f(x, y + 1)` + +The function interface is defined like this: ``` -Input: a = "11", b = "1" -Output: "100" +interface CustomFunction { +public: + // Returns some positive integer f(x, y) for two positive integers x and y based on a formula. + int f(int x, int y); +}; ``` -## 题意 -> ... +We will judge your solution as follows: + +- The judge has a list of `9` hidden implementations of `CustomFunction`, along with a way to generate an **answer key** of all valid pairs for a specific `z`. +- The judge will receive two inputs: a `function_id` (to determine which implementation to test your code with), and the target `z`. +- The judge will call your `findSolution` and compare your results with the **answer key**. +- If your results match the **answer key**, your solution will be `Accepted`. -## 题解 +**Example 1:** -### 思路1 -> ... -Find Positive Integer Solution for a Given Equation -```go ``` +Input: function_id = 1, z = 5 +Output: [[1,4],[2,3],[3,2],[4,1]] +Explanation: The hidden formula for function_id = 1 is f(x, y) = x + y. +The following positive integer values of x and y make f(x, y) equal to 5: +x=1, y=4 -> f(1, 4) = 1 + 4 = 5. +x=2, y=3 -> f(2, 3) = 2 + 3 = 5. +x=3, y=2 -> f(3, 2) = 3 + 2 = 5. +x=4, y=1 -> f(4, 1) = 4 + 1 = 5. +``` + +**Example 2:** +``` +Input: function_id = 2, z = 5 +Output: [[1,5],[5,1]] +Explanation: The hidden formula for function_id = 2 is f(x, y) = x * y. +The following positive integer values of x and y make f(x, y) equal to 5: +x=1, y=5 -> f(1, 5) = 1 * 5 = 5. +x=5, y=1 -> f(5, 1) = 5 * 1 = 5. +``` ## 结语 diff --git a/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution.go b/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution.go index d115ccf5e..d17cfcec8 100644 --- a/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution.go +++ b/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(customFunction func(int, int) int, z int) [][]int { + ans := make([][]int, 0) + for y := 1; y <= 1000; y++ { + l, r := 1, 1000 + if r := customFunction(1, y); r > z { + break + } + for l < r { + m := l + (r-l)/2 + rr := customFunction(m, y) + + if rr == z { + ans = append(ans, []int{m, y}) + break + } + if rr < z { + l = m + 1 + continue + } + r = m + } + } + return ans } diff --git a/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution_test.go b/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution_test.go index 14ff50eb4..ff4878cd6 100644 --- a/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution_test.go +++ b/leetcode/1201-1300/1237.Find-Positive-Integer-Solution-for-a-Given-Equation/Solution_test.go @@ -6,34 +6,45 @@ import ( "testing" ) +func f1(a, b int) int { + return a + b +} +func f2(a, b int) int { + return a * b +} func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs func(int, int) int + z int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", f1, 5, [][]int{{4, 1}, {3, 2}, {2, 3}, {1, 4}}}, + {"TestCase2", f2, 480, [][]int{ + {480, 1}, {240, 2}, {160, 3}, {120, 4}, {96, 5}, {80, 6}, {60, 8}, {48, 10}, + {40, 12}, {32, 15}, {30, 16}, {24, 20}, {20, 24}, {16, 30}, {15, 32}, + {12, 40}, {10, 48}, {8, 60}, {6, 80}, {5, 96}, {4, 120}, {3, 160}, {2, 240}, {1, 480}, + }}, + {"TestCase3", f2, 5, [][]int{{5, 1}, {1, 5}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.z) 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.z) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 059fa76b77aad7abffafd46774405341a5e59cf9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 12 Aug 2023 17:25:48 +0800 Subject: [PATCH 0357/1057] Add solution and test-cases for problem 951 --- .../README.md | 35 +++++++----- .../Solution.go | 30 ++++++++++- .../Solution_test.go | 50 ++++++++++++++---- .../tree_ex.png | Bin 0 -> 61827 bytes 4 files changed, 90 insertions(+), 25 deletions(-) create mode 100644 leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/tree_ex.png diff --git a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/README.md b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/README.md index 349bf7e8b..703ec34b3 100644 --- a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/README.md +++ b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/README.md @@ -1,28 +1,35 @@ # [951.Flip Equivalent Binary Trees][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +For a binary tree **T**, we can define a **flip operation** as follows: choose any node, and swap the left and right child subtrees. + +A binary tree **X** is flip equivalent to a binary tree **Y** if and only if we can make **X** equal to **Y** after some number of flip operations. + +Given the roots of two binary trees `root1` and `root2`, return `true` if the two trees are flip equivalent or `false` otherwise. -**Example 1:** +**Example 1:** + +![example1](./tree_ex.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7] +Output: true +Explanation: We flipped at nodes with values 1, 3, and 5. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Flip Equivalent Binary Trees -```go ``` +Input: root1 = [], root2 = [] +Output: true +``` + +**Example 3:** +``` +Input: root1 = [], root2 = [1] +Output: false +``` ## 结语 diff --git a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution.go b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution.go index d115ccf5e..6818af04b 100644 --- a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution.go +++ b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/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(root1 *TreeNode, root2 *TreeNode) bool { + if root1 == nil && root2 == nil { + return true + } + if root1 == nil || root2 == nil { + return false + } + + if root1.Val != root2.Val { + return false + } + a := Solution(root1.Left, root2.Left) + b := Solution(root1.Right, root2.Right) + + if a && b { + return true + } + a = Solution(root1.Left, root2.Right) + b = Solution(root1.Right, root2.Left) + if a && b { + return true + } + return false } diff --git a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution_test.go b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution_test.go index 14ff50eb4..92b73ddc0 100644 --- a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution_test.go +++ b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/Solution_test.go @@ -10,30 +10,62 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + t1, t2 *TreeNode expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 8}, + }, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + }, + }, &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 6}, + }, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 8}, + Right: &TreeNode{Val: 7}, + }, + }, + }, true}, + {"TestCase1", nil, nil, true}, + {"TestCase2", nil, &TreeNode{Val: 1}, false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.t1, c.t2) 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.t1, c.t2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/tree_ex.png b/leetcode/901-1000/0951.Flip-Equivalent-Binary-Trees/tree_ex.png new file mode 100644 index 0000000000000000000000000000000000000000..c834f0bbf94ee07f7d235d47c0bc14896fc6b86b GIT binary patch literal 61827 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 z zEX4VD#}+w{KZU&$VPSXkg|?M!AZ1gN=Ao_GT_z+TV?#j~1%*hRuMsIm(&p6ao{M;J z@G^jrSd5qLq#9jO{uv!nl&o#9FK#u}zpSPZ_CI-@Q*Ps6dzr=BbFa$MnqKMxB<|B2 z*FJK}dtLS{h*Sb7)cDJ;7;(BR1E6FWyIG@eWkXjus2>Q*Bk^GeJ)JDJLn<4X^lwpl zd;>oE7nG!>y>D&JwEk80Jrf*{G7Fi2L!xkrk1`oTm$d9&Sk~eT4-Z9o`3}~YORNk7 z0h_Rle0?Tvku+xLsZETq`I(2vV9}zh-eSO&g9vr-?uPnILp=2>R zsR1x*RN62y+m)ODSP)gl$^@aHJ&r&7o8T{Bw57au8xDH77lZlhHnP8JuV;dK{8ZNS zw?S(EUH)V0B0cVVVZV=eXD_O{-S}!2?)f9n21||3MlPnX8^7(}0S~rQk#}->=_=T> z=rAV)tQg>dhR2-KIn;1OCc}iExqURjDwwEuler91dGic&1ddm6XHp^ zt{B)oer$b>%Wigj&3Dn!8;_KE{`ZBq-4`GoCSIrWeSMF?-2jrt-jw*OE&1^xL)N9> z`O7sifb`tOx45_qqoN#ZYjfo-hV{+PXw$alVaOm1tQ8rv)%v|AMeEqyNBoTeKi6a| z)zhgmPR_T@OtXqrZU5!u^`DmSC*C zxkg$Botp&5$4^8=-Vv(On-q;1<>HTVbMy}IJ$yJAqtQ3naJF4o%1|unwE9Cs?rIc6 zoie65xZOe0rGp&iG3%`2ez-SFS;^0F7t|}l!iz(3Inb`rk00@0oX+-}oB3|$)@)}- z@fpDoiiNs{WLTI=f|Wz^N9TT@07g-`q&rR7J)8HMo4os@FE~pv9ALUfU-H?zc>mR+ zTR&OYzbM&Ocblll5jyoRiywl>E6;RmIyG25~ptx+rK^8m%`rPHkOYQVK3$3 zE~Ls*RCv$E#r3@7kuwpUcjZ<)hRQn{kKYr5$rXf5a1vG(sEw)naA}6O-RwYVOx4C3 zG5~TEv@j8Dfs++Z8l#j$7o!e(R|SV;ITPYEhOX$|^gxs~|FUz0A&iA7t;=*>!Kmh*h`#jc<4#Xy^*=OGsTTaTSJ z)jzQhUyxI)RK@v_Ene)gD%)`&vX!IM9&u|KfHa{BpM(R;R+5|9fV8!$_oY@J0qCwf z`@H$1;Bzy7xbhv2%uykf{bZoR-P9@o=;VsCd=2}pptDWtbX!^J zKB_YK+_`h-rrBfJnxCkEB8_SqRmcYfAn3hjm}mAu86O!HrQFVRYYilJ@pOXhR9Jc4 zuSJ*0PxAgndTd@^B}U>K-pf15Ptz}CeO9L zWH9TPu5n$?knvMb6AxNwUUXT&3s_=OU%X-Rmf0^m#ykYCtAQhwL(9@~_XFn%G;b#0VuzD+l0(+)M)(dWa9sI)FXm_GL*?L^ z9%A#-%9rfsLof)^qAl#nM}b8!O);wX+(|MIpr)neKDh4qk$@DkBCKBLfDa~C`;)bY%_8F_!R$+`MJ8ul>aG*0zKz$S1+v}?($~xH zT(=xuOKIYgyro``nq0KU1C-RIVN2VV0j6++GAAacru6<6@sa|iO+Ht&yp}HFMk@H? zZ9u5qf>`rz1)3YICo8Ue;?M%_@f1^y0FYvFQpiK3x@V7xV^7 zKI$UxxsP;VQaOT0LD7j?m-jWLjfx<_eN2x4!U%uNQphrRT0@~7#ej>;mBiyic-F#w zeq0J^1X@CsD-CoazOik8lt47G2S8OpvONkRCN93)TiQAo;MW;RITvucn1Ga7ZlQHf zllI=HdU31fe17tK5@?tyG++X|uY)avA~h4$|BAKA}aL%DT> zZ{?<%L{aJJPZ<~&K2~T`#ouakHF;L4m-J!c0FRp|apY+2_?4yQy=diJ`iKWOcpA6> z83^z&Z#?@Af+FYuxm>y+{Z5pb37fIdTfF8~E6+LdKEzB_#u&S>I;pZez{O!Pyc4Yo z4f64}RZ(HS7wEtw)Z;D9CZ12KxK|-vedbJ{HP_Wuk?K^3!;f3K4MD6!Ub#iN^6x5a z1dew^qgtlvoi6b$pIPf1$`3rH$hr+eksJLgMl**miT)OO7%MetEerhnz=VeXBE?d=AEC4?>1P zk1jSE?uwlL?QbR2bgX&|>k&cCF^E8)3vO>|X$jI1=K6TO*B%&1Of0%IPm82CA>L64 zLP_jf?F-};dz}J!E$`#Dy5jDe-Z9YrTw^iwX1ceBZtGj)+6J=-Kl8(6FG|w*AT$=1 zd&duydKOt9S}aDeyu~JXa{vCPo1_*vQ>t_=oFp6zmNRc?UF#+9@UzOw(sr}Bk_axi zdUG(m!)K!HdP`*${=2g4o2aCglC)#k6GKC`!!_R9(|w3d4Txlbv^-wwC~?U4Drk

      >^YqQjzn+2d!0t0{)OL;oFy3CryvP4;m?(P-)NiN>|Ng!4>mN*Ufm)1b6 z1dSyGO2JQod*Uq8f_$W9*drB2g^wO3JoKu?v;uJ@IawKWS|4)O?jOP7hGk`j!^6~Z z!<#H`#eJoZy9C)jV#}ozz1}Cqa#g#D`&T<9A$Xj%4~W6bNZ$bdW&%uMy*4+Pl3MR` z_)o+p^PGy?5!1YirlxRpGVrL8hi{i4G0I;ZPpt=|tZV;VPiPscrX%Fa9jB`RDkUpX zcfiM+|8o9db38OA#Kv*9?Hy4-W2$#Zhn+u)fGdfsXDJ$%p=9Wxjm)vNNDm^A(?>c|P|uT5e<21mJ~M%OGR#Kx`H zM}CU&$w-=p+E&QYR;Z05W#d%ULTlw0@`{7gwaD!1OI82xU&ZEyWuqFdIM?&$=KBbJ zadXPS)Ww7Av(tdHL*fz=JbHPnn;V1vh=z@^gy~@%e#jJ${$BItQ3-&B8C3dqF{Hy7 zBTDDw?E8ZcMY;X z3M4ZLCYM%#!+#YVyz+Y(@g#ydvKWeXfZNM^W(B(NYbd+>=-XNgqcriRFedksRrVo_w!*yQr3 z>Z!T^wOa4rB z2Ml^|Kc%Q`4c-@jfj_8xGw?SvQ5TLZIib}XM%h!A=mj#qW>i#z`bRF@!m)!BxIA*w zi19EQRQ|v`zSzc&IPH{+6a%xC(Y`+ahOIved}mbPWY#SkD5G1niIZ7Ty|Cr`h?+49 z0_gAsQ}*FBl_wxI0Gfi`&-Iqs*1gCUYoqqSm<@6L*A~6U&c0NFH7rljTG_$VQsNzHOC3Ai@+8u+kjYyL_aL5>WfPS>j1RM;w&(BgWazgbLN z_g6DRaci_{T#&gb)QxVE^2#oW^EE3k`MQ=qP`z8ADBGdEuel;m&}syGdM2x_jb}a3 z!1yLmTqT;0n!?kh;VH=yhn1W83q@dd^&fvAmm*rvmNp%)qhtoC4J}1Y#KIbP>$Y3l z+7=TRo-CReyQ{Y~N~kk_3@4&9Q#Rh7Z?4BlD)JFOllEf0J+9dZd$W`~t!lQi^cwS? z7Wh@?^1dyA3TbN_S*tM3ia>|K4A!y*? zJ8$Or%N56S*35A_nFaD%6>CS&OG@&|%-5b6N*L$_G{PIfL{(quk#tpHa2FPi(4YGv zci@AXmQn-Z$1l_g{stI2E-7ieH8}#>(vh4_AzY(^pC|QQ$N_(Q9qPrRfF+{zGi;}u z_=(@*RAKbH{>$n4-P`X$-dR#J#~ucaKX;6C^HQcc9Mm`$&;{D}Yn%H(8 zZ?Wf`35@F+8{zl04N`2+L!s!^LY5nMmac4vga53-?@iO*KHJQzFRfX^h2p<4t~)x5 z#0{q?g!hvwK$$-wk0qC`0OnsJ0`hqKu1fItq)q14O1y?-x_V98z>(zgPv0xrKayUw zXDLPm)Ao&K(SH!Ui3e3x$*T|}pkcHj_%$T0G@r6+I*l@5>R6SPh>%$%IvW2VeE zY(;ttm4`Hoiy>}x^_DhnCnU~~LkR8Ayw)JKbdnzg08NCs^Q-n=e^*!V!W7=Z%5zkw zljz)>QK>-?%wHaZQl#CxIV#Qd`2-=>TKcbk4gOWn_G!{#MH`k{lxvt>K&Sg|1J;xx za(fwCt%`gE`*{VE?@Zzar8eyIm>=boBgzIPewO#lk!`)f3C!oG#=AZ_j&Ez-22p&`XV!h!ma@ z-)tXVV!T%}-8Tn8vd&m1f)*9wRp}z}UOb2nLV!pjcq@I9N)Nx!emLqajQ7^sqFO&u z8Kt4~ioK)#M8?LcSHvONSNRvp%754%nNi@8xuqI{W;x#x?3Qwq9(eaYK-g&?-<Ekb{cd={#UL<`4yL-RE0wpjsaFN&M*^h7girJ~= z;OT?gUF#(2B+kZ4L?vwV}_48mE0O`#QAye?-Rbc!iC=3jj zQF)rG%4=^9aB*CcM8i5%qo~@O8&YUC9hBP9Lh{fLeA-#Nk`NFid(HyOkSC>ZPY+kJ zm~-4m{ccBV9A+iw4ak!S|4rZrR1_fX4K4yd05hBH&!0nsU3VBfJp@W-+fFA&kDbA7 z3krNGvD$Vm%;g&(!|>9uVEQWztSk&!EJCGsRDuelxK2Wku$g`DBkg_LFYc+MNOY+ZIw3EmB@yzBQ`G6HUL;NKDzA#GeG?a8!GS>Q^lGrtL7s zP4?_?!WG17(nV?0xt$Kx^{dZ@A;t$uMgZJtCkC(Hfa7rfPvc5F@NhuNxg(O?!^1=1 zyaeO0AoYavrQjm2`F@a8kamzg$?Rpy`ZHK*S*(Jch(l>V@(_v}o21`@(o&9JGZ)DJ zOrc8Ptb=U;jMH>?cZChFo7uRM_-;%qYzpBN zi_dkXwpZ!oGJKccRYw`MU*8ZA7v57~`+#7u)QdXkeMiTg_iT>_0J(7D9AHcL?O(;M z8c;qnsw*LazKfSvw1NVqGIGqBs`#O?=}-nH&2gh)GrDUV%0b(B3J| zuq#hM#1Vj7J~ybJoy)eVu1gQ{VX+Nt6Mub``jbKly;ThDOxp5(4)&O%_1KmxsN?Pl zMb-9$iKIK2CQGnB4M9a_24LWWahaJA)Rey{SX3;GoG+`N(A0mp?uV&XPY9=&w zW69x^L@-;9l9I?kAy`>76$mfQC`aq~`0uBCObXaQ8>R{mP`;iC_*f%PdU|?Rs@2gx z!vK3B;Oe|3rQQjDnp%VD4G2F>ImEM_CQyMJt-O~q?DYSn|nYDW&(Fi?`ePYK7!@YKFIPNLV9w3yVFhtMByGU2Rh~l z)5*YWyFA8Cu~-SGrl|f@#OW7ft+`&&vaE0`U}4i|dlgIPQx&Uv08S2K$Jr~w=w#a* z>5D|P*{w>n<*WNs%LO!?s$(-Zfz$%0QfSJ6!_rG9LQdHos^fRRS@lwUd=5JH4o;~H zUtJLMi#Mw?1eRQoL&#i-Eov+j&q@RV8Mm(kIJQIw`kh0)6SV77+b?CTD4{ZHpv zw-JL#o^J+`CiZbqh6QXSey0Kz;5700>xl0`_7%mSp^ar&R%BXFm8 za(X9rJSX&G6BBO<;eMaKVPRJJ&H`{$f3s)$mmmN5X89~*Dh`rTOi2>luV*@pI2W7J z4(y|VW8`$De#X)XTiY7_@l8f6>D8+qh5+xc2GVB$KAj;Ed*Qmel{;7C91;?S#Z%~n z;fm6^m|Jb+FTy}71H`S{&dkasFrSUhZ z!QR%E1D`K&b*y=?yybR(n^VVww@hMKtW5eRAJ_Wf) z8~t#tpHwswk>riZ{8|S?>*Q!3MkKu-_|GM~VEA?_;!sT+F*-V03i#ORUUP=EuU3PJ zWWC2ty;``<|B|ui01a5qeM9py?Vc6xh!xU}F>>Q;SB_La z7_*03V4C~GG2eduHnsG;dYTb(={j63>9WxLBvo{=R-k8=>LYvI*);7_HaEpfDlJk? zHc7)yH8r}@#y`V@5QLkKy3Vk2R0bDkSrt_kP_1aC9d}50`0^*cYWPc%+8%%R6vCrw zb67yeFd&ki>|A!@tXK%ac?#-5Y>?VQBhJtl34xa%OYUQ zq6Si~bfR8=eoq4T`u4r`plXb=kot&=L~vrt6d5K3d0$0xj82X*rbu8hSTpfdS4|Dk zmwXZ>k*N=6GwYdqo>!S8V6Hb-P`ux3ju_c=kF0w~)MQKkwD8?M#+_xAt7296pF&q` zA?`StBY-=yqzyd}j11aZ^h8PlK54gBBqb86|6 z;_A6b(_dfXj``eXX+MZ^(w0HV7!f)9EPX0aK1SIIl2z(J3>h3nI zo)4%OKLtTRQv8&Ir|8e{+nVClW@$D{V)@`-{Y0#Mb+1i`YM%88ZC5&4Yk9bC&H3%=7FOLPM@*F6(b4k%0D1b=m3PFQfc^zx3fvHAG!3i{ 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�BNb{mpuEG#YG>26}t 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 Date: Sat, 12 Aug 2023 22:21:34 +0800 Subject: [PATCH 0358/1057] Add solution and test-cases for problem 865 --- .../README.md | 41 ++++++++----- .../Solution.go | 55 +++++++++++++++++- .../Solution_test.go | 41 ++++++++++--- .../sketch1.png | Bin 0 -> 42864 bytes 4 files changed, 113 insertions(+), 24 deletions(-) create mode 100644 leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/sketch1.png diff --git a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/README.md b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/README.md index a9eb6752a..f0b622d74 100644 --- a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/README.md +++ b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/README.md @@ -1,28 +1,41 @@ # [865.Smallest Subtree with all the Deepest 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 +Given the `root` of a binary tree, the depth of each node is **the shortest distance to the root**. + +Return the smallest subtree such that it contains **all the deepest nodes** in the original tree. + +A node is called **the deepest** if it has the largest depth possible among any node in the entire tree. + +The **subtree** of a node is a tree consisting of that node, plus the set of all descendants of that node. + +**Example 1:** -**Example 1:** +![example1](./sketch1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [3,5,1,6,2,0,8,null,null,7,4] +Output: [2,7,4] +Explanation: We return the node with value 2, colored in yellow in the diagram. +The nodes coloured in blue are the deepest nodes of the tree. +Notice that nodes 5, 3 and 2 contain the deepest nodes in the tree but node 2 is the smallest subtree among them, so we return it. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Smallest Subtree with all the Deepest Nodes -```go ``` +Input: root = [1] +Output: [1] +Explanation: The root is the deepest node in the tree. +``` + +**Example 3:** +``` +Input: root = [0,1,3,null,2] +Output: [2] +Explanation: The deepest node in the tree is 2, the valid subtrees are the subtrees of nodes 2, 1 and 0 but the subtree of node 2 is the smallest. +``` ## 结语 diff --git a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution.go b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution.go index d115ccf5e..2911edf69 100644 --- a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution.go +++ b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + var dfs func(*TreeNode, int) + maxDep := 0 + targetLeafNodes := 0 + nodeDep := make(map[int]int) + dfs = func(now *TreeNode, dep int) { + if now == nil { + return + } + nodeDep[now.Val] = dep + if now.Left == nil && now.Right == nil { + if dep > maxDep { + maxDep = dep + targetLeafNodes = 1 + } else if dep == maxDep { + targetLeafNodes++ + } + return + } + dfs(now.Left, dep+1) + dfs(now.Right, dep+1) + } + dfs(root, 1) + + var ans *TreeNode + var dfs1 func(*TreeNode) int + dfs1 = func(now *TreeNode) int { + if now == nil { + return 0 + } + left := dfs1(now.Left) + right := dfs1(now.Right) + + addOne := 0 + if nodeDep[now.Val] == maxDep { + addOne = 1 + } + r := left + right + addOne + if r == targetLeafNodes { + if ans == nil || nodeDep[ans.Val] < nodeDep[now.Val] { + ans = now + } + } + return r + } + dfs1(root) + + return ans } diff --git a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution_test.go b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution_test.go index 14ff50eb4..44b9d69de 100644 --- a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution_test.go +++ b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/Solution_test.go @@ -10,19 +10,44 @@ 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: 5, + Left: &TreeNode{ + Val: 6, + }, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 4}, + }, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 8}, + }, + }, 2}, + {"TestCase2", &TreeNode{Val: 1}, 1}, + {"TestCase3", &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 2}, + }, + Right: &TreeNode{Val: 3}, + }, 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) { + if !reflect.DeepEqual(got.Val, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } @@ -30,10 +55,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/sketch1.png b/leetcode/801-900/0865.Smallest-Subtree-with-all-the-Deepest-Nodes/sketch1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1a945b89b2d4c29af740551d79f66e68f77571 GIT binary patch literal 42864 zcmd43byO8x^Dhpfg2W*uq(fSf?vj-56nN+^>F(~9F6oj6C8S$gQo7|xcX;Q_jN60xjB3G?3vj!duBfSgek~Lpdmj)hJ%Acdm|~T1PAwE0{k^WdH_c5l@GJP z4|oS9iPvzIUx{|Xe;%3&%L>E6RmY&*>OTVie_|)8=>P{u90L0bAG3L63

      A=#8kb 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 ZsNWt7V{BtbYB${{TnG&}0Ar literal 0 HcmV?d00001 From 8aa35d5ba93e8c9e739f56a3071b1e8c7c7d92d6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 12 Aug 2023 22:27:50 +0800 Subject: [PATCH 0359/1057] Add solution and test-cases for problem 1123 --- .../README.md | 41 ++++++++----- .../Solution.go | 55 +++++++++++++++++- .../Solution_test.go | 41 ++++++++++--- .../sketch1.png | Bin 0 -> 42864 bytes 4 files changed, 113 insertions(+), 24 deletions(-) create mode 100644 leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/sketch1.png diff --git a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/README.md b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/README.md index 054fd83a7..00b68bb69 100644 --- a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/README.md +++ b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/README.md @@ -1,28 +1,41 @@ # [1123.Lowest Common Ancestor of Deepest Leaves][title] -> [!WARNING|style:flat] -> 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, return the lowest common ancestor of its deepest leaves. + +Recall that: + +- The node of a binary tree is a leaf if and only if it has no children +- The depth of the root of the tree is `0`. if the depth of a node is `d`, the depth of each of its children is `d + 1`. +- The lowest common ancestor of a set `S` of nodes, is the node `A` with the largest depth such that every node in `S` is in the subtree with root `A`. -**Example 1:** +**Example 1:** + +![example1](./sketch1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [3,5,1,6,2,0,8,null,null,7,4] +Output: [2,7,4] +Explanation: We return the node with value 2, colored in yellow in the diagram. +The nodes coloured in blue are the deepest leaf-nodes of the tree. +Note that nodes 6, 0, and 8 are also leaf nodes, but the depth of them is 2, but the depth of nodes 7 and 4 is 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Lowest Common Ancestor of Deepest Leaves -```go ``` +Input: root = [1] +Output: [1] +Explanation: The root is the deepest node in the tree, and it's the lca of itself. +``` + +**Example 3:** +``` +Input: root = [0,1,3,null,2] +Output: [2] +Explanation: The deepest leaf node in the tree is 2, the lca of one node is itself. +``` ## 结语 diff --git a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution.go b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution.go index d115ccf5e..2911edf69 100644 --- a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution.go +++ b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + var dfs func(*TreeNode, int) + maxDep := 0 + targetLeafNodes := 0 + nodeDep := make(map[int]int) + dfs = func(now *TreeNode, dep int) { + if now == nil { + return + } + nodeDep[now.Val] = dep + if now.Left == nil && now.Right == nil { + if dep > maxDep { + maxDep = dep + targetLeafNodes = 1 + } else if dep == maxDep { + targetLeafNodes++ + } + return + } + dfs(now.Left, dep+1) + dfs(now.Right, dep+1) + } + dfs(root, 1) + + var ans *TreeNode + var dfs1 func(*TreeNode) int + dfs1 = func(now *TreeNode) int { + if now == nil { + return 0 + } + left := dfs1(now.Left) + right := dfs1(now.Right) + + addOne := 0 + if nodeDep[now.Val] == maxDep { + addOne = 1 + } + r := left + right + addOne + if r == targetLeafNodes { + if ans == nil || nodeDep[ans.Val] < nodeDep[now.Val] { + ans = now + } + } + return r + } + dfs1(root) + + return ans } diff --git a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution_test.go b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution_test.go index 14ff50eb4..44b9d69de 100644 --- a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution_test.go +++ b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/Solution_test.go @@ -10,19 +10,44 @@ 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: 5, + Left: &TreeNode{ + Val: 6, + }, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 4}, + }, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 8}, + }, + }, 2}, + {"TestCase2", &TreeNode{Val: 1}, 1}, + {"TestCase3", &TreeNode{ + Val: 0, + Left: &TreeNode{ + Val: 1, + Right: &TreeNode{Val: 2}, + }, + Right: &TreeNode{Val: 3}, + }, 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) { + if !reflect.DeepEqual(got.Val, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) } @@ -30,10 +55,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/sketch1.png b/leetcode/1101-1200/1123.Lowest-Common-Ancestor-of-Deepest-Leaves/sketch1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d1a945b89b2d4c29af740551d79f66e68f77571 GIT binary patch literal 42864 zcmd43byO8x^Dhpfg2W*uq(fSf?vj-56nN+^>F(~9F6oj6C8S$gQo7|xcX;Q_jN60xjB3G?3vj!duBfSgek~Lpdmj)hJ%Acdm|~T1PAwE0{k^WdH_c5l@GJP z4|oS9iPvzIUx{|Xe;%3&%L>E6RmY&*>OTVie_|)8=>P{u90L0bAG3L63

      A=#8kb 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 ZsNWt7V{BtbYB${{TnG&}0Ar literal 0 HcmV?d00001 From 77f43cf5152aefb1f21045e5302a0275c7513a28 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 13 Aug 2023 11:01:23 +0800 Subject: [PATCH 0360/1057] Add solution and test-cases for problem 2369 --- .../README.md | 32 ++++++------ .../Solution.go | 50 ++++++++++++++++++- .../Solution_test.go | 12 ++--- 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md index 603cc24c1..11a114e8c 100755 --- a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md +++ b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/README.md @@ -1,28 +1,32 @@ # [2369.Check if There is a Valid Partition For The Array][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array `nums`. You have to partition the array into one or more **contiguous** subarrays. + +We call a partition of the array **valid** if each of the obtained subarrays satisfies **one** of the following conditions: + +- The subarray consists of **exactly** `2` equal elements. For example, the subarray `[2,2]` is good. +- The subarray consists of **exactly** `3` equal elements. For example, the subarray `[4,4,4]` is good. +- The subarray consists of **exactly** `3` consecutive increasing elements, that is, the difference between adjacent elements is `1`. For example, the subarray `[3,4,5]` is good, but the subarray `[1,3,5]` is not. + +Return `true` if the array has **at least** one valid partition. Otherwise, return `false`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,4,4,5,6] +Output: true +Explanation: The array can be partitioned into the subarrays [4,4] and [4,5,6]. +This partition is valid, so we return true. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Check if There is a Valid Partition For The Array -```go ``` - +Input: nums = [1,1,1,2] +Output: false +Explanation: There is no valid partition for this array. +``` ## 结语 diff --git a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go index d115ccf5e..741fec27a 100644 --- a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go +++ b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution.go @@ -1,5 +1,51 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) bool { + // c2, c1, c0 三种情况 + a, b, c := uint8(1), uint8(2), uint8(4) + l := len(nums) + + dp := make([]uint8, l) + dp[0] = 0 + if nums[1] == nums[0] { + dp[1] = 1 + } + if l == 2 { + return dp[1] == 1 + } + + for idx := 2; idx < l; idx++ { + if nums[idx] == nums[idx-1] { + if dp[idx-2] > 0 { + dp[idx] |= a + } + } + if nums[idx] == nums[idx-1] && nums[idx-1] == nums[idx-2] { + // try add b + if idx == 2 || idx > 2 && dp[idx-3] > 0 { + dp[idx] |= b + } + } + if nums[idx-2]+2 == nums[idx] && nums[idx-1]+1 == nums[idx] { + // try add c + if idx == 2 || idx > 2 && dp[idx-3] > 0 { + dp[idx] |= c + } + } + } + if l == 3 { + return dp[l-1]&b == b || dp[l-1]&c == c + } + if dp[l-1]&a == a && dp[l-1-2] > 0 { + return true + } + if l-4 >= 0 { + if dp[l-1]&b == b && dp[l-4] > 0 { + return true + } + if dp[l-1]&c == c && dp[l-4] > 0 { + return true + } + } + return false } diff --git a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution_test.go b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution_test.go index 14ff50eb4..ce9fb9c85 100644 --- a/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/Solution_test.go +++ b/leetcode/2301-2400/2369.Check-if-There-is-a-Valid-Partition-For-The-Array/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{993335, 993336, 993337, 993338, 993339, 993340, 993341}, false}, + {"TestCase2", []int{4, 4, 4, 5, 6}, true}, + {"TestCase3", []int{1, 1, 1, 2}, false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From aa6e1156618c7d4d8f8cd91f6a8a3569a6e05f35 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 13 Aug 2023 17:44:03 +0800 Subject: [PATCH 0361/1057] Add solution and test-cases for problem 988 --- .../README.md | 40 ++++++++---- .../Solution.go | 30 ++++++++- .../Solution_test.go | 57 +++++++++++++++--- .../tree1.png | Bin 0 -> 17868 bytes .../tree2.png | Bin 0 -> 18592 bytes .../tree3.png | Bin 0 -> 18218 bytes 6 files changed, 105 insertions(+), 22 deletions(-) create mode 100644 leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/tree1.png create mode 100644 leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/tree2.png create mode 100644 leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/tree3.png diff --git a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/README.md b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/README.md index a26423343..f6365f166 100644 --- a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/README.md +++ b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/README.md @@ -1,28 +1,42 @@ # [988.Smallest String Starting From Leaf][title] -> [!WARNING|style:flat] -> 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 where each node has a value in the range `[0, 25]` representing the letters `'a'` to `'z'`. + +Return the **lexicographically smallest** string that starts at a leaf of this tree and ends at the root. + +As a reminder, any shorter prefix of a string is **lexicographically smaller**. + +- For example, `"ab"` is lexicographically smaller than `"aba"`. + +A leaf of a node is a node that has no children. + +**Example 1:** -**Example 1:** +![example1](./tree1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [0,1,2,3,4,3,4] +Output: "dba" ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./tree2.png) -### 思路1 -> ... -Smallest String Starting From Leaf -```go ``` +Input: root = [25,1,3,1,3,0,2] +Output: "adz" +``` + +**Example 3:** + +![example3](./tree3.png) +``` +Input: root = [2,2,1,null,1,0,null,0] +Output: "abc" +``` ## 结语 diff --git a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution.go b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution.go index d115ccf5e..776bed38f 100644 --- a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution.go +++ b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +// a=97 +func Solution(root *TreeNode) string { + var dfs func(*TreeNode, string) + ans := "" + dfs = func(now *TreeNode, total string) { + if now == nil { + return + } + self := fmt.Sprintf("%c", now.Val+97) + total + + if now.Left == nil && now.Right == nil { + if ans == "" || ans > self { + ans = self + } + return + } + dfs(now.Left, self) + dfs(now.Right, self) + } + dfs(root, "") + return ans } diff --git a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution_test.go b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution_test.go index 14ff50eb4..3ae3df47b 100644 --- a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution_test.go +++ b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/Solution_test.go @@ -10,12 +10,55 @@ 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: 0, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 3, + }, + Right: &TreeNode{ + Val: 4, + }, + }, + }, "dba"}, + {"TestCase2", &TreeNode{ + Val: 25, + Left: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 2}, + }, + }, "adz"}, + {"TestCase3", &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 0, + }, + }, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 0}, + }, + }, "abc"}, } // 开始测试 @@ -30,10 +73,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/tree1.png b/leetcode/901-1000/0988.Smallest-String-Starting-From-Leaf/tree1.png new file mode 100644 index 0000000000000000000000000000000000000000..e858b9aa88d9caec6f635769fa58658c2986d40b GIT binary patch literal 17868 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

      BTyNW?;cPJ2w}O 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 literal 0 HcmV?d00001 From 89aa903ecd35528e59ad0edd3a0561bdf4eb7518 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 15 Aug 2023 00:36:45 +0800 Subject: [PATCH 0362/1057] Add solution and test-cases for problem 2471 --- .../1.png | Bin 0 -> 34710 bytes .../2.png | Bin 0 -> 23630 bytes .../3.png | Bin 0 -> 29765 bytes .../README.md | 51 ++++++++++---- .../Solution.go | 64 +++++++++++++++++- .../Solution_test.go | 54 +++++++++++++-- 6 files changed, 147 insertions(+), 22 deletions(-) create mode 100644 leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/1.png create mode 100644 leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2.png create mode 100644 leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/3.png diff --git a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/1.png b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/1.png new file mode 100644 index 0000000000000000000000000000000000000000..d0ddd7c67dacd0972fe71c313a7db0947a66c6ee GIT binary patch literal 34710 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 literal 0 HcmV?d00001 diff --git a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2.png b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/2.png new file mode 100644 index 0000000000000000000000000000000000000000..428c908bac4f20ec979d1cb058e4439ce3acb19b GIT binary patch literal 23630 zcmeEuRajNuyESaLx)G2TDd|o@y1Tm@N$GCsl9p}|*>rc8bcb|zhjhcY_{BN@b8)V} zn{y%0Bdj&oTywrL-gk_-g5_jH5#M0Hfq{WR6c-axfPn!?z`(#ZL0$pBA%qD5eiFcl z3-K$t=p3fOHOWlg_GAnS=Abdgs$+^{DTWaJB%vZq!ts|7bwt~v8doL}#NzNbM94(n zj2zc{%g(5{m1KkbXl~hjl)0XI#eJN9i8M^6kTKuCSNKpP^HD@$|9d$f@W;3R{l{JiLl!y~ z{ZZiGgYgmYfsrL(->{Sj{Bu7t7OcO5VN)H>KjZtrpzu+=q?oCD0}J_U7(PSbj;ND0 ztH1vX0|p7fWTOAjTc`SKdcZYNz#YQfp^b#VY@cs|AOk~s`-T_(J0~F#;Ew;B1h72+ zw-W!KY$63hqm4&D?|j7Q7P?&5b$uly;CnFBe1!`CW@~_2ozaN#QF9knINS>!qnAF; zipnx3+u;Q)38@Qd3yy)S(Cf3i@$3un8brsaV~LDaU=nhx$tz1H>`%V= zRV1Gj-9>lu`7m&(`-!(?ZZ608$9d6j4(1ot_9HElN57e5ot5b5nW7b_&RKM%ypa0mJ*S(oMr(`JuymSU*CHB*l|Z$3|dwu?n&arwh~ziW3Iq zjD}<7lbP#O3sg&Xyn0Kt8<4)ijCLP7B5*F0<^RyD_{? zsQA3UEI=yiud& z^=y3tz!Nt>U;;fjSXzN49QLENLKfDM8ItsqarpjuR`(fZ{o&}9Q3@~tG7AvMX7cJ# zfS8uxtrPj_>n|mPfmYAS%YG(H?bcUf30Utxxiy_o$t0k<6zmF?)Uq$Q*x-W+zPo`S z*%OuP;t)OpIFJTOGq*!*`JwK#fLo@e{Rq1IL=6(oQ3f*gN#u}OXuCZkWB_jb}gUE50l-GFyb#Wr@u!cltWG88yvrEv*QnjQCjj7>;Uh= zKLT?fYprM(I*< zH{u#U6P;RZIRBG3Cmm7U$=S(ftf@=IJ@j%0`lO^hJ#GHZSUXZ@WzqTi zi(f*D^I_5lIc$FzFdZt8dJvGk`INx-bY%BbpsY6>NP_>JW7^(;G9ASm5}_r$8$ITE zb8xw#3VZ7^4UQJuqL?ReAmlm_tUqc#EGz_?%=e{6xKwg)x;WGX(>fQ-M}KrQ-k4FY z6Rc`OIkt9;{09@(Ke}}-m=(D!j;{z6=`|8QqQA?iNr!YQv#7qEal)enx*d==+X=ko z-iV~0pn`JHAVXwb8*;xg-5LA^E$B%RBEf?1lhYYKL0}_+nY(_nNkoJthkIZ8b7{|7 zY5DDVVP0q{w({hWXKDBCrE*qGz3?)!4G!?!c_LqKA+iu)Cy68H2KTwnNTWNfB@yHOxQV!#v#8LWc%M&as& zNjkf_`i9duvqd96)C7@KiBR|Ik2&o)KwyI)1hKdv*;?d3RIs_aoTffiU&e@D=#Kpq z#zT>4@;o=Y)Mo_~k$cO9q+-eP5tM-i;FI9BQbd>B%3~~XFArvkwHuutM7?C-NG*E{ zkKe|pxnI7t<8QR|$t8x=c>^)(C4U@;6vNq>2< zlNBk^^7Y1WrOhW|h{DvMTk1(*i&lf?!dy8)bZ@F6{3RZ+p_jl`%?_k25v-Vk2r~_9 z*+vD#;h_zV``Gs?C0e_6a&{pBxoD7e!WDiHgcRu&VhrI5x{qABaPB^NJwHW&j^L~E zogBp*(N<&|Utm^nd*^V#{zKrh6Ee(5jU?XL55luTva4}eB$rpSUS@8nVUKkQ3t-fvNDvWb3I$ksZLsL@tw=nFkXO$E!bi>&CYRc-@w14ypgnwK*^AzA zz#Te)zoQVZ1D=%Nt?3UdKv~EBZ5z2P1$esE+WBi(B*53TvAJsh{IQYv%mLPtg~{Bw zMgB|xUJz`f{pF2CdbI(L=W9C#hVhJKc;s&r0%e*_&}=;}>svJz#-_ZNN%n;S|9ZCc z7pS!W=E8)?eOU2I;&X-J!9a$*0>T!wY_I0E>*0rLZ)TWAG%V}WlYamfqUrX^Fl5uqY+A;zDu zY;k1ZvuEMo^>wP-L$!8sNNOz4z8!7@0JDt~c!{N8jCg@I4DdS|9kML45lEGojh~u> zFrywA3<3}^x;Mc(5qOXU`FvW2T!u_6X!`cOSlZWzFUC@)@IcgI1ftF?5Osv42$V88 zzriO7!q4UR;@QsqfdO-g12587_W2Vyl@wVcOR++XaCfRat+IP&!Tp%f7D#VSrV6bQ z6NU0aTT8odLI1I>_{gKB84c%0h-7B*qYh7WiQtahDdU7-wab(Q0`7~9) z>R5pR>nX8kK(I)tJO4zlTID+RbgRqnuerr$H$JcD_D2qQMWF`3i(kpKYc!=Z;vIQ= zx55#`-s9;u`FU@GYYt~fOOf82ov#~KTNUCW4khnix;t6X2f%OD7EsRxz<{-Y@U!vj zhaM`pNra$0(d8yzMIp!VV`=?&XtO!1MSM$#=$#7qmPm{Z7B&d zP9N1}EE3MEqXgfZQ;FKQhg^+yn)FLY5B#YBzEd5~mZitjWQjV>mT17^y#!YO9Z)W* z!^Dw2$6k9cHLBk&>J;RW_%UbO!@(tU4+8UB>1dL{!U|I~>Kk9@9PB2QO`)sYli8P+ z7=G_Hz6SFB045E>^Gpr$W(V^;tl`{v&Qg(5ltd>hTSZy7+_mS;6`RC!)VdBbm9C!e z*Q}!DU^9s~++O08;~5IyizGcBI={-}q+X;MIw~}J`$@wGu(@aF31;|A0$vbbxxYC( zUG*O^3fDMKWs$}cb_W*LWi6)EV1IW7B#(gvqt~;5;W2HD9 zaR4o50H)PYx+yIEGA>o|F-4w` zDAH+FAJ3Jf9@?9ZFUYr`R(|yd8Nj^ofaB06?t(!}WPc{FLXD=LXc?V67Cp>gntnaj zmgj`N{OymWi)92BNYD|}ZV-~sSE_NCAboj>$3-GJX;pn4u4$-ze;ewtWBDYFGXWs{ zpBa4|r5b5JB#6J}N)SWk8&^Km-My{9is+ZG%zTd5+(5iO3VsRXvp6u>U^+Q`LeVD+ zbEU?>d|}KBeKXp`7R`!Z6r|s;$C(o)FzAWYnM~pZUY-_uF=2U42~eG62YhddD6FYD zUdVprrrc+-Y-Y1ZZ&0ZN*>!1<@0ejl}AD&gbcrXUjKE?n!LoNU9r`q{C`7+E&tNRvtxT{rJK$ z!K8#S5FgD*8Y0Xs7#EGlTXL`5J(NtGJU{eAMJUVS$u|zooKlcjxaI^e$N;W;3Hgi< z#wGZn8-%FB*?6vRq)oh=PllMS6t!}`!tD)2q|)f+u( z>xvA3#rdL`H2L$XfgQr3?FDl+ba`q7$IRpML*JlE#FRyWFPwgRD!b|R){PjB_y|VR zN*X)*OB&SE(d#qmnR++!0Ep;RoWS-4Xbe@Y)-?qoXJu6kvNGlG_(UnIZoL)j(2uaM6{cVNPMMbmFR>3yYaKYE~>9mQi^d`1PCR4yZ2xbgKQmFS1PqLMONF_E1YKJG|3#6X@eTvuY0 z7>TeXEu`_d0a zRk}D!7ZmA>;*G>9U0(Wn1ouWUCoG(kK#vo6lf&L!WY8trOu2LG`3H{fo$I-UdMJ>= z_i!0&p62m`CEX{?wdVzadj?4B{Xgpi8(5a?6YJt7-MUMga5}&7FjZI-Votyk4yM3=0 zM-9tx$T|Sw4}kKjB7>b5gtau7bc+*Tn5;~nraU@qK2Bhw}lvzA!=YWt%>UA|BqOxwnSO2+6 zjiuBP;^3MR8@K5#IIh@AO;*P~-Tf52Ts4W@e)yqY7f)Yn+}U#t8NBd}61(&C(10q2 z;VLNGjQYkI_~%+*IX*Og(4z5~tBY2L?9VRda_`lE3RbBy&Qyb<*|JXGz>yy3f8ZrL z(&uaXe*#UOsB@b%Y=uHIVdR(oZA}>o1F@ysIQsd?R1!Bc4_Dw$`vre*Cg8P)ZE{s1 z&=Bu;BKTn$bgfnk`d{UFPQ*MYb(2*Y@_lz#gFJ66W5N=-I`XO=41#}-1Frq<*qtps z@yH4Y!p=Rf_X%vG+9<0JTb~lePw$4gqX|7YTx)JR6q@AtAunUwrtlg!A3nx}pTbUK z_EKwWFe|$97iW9tys**)UfYmRD>=|x9sCSmZo`ua?vU`JijtW6LM@Z~tLqI0&C;E? zB=nZsJ5G;!PwWml#rx8zgPLY)lH@=50`Z06*{`|ctH1z`y9c}y0h?2Oa-5ygwWN=- zyf|4RqVR^X3S9FVhr7Ux2Jt<&xYIE&#cYLP{I&*jJdh{cN71ALy*YurxPXOO8sKlAU}32tG#V`$WL^(mcDIAN3N2FNrWY$7Mf~NUD%m+MkFBDxw3|2@&9jv9 zz+&6QWQF3d>KQIUILJ27n2Y`L9KnYg_4>3iV`JbYFIE7_ae;!)2YFH$hfIDt2#F{k zW=<-LbLMmOC)PbGlvh4#tfU$xfbpRK653Dio-E`t-?rS!mU=m2app(8Aip2PZ`Qj;vt{H5PcT7;rxkY4-zinK$3B-QSEh z2k2wfw&%CemqQ<76@=etj-pAw3T_KL^y&@T3#$Vw`xT0{e?8R-6(vy&MBo?jE=B&9 z4D{E`{6E3?>_B#~#UFUn3GUv0h_X;;8mOej9&mJ>UBbgtPJfFsQ~l&kMgLLwEj}lm zt5R{cnzA2t&!jpm7#89Wl&R=s6jpxT7|;3Kr=a09qd-rON13l8rl1BdhByU7d(7Ay z?#oA>otP2B-2U1^$KvexZznLhFG@uJZ4m)xI8}fxjxU{L+Vn0{BwAg`bXx)}LzWty z8DrcVSln7TZM{3m?t>(TWkwstfGidT%v@M#0S5LA?*4p0)(7newleYA;yT$ zM5`mhM}P2v`A|~*aoxgH@ESU*Ex-^7q0Gg5lPKS@t-nvOS{=C+(n zvhBv9I<(>)P9!N=$O}gfOVa5~x?4|80*Ahh5^+E31oxD(z`{06pb^X3J);F_sHHYvMp!9cVCm?tE| z*QO6Lnc#pvMO+IVvT^85h`Ak|h(Z%NR^s77Rs?01+aItP+@e!C>_y&arD#4r2-%C5 zPSM)}WhW-^+Pz?in%K%rFxt3%F9o~pX{=#is(b^_q(Dhu)Z(uXrr1E4GrIZ0&5KRr zkt>M+0K(DJ95wM4>J>su$g+HGLC?7cfr_r)uWji?(1!HIW|lMdro!4zwTXtfNHuK= zFbNWy+d=hR=5vEtubppD<=1kzB%KUb12J zN;eOq$D@O|`0$l}HUJ9DhroRL8q*vdwC$_Ea^wIobs9m*4t~-<0}axQ7USE2cMabS zF&z!TnBXQMz6{Pfs{yBujZ5hdpUgaL`3drXdGd#Id1?yiwU5U!o(#BlQyyYi-6vGJ z?|4eyX39gBxd#WeSQ z$Th$@O+$bK1G6Uh6&3@`y4u)*Q2c>|2yk<#^LFl}Icv2qFgG6ZQOh<_yPX~R^^5s^ zJPpaC#8jTE_gB7vU80{Ov^{-;BPofBrFRZ%%4wmgBS0nr1)I}0Ph5VabklAjsE;g# z1zLD-)Y@!WIY88F(*xi7D#Ju1-qBIeSDB$|`*9%xEz$Q}Rs}_iRg-0peWLi^ftHEe z1lnLA-zl)2hTn+6&sFCkr!$sEkM)B7ec?3UUj&-_|3aWOF517NjT+hZu(pV6xrnbA zFW|?UxBMXpsS5_;^;SOs?QlpxV*iuYRnD5&B4*xv8 z%`z(a>R3!AcG=c)zWK4SbUIR}ooeo6lR(^$5~fzcA=>pxo`f#p)h4fkEcx2bz%4hn zNm6NzZOD?&N_FDNi(ZjNJgy$N

      Cfni4nbC^>3zpUwWMYgP)Ijoz)Q_8Q*t} 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%0A~(2($&=T`~IojBy}8D zig~VCis!PsjObvSL(8T|$12>P`19@Tu}mNIwCy>6Fhkg+^kO-Vz65hz?#wNG9MAHg zHb{5}Ol7!0+yAz0p?Pm*VSZp48X;a_Y4y4)-VD(1DrMO}`Q=W`8a^GdN&&de#*H;# zNx9t!(dV%7vVR_s6P)jk_jz5+x~94sA%4-QPUBmv?E6bW1svsY!totnedj24!?{;> zicpYvIIlgy7>tnGz8g409J_%0GSp&+*Dcy&;W8+eQeKE7Ut3*k3KfE}O6`<3w>2Mc z*)lbr@Q{lKW3p5(nR#+5fWY42tv~(FfV*=(s1}4n`Duc^C&BbIyx5KQlqSs1*#fjDqS<2CP#IuRBM=LB?)ZLh({q9y{5b+T;7|I!cWQj{Gg; zIJ^Y4WdoyWKEDdk;fl0sz0re{oI8U36@NNY@7r$dlI{ID^|E!T zcXc4PhRZ}}XPV|6%RWY~4!?^1+juV97oB<;$~8WhTC)uqTy<&HxS4fHxZn608BNazp=|2{BZzW;>TB-5t-V z?h|Z)LmA!wr6Vtzf~#6xcvNVcGNJkezg6+;wblDXfmia zM55>W=_c+-$lCY^n@*A9QNA~+LdZKUtX9i}fNGTDxjl8&$kW5NCdWb$D+TrvpnQ5M z89#6(sd8_Slh;=53XM%B9Iq4(m_&$r%+4ugB&GMbYI5o@UT@vkMFCoMvFVN)xyC;L z;N%>f?Y6ZW(Z883viYWf=sch%P&SE@dfMvyy=zI-(V-^UO(x@*cCrK@6U+o;f=dqt zA+{fthw3tIYk#u~j4sHw?c&14)l+sBD&;)e&9boTA%`7odSHcfNIett7+m`(BLG4 zCsi4LynmC%$ADa>w{;oM?ET3y=KMg2?mFI3)LtBW(C}=SSiN&@Pt>WAL?KbN*LIQH zW<0HVd~EpETS+)vHajV|Cf;Ayt9KDp#*Gd`rD4SJs81&AkZcN{eILu))Ehgw$(B*o z;9mh7OMA8An|4M&E!b~*{uM!C#4cDZB&tXcO+RF{uty8rR){3yRcvt=*c*mni?TdCWF^{ma@DNX z_{+UXQ2KfI_tzFqbe|8X0!O*3wF$JXE}!YY?u8pWg~^jKRp2--ZY?Fo7mqUt`&x>e z#ukKKA4_BTlT<_7lCqbnBHmlH?i6+bg5cerI(A}Qwz~k zST7%Zp8i(PVC#O$V%Hh-xpMN0U8l-I`au}3t?mr6#OF?-R^kslp9{)2bz9BcH7rms~J%CE>Ux&k3jJaYZP!+~L{R=0@wf8SFZlGi{0qH@ zf8gk!xhyp&Y#yy~jqdue_+H2IuIwZOi#gE&%SUytmY+r)nZm9Ul*eNpjeDZbM{5&= zTMknoE=?304V$0K=l=I+8ng-im(Mgv^*c%?6N=Kb?-h#lq38zuMm70=?VR~r6G^wn zg~0_>G+~fIGsBV~AZP{@p$(t}G9h6V7xra2 z98(4|RV2aniQ~}Kq&x+2Tn^PH2*F{k@&5+*z*74wI2`0^6D7ooGgk30bD}iy>V1m* zasfm2HxvCV0i%uzMH*tY_se{*6S`u@8sk~0IZ|cn7$1yQ&hDU~>Y6q*hEq_+w&eS3 zIaA>%tej_7L-&JkC=lb(Nc^_+=%%)yWTe=VC~HfnqVXGv+isqB+<#1Bc;ndWp+hZ? zhdd9Jl=t4eQx(~IsrjLzuvY-1pmL1W@O7XKkoNdgV5XIK@0^D@NGUF-WP?L^kAe$> zyS|o)Z_jCr@cLv+Pey8M?1iwPb=>;8e{3_2`S;P%Q|5_2#65RO>HxJu&~A&AOl#bH zS)Y7I;e4OXU*SW8I=u~{=MZXmhk8v44YUQ;51;lLL@NkYp+`3<{%#UMC4%CNu zE>%jbcw0_Yz9=ag&`EZMsZuOx2!d(RaxZi4#3IJYbQuq=m{%FAzTrh&XwFWZ8575? zftV+2KM#YC93<*N$X3{k*1nE9T6{)#Q_2?c=d+;AKKH>v{q^VH3nwpN-Q3u^F2!2? zfphcpE4Tz=(k~{}ReMVe^)=YW5GF)SvHA*$h>cD%ox9$0%hj+%Eola#@ZBM}&}pJO zq*1WFv>P6re_(zEBq~7MXBq@`-8EP`c+15gpiTJdnU%*g#=f;V&qamOZEqQ+9>c88 zakb%rYUOUYp`X9{gSkh;T#bY$_OyQ53 z6x99hHO>L0_RWh-of()(T8jU7oXxBjro@)+djAqWdN>a0?xknyG_woAY3lF@Hs%Vy>G7IfM~ zjZjaW-KYbJG7k^44k29Sok`5Y1Y(0T?SbY#{D#^(|~XBG`_Oy6f9te?kBF z>wP}%%&I9D=Uf_7DFk%uhQovZ(E&ISdlgbY_2hM+M%w>TDwXYO;GoUQDSQFKQu~pB zA$}k;QqSOH1vWeBiAcvKnGO@W8=2t!yUEd)y7(BT(v#(fDInS zGW7Z69tghqIom02OM$&Qp8br$_la?hfkUD|I%?Eps!yl*z{?>OACH9s*jaEMr8G&UIhWV^K^9y_lOp>*iX_-s*By}pLzQ-LCcOg@p5S4 z^=ijvh!jqz1ZxcB9mCl`B)=;F8{2yQ!^u_PS#1|rLYKWk{NwJqx}xvZ3MI%YBlHewRC zNnu@hm|pk%70Kenz-KGTK;Unc zOazU2HdeI9WM#S$%&0+sDCt7a>dbSi%EX&QdoCCPZx1Fx^a{Y3MIzg4XOguF5rJ%X#UB!vp0kN%Y*LtuZpZs9Ydna*Q9pe zQ3I3H6fW1@vO+;WSlC{96`a?UGu!|(d4K(VVCyZ{Y53J0Jf81BnL-cYsn)4U4^FB8*^Yr+^C9VB6m>rfIY%G1?G z{hZn~3|q+Hdvq<9ZErCI{$aEu4JnWf$el2Mp$7D?NU|ak%*_wiYVd4VrfVqMvaOTl zc@n+!qItpGN91%Av-YXW@SpZ+k(1Cd& z2!yTfGnl?O!zVBrllbcSi5E6A}~c7c8|9i&r`%k3^HUR0YZYl(hT zD_IXJvWn8!eCGJ$ZNbzJADZ^X*N{X+dV8tPu5=@4R`>H=MTz64DKZ?E*3JJ@{k8dF z^(+R0%jbCYn$u-4OK+%lbeg%qWLlL4e=HJBd0k6v9&2^#t@>Nv16I-M3Cis#Q~SK8 zPp+#jr6FXq4%v^P@Mkv9epuX!ulDah2ehgeacZG13qgwH)ZEJ^;&VTxk!!wG6j*|# z3U?Vu*r5E~?awK7*<9qvGk8%$hQHZzNs}es$O9Vuh*K^>NRUf|o(~I`ap< zp`Ip~(u>tAC%c+%@#a+VClzh2*#88oV>AU0%OW415dVddG-+#*awimE>Y4!ptoQGI zn6no2c0$+XNCxs%;^mCPDaf#9+eptfIXbtufWSYklyt}U@cRp|sBe^AH#FEp8u1pm zOOlC?&-d4salde&T$^mNJ5hLP#nFS16`d>Rn*ED9zFUP%bI{k5t2Ezn3C#o?+f9gO7x&Eh*A5LXt^Lhw1D=g2pEGi&WpQ1OkM5bHMMzyG2C5b z7uq_i)VX__?L^dNPQiZc!I-{*RPvWLTD&lY;Oi^BjIHQ0NMRF|K({b&ob!hfwSV31 z;T&ny{NDtZ;*sSV2R~-0WW>-LL#+*af1tPGmpa&_(_D!Lh0kLcG@>bd<5a&=u&g?J z-S+kGeS3HMEu+`IXSA54aQ$m0_+q&lS2AI}6a{6_az?Tag6C6nYh9N=qn>ptl?n--PFce1NqmoU@=Mdw;$89L*5qh#* z*=MRO2PwVr#Pg>V+p<5pJMiX4@<@UTJjgkj0qowfiX$QOi5DY0%1gn`R^ACt_(L4$ zs{Y0UQwIy@ui~)kjRwO7KDm(*b7)CM_J7FKE^(Qbv-*BaB%fM{f3-1LN5ObS&| zEIpv?xKjm*Z{Q9!-mQa0)wWvm>R>wqt`%&jIlQ~)ev+uO)L3E=6vrGPNN7;{S%33}*=RWnHtuitSsg9Nu7v6UkyNiPEsn!^MYiZdqN`pmVmZhg)~>TF!M-rA^jqy# z*^7U)TYyHQc>ZVOqw-P|K7xLV9D^7S34JyWo@A^Ka`ERX3&pElLF;fXM2*7^3~IpZQ?k*bbof5IBxa> zjQDnE4(==K^&}Q-{if^_0oECymjck(Tc8+CYh-Qu%6k1E3uH%j((zlqay>5rmYJ{V z0T)0A{Cvp6e*g(zfU{nv;D}l400314Fh=m7ETB`IMJ3+@s-IGwT|I)8RYk3;k5VU0YYalS4wIRUhkl6xX>==-oNW1H79VVNX< zN_Y~6^PWoWLGHyeK9LaAu!Zv|AVcQ+7rIpBJ&zK9PyfCXjXq=99!xtD;=aldabE4m zRGXHm7e|8r-%o1})Yw>5mGHr{Y>uQn|N9`Y;O`(ofg?fw`;*9s6g)M$8hrTQ-++Z<2-m&;+Z7U& zO$7{-iI0I|Mm$-3MMiCpSO#*jzSk;hBMddRR1GDAgHeYdAslb zuLR}Wi6$*GUywTD9`F-)jU(hP+U(Bz!%f5GYj^kDI2p`vvEIFp!QX_1J6n=W-X;3q zP;wwN$B79BlY9-H`vvO9QtV`-&Un2daq)V3WM8s zvj56<_yf>~$VTof#6ui$k*QFl_}w$Gsl;TuX;lkn!mTo9|9s>tKfhY)#L&R5dq>w2 z`}DJhvU1w_*Xkr%tygrf97>*jW^<16{!ys>kk}@`5~2N8S0MJUQS1iy5HA@(ca%H- z+F82Z-?>IPMT^>0gb}`e+59Z*ZIjY3218{#3QB&TIDucp8|y!`2*~d^6@+#jrhl|( zh}i1Z)f(+A(;zlC?2p)KQLftGojyk1MJu2A_Q6NwEssJU;alVEl9j%=S06_?6ztK& z+H;1P=+=8ewFtb==CvQF5j}AjtEZayWIXXBB}d@z14Mzm2Cc$~5Ze{!h6tN|wK+4M zx$F}Siwq~eIphiX*-v^>n*E8pH~lan)qS|Ry&Lc3kwFoX>)9(ycWDFem~}L8(EqWo z)*dMDV>y18t)bAUiZ`crY*$`rcQ})OL zm$4)A6Gr$|3^p zQ*Wh;X)*2J3?hyR6#peFLKG3TTkk>I8KGJrHfR?}JCTXxWn!r%?x)wt}^8h=0~$2a4+zKk4AAz zVm61jk<0JcW zJ2I6&a;R2H#ZPtMBbE61(u1(0WQG=k41t@dK#nHM3Moym*qxB%WZ5HnJY_={eSi(V zL8QebiVPrZBxEKS36EtCe=N4f@S17Zx|&!WYfd~oBD;)HSXBIH|3orkb3PCt!p?b^Oc2bkigdG3QIv*8R^AdsLxRhDRMy8>`??Uqb$+y8F+XBW7g*{tf{$mHe-wiwRWT`DLkPV zL~KQ0DP?^w*n$5B;@tnuj*Kkc`VAZ*b+UH&0q}n_$fmY$!w0bh*->9#UupdpP9c2% zSTL+yL3p`3cC_L>96WuM1{_1UHh>YV@6l#asIm1~a($sIGl}n{=~|US!Lkd%fZSsM zAIb{yp8_B1V$6y+9IH-Cjw8!v)GyI~*yyqQJwGl#8OsE^oOt5DfOXuB+bI&X?!! zXpA6m!GNqH1bodK6a-!xhpYZnHRe0bYE;GRAGGIXJ)(Qxt9iME@Mz zEySXP^E+vWb|PO^be4t9+jau9n0ijS42IW82TqWD{+BXbvyZu(nxrs95TB9(dNrEb zhanQfl$!YJ$~*p!(_e&Y;MpWe;62MT*l|GrB=JZTOA+MQxJwb-?f77awFm?!#5#+P zhlVi#}RHEzHAZnl@5<3!03KWq$YS0!;q9USk zDEecaED>LCbpsK`-YQV&F9>)DeId{&z+mwr5*B^u#+%+mpupca{ZI-P2~J2)2i_y~ z_mwX2;kEY4oXLM9i=ceW>!d274nz*bRv}kx$9xYypNvTV&QrJsU`-O?y99H0m`+Z) zn2442(x+T9#ee_sa!};G6x)Eh9~^FiNO39_s>~=L5D-ALB#A~VL&mhfuMv_F4I7bF zTDXKf`qzykL@CMS8N!GXgNUIZA#&aa{4M+g3DNB>en7p%u{NqD>?o(xveXS3&c(RW*0(@rU;5hN)U*T$GesLH%NO&2F@Yku@W#{8x_n>U_TM! z;?fe++4#bW5iA&Y1`$se&;OK?(h5ej^G9&T(a@ohqyiC`|H2ss4^Q?*qRk#6cUoOa zsM*`+(s;w4Y!6_pApQfFA|wbNFl@F;CpZ~6(i1eeV%qrNCfPs;wxKz;xDsp_@th`h z-&=&O`QoZ45nox0zdAhOu-E5Mv_KycZm_xDhf4>u3*lw)qgl&=ExMJB;3K>%Pr+pB z+$5~|P4qVj>weG6rLUfnXU&v1KgwlwlwSJ+SAfjm0Z76A>i8Z)#>II2 zj%;ZK?0PJ>b794h&Brf=1%)kmuvx#m0Mi)`0vodD&m{&jhE;_6R(>ci_e`uh)Qh_Ird&kT;siWkAbOb7M-(=P$${4Wn! zE>HF~B=CyyR4LT0F@T3LB0Q`uAQh3r#f2cV52<)>mBQYf%ky_yidC2|f95o3bO=X! zw(^A9tL`cBj!7;PVm~H`6h;Eh?(6#kdRu=??A_w> zP$z&{e0@tnjCOlsTJyJ%BuD!v99a*4*#ai9w?W zV`~B2&%Vh^kWDpUdH(5rIFs38DYAq1>(T9R?pF?8X>Mc0?~tqM-~EHY>PDzvgNd*aURb^78r4l}P7WxP z!oQZb=q6s)+TYH8*!-}4F8kFt%DxEXa&oVjHKJzyn4|;wvw3$gtJ-H9)5h_4n{({F$@rX5^UyH+R-razqEKYK6vVb$A zt#;wPi^9rmRhcp0wy0wWQLtzqF;UdpzOM29@+g(1 z*>B!SjNUE2B3Cg^z0yzgw7*%E${x32KAJifb^vCDglq^zSsRGA3l0dd8ScVG+m`!{ zqM@GZ{&F{ZJl|6eudn7xEIR$CTGMfbRE{Ip^M|%#)lxB~ z*ym|+D-Ka-lM5Yyqc?xN&fO7-5?K6!f9bSCbh%?)Z(aVPQgXb|)tM#cQF(QTtPqeV z5u%^c))l-7)-$*s=gfZ1DJ}5;Su!SGDG{;D@13s8Pgh&G%A--S&$Uu4@3d?yxkPv} zgz-jhX?!_c;fc&SbcxbQb!VjdUdG?HlQPcqoM^(e>x;#n1jg?JOc7J;!*GGw4Y8ZA zl^6u4-s=2PR5b`tj18j4fT^4{Si`ye49ns=;v1AUPMfYI6vi#kj*pl;(e@e33G`Jj29c7Ney)iZCzpql!LNX8^=Jgw ztt6vLL$x7k4gHF*#OkO(;EhDu-4VusrDtc|-fw)|GsaiV8J22ykEVxF&wHD>iSM=GkJ}Ym{nW- zTF1%l@iSHTvyNXJRnHdmR*{aB(s9zhQBq-j)^29gVO?9U8AmgOACL`l6O~(bi_GKI zwHS{ic~xk-eAJ)7MgVnq3@(s7w@e@KT@zn9Vd zsKBx854bLuvoc}LSFddSn-2F?UhC+y$bOl8YZMn|TKa68Qz$X2DqyfOgsVkZU-Y2J zPo&dn_-}dFs*6Ys41rgO)Bwsmr|sbgYTdHjkfWrIk@oU`8E zG^*zfm`iu&OH0g$ZiFq7f=U6w>u7r>-8E&ElZ zCc(ab`Kf5MFi(ZjOP19Hu_n2LGsN-Wz;C<6L7qW)ZAe(N6iq2#h$7x~iB5yCs~I5? z#V7hj`UB15&Ax(3att6BepQg8mmiG$ZDPX2f-X`o z`Zj!&*(?U)0?B@U4pK1|j0g|kHh&@5$9kJO?f1%T`)3K)gvrIgHIMi|QYHfdk_6ET zfG@!PatjAX&R8Y&?Pm+)L3|{e&1WzDqu%yi_n^KBTF))K@ij1%konqH8!y)D@7Mp^ zJ$xn(cd;U|H*YA7#>Zn;`<%v8q4m;jy{r10;j>HJ`a5_KQGi1>{`R@GPlCC{Dn#Gd z2_(v6d<+o)YUGuWaQ{=!KCCTqUm7kvc1OMoJkZ;){0QVhRn)_^V;S6 zchgB9H#_>hCFl{=JHIFKcPCjOK#(jWBLMkh`30(QQJ;as!18OYyIQ*qyls-zQ&KzB zx|cHWzt z*;l~}J`a@C+CQ9XC7Kjh%fbWC8fCA&Ys>VDUiQfzU%nKLQ^Gm`FRlUY3q97+_4~k@ z_MzBvX$1^hbxgXP>!VBTB|60v**<<;%6+Wr{m-gWc11!6Rh^p15{jQ(B`?Z}ErV!Y zfhcW%){51D(ze16sr=>Ft=7Go*IN#XCf%HCo?J{Pwqx;c^-7=|=C})~JC-0y%ebMT zy9d0~VNu&5o5-iwMtg~n#!p0v*;pIA3f8YD=6@JV{zEM}cD7}mxda<@pIHCqo9LIxmk8LqVpq9jm;XswlJaVODE zZ&*n`B4%Y{QTXHN&Ry_0MliP3oM>bIc8dn%_eD7W^dPqy)n(DUr@iUi_n84&(Tf3* z43mtK1t>aC4Ze9wnfR(P=(DU$c0(x$hL5jV?X^RV`B`Q|SPQ8eOEM31E^cYpzW-l9@6X71R!qjV!h6 zae<=yp&n8DqmjRC&c5eLsu(LQ-OQyIiHqWJmty_ahMFxc+58;M)Ehj1zNDs9opzAr zu+u|H$jqrK-g=DaFwAwR!=U1D5eQeMQ%$l!d$8&?jf3|^J}tp;Her;hDoz^u-7Qxs zOO@R+_T|bjSGLgsEow0zYvoh^ccS>VmpX^YzMIX>sI7>p0S=jNcY(xjv>;ku3nNd(pD)N97z zHehmTt$T%oqwh0$!(JQe>obHpu#=B$5xzyb4~>JJ9~lsMw+P2O%r&#B*1pvKO7_Jj zB%1L7K8%wb?835|`4~VM`J`4|A9(wz$WUVY^r}DxodHodXJOw!3Eym^bLQ%2eYG{( zax|z;UyEXsA)l0rZ7DX|y1gQhgNltVGb+d)cz)gJ=pb8TV+g%{cJ1mDEqpA2q{`H8 zt&oXCEi^{-iHMLnqXMTGlHqA%T|OAk=RSB$-9-s@KZ+=#nnFQ@_VwjP>*y5AGfBkp zTIo`8(k|yKWxrNEb7Sib9&jF9cp1ohUavo(OH{if!aP2Z!On_hMXlY5@u%+n81yn&I~=)u^*R?RD)ZZD#P@*Xp_6YLU>_P=KIxU_)A{M1C9&@r5%vH-6Pf zB6_8vGyink8a*1=d5(~!SX`Q37;t^AvKWxGpDR&vE!E9a{^(en9vFnI{R9_Cm+>*9HjwUl5|WTd6n1cC zfj}v5NSc~^ogKkcKD#IJBMfEu0s#caY{~jCt)%5yqk}iWQ??yiEZYgu?;F3gC-?Cy3L`@r5kZRF%jE$`V0I9`+`ZwN z&e9D*!?x96X6?h1g4=%5)w?K6=ra{x>a%aAXXVHHBj&MBDSA|ErMzE0)snmV|HPGb zy4MVHq;id^R3JX^JZ#h2zu$DZbx>YH1%YUugj^r)T z>IgiUeDDQ~1bDK59}1J&NZiRUX5QWG^HSvW>tfC6$4IDxcJJMB(P&J=3=) zSuZu~h$5#H138wmv;YhsM<97*JO`klm=8!pld}Y;nMLd1v zU8oQ*yn1SUsd;v+eCKzfLc0xd(R{8}Ct=R3j+0t!$5_DnF@Um35OqipJ?w0s=F?1L zs*iw+a?kTJb!4*fFYKOw+B6!2c#6;iS66N&^{}?vnba_M!iXQrzjC*hxj0RMhIC4OD2DH_snxM9i(^e|~IH#fHPo@d&wjdbg1B%~b57w7_ij zSh9pS^HBJ?&IKwTkFBC|F7dAEU zI?$5=-Dkzc9Y1wVeR<-ZW4#Ouq;9v0FpB!A`uHayNe*Mb9J#)(cv4mh&1v*Dy=Vjy zpQa%5_svEVwg^pfp0vyJXSy{JNLG`3TP^}7Bmc+ZI}-5?B7oKzp7>3GwS8Jl)!~?BFsa! zlHd;%856hO^9oxfqbYf}8qLX4SMih0@09WPH~yH=etGyIh}G>Zg~B0`_{&Z1zY4U! zJkxLc?q*rT>k^j$#G=oR(jX3|>rrWfN;IsK_(RqGDGZoc+p{TepL3XMkg5M-f$rYk z_`Y9b!(D+k&|O=eD30grzmZu9{SOxarL+h~L_*vhgl<SzJGvr2|j8vVj8 zqugo^8VWhum2F5+NFv&jC-VHOI-`RNG5K)?1G5xaWOPR*Ilv05G?_^eDVKEnK z@Gp$Ky<%|d*lCTr?SD9kDhW4v2pL*!vlMh$s_9|nh@by(&)r_?LgdgO3?&{F`4b|* zrSM;Z04Fc$`!w#nWjZ{Aov<2D`&;e4(C=SKY0AAR^_a`G$dAt`D8=dd`>c5iy;-5^rY3CzagdmsVFI*hYvttsH zod1Z}A)n0UEBR&#ESVbm3=#2_DsnVHyZ9K50z*utkJpYkf&Q_DmtSM$SflMzmZUlJ z^Ea>x0zajvpGP7XUanL1JsON-;GTHbgz?2;|DJ_e=|e<;lZI&F9qHvT{EaU372kTA zS~6i@o_aEbertF=`it#3N$Q%NZ?GYo0-TY(#Y={IbGBYo=*!4JoNyKo zTK#*V>Zj^5slbDZ@$~w0+TKi=La%$*VuNKXX63Id%v*iMFQJxf#!}sP#o`)y;y#z0 zS*7y%tsoKq@4Si^@7!{cC5+!)V|IXV=;Y;O+Ur%vx&s@~fBMPT`c%92#w+CK?t|Py zwM@6BC7GtfuZ=H3i!YJ3l~w(^ z!i+Lq@SVcC(Pe%cPmweEpH)L!0&#sSgjgPgS%dKdJXRbK1K2GFD_%c1>gx=zs^?}51qE7wK;HWQ*3|8CJoBT=Imrq9R^*;)sU4w{gV2!)0(sRswHf^lks!CU9|lei z=l4x^{7!iLt@zy)(e?tCT}CxBHAqguXxjpBBPiXf{XIVIrIpD#sn@w_S6R~p&vdlI zO$dP>e=@UKM~84Qw(^}RrwNETeNg))>oZMe#8jSP8nHdprPwmJ29kRWcb zkZ(jXN4l@F0I=#9!0MB8PtpjO|lK zOBuo%@*eRZCK2R*LT6ON+d5n8*O^Z{XsCp}L*>GMS6fwoLY_s15FsF~*}dS#OWY9t zHxe$lzV?FQ-(KrnzabE+Sh76cp_g1aJBB|R`nEI#QYYJMzt@kDF2XhsjBh{*m|k4^h3lu@>@`I6HsV`H(jo zht=*&GN%p^7I!yr-bC8F>F_MxtV1dntG&*+?VFzR>uv9i&bicj@m55SgfctWN&=1r zxn_8`-=Pr3|0XmlATvi#m+D7sADBXTCb39N=!u$uCKz+KSX33A{md2Hqm$znRMz#O z(n%S7i;vGxgs#H1su9_;N5*9NQOn2-rKu#dKJTvsr0?JH7mu$1%fx#vqrEkZh^2Lt z^D5+>B7yfR^D@LQ0@z;~u0cI9bd(0xnbUM%O?r578P{di>_v(Dk$j}poR!8xm4zZ> z!`}FG_)?4clG(IIw?=Vo_9Ra0a}7S5xsphi3+n03i6YR}njj?i_`3@Q-?fV&{RRo` zte(Y;^nqzFM4NRWUNPm4ZG`hf|axW)Kp`3BSrr1W;+X&p#?un-;vmMU}QoOFf3mrjq{I3HC}y#1nCQp z8N#%5h$c?hwPtpE0v&6jgTwQO%(sKtFFM~LHP+h70wPJ{IE5AMUCwmhWT+yZe$|VD zpICDy3G^k6HEKNAz{@Bgu}@zO_cN4k4Bp(&Auzk@a{Uoad6xDguv^4g&f|Lu*74S2 z?odmeo=KLbXYG>CV6Y+)t6AN$7obp33X)0`PG50d?jDU;-ql?f+5DbytJ|Zvw3a~( z2`%bie?Fuj4ZXRFZQ7m~F`-&4>S19!|Mn~{LFl!QEy|srzz>T3cpoIhgr+uf>qEJ_ zO`-GE&A9&RgK~z9q#jm{#ko}1GV`@gC`ocQAGZ2)$DSotC*7)yEJPjne%?u|9eHuF znrTCP<+mvJc9vquHk&k7=C?r03sZ%U3@{6bLN)F_8^qY#; zl#~`Dran!*yh8_7wp0zT8!@)Fx)&g<_f)gd`7MJp8 zR9K3>E!u^H`W?K^voNy#qF}LK$)gc6A}<=@NgHxKWOIMW-N#q9t`!8CsWeYEN`A$RFV_Qs=)x;p_h@G7t;+eQqttfXy=n`q7?fV< zouIz_Id)oc6FM{jm_9Sr$Iy?x*$3|YLsq(b?d!88=ugZqIsth2%lMlT_g%{e6Didt zJd?g4*C)?!t0nsB>&pHa>fiKxT3t9JQ~sJt8$4hV+Sm-A#tfAUxtOT(p|rhS-6ADK zJ_Ai365mzv>Y~~>+3$UNQDn1fljGP@zTA~DpsQf_tZ0=V`Q$Nt zh|s6}RhJeHMN(TO(RuXGr!<&jkwN>HdBT~FzlYvzj4XFAk*xallX4i>`Cs6yK$_&{Hf<8b4GKF?f)ik(AK{-BOG2;K{l0G`9qnf&H;@9c$E{Ys<$E+WnY9`m;^kl-cCrb&& ziRE{ZeJy|bfi^Iw;;ATEKa2VwbLyU6i$6Nm@ev&-`gn~BWqB4nP5nHw!L-m|5`QG9 zCY&=+Mmr&rSk~a4@=)^IP{(dD^5^wh!loWE9)J2`I$dtdOPA*RJd<*eDX$;C)J+pk zqEfpSK}(KBat}DW^@$_;G|!S|=2P_>RR2Yew{JUG6_f!TtjK;GywxsIxM_PV+mCcE z#ICE-gdrW&gFj}5Cm12Ng|T2_G+dLdGDNz<=;~64A;iFPxyRr5J?!{s6E|{8yRhKZ z&m23)phz>-9snrl9OEdzP*mCaPbsH~ywokZ^J18(caA=P)$BRgQ)>B8Vwu%ux$p)) z+UJqyF?;2oR}#1QSSr`_U!HFfT2Z{mCaOcVn_{RYp9WqV;NO(~H7yoe%0w{Z%&DO6WSLtgSwU0-H2A4XU+)Ej((g z)UpZ_@;EkMx-X?X5T2x{>85vte`>&Y$o-{R9l`$)1??2Gjhln-9elqJ`nETq-`IW; z&kx`?>h6062BEst;ZS5eCP2i_$HW1ygviFBiyz7@L-NHli1{*Bey%#YJL|Y>)}+4m z++S{O?)mtk?J*2+WN0~G9+Y&LZ(g|_Pu^&&vac6C#k{b2(=<~voMU*LO$Qz**d{mm z8nzI%7_d>@iSF|D;r_A&a-!3NhTV21X!!4mZ-0i*O;_(=G3MhE7%TkuYVZVx>?&%nJ~S94;L@%iGEq!xIhg83^r!{}qD#~I zbWk*nN2loJ#JJx90K9#CdD=-j&T6%!qs%rVnP zDE1cbuf$t7q48)Bp9^48J(-Og%<>|{LPl{OLIXX?+DA1?!AQpEcM!5J-T~?PCb>C= z@UfyS9}*#uB8V8X=JYI2T#!##mj2*MspuQEw@Ha;xB_^On#ho4j9v5EMUNC|Q-%It zq7=IjFJLz4rMCvyRB!Zm%2)pI=v`k->;eq7T>rvQUq2l!xiU^9V4~l9hq+`R9*bhp z7JriF!*Y&8@XP`C%M~3ic>Qe$my`4EEr9PnQ>l1zJ zuewv)v*nDJD8W;2c>`rPVCsqy2bz+Aqy#A^Kx0<&*JbU9{*DCEWkS$~Abu09N_o84 zc<;pYjFw0KdmU0@Pp;A49F^TjI_N7hcIBe-J-;0Wc)KN9CygpAyW|eR)<@Co!Md(h+&6NR zfPHBWQ{Rl<(ou~N>Udgitn%ct)Gf?HK65xViAy%2GA}^Nj_r+v!F{x%q=w^O>Q!tf zuVUCHbJbj*zaly#e+TvhVPQZ&glF-4c&*|T25(dkiRNMwbEqq7{5j5WJ)LL8bxm7c zv#YxNaz9v4>~vk<9AX=+w@QHI%8@>2gRe(4?h%tC1RDPB>Mdx)ZaX7Mg?j@62ySVNb>o=42V98njN=mq&|P?))5 zSI&JcPI&Cv^P#$*$1jJ7KFj^b6T_I&`Eaj7C3^RelbH`@n0&M5LWr`qx-I=4Q`+;5vwP(r{=Fhco(cO7nh@qylh&3C8(es(&Ir`?i9NkHU=UfoNz7 z$o8>Z@UWNYJx$H~3M=g^bz<#Frek`O66z}ZhzAvU5)X0Q%X7=7`J^hj2_qqc{%Jwr-hl6& zFE0KtZ+AB_-SRE3=2O{CVj*JbAcod>U(hOZP0n(L4M!k!<{GcJ_tuP}KYMz3yo`>& zBPCl_&I>OUSQ{@=aB!2{(SoN| zLPq?Qq4AH+ywbigYPqx%r7ENA%Y#cJAGYO;e&t{yo+Y2^JC{F6V8xf;Q*M_UgF}H? zXoH!Ek@YWo@WCT|P;c8o=p<2pp%*=WG1eWKMX~EpE4ICm{^R*(EpOrED4Z5vYk+p< z=PQ7=-tfNQGglgs3MtEB|MTh$w}2g{v;~_er*dnMk)E9f@Pbsa)_JpihMiF(rPQA;C}7Lnlhcc}nS$!ZE)R;>su$h^b7)DjD+yRPXtcOR zP-pPMk@FyVuXsT8w+avvZ?%K&)1)=aSWKm*H^>P_&T0 zbnFEKh+?tKr>DcuN)wI@)UI!OG9oP_s8_xPjl}H&hu?C5pk+NlJ|Xr2s6)HyefdvX z`QMq1#z%!xD8+ynsM&|P__xg|t}k%}ZtKXRo;Vw~Guqf_@AEXi-MNRTaKK##zEE9t ze}JbWoJiA5{wV|QTAubKvsOSHN`_f4vGR{^G_F<3oitVgFi{NfyjhLO~osSOvP~fqSqxX z@}0bH6dr4SK)r~De%pF3*`dF$GaB4Pyd$^0ok=x&s@_98(Q&XMu9lF$V>IR7dm9kZ~8H1OAQI4u5e=kpk39`qyH^*ycp##reQO%T~!i@ z4coHr)W+rhMbzl$TaC{ACDik)<-AqaoVxXdHm+4PHC@g9;3+iS_Yo<$>T;;IphbZ4 zwRWuR6}yn;n##YF>XE89$A~^ECnV>XM5vY@1hZHJ-rXCCKPwxiob02-N%v(%GX>=G zVhJCv%jEiB(nYd)+ZEKKU{^luM`K7+Fu6@RsiCuLu^zo+7qgwr^W#pPY-0a17Ompa zn2G}N^)*F9vvQIRDe7&1Isz^WS+Q7gd6G^4ElZBcEn98am?_L6{c?o>L@2~heyI7) zSK#W`ozto3-^wJy6ebU7op4k?lC!Nmm;`im*$EeW(8j za|~esGw)b`q-cWuNO};QF#RH^uoOPyBtlk5tYRS02zl|Q-i|RQh+u8@CgI!2qOh2c zTh%XiEMpnJ^O3k8yix?AgiMzj&4C(Z-&3b{Eh3sM)l5!Xo`9#r$%0m~MU3Ac9PuEilp4!hzWdCvt?eg6Cadw$Px3oiMudM zxsxW|+A|XKr_Xmvd@TUkj}dr36#2IDMyE$oqdon(tm32PQcKLAcJgK15jxxtY!QhA zZi3>6`OcUq*qxqU7}x!1z)eM;haT|2vD99^!+baWYNm;g>o8X2CDG=5ep7bRlP`rK zR0wtmU5uuezWbf!pDiQ7COOxuH^#d5rt7k0DI1o^0zyGjY=uVfgcr~@A2A6)HOZ+@ zzJGlDgS#+!ZSaDxgz5L=#a)zO>w&~fz_V|%B6!{-opB*-GkWD0FJh?sqeqegBp_~} zt|TXKkD7X;50{!cHVe2rds7?ERvfa7wB02iNo6ygT|k4MBFeh61L`o_sPa634fHoW zSTyqB32d6ayt~&78s-^>vjt8fC5A@xDkQ?22kli8cYnqPB#Z9nAXi)UD@H6=BbDW-{gMG8{4u(EJK^W`@78KH z<*H6<@(Hhkr0ir$rPdzcCikZ;V!ksne{{Uf!&~%dr8idU&)}yQsa&U&qKQ*P<N41jLR0M?eUSa_fHw4XB$l1fvjMT zq{z1!Gk<%FR>#!c$?jb!_g`^#Po1r3auh%BpZ{_FyXQ`WWecq^EkWyLPud~4g3+jK z#baj&(q5#!nEak3XbYE*-Q85k=aFk$MLEv%4ruN~%Gq4RrOj~ZI-DXdnpPB5(upAn z(|X4=Ezl*?m5s~lVzwvUHC9Ek6;D8#z`WnQ<)ezzL3B?a9Zn=Ap7=*&kMDuU!#s$- z1x)ElI9Ny(<=KASP%fsh$!aPemySz=xfy-XPY1ouv2|3PXw=_LT;5w^X=HvW0 z>!EaGpU#d>hEPX(xsE=l&ci*aiRVXO9*!RVszghvv&^+F(76#D-yWD`$i;R7-r29{ zEA*L3e_>(x2b!SQp>|wRrGZs*n{Ju9#DQFAI8jd8?r!KiN98mkB zbgOB0G=$sSB2CS3K0iF-7%)Cu>3ht?zg$crJSrmQ!hO?q+#4r=-!xWD2beClFVE_6 z5NyFTS>Hn5w{XWYutB_4$tUXz8!i_B{*b%X<>s*L)M>E|%G zj8M!kw7qUl^cKu5y#S^wt3w@bA%G6b8W%itPQuVHslxw#slOmyx3vuw&1g@G*_X~! zeXu#&<+4Ge`G5lr(6|AtQd1$n+M&>uy5X28)64Ms;_yHco`t9u8&i=WJ>m;MP3yMf z?7b;ZFjYLt#hQ9lbF152kE5LteC^sFR}Y`~dm7&LQ4;&+XBCLd7um<;B z!95PI1`k}apI@s(!j@>mOyvrqE>`bXUj6#|N9ow7JgOCfxTK;=SK&QRW6)qhY++95 z{r-*{D%UL($wu}X+$}VdLtpZg!VR(N4)kfGXuiTRlOb?v8?M7*Xd!C5{dVVWP-|0o zF2BAp4;^u4&&tJtRiOF3BKn*Y;!Mo0wfCFW@=0I{Xup}tGMlo32EO5XT`tq~j+%{l z_fPH0?Y>%3+v2Nc!^%W3*To%4jlOixO~N3oh`&`Q0{!I+sK>{?#piG7bl2|vGxOkY z!LLDsxFPrjO#H%@!jP6sL8Bctl$a&^Hz!sXthQPCED;y?` zXDVJ&H#At}qVF|FdaaRAY9cP;B?!PHO3{>!D$-P+pMR*b>Ql^wqQ=O5PW!ystG&Zv z&=Lsec*kbl>`lZnsf$56oZ0;dO; z0nO|nhVMkc_-uYaHTR7oW$Mq|%O@oyhBT4+nXQ^k9M8jZgdeTGpvL#se<70Eg_kAt z7nPmw)d(QykG2}+ykCk8#~!dq+{Z`U2&6TaOjtvI7S*Wm!SaSV%93NxC~LPNv%Z|vdX>A#u7&$G0uWB<>6}gXRcb85i>9kGo6;B3pyNi2u#hN^jwOwp*i2o8|gzcW^7(?q((A_sL|HoE?(z*9e^CT~h@~<8^RHP$`?Yx?g#owl*!@sc- z$MGr__xVNLl@9zmkA*R$ zAL}nza|D+!eNWILQZ7Y)gZMaCViY;kq%-M-lvPQC04D(-;V-L zme8BXl}81exdw_!o$pE0NT;v; zpuR^#TV5zJ%!ei~zim$JJ|I$3f+!6`cXu}k(%s#qAR&^{AQI9Yf^>tD(%sz> z(j^RC{;s*d-p^m~yu9Br#~ia~*n3}VU2Cn+dG1JR=HlMvA7o?JoLg$I9E9*L24u;Q z-dc_iI6TkKiC#cf%FJy5T(kFj;<>##l-GWb62%Kl?PET*O@Xj<)-76eV{cjHytp;d zj~pN-29zK8=Ixb$LgukP_Y&}2$5KUbkQ=?wsP9q;neOfTz(~(%5bE)sT`-=>)WVHi z5L^>nl;8J{JAWk0H1l|yZ1ZTWO;0G<;3@k1+rv6y7}~YP@BtaOSd$UMOQ>{F?i8AUNr&a-8rL!2J*e$m0jH%*5`V6LGc{JODe&qW%m%X z>KMmQOKU*boM22r)M%A@IMtiUok-MFZc{-t83%m(i6ll8+nP|P>y<4JA9kJ6Bd3PFQ2jnfn_eA<6 z;csuC5_cftbU2*FONXFU^{MdgS_FxKMORK86Z1Q0C4)~>BP)f=fqe5F`&WBGseK@8 z0!t4Qp=)E|X_)DChmhuaPuU`crkREbtHZit2p z^{v$k!_vx_1I{h<%pN!Lr`&14t!SMu!0WmZTjMpLP zN$L8NwT%fSHZve6hizf2^-)e$&z5h`=Fb|QjTS338#JSUy(Xun*(Y|EYgB{p-U%=q z_g#?Yb=3l2k-Tr7xCHj=7%`1A62jhS(g(%%ePYB;7L-|xqnvcMfyL0WW`1G zdi_8;wbcesQ2gxi&1omO%V4Hr=gK%9${Y+&g-z;Y5ND2W60St=_NEKyr%P8$R7ZDu zbP-8usm4J55QHV^7p~vOWlKrvMTaqA`T>4arsdi|0LFY^;N0S>u&w(b>7X}BXv_}$ zfQE|YfA1&6v5t=!kwjI*OLMQ#m@5N&qGMl#8Bz6V^-V$+;(2#v;I|)Tu@m+vBUWM z!dtK32P(^~H|Jpa*k^$!znHGuN`_OCHu9-w2Lb`vtB1t(b+YmIErNi_ zG^)mjFSNG+CqK$T_;Y{e4wdDA6iMm~?GHOV#RABbD$4Jh39xd$FwQzhOofjJdVLnO zOE3d=EIFv@jaRfj!hQ{Wv8Pbe0KSxov6b>>lF((x^vuyB|Ps;Z2 zs!dW;LfI5TXl9!9`;oz%`;r>8A=Z4FRID!8gPwrwn2e}ZdACNw#`m4lu+ldc7g?fMEM?YIDcE-Rh5Y z!|Ng{TGQK~ziv`R6BfG`E zXu|1YJKN_fE1uwpM59&(ami#eY|g_nPa&n+c^qyIYNHxA;wfjSup+BxG+nmp4OS7C zYsgRY*!;bTgwy3#IK$Z?Eg+T%<WhXt>@?h2rqf(jwbGJLrh%uocHimm7utboDF#$>hf?%>Zd!gr|yq*rJ?2 zhcebceL3DK8(k#dpiP%;_$1zmqozG4jUMIBZG%QJo!@xpl!Y-xH!)$P>oI~13?;UC z&iTDr=mVQm4{@U}w7!sE@Tlcme_(=M=VJu4fEHP$iRhfPZa;Us8UH=a3Pe7T)o^h6 zy!MEP^)5co5tH0yf!LX-Xl4r`MEUXx5PC8p1&CW!LgPPmGU-ICJ>;S>4{S!wQZJ%M ze$lq6(_Wz=R9Fu{2W62jo`0POq645SYWpz8e6}Bpn=3yArr(>-aMS|+VXpN}!lcq$ z$ZMNDHyH%)C_aHrh8mSCPn@xcrF^*P|D5zPr#}oIrzABC38zc!&XH}~0y*0{S0f>w zPvJK|&gZJHjzT(pam$Qo|Tk!Z}bb=*Xi;nDcnxHP}E^n9Bv#HvkDctJ%3Q!_A;RJ|6$04 z&%rEypw%F5Ppd+LI%2`YrX%A$*3RTEcY`MrbaUS38vUw>~CbOmQ zN^W+OzZIMO>7i>=4UuoJ7ciO@R78PQAFn2hc4BeDCG{rd#G1@F9Ey#c|7f@*Ek&2; zNHQ*~g;zk?jb(m$S*l8>-W)lg%EuFMVg4HwuY}VCJn!ZQ59O}t-P^>yi*o_@V{m79 zVirsnnx?<*!|VJrC+*u&*q>JKL&6h^eR@OS(pMDctXm9Z`rf)y{K%0si!MF{)yX4& z+%%U2I4WP@F~6fJ|B%zGf- z1k;5-Z97m=ew7CMH3hr~EyYNNGOx-9{xzu`n*kMAEEq6&860K0i^a(6{PocEHfyp2 z2x^KoGNr2qu4A-Cu$m@GF~N)(WlMvYzdd)@BP*JRw^TiFf!8*<;NOl%QcRVPxu~5E zuB;cK=bSBr0NI9dWpokIH>XIUbs%w486h4`bogw1x1!i|IRRSr!k4OrL&#YZ`Gr)2 zuC=@vbigS_z%$Orvw(vPHa`RA3*VZ26xVV&CvoMRm6|)W9*V1fq70!f6lu->+mfBBb+w9xv+>H~T+9bf9ii5b!y6^Z7Dc$<& z?QO9eeLWX?SBek$w1C3O_@xDKZMD0o*BZ(~SO_DqV5v*RZD)N6@1EVAn1!1ZuneGg zj1%2fDx$(}gwz-ML;_t$}$d z+=Mg*`&RcyJ`T>^c*8I(PaXunfyv4G^bDlu+?P{?w&Q(9H_kTjWGOXg<;DX z>7UVX?YxWU0DM23D>pUpQEEE!YM?Rxq2-FXM%m<6Z7{R;9a z51efn9cO^P$8pV6IN9#SvfvpT3yZ2oD{7(j;ug!x$jT&Hd1%1);-v*yC6GqUBYIM~ zkDQKCxqjHLzV%9Sch`3RmNb#R%6|z4xHV0RLMT9_3NBR&SH{xwXdY&rngCznJBK9U z(La0RjSU*C4Zj$mbluUSj&einz9-%3To)PeL+?iSEd*>vA`oe+)iIT`e%K^mw?U6y zl&-+2Wl<||=vg<--iVE!A%Ri7W`+~q56+~AKO4%Xemq@b-}+%M|EbEOfBno?%wq_Z z6H6^{2PsrXP4bPkXUExmI5&l*Ty!5waZ02%jZEY_k`2|s+qK}Nr~co0Q3HNK+igBs zo?f$MD+m@*EZ{r!P_}J%0sa_Qo$5-yztXqo4b!{gSFD)I z?blWhab3}!z()#0*f&T7`keNtk+)H#fXp9QdXy<&pv zAauD$`BuF7cZ>+6Kl`%|x`+`l|BCyr#^E$)QdC^b7l8?FSN$;aJ~KLHT)iNC3c~3_ z&XA}viuz!kg^9r>E!O8nIsKim6O!2GzK0=cB>3p+ho>6wrV{#GEpOr?E1KAsRWyY*b@Nbc*KluU2#SY)N17STQpvW{{B z0-I@F*cLMK%cH|rrV7&XsHwmZj;9+($Bu8x7Sg;l0zg^Jn9e*as%#cY%Zs-NZVyz& zRmpF-1Z8Q5P@skgGd7(P2 zZeke>9KdYwSHwJb+|Wsk7j6atZ^D8Z_4yh}GFCk{=cRBmuGAjC>BUynFS%sOnI=+TQtB5D8Pp!C zxDm~l8lla;O36gk)nJC)|2n2RLV|wWPoN526L(RHMCj{R}??j zbhKwjK0G1^yNUf^voLb?Jyb`M z2!oI_)@)-P)%Y8|r1mz>D3HmAB#LW$VdL`zB&avKj-DoHshL+~Vgbgj(!y3oxFSH z6r3?0EaI*dn6mb{RJaec?jI!O4fj@Wz4@NIN_4)l%`XStXbVTC;CUo3fO-Q-scKN5 zfWwC6R8zbpawS)K{o@2KiXr5@Pj44Dwd|^)YW4uEuD%zKTrP@dmbT02Mz08Hd>zK^ zKhzZSj{e{;REvW17xJ}}+PrqcA)%g1n;J&ad;8brP;wS4>n{)N__+}Rf$%JEAEe=A zP<=b#0)C<+PNat~rNnxovp|9S40ZQfFkng`9I32dDnPO{K-|&@P2uR-&UNlaL7Q45 z(j&EP7K@ir?7++s+9bJcYEgV-sSvG-{89~Jxk#PXZlSh_g(qh7J}2^YXDT0rjHYMD zH9fF{JgiSHLbjUYKR1^8mewIjswc5ng#UI}s0~kK)~CVW!Go{wh65K=hEd;!07`mp z#oofJQk>U8&)@33@>_v5H2E@WO2GV+>wJC)_+i2E>9q3$wE528-SD>nPy z3q;|wQ?OHbpYH)afIZMD4L}^92?nN;!;AlvTu^5N?D&FbaABa zL*ZvAYsZH$t07W50&f{WL(|un{|cukqOo{Sux^>u4sTVtm~fqaxyCpk#1GsLC_NBlWG-f?BpVW*HW8`J6N;Zddq!BcaK<=@ zoC`4N`4z~*M;!a}+{<*f0Rxq2w3ZZI`yf3@eW@@*2Wz)l_2V5SyH6DknC!f$M(!-6 z$pYN0>K3$RdL`AHc;+HITqfLmTF$o&*PR2!IRa%$QDOye(R8&^xd7ozyM?$ny=Y>v6bAu^;|zLV$^Q`!4tEFki~zne*RZOhk?ugX?XB~>lhLrfy?hH{N;9t? zk{liAmkY9Dqx`W;5T$*5*Yg&7l6{A)iwog=TFzUl9`$M%v=9({mioQlwNp*-y%7(f z3kUZI(TOJAO~3Rh=@rT75y*vT(v-cevl9)JQO=&b3jHE0|4K&m&VsM4Q;tzli)2z} ziU_j`No&$x@|9lGj-#qznOp$#=;C`U;2Yjgu)$C17@|7x%%wURs|Vj$CSGkcklz6# zozB4WR<7%%n+)-Z%K(VNkD7MQt2v7$OViblQ)q!zs<6SMCpk};QFpk>4#ri%a+Bp< zH0L)L&bv(Slbd=0yg+)Mf2o7T|3%$-pRX&dO=pNn%$5>w!Up5%l=4E)6qLR1TG~V1iFggveqVe-qhpPZn?I&&Bt6}pr+=+xBb9=CG+#6R z@g&b+8e^djAM8g6@xA5yBm|znNoBZdmgq!iv>!9?X^a_$%-r@u%+FqX$e{k^nP(4s ze`>w6oENirW>oLe?K6t2Lfo7ij5ZduCZ0-Jea_pKsJNhq5*;nYOs8Lg1r9yu{XfUg zCk;)OUxE5%D!ccio9X@_n|axS-(@yCE1H zU-BTYg9MxO&jwkHy{T*?N4>cSf=hz1wgB@rF2{B?NR^RmN8&WL{?Rx>lUm>$O35p| z-(qAVuocfwJm~=RZ9G1Fw#DDK^Wa)ggnErfbyy=xk_^f%aouiOUD@gA+Tr2xA01 zK3}cnZFtL-phae?n%3D`ypDTI%8$OC9UtJdh3) z(*MXckYdRL!@)dnW-NKH7PZBF*1pgwq*1MA+&;-I1hHor6W4!OT^5B06N^=nCtHcS z<2_pu>NGv|-?)TsYmUOq3cH&ZW#*{@3w6|f%fH1pejvn>%V_HKmYatq){{*EEESSQ z?cD5UCm&$VAK$sGh)n-$AIDWfBrREy0(@HkS!~vJK#420W$9$;33io+$6nz-JRd0I z5+_8dEvw=z4k7;hC(ZXKO}2;pISCg)QA|;`CreM%nb)-u`dC*4Av?Vb=C%oQt;c*W zp5%oiCdEYWGlVQGn@8-!*w6(y^%~^dPM41gH45;dI>=8b5q`72&A*`e^I16*Ni94# z*sT(!aq2VNR_BkiD!trox%jWnMlQ~Lg4KdN4>?YuvwaehhPnuhVbwa_=`P@;^_Pc5 zJPl8J=%NRj59jNoR;5mrRHuYM0Z%ChAkJjcRSF*s1tpUzFw_s4#<2}4aQZ;!`r(Pm zCXTrd`?w>DUb#7_Oj6QiyG2qs45j|jwX2HHDB!86$(BBJ%-W*JPnQW$^bFzvt?sBx zkyOp|idPJ-5ZBwfFL#Pzz>0)nndfRPc%h#~?ZEVg@ZORz%Y)xj}1?2M_ zXXQT;ALDHX*IKgLJA)Es&xV}m#ejfBU6Miui^^Z~>-Uhid#V{q|H!$g3xbv6vh_>A zWT&(yzibD;m?R6Sylw99vdHJ(42r{oBvk}r*=SWFbsNQP zB?4d{*2rY!`Pb}NQ5u*Xb6eIuj^(|dM!&mKVB4~I-p&9OZz-ArayK+mZsL*3p-1Z0 z^T5-->?&$CNtf}okT>y^pB)sf3Qm>N?+SJ6-vb~a*{G#|#U8@ z$d8jJc9Sgl2#nCrLnt`4GTXe_?y#o~;MbUtY8a?Ij#D^Z=Vszsx!-V;@$HORfwkr+ zvw1@_y^ClS@yxa5f!8CJj<&nvuM7X|BWbJ<8uAHLtDrD>CQy(6WY(n?!MqMu%nu$(WsKA6g56eN zJ16ADxw9d^2(CIHqYm_1-Rm;%g17%9lGWKyw3XMNdE0CpwbZ^nw1OZ^P@UBVRoy;k zL}&8qN{YCij!7`tvu(q9wP%L|>x49w(C5DIAvNrY&m0X051gRcdPY>|V13H}bgYP3 z3oDABN)ZC4MK6a7S9H3hf3Y@aI;Ij?O-40l3%HLe2=qPtXnFs>su+C(u9-zxY&S^d z=@!JMfPLTE9e?<|-0T~=pQ;Dms3KURH#WM?0T?W~% zwZCOPDo=6a;JS<(ijJtt32lWo?=Rkdo4vVMV79Zr^P;=7VE(qR&-R1lScL2csZrtk zOZH7>0XU*LJ6+t0=K3;$lMQ9_Zq`JJr_3NE0(@qt@de~8z%BD3fEb>=8ZBWD0D2kH~(CIqIJY+;8eJhh`ftL zhN)Nb*vnaTI^GQ z51)zqo%z#ckvApm8!4JmXTB=p*1|%D#=^D}1he5Yfy#@inxUq756LTK$Qj%xzaJ41 z;(esm!xc#`QVktXca|Y{>W8R|G`HSt2`>A@=O5BIR^N&aYBe;IYfd=pL#y0dx9nKBe z_1yV}uHDmGN$Z#VjO*UrFT46G!C5I~FU@a9c`fQ~D;DOvyfb%K&!ps;8P&#`w(sC+ zOcA8fNKN+_6XO3W!|ZhXRbs;6t;_ZIgHR#gQ;oVm zW3fl1Yii#RO|e{}1f;eMI4$+ZrS?sSi*t(aCZi9ZZQ}f1%gdYYo6TDm?wILJ7d#`p zMNTS{7IZ&u+2J>Py;;4tQs*(WlS(IN`6PpUX|7Y+yv|>2X}vQWapRl&VUbAdZ>8lG z(fsBHv-963+_f&!_iY}B@uQ?<2J%WNB%XA`*rU{NH6O( zv8m$SpN8x3kN#rmZ?Z0mH#z3Fdu2*k_g5F*&v<(0xY%c&*41M6KiM8VemHjhaj$x> zmvzEm{B`tUVtJqYVS8|Xb#X7d#mcjguv`?>zv!EN`u@xE!H z$bS9BjOo59q1CqbnQV4x`1rB1rZI7uvXjC0ua{B@1^fIRsXL>@_cITuC|&n8QTJQb zb*4XaV)xQ+5^htBM-1PPZHjaR@-kPdh!2bSG?8i)J#(881&Citqaq(3( z1WQHYn;TDVHRtP;PupRqG!2W|7+Nzy=Hol; zKA+sJd2xTXsyNv5u-I|aiRsk*&{*YX>@sYY [!WARNING|style:flat] -> 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 **unique values**. + +In one operation, you can choose any two nodes **at the same level** and swap their values. + +Return the minimum number of operations needed to make the values at each level sorted in a **strictly increasing order**. + +The **level** of a node is the number of edges along the path between it and the root node. + +**Example 1:** -**Example 1:** +![example1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,4,3,7,6,8,5,null,null,null,null,9,null,10] +Output: 3 +Explanation: +- Swap 4 and 3. The 2nd level becomes [3,4]. +- Swap 7 and 5. The 3rd level becomes [5,6,8,7]. +- Swap 8 and 7. The 3rd level becomes [5,6,7,8]. +We used 3 operations so return 3. +It can be proven that 3 is the minimum number of operations needed. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./2.png) -### 思路1 -> ... -Minimum Number of Operations to Sort a Binary Tree by Level -```go ``` +Input: root = [1,3,2,7,6,5,4] +Output: 3 +Explanation: +- Swap 3 and 2. The 2nd level becomes [2,3]. +- Swap 7 and 4. The 3rd level becomes [4,6,5,7]. +- Swap 6 and 5. The 3rd level becomes [4,5,6,7]. +We used 3 operations so return 3. +It can be proven that 3 is the minimum number of operations needed. +``` + +**Example 3:** + +![example3](./3.png) +``` +Input: root = [1,2,3,4,5,6] +Output: 0 +Explanation: Each level is already sorted in increasing order so return 0. +``` ## 结语 diff --git a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go index d115ccf5e..705bb7f89 100644 --- a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go +++ b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func minimumCostSort(nums []int) int { + b := make([]int, len(nums)) + rightPos := make(map[int]int) + copy(b, nums) + sort.Ints(b) + for i, n := range b { + rightPos[n] = i + } + swapCount := 0 + idx := 0 + for idx < len(nums) { + if nums[idx] == b[idx] { + idx++ + continue + } + correctPos := rightPos[nums[idx]] + nums[idx], nums[correctPos] = nums[correctPos], nums[idx] + swapCount++ + + } + /* + for idx := 0; idx < len(nums); idx++ { + if nums[idx] == b[idx] { + continue + } + correctPos := rightPos[nums[idx]] + nums[idx], nums[correctPos] = nums[correctPos], nums[idx] + swapCount++ + } + */ + return swapCount +} + +func Solution(root *TreeNode) int { + ans := 0 + queue := []*TreeNode{root} + for len(queue) > 0 { + next := make([]*TreeNode, 0) + values := make([]int, 0) + for _, item := range queue { + if item.Left != nil { + next = append(next, item.Left) + values = append(values, item.Left.Val) + } + if item.Right != nil { + next = append(next, item.Right) + values = append(values, item.Right.Val) + } + } + ans += minimumCostSort(values) + queue = next + } + return ans } diff --git a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go index 14ff50eb4..fa8f676e0 100644 --- a/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go +++ b/leetcode/2401-2500/2471.Minimum-Number-of-Operations-to-Sort-a-Binary-Tree-by-Level/Solution_test.go @@ -10,12 +10,52 @@ 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, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 6}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 8, + Left: &TreeNode{Val: 9}, + }, + Right: &TreeNode{Val: 5, Left: &TreeNode{Val: 10}}, + }, + }, 3}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 6}, + }, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 5, + }, + Right: &TreeNode{Val: 4}, + }, + }, 3}, + {"TestCase3", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 5}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + }, + }, 0}, } // 开始测试 @@ -30,10 +70,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8cea18df4b364641885de14da85a12a3d7a1b293 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 15 Aug 2023 22:47:13 +0800 Subject: [PATCH 0363/1057] Add solution and test-cases for problem 210 --- .../201-300/0210.Course-Schedule-II/README.md | 33 +++++++----- .../0210.Course-Schedule-II/Solution.go | 53 ++++++++++++++++++- .../0210.Course-Schedule-II/Solution_test.go | 23 ++++---- 3 files changed, 83 insertions(+), 26 deletions(-) diff --git a/leetcode/201-300/0210.Course-Schedule-II/README.md b/leetcode/201-300/0210.Course-Schedule-II/README.md index 457531be4..d65efb447 100644 --- a/leetcode/201-300/0210.Course-Schedule-II/README.md +++ b/leetcode/201-300/0210.Course-Schedule-II/README.md @@ -1,28 +1,35 @@ # [210.Course Schedule II][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There are a total of `numCourses` courses you have to take, labeled from `0` to `numCourses - 1`. You are given an array `prerequisites` where `prerequisites[i] = [ai, bi]` indicates that you **must** take course bi first if you want to take course ai. + +- For example, the pair `[0, 1]`, indicates that to take course 0 you have to first take course `1`. + +Return the ordering of courses you should take to finish all courses. If there are many valid answers, return **any** of them. If it is impossible to finish all courses, return **an empty array**. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: numCourses = 2, prerequisites = [[1,0]] +Output: [0,1] +Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is [0,1]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Course Schedule II -```go ``` +Input: numCourses = 4, prerequisites = [[1,0],[2,0],[3,1],[3,2]] +Output: [0,2,1,3] +Explanation: There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. +So one correct course order is [0,1,2,3]. Another correct ordering is [0,2,1,3]. +``` + +**Example 3:** +``` +Input: numCourses = 1, prerequisites = [] +Output: [0] +``` ## 结语 diff --git a/leetcode/201-300/0210.Course-Schedule-II/Solution.go b/leetcode/201-300/0210.Course-Schedule-II/Solution.go index d115ccf5e..fecbc316f 100644 --- a/leetcode/201-300/0210.Course-Schedule-II/Solution.go +++ b/leetcode/201-300/0210.Course-Schedule-II/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(numCourses int, prerequisites [][]int) []int { + length := len(prerequisites) + ans := make([]int, numCourses) + if length == 0 { + for i := 0; i < numCourses; i++ { + ans[i] = i + } + return ans + } + + in := make([]int, numCourses) + dep := make(map[int][]int) + for _, p := range prerequisites { + wantLean, firstLearn := p[0], p[1] + in[wantLean]++ + if _, ok := dep[firstLearn]; !ok { + dep[firstLearn] = make([]int, 0) + } + dep[firstLearn] = append(dep[firstLearn], wantLean) + } + queue := make([]int, 0) + left := numCourses + index := 0 + for i := 0; i < numCourses; i++ { + if in[i] == 0 { + queue = append(queue, i) + ans[index] = i + index++ + left-- + } + } + for left > 0 { + next := make([]int, 0) + for _, done := range queue { + for _, rel := range dep[done] { + in[rel]-- + if in[rel] == 0 { + next = append(next, rel) + ans[index] = rel + index++ + left-- + } + } + } + if len(next) == 0 && left > 0 { + return nil + } + queue = next + } + + return ans } diff --git a/leetcode/201-300/0210.Course-Schedule-II/Solution_test.go b/leetcode/201-300/0210.Course-Schedule-II/Solution_test.go index 14ff50eb4..22c8e1865 100644 --- a/leetcode/201-300/0210.Course-Schedule-II/Solution_test.go +++ b/leetcode/201-300/0210.Course-Schedule-II/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + numCourses int + prerequisties [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, [][]int{{1, 0}}, []int{0, 1}}, + {"TestCase2", 4, [][]int{{1, 0}, {2, 0}, {3, 1}, {3, 2}}, []int{0, 1, 2, 3}}, + {"TestCase3", 1, nil, []int{0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.numCourses, c.prerequisties) 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.numCourses, c.prerequisties) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From fafaf4f256e815e259f7461ab2c4da98d70a309f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 16 Aug 2023 23:16:20 +0800 Subject: [PATCH 0364/1057] Add solution and test-cases for problem 239 --- .../0239.Sliding-Window-Maximum/README.md | 32 +++--- .../0239.Sliding-Window-Maximum/Solution.go | 100 +++++++++++++++++- .../Solution_test.go | 21 ++-- 3 files changed, 127 insertions(+), 26 deletions(-) diff --git a/leetcode/201-300/0239.Sliding-Window-Maximum/README.md b/leetcode/201-300/0239.Sliding-Window-Maximum/README.md index ba777a478..2565fcb28 100644 --- a/leetcode/201-300/0239.Sliding-Window-Maximum/README.md +++ b/leetcode/201-300/0239.Sliding-Window-Maximum/README.md @@ -1,28 +1,32 @@ # [239.Sliding Window Maximum][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an array of integers `nums`, there is a sliding window of size `k` which is moving from the very left of the array to the very right. You can only see the `k` numbers in the window. Each time the sliding window moves right by one position. + +Return the max sliding window. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,3,-1,-3,5,3,6,7], k = 3 +Output: [3,3,5,5,6,7] +Explanation: +Window position Max +--------------- ----- +[1 3 -1] -3 5 3 6 7 3 + 1 [3 -1 -3] 5 3 6 7 3 + 1 3 [-1 -3 5] 3 6 7 5 + 1 3 -1 [-3 5 3] 6 7 5 + 1 3 -1 -3 [5 3 6] 7 6 + 1 3 -1 -3 5 [3 6 7] 7 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sliding Window Maximum -```go ``` - +Input: nums = [1], k = 1 +Output: [1] +``` ## 结语 diff --git a/leetcode/201-300/0239.Sliding-Window-Maximum/Solution.go b/leetcode/201-300/0239.Sliding-Window-Maximum/Solution.go index d115ccf5e..580bb5621 100644 --- a/leetcode/201-300/0239.Sliding-Window-Maximum/Solution.go +++ b/leetcode/201-300/0239.Sliding-Window-Maximum/Solution.go @@ -1,5 +1,101 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +type segNode struct { + l, r, m int + left, right *segNode +} + +// Just for debug +func (s *segNode) Floor() { + q := []*segNode{s} + for len(q) > 0 { + next := make([]*segNode, 0) + for _, i := range q { + fmt.Printf("[%d, %d], max: %d ***$", i.l, i.r, i.m) + if i.left != nil { + next = append(next, i.left) + } + if i.right != nil { + next = append(next, i.right) + } + } + fmt.Println() + q = next + } +} + +// 1, 2, 3, 4,/ 5, 6, 7, 8 +func buildSegTree(left, right int, nums []int) *segNode { + if left > right { + return nil + } + node := &segNode{l: left, r: right} + if left == right { + node.m = nums[left] + return node + } + mid := (right-left)/2 + left + node.left = buildSegTree(left, mid, nums) + node.right = buildSegTree(mid+1, right, nums) + node.m = node.left.m + if node.right.m > node.m { + node.m = node.right.m + } + return node +} +func searchSeg(root *segNode, s, e int, nums []int) int { + if root.l == s && root.r == e { + return root.m + } + if s == e { + return nums[s] + } + mid := (root.r-root.l)/2 + root.l + + if e < mid { + return searchSeg(root.left, s, e, nums) + } + if s > mid { + return searchSeg(root.right, s, e, nums) + } + + if s < mid && e > mid { + a := searchSeg(root.left, s, mid, nums) + b := searchSeg(root.right, mid+1, e, nums) + if a > b { + return a + } + return b + } + + if e == mid { + a := searchSeg(root.left, e, e, nums) + b := searchSeg(root.left, s, mid-1, nums) + if a > b { + return a + } + return b + } + a := searchSeg(root.right, s, s, nums) + b := searchSeg(root.right, mid+1, e, nums) + if a > b { + return a + } + return b +} + +func Solution(nums []int, k int) []int { + if k == 1 { + return nums + } + l := len(nums) + ans := make([]int, l-k+1) + segRoot := buildSegTree(0, l-1, nums) + for i := 0; i <= l-k; i++ { + e := i + k - 1 + ans[i] = searchSeg(segRoot, i, e, nums) + } + return ans } diff --git a/leetcode/201-300/0239.Sliding-Window-Maximum/Solution_test.go b/leetcode/201-300/0239.Sliding-Window-Maximum/Solution_test.go index 14ff50eb4..605fb7645 100644 --- a/leetcode/201-300/0239.Sliding-Window-Maximum/Solution_test.go +++ b/leetcode/201-300/0239.Sliding-Window-Maximum/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{1, 3, -1, -3, 5, 3, 6, 7}, 3, []int{3, 3, 5, 5, 6, 7}}, + {"TestCase2", []int{1}, 1, []int{1}}, + {"TestCase3", []int{1, 9, 2, 8, 4, 7, -1, 57, 28, 90}, 5, []int{9, 9, 8, 57, 57, 90}}, } // 开始测试 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 a7de3e96c4159666899bb12c290a2293da650f19 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 17 Aug 2023 23:05:40 +0800 Subject: [PATCH 0365/1057] Add solution and test-cases for problem 542 --- .../501-600/0542.01-Matrix/01-1-grid.jpeg | Bin 0 -> 8121 bytes .../501-600/0542.01-Matrix/01-2-grid.jpeg | Bin 0 -> 7577 bytes leetcode/501-600/0542.01-Matrix/README.md | 27 +++++++------ leetcode/501-600/0542.01-Matrix/Solution.go | 36 +++++++++++++++++- .../501-600/0542.01-Matrix/Solution_test.go | 14 +++---- 5 files changed, 54 insertions(+), 23 deletions(-) create mode 100644 leetcode/501-600/0542.01-Matrix/01-1-grid.jpeg create mode 100644 leetcode/501-600/0542.01-Matrix/01-2-grid.jpeg diff --git a/leetcode/501-600/0542.01-Matrix/01-1-grid.jpeg b/leetcode/501-600/0542.01-Matrix/01-1-grid.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b52a761c36fc99ec77f71f1ef8409ebf79fb7bf6 GIT binary patch literal 8121 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≠u5;K`TSPbsi?;N&os2UyM3KvYXpbE&&xAB2bz9!i9Z-7 zxU+ZEH<@brpJ4F5PP4HObSqq(JXV>Kppo|Yg4T%L$7*hRKLfrq8T+I?{AI!C8mVpZ zciE$|Y}6vO`$fq}yB%}x8^hNZf3<2EN#sWF9LVJFHLGNsSIH~=WTNOkH^;1s5W_D);yHD0O+#igJXhYsw4#>EB@76L?a_qJwO1xL-4D3T zH$GV;sBczp=WDr(OZd*{p`nISBTXJ(NH3;B#i;V9L*uR7BZbBww34v}%#h*@){QAQ~Jza)DA^=Piz3 QBkcb4iD_wU(_Y_y0oysf761SM literal 0 HcmV?d00001 diff --git a/leetcode/501-600/0542.01-Matrix/01-2-grid.jpeg b/leetcode/501-600/0542.01-Matrix/01-2-grid.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f28a7f3398c5ee16c0ed70187078569684178fef GIT binary patch literal 7577 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 RVO*{99zS~|HCr7H{TD+=!qfl& literal 0 HcmV?d00001 diff --git a/leetcode/501-600/0542.01-Matrix/README.md b/leetcode/501-600/0542.01-Matrix/README.md index 0acb12b02..383d1e758 100644 --- a/leetcode/501-600/0542.01-Matrix/README.md +++ b/leetcode/501-600/0542.01-Matrix/README.md @@ -1,28 +1,27 @@ # [542.01 Matrix][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `m x n` binary matrix `mat`, return the distance of the nearest `0` for each cell. + +The distance between two adjacent cells is `1`. + +**Example 1:** -**Example 1:** +![example1](./01-1-grid.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: mat = [[0,0,0],[0,1,0],[0,0,0]] +Output: [[0,0,0],[0,1,0],[0,0,0]] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./01-2-grid.jpeg) -### 思路1 -> ... -01 Matrix -```go ``` - +Input: mat = [[0,0,0],[0,1,0],[1,1,1]] +Output: [[0,0,0],[0,1,0],[1,2,1]] +``` ## 结语 diff --git a/leetcode/501-600/0542.01-Matrix/Solution.go b/leetcode/501-600/0542.01-Matrix/Solution.go index d115ccf5e..c83e73917 100644 --- a/leetcode/501-600/0542.01-Matrix/Solution.go +++ b/leetcode/501-600/0542.01-Matrix/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +import "math" + +func Solution(mat [][]int) [][]int { + rows := len(mat) + cols := len(mat[0]) + zeroPoints := make([][2]int, 0) + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + if mat[r][c] == 0 { + zeroPoints = append(zeroPoints, [2]int{r, c}) + continue + } + mat[r][c] = math.MaxInt + } + } + var dirs = [][]int{ + {1, 0}, {0, 1}, {-1, 0}, {0, -1}, + } + for len(zeroPoints) > 0 { + next := make([][2]int, 0) + for _, item := range zeroPoints { + for _, dir := range dirs { + nx, ny := item[0]+dir[0], item[1]+dir[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols || mat[nx][ny] <= mat[item[0]][item[1]]+1 { + continue + } + mat[nx][ny] = mat[item[0]][item[1]] + 1 + next = append(next, [2]int{nx, ny}) + } + } + zeroPoints = next + } + return mat + } diff --git a/leetcode/501-600/0542.01-Matrix/Solution_test.go b/leetcode/501-600/0542.01-Matrix/Solution_test.go index 14ff50eb4..26b220902 100644 --- a/leetcode/501-600/0542.01-Matrix/Solution_test.go +++ b/leetcode/501-600/0542.01-Matrix/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {0, 0, 0}}, + [][]int{{19, 19, 19}, {18, 18, 18}, {17, 17, 17}, {16, 16, 16}, {15, 15, 15}, {14, 14, 14}, {13, 13, 13}, {12, 12, 12}, {11, 11, 11}, {10, 10, 10}, {9, 9, 9}, {8, 8, 8}, {7, 7, 7}, {6, 6, 6}, {5, 5, 5}, {4, 4, 4}, {3, 3, 3}, {2, 2, 2}, {1, 1, 1}, {0, 0, 0}}}, + {"TestCase2", [][]int{{0, 0, 0}, {0, 1, 0}, {0, 0, 0}}, [][]int{{0, 0, 0}, {0, 1, 0}, {0, 0, 0}}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 00ffc6b54bcba81921f743ee318811c5ed09e103 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 18 Aug 2023 21:43:29 +0800 Subject: [PATCH 0366/1057] Add solution and test-cases for problem 1615 --- .../1615.Maximal-Network-Rank/README.md | 39 ++++++++++++------ .../1615.Maximal-Network-Rank/Solution.go | 30 +++++++++++++- .../Solution_test.go | 27 +++++++----- .../1615.Maximal-Network-Rank/ex1.png | Bin 0 -> 9761 bytes .../1615.Maximal-Network-Rank/ex2.png | Bin 0 -> 10235 bytes 5 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 leetcode/1601-1700/1615.Maximal-Network-Rank/ex1.png create mode 100644 leetcode/1601-1700/1615.Maximal-Network-Rank/ex2.png diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md b/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md index 32cd80329..6a83111fa 100755 --- a/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md +++ b/leetcode/1601-1700/1615.Maximal-Network-Rank/README.md @@ -1,28 +1,41 @@ # [1615.Maximal Network Rank][title] -> [!WARNING|style:flat] -> 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 infrastructure of `n` cities with some number of `roads` connecting these cities. Each `roads[i] = [ai, bi]` indicates that there is a bidirectional road between cities ai and bi. + +The **network rank** of **two different cities** is defined as the total number of **directly** connected roads to **either** city. If a road is directly connected to both cities, it is only counted **once**. + +The **maximal network rank** of the infrastructure is the **maximum network rank** of all pairs of different cities. + +Given the integer `n` and the array `roads`, return the **maximal network rank of the entire infrastructure. + +**Example 1:** -**Example 1:** +![example1](./ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, roads = [[0,1],[0,3],[1,2],[1,3]] +Output: 4 +Explanation: The network rank of cities 0 and 1 is 4 as there are 4 roads that are connected to either 0 or 1. The road between 0 and 1 is only counted once. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./ex2.png) -### 思路1 -> ... -Maximal Network Rank -```go ``` +Input: n = 5, roads = [[0,1],[0,3],[1,2],[1,3],[2,3],[2,4]] +Output: 5 +Explanation: There are 5 roads that are connected to cities 1 or 2. +``` + +**Example 3:** +``` +Input: n = 8, roads = [[0,1],[1,2],[2,3],[2,4],[5,6],[5,7]] +Output: 5 +Explanation: The network rank of 2 and 5 is 5. Notice that all the cities do not have to be connected. +``` ## 结语 diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go index d115ccf5e..bf80fa4d8 100644 --- a/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go +++ b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, roads [][]int) int { + adj := make([][]bool, n) + for i := 0; i < n; i++ { + adj[i] = make([]bool, n) + } + count := make([]int, n) + for _, road := range roads { + from, to := road[0], road[1] + adj[from][to] = true + adj[to][from] = true + count[from]++ + count[to]++ + } + ans := 0 + + for c1 := 0; c1 < n-1; c1++ { + for c2 := c1 + 1; c2 < n; c2++ { + r := count[c1] + count[c2] + if adj[c1][c2] { + r-- + } + if r > ans { + ans = r + } + } + } + + return ans } diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go index 14ff50eb4..a754b9cee 100644 --- a/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go +++ b/leetcode/1601-1700/1615.Maximal-Network-Rank/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + roads [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, [][]int{ + {0, 1}, {0, 3}, {1, 2}, {1, 3}, + }, 4}, + {"TestCase2", 5, [][]int{ + {0, 1}, {0, 3}, {1, 2}, {1, 3}, {2, 3}, {2, 4}, + }, 5}, + {"TestCase3", 8, [][]int{ + {0, 1}, {1, 2}, {2, 3}, {2, 4}, {5, 6}, {5, 7}, + }, 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.roads) 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.roads) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1601-1700/1615.Maximal-Network-Rank/ex1.png b/leetcode/1601-1700/1615.Maximal-Network-Rank/ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..0485b2fce1d57ca19ee1b5ea95a5777fea0c559a GIT binary patch literal 9761 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 literal 0 HcmV?d00001 From 2136f1099e83c90870b9eac8a79370e1430293c0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 19 Aug 2023 15:31:49 +0800 Subject: [PATCH 0367/1057] Add solution and test-cases for problem 1489 --- .../README.md | 41 ++++++++ .../Solution.go | 97 ++++++++++++++++++ .../Solution_test.go | 47 +++++++++ .../ex1.png | Bin 0 -> 11394 bytes .../ex2.png | Bin 0 -> 9401 bytes .../msts.png | Bin 0 -> 28758 bytes 6 files changed, 185 insertions(+) create mode 100644 leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/README.md create mode 100644 leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution.go create mode 100644 leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution_test.go create mode 100644 leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/ex1.png create mode 100644 leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/ex2.png create mode 100644 leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/msts.png diff --git a/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/README.md b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/README.md new file mode 100644 index 000000000..45f7ba4b0 --- /dev/null +++ b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/README.md @@ -0,0 +1,41 @@ +# [1489.Find Critical and Pseudo-Critical Edges in Minimum Spanning Tree][title] + +## Description +Given a weighted undirected connected graph with `n` vertices numbered from `0` to `n - 1`, and an array `edges` where `edges[i] = [ai, bi, weighti]` represents a bidirectional and weighted edge between nodes ai and bi. A minimum spanning tree (MST) is a subset of the graph's edges that connects all vertices without cycles and with the minimum possible total edge weight. + +Find all the critical and pseudo-critical edges in the given graph's minimum spanning tree (MST). An MST edge whose deletion from the graph would cause the MST weight to increase is called a critical edge. On the other hand, a pseudo-critical edge is that which can appear in some MSTs but not all. + +Note that you can return the indices of the edges in any order. + +**Example 1:** + +![example1](./ex1.png) + +``` +Input: n = 5, edges = [[0,1,1],[1,2,1],[2,3,2],[0,3,2],[0,4,3],[3,4,3],[1,4,6]] +Output: [[0,1],[2,3,4,5]] +Explanation: The figure above describes the graph. +The following figure shows all the possible MSTs: + +Notice that the two edges 0 and 1 appear in all MSTs, therefore they are critical edges, so we return them in the first list of the output. +The edges 2, 3, 4, and 5 are only part of some MSTs, therefore they are considered pseudo-critical edges. We add them to the second list of the output. +``` + +![msts](./msts.png) + +**Example 2:** + +![example2](./ex2.png) + +``` +Input: n = 4, edges = [[0,1,1],[1,2,1],[2,3,1],[0,3,1]] +Output: [[],[0,1,2,3]] +Explanation: We can observe that since all 4 edges have equal weight, choosing any 3 edges from the given 4 will yield an MST. Therefore all 4 edges are pseudo-critical. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/find-critical-and-pseudo-critical-edges-in-minimum-spanning-tree +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution.go b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution.go new file mode 100644 index 000000000..a917cc3fc --- /dev/null +++ b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution.go @@ -0,0 +1,97 @@ +package Solution + +import "sort" + +func newUnion1489(n int) union1489 { + u := union1489{father: make([]int, n), size: make([]int, n), maxsize: 0} + for i := 0; i < n; i++ { + u.father[i] = i + u.size[i] = 1 + } + return u +} + +type union1489 struct { + father []int + // init to 1 + size []int + maxsize int +} + +func (u *union1489) Find(x int) int { + if x != u.father[x] { + u.father[x] = u.Find(u.father[x]) + } + return u.father[x] +} + +func (u *union1489) union(x, y int) bool { + fx := u.Find(x) + fy := u.Find(y) + if fx != fy { + if u.size[fx] < u.size[fy] { + fx, fy = fy, fx + } + u.father[fy] = fx + u.size[fx] += u.size[fy] + if u.size[fx] > u.maxsize { + u.maxsize = u.size[fx] + } + return true + } + return false +} + +func Solution(n int, edges [][]int) [][]int { + u := newUnion1489(n) + // kruskal 算法就是并查集+堆实现。每次将最小权重的边放到池子里。然后判断是否所有的点都已经加进去了 + for i := 0; i < len(edges); i++ { + edges[i] = append(edges[i], i) + } + + sort.Slice(edges, func(i, j int) bool { + return edges[i][2] < edges[j][2] + }) + + minWeight := 0 + //计算树的最小权重 + for _, e := range edges { + if u.union(e[0], e[1]) { + minWeight += e[2] + } + } + + c := make([]int, 0) + pc := make([]int, 0) + for i := 0; i < len(edges); i++ { + tmp := newUnion1489(n) + w := 0 + for j := 0; j < len(edges); j++ { + if i != j && tmp.union(edges[j][0], edges[j][1]) { + w += edges[j][2] + } + } + // 如果不用第i条边,组成一颗最小生成树 + if tmp.maxsize < n || w > minWeight { + // 组成的权重比最小的要大,表明是临界边 + c = append(c, edges[i][3]) + } else { + // 判断是否是伪临界边 + // a pseudo-critical edge is that which can appear in some MSTs but not all. + tmp1 := newUnion1489(n) + w1 := edges[i][2] + tmp1.union(edges[i][0], edges[i][1]) + for j := 0; j < len(edges); j++ { + if j != i && tmp1.union(edges[j][0], edges[j][1]) { + w1 += edges[j][2] + } + } + + if w1 == minWeight { + pc = append(pc, edges[i][3]) + } + } + } + + return [][]int{c, pc} +} diff --git a/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution_test.go b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution_test.go new file mode 100644 index 000000000..14eea7454 --- /dev/null +++ b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/Solution_test.go @@ -0,0 +1,47 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + n int + edges [][]int + expect [][]int + }{ + {"TestCase1", 5, [][]int{ + {0, 1, 1}, {1, 2, 1}, {2, 3, 2}, {0, 3, 2}, {0, 4, 3}, {3, 4, 3}, {1, 4, 6}, + }, [][]int{ + {0, 1}, {2, 3, 4, 5}, + }}, + {"TestCase2", 4, [][]int{ + {0, 1, 1}, {1, 2, 1}, {2, 3, 1}, {0, 3, 1}, + }, [][]int{ + {}, {0, 1, 2, 3}, + }}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.n, c.edges) + if !reflect.DeepEqual(got, c.expect) { + 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/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/ex1.png b/leetcode/1401-1500/1489.Find-Critical-and-Pseudo-Critical-Edges-In-Minimum-Spanning-Tree/ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..16da074c089c6837a165f2730336a63b7c07e2c2 GIT binary patch literal 11394 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 literal 0 HcmV?d00001 From 287679d9c97ea99c6bde169bc48c63b068ea1f69 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 19 Aug 2023 17:14:25 +0800 Subject: [PATCH 0368/1057] Add solution and test-cases for problem 1584 --- .../README.md | 32 +++++----- .../Solution.go | 59 +++++++++++++++++- .../Solution_test.go | 17 ++--- .../1584.Min-Cost-to-Connect-All-Points/c.png | Bin 0 -> 10326 bytes .../1584.Min-Cost-to-Connect-All-Points/d.png | Bin 0 -> 7012 bytes 5 files changed, 85 insertions(+), 23 deletions(-) create mode 100644 leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/c.png create mode 100644 leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/d.png diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md index d70268876..8dbcbc0df 100755 --- a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md +++ b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/README.md @@ -1,28 +1,32 @@ # [1584.Min Cost to Connect All 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 +You are given an array `points` representing integer coordinates of some points on a 2D-plane, where `points[i] = [xi, yi]`. + +The cost of connecting two points `[xi, yi]` and `[xj, yj]` is the **manhattan distance** between them: `|xi - xj| + |yi - yj|`, where `|val|` denotes the absolute value of `val`. + +Return the minimum cost to make all points connected. All points are connected if there is **exactly one** simple path between any two points. -**Example 1:** +**Example 1:** + +![example1](./d.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: points = [[0,0],[2,2],[3,10],[5,2],[7,0]] +Output: 20 +Explanation: +We can connect the points as shown above to get the minimum cost of 20. +Notice that there is a unique path between every pair of points. ``` -## 题意 -> ... +![explanation](./c.png) -## 题解 +**Example 2:** -### 思路1 -> ... -Min Cost to Connect All Points -```go ``` - +Input: points = [[3,12],[-2,5],[-4,1]] +Output: 18 +``` ## 结语 diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go index d115ccf5e..03ac1f37a 100644 --- a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go +++ b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(points [][]int) int { + length := len(points) + distance := make([][]int, length) + visited := make([]bool, length) + for i := 0; i < length; i++ { + distance[i] = make([]int, length) + for j := 0; j < length; j++ { + distance[i][j] = -1 + } + } + + for i := 0; i < length-1; i++ { + for j := i + 1; j < length; j++ { + x := points[i][0] - points[j][0] + y := points[i][1] - points[j][1] + + if x < 0 { + x = -x + } + if y < 0 { + y = -y + } + distance[i][j] = x + y + distance[j][i] = x + y + } + } + + // 选一个起点 + // 第一个点被选中 + visited[0] = true + ans := 0 + for { + selectIndex, selectDistance := -1, -1 + for i, v := range visited { + if !v { + continue + } + // 遍历过,则尝试选择一个较小的距离 + for rel, dis := range distance[i] { + if dis == -1 || visited[rel] { + // 不可达 + continue + } + if selectDistance == -1 || selectDistance > dis { + selectIndex = rel + selectDistance = dis + } + } + } + if selectIndex == -1 { + break + } + visited[selectIndex] = true + ans += selectDistance + } + + return ans } diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go index 14ff50eb4..473ce1dd2 100644 --- a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/Solution_test.go +++ b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/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{ + {0, 0}, {2, 2}, {3, 10}, {5, 2}, {7, 0}, + }, 20}, + {"TestCase2", [][]int{ + {3, 12}, {-2, 5}, {-4, 1}, + }, 18}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/c.png b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/c.png new file mode 100644 index 0000000000000000000000000000000000000000..682772d5f2b141489b8926c014ad1ab86ab08218 GIT binary patch literal 10326 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 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/d.png b/leetcode/1501-1600/1584.Min-Cost-to-Connect-All-Points/d.png new file mode 100644 index 0000000000000000000000000000000000000000..e11160d23479b59a5b96a0363848ecffb038c5e2 GIT binary patch literal 7012 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 literal 0 HcmV?d00001 From e2d5c5fb1d1bb870dd1b3062c8e07f5e85ca59c5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Aug 2023 12:24:26 +0800 Subject: [PATCH 0369/1057] Add solution and test-cases for problem 1203 --- .../1359_ex1.png | Bin 0 -> 2838 bytes .../README.md | 33 ++-- .../Solution.go | 162 +++++++++++++++++- .../Solution_test.go | 27 +-- 4 files changed, 194 insertions(+), 28 deletions(-) create mode 100644 leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/1359_ex1.png diff --git a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/1359_ex1.png b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/1359_ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..524e5b32126b5aaf2fa119fe7aaaa95af1a44eed GIT binary patch literal 2838 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 literal 0 HcmV?d00001 diff --git a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/README.md b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/README.md index 712ef389b..4469a2f00 100644 --- a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/README.md +++ b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/README.md @@ -1,28 +1,31 @@ # [1203.Sort Items by Groups Respecting Dependencies][title] -> [!WARNING|style:flat] -> 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` items each belonging to zero or one of `m` groups where `group[i]` is the group that the `i`-th item belongs to and it's equal to `-1` if the `i`-th item belongs to no group. The items and the groups are zero indexed. A group can have no item belonging to it. -**Example 1:** +Return a sorted list of the items such that: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- The items that belong to the same group are next to each other in the sorted list. +- There are some relations between these items where `beforeItems[i]` is a list containing all the items that should come before the `i`-th item in the sorted array (to the left of the `i`-th item). + +Return any solution if there is more than one solution and return an **empty list** if there is no solution. -## 题意 -> ... +**Example 1:** -## 题解 +![example1](./1359_ex1.png) -### 思路1 -> ... -Sort Items by Groups Respecting Dependencies -```go ``` +Input: n = 8, m = 2, group = [-1,-1,1,0,0,1,0,-1], beforeItems = [[],[6],[5],[6],[3,6],[],[],[]] +Output: [6,3,4,1,5,2,0,7] +``` + +**Example 2:** +``` +Input: n = 8, m = 2, group = [-1,-1,1,0,0,1,0,-1], beforeItems = [[],[6],[5],[6],[3],[],[4],[]] +Output: [] +Explanation: This is the same as example 1 except that 4 needs to be before 6 in the sorted list. +``` ## 结语 diff --git a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution.go b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution.go index d115ccf5e..86babad8a 100644 --- a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution.go +++ b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution.go @@ -1,5 +1,163 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(n int, m int, group []int, beforeItems [][]int) []int { + groupItems := make(map[int][]int) + item2Group := make(map[int]int) + for idx, g := range group { + if g == -1 { + g = m + idx + } + item2Group[idx] = g + if _, ok := groupItems[g]; !ok { + groupItems[g] = make([]int, 0) + } + groupItems[g] = append(groupItems[g], idx) + } + + /* + for g, items := range groupItems { + fmt.Printf("group: %d -- %v\n", g, items) + } + for item, g := range item2Group { + fmt.Printf("itme: %d -- %d\n", item, g) + } + */ + groupItemOrder := make(map[int]map[int][]int) + groupItemIn := make(map[int]map[int]int) + + groupOrder := make(map[int][]int) + groupIn := make(map[int]int) + for idx, before := range beforeItems { + idxGroup := item2Group[idx] + + for _, item := range before { + itemGroup := item2Group[item] + if itemGroup == idxGroup { + if _, ok := groupItemOrder[idxGroup]; !ok { + groupItemOrder[idxGroup] = make(map[int][]int) + } + if _, ok := groupItemOrder[idxGroup][item]; !ok { + groupItemOrder[idxGroup][item] = make([]int, 0) + } + groupItemOrder[idxGroup][item] = append(groupItemOrder[idxGroup][item], idx) + + if _, ok := groupItemIn[idxGroup]; !ok { + groupItemIn[idxGroup] = make(map[int]int) + } + groupItemIn[idxGroup][idx]++ + continue + } + if _, ok := groupOrder[itemGroup]; !ok { + groupOrder[itemGroup] = make([]int, 0) + } + groupOrder[itemGroup] = append(groupOrder[itemGroup], idxGroup) + groupIn[idxGroup]++ + } + } + + /* + fmt.Printf("groupItemOrder; %+v\n", groupItemOrder) + fmt.Printf("groupOrder: %+v\n", groupOrder) + fmt.Printf("groupIn: %+v\n", groupIn) + */ + var groupTopology func(int) bool + groupTopology = func(groupID int) bool { + items := groupItems[groupID] + if len(items) == 1 { + return true + } + newOrder := make([]int, 0) + relation := groupItemOrder[groupID] + in := groupItemIn[groupID] + + queue := make([]int, 0) + used := 0 + for _, item := range items { + if _, ok := in[item]; !ok { + queue = append(queue, item) + newOrder = append(newOrder, item) + used++ + } + } + if len(queue) == 0 { + return false + } + // The sorting is added here for test cases, and can be removed from the actual commit code + sort.Ints(newOrder) + for len(queue) > 0 { + n := make([]int, 0) + for _, i := range queue { + for _, rel := range relation[i] { + in[rel]-- + if in[rel] == 0 { + n = append(n, rel) + } + } + } + if len(n) == 0 && used != len(items) { + return false + } + queue = n + used += len(n) + // The sorting is added here for test cases, and can be removed from the actual commit code + sort.Ints(n) + newOrder = append(newOrder, n...) + } + + groupItems[groupID] = newOrder + return true + } + // 先检查每个组是否可以满足要求 + for groupID := range groupItems { + if !groupTopology(groupID) { + //fmt.Printf("group; %d, don't", groupID) + return nil + } + } + + queue := make([]int, 0) + newGroupOrder := make([]int, 0) + used := 0 + for i := range groupItems { + if _, ok := groupIn[i]; !ok { + queue = append(queue, i) + //fmt.Printf("add group: %d\n", i) + newGroupOrder = append(newGroupOrder, i) + used++ + } + } + if used == 0 { + return nil + } + // The sorting is added here for test cases, and can be removed from the actual commit code + sort.Ints(newGroupOrder) + + for len(queue) > 0 { + n := make([]int, 0) + for _, item := range queue { + for _, rel := range groupOrder[item] { + groupIn[rel]-- + if groupIn[rel] == 0 { + n = append(n, rel) + } + } + } + if len(n) == 0 && used != len(groupItems) { + return nil + } + queue = n + // The sorting is added here for test cases, and can be removed from the actual commit code + sort.Ints(n) + newGroupOrder = append(newGroupOrder, n...) + used += len(n) + } + + ans := make([]int, 0) + for _, g := range newGroupOrder { + ans = append(ans, groupItems[g]...) + } + + return ans } diff --git a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution_test.go b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution_test.go index 14ff50eb4..fc948ae23 100644 --- a/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution_test.go +++ b/leetcode/1201-1300/1203.Sort-Items-by-Groups-Respecting-Dependencies/Solution_test.go @@ -9,31 +9,36 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, m int + group []int + beforeItems [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 8, 2, []int{-1, -1, 1, 0, 0, 1, 0, -1}, [][]int{ + {}, {6}, {5}, {6}, {3, 6}, {}, {}, {}, + }, []int{6, 3, 4, 5, 2, 0, 7, 1}}, + {"TestCase2", 8, 2, []int{-1, -1, 1, 0, 0, 1, 0, -1}, [][]int{ + {}, {6}, {5}, {6}, {3}, {}, {4}, {}, + }, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.m, c.group, c.beforeItems) 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.n, c.m, c.group, c.beforeItems) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4bcb6c6aabca193c9bfcf782d3e23034bcddaa41 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 21 Aug 2023 20:22:50 +0800 Subject: [PATCH 0370/1057] Add solution and test-cases for problem 459 --- .../0459.Repeated-Substring-Pattern/README.md | 28 ++++++++++--------- .../Solution.go | 20 +++++++++++-- .../Solution_test.go | 12 ++++---- 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/leetcode/401-500/0459.Repeated-Substring-Pattern/README.md b/leetcode/401-500/0459.Repeated-Substring-Pattern/README.md index 3a4a71aea..194446a3f 100644 --- a/leetcode/401-500/0459.Repeated-Substring-Pattern/README.md +++ b/leetcode/401-500/0459.Repeated-Substring-Pattern/README.md @@ -1,28 +1,30 @@ # [459.Repeated Substring 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 string `s`, check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "abab" +Output: true +Explanation: It is the substring "ab" twice. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Repeated Substring Pattern -```go +``` +Input: s = "aba" +Output: false ``` +**Example 3:** + +``` +Input: s = "abcabcabcabc" +Output: true +Explanation: It is the substring "abc" four times or the substring "abcabc" twice. +``` ## 结语 diff --git a/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution.go b/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution.go index d115ccf5e..90f948a1c 100644 --- a/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution.go +++ b/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) bool { + length := len(s) + for l := length - 1; l >= 1; l-- { + if length%l != 0 { + continue + } + base := s[:l] + idx := l + for ; idx < length; idx += l { + if base != s[idx:idx+l] { + break + } + } + if idx >= length { + return true + } + } + return false } diff --git a/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution_test.go b/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution_test.go index 14ff50eb4..9549a494d 100644 --- a/leetcode/401-500/0459.Repeated-Substring-Pattern/Solution_test.go +++ b/leetcode/401-500/0459.Repeated-Substring-Pattern/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", "abab", true}, + {"TestCase2", "aba", false}, + {"TestCase3", "abcabcabcabc", true}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d8c56b11704b6ee3762e67d299005d8c2429d78a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 22 Aug 2023 22:19:49 +0800 Subject: [PATCH 0371/1057] Add solution and test-cases for problem 168 --- .../0168.Excel-Sheet-Column-Title/README.md | 44 +++++++++++++++++++ .../0168.Excel-Sheet-Column-Title/Solution.go | 22 +++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 71 insertions(+), 9 deletions(-) create mode 100644 leetcode/101-200/0168.Excel-Sheet-Column-Title/README.md diff --git a/leetcode/101-200/0168.Excel-Sheet-Column-Title/README.md b/leetcode/101-200/0168.Excel-Sheet-Column-Title/README.md new file mode 100644 index 000000000..40ec1c53c --- /dev/null +++ b/leetcode/101-200/0168.Excel-Sheet-Column-Title/README.md @@ -0,0 +1,44 @@ +# [168. Excel Sheet Column Title][title] + +## Description +Given an integer `columnNumber`, return its corresponding column title as it appears in an Excel sheet. + +For example: +``` +A -> 1 +B -> 2 +C -> 3 +... +Z -> 26 +AA -> 27 +AB -> 28 +... +``` + +**Example 1:** + +``` +Input: columnNumber = 1 +Output: "A" +``` + +**Example 2:** + +``` +Input: columnNumber = 28 +Output: "AB" +``` + +**Example 3:** + +``` +Input: columnNumber = 701 +Output: "ZY" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/excel-sheet-column-title +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution.go b/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution.go index d115ccf5e..8037336d3 100644 --- a/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution.go +++ b/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +import "bytes" + +func Solution(columnNumber int) string { + base := 64 + buf := bytes.NewBuffer([]byte{}) + for columnNumber > 0 { + mod := columnNumber % 26 + columnNumber /= 26 + if mod == 0 { + mod = 26 + columnNumber-- + } + buf.WriteByte(uint8(base + mod)) + } + + bs := buf.Bytes() + for s, e := 0, len(bs)-1; s < e; s, e = s+1, e-1 { + bs[s], bs[e] = bs[e], bs[s] + } + return string(bs) } diff --git a/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution_test.go b/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution_test.go index 14ff50eb4..af8a93ec3 100644 --- a/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution_test.go +++ b/leetcode/101-200/0168.Excel-Sheet-Column-Title/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, "A"}, + {"TestCase2", 28, "AB"}, + {"TestCase3", 701, "ZY"}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c22f6f22d0435ec2b09ffbe8b4141d906903be02 Mon Sep 17 00:00:00 2001 From: Boris Date: Tue, 22 Aug 2023 22:35:35 +0800 Subject: [PATCH 0372/1057] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E9=A2=98?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/leetcode/makedir.go | 2 +- cmd/leetcode/makedir_test.go | 2 +- cmd/leetcode/problem.go | 25 +-- cmd/leetcode/problem_test.go | 14 -- cmd/sitemap/sitemap.go | 32 ---- cmd/sitemap/sitemap_baidu.go | 1 - cmd/sitemap/sitemap_google.go | 1 - go.mod | 34 +++- go.sum | 90 ++++++++- .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1056.Confusing-Number/Solution.go | 5 + .../1056.Confusing-Number/Solution_test.go | 39 ++++ .../1001-1100/1057.Campus-Bikes/Solution.go | 5 + .../1057.Campus-Bikes/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1001-1100/1064.Fixed-Point/Solution.go | 5 + .../1064.Fixed-Point/Solution_test.go | 39 ++++ .../1065.Index-Pairs-of-a-String/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1066.Campus-Bikes-II/Solution.go | 5 + .../1066.Campus-Bikes-II/Solution_test.go | 39 ++++ .../1067.Digit-Count-in-Range/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/1001-1100/1086.High-Five/Solution.go | 5 + .../1001-1100/1086.High-Five/Solution_test.go | 39 ++++ .../1087.Brace-Expansion/Solution.go | 5 + .../1087.Brace-Expansion/Solution_test.go | 39 ++++ .../1088.Confusing-Number-II/Solution.go | 5 + .../1088.Confusing-Number-II/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1099.Two-Sum-Less-Than-K/Solution.go | 5 + .../1099.Two-Sum-Less-Than-K/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0156.Binary-Tree-Upside-Down/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0161.One-Edit-Distance/Solution.go | 5 + .../0161.One-Edit-Distance/Solution_test.go | 39 ++++ .../101-200/0163.Missing-Ranges/Solution.go | 5 + .../0163.Missing-Ranges/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1120.Maximum-Average-Subtree/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1133.Largest-Unique-Number/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1134.Armstrong-Number/Solution.go | 5 + .../1134.Armstrong-Number/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1136.Parallel-Courses/Solution.go | 5 + .../1136.Parallel-Courses/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1165.Single-Row-Keyboard/Solution.go | 5 + .../1165.Single-Row-Keyboard/Solution_test.go | 39 ++++ .../1166.Design-File-System/Solution.go | 5 + .../1166.Design-File-System/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1176.Diet-Plan-Performance/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1181.Before-and-After-Puzzle/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1183.Maximum-Number-of-Ones/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1197.Minimum-Knight-Moves/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1201-1300/1214.Two-Sum-BSTs/Solution.go | 5 + .../1214.Two-Sum-BSTs/Solution_test.go | 39 ++++ .../1215.Stepping-Numbers/Solution.go | 5 + .../1215.Stepping-Numbers/Solution_test.go | 39 ++++ .../1216.Valid-Palindrome-III/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1229.Meeting-Scheduler/Solution.go | 5 + .../1229.Meeting-Scheduler/Solution_test.go | 39 ++++ .../1230.Toss-Strange-Coins/Solution.go | 5 + .../1230.Toss-Strange-Coins/Solution_test.go | 39 ++++ .../1231.Divide-Chocolate/Solution.go | 5 + .../1231.Divide-Chocolate/Solution_test.go | 39 ++++ .../1201-1300/1236.Web-Crawler/Solution.go | 5 + .../1236.Web-Crawler/Solution_test.go | 39 ++++ .../1243.Array-Transformation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1244.Design-A-Leaderboard/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1201-1300/1245.Tree-Diameter/Solution.go | 5 + .../1245.Tree-Diameter/Solution_test.go | 39 ++++ .../1246.Palindrome-Removal/Solution.go | 5 + .../1246.Palindrome-Removal/Solution_test.go | 39 ++++ .../1201-1300/1256.Encode-Number/Solution.go | 5 + .../1256.Encode-Number/Solution_test.go | 39 ++++ .../1257.Smallest-Common-Region/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1258.Synonymous-Sentences/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/1201-1300/1271.Hexspeak/Solution.go | 5 + .../1201-1300/1271.Hexspeak/Solution_test.go | 39 ++++ .../1272.Remove-Interval/Solution.go | 5 + .../1272.Remove-Interval/Solution_test.go | 39 ++++ .../1273.Delete-Tree-Nodes/Solution.go | 5 + .../1273.Delete-Tree-Nodes/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1366.Rank-Teams-by-Votes/Solution.go | 5 + .../1366.Rank-Teams-by-Votes/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1386.Cinema-Seat-Allocation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1388.Pizza-With-3n-Slices/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1301-1400/1390.Four-Divisors/Solution.go | 5 + .../1390.Four-Divisors/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1392.Longest-Happy-Prefix/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1397.Find-All-Good-Strings/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1402.Reducing-Dishes/Solution.go | 5 + .../1402.Reducing-Dishes/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1405.Longest-Happy-String/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1401-1500/1406.Stone-Game-III/Solution.go | 5 + .../1406.Stone-Game-III/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1410.HTML-Entity-Parser/Solution.go | 5 + .../1410.HTML-Entity-Parser/Solution_test.go | 39 ++++ .../Solution.go" | 5 + .../Solution_test.go" | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1417.Reformat-The-String/Solution.go | 5 + .../1417.Reformat-The-String/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1424.Diagonal-Traverse-II/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1426.Counting-Elements/Solution.go | 5 + .../1426.Counting-Elements/Solution_test.go | 39 ++++ .../1427.Perform-String-Shifts/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1429.First-Unique-Number/Solution.go | 5 + .../1429.First-Unique-Number/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1436.Destination-City/Solution.go | 5 + .../1436.Destination-City/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1446.Consecutive-Characters/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1447.Simplified-Fractions/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1462.Course-Schedule-IV/Solution.go | 5 + .../1462.Course-Schedule-IV/Solution_test.go | 39 ++++ .../1463.Cherry-Pickup-II/Solution.go | 5 + .../1463.Cherry-Pickup-II/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1473.Paint-House-III/Solution.go | 5 + .../1473.Paint-House-III/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1478.Allocate-Mailboxes/Solution.go | 5 + .../1478.Allocate-Mailboxes/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1487.Making-File-Names-Unique/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1488.Avoid-Flood-in-The-City/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1490.Clone-N-ary-Tree/Solution.go | 5 + .../1490.Clone-N-ary-Tree/Solution_test.go | 39 ++++ .../1492.The-kth-Factor-of-n/Solution.go | 5 + .../1492.The-kth-Factor-of-n/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1494.Parallel-Courses-II/Solution.go | 5 + .../1494.Parallel-Courses-II/Solution_test.go | 39 ++++ .../1401-1500/1496.Path-Crossing/Solution.go | 5 + .../1496.Path-Crossing/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1499.Max-Value-of-Equation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1506.Find-Root-of-N-Ary-Tree/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1522.Diameter-of-N-Ary-Tree/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1660.Correct-a-Binary-Tree/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1801-1900/1826.Faulty-Sensor/Solution.go | 5 + .../1826.Faulty-Sensor/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1891.Cutting-Ribbons/Solution.go | 5 + .../1891.Cutting-Ribbons/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1901-2000/1908.Game-of-Nim/Solution.go | 5 + .../1908.Game-of-Nim/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../1924.Erect-the-Fence-II/Solution.go | 5 + .../1924.Erect-the-Fence-II/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2034.Stock-Price-Fluctuation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0243.Shortest-Word-Distance/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0246.Strobogrammatic-Number/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0249.Group-Shifted-Strings/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0250.Count-Univalue-Subtrees/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0251.Flatten-2D-Vector/Solution.go | 5 + .../0251.Flatten-2D-Vector/Solution_test.go | 39 ++++ .../201-300/0252.Meeting-Rooms/Solution.go | 5 + .../0252.Meeting-Rooms/Solution_test.go | 39 ++++ .../201-300/0253.Meeting-Rooms-II/Solution.go | 5 + .../0253.Meeting-Rooms-II/Solution_test.go | 39 ++++ .../0254.Factor-Combinations/Solution.go | 5 + .../0254.Factor-Combinations/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/201-300/0256.Paint-House/Solution.go | 5 + .../201-300/0256.Paint-House/Solution_test.go | 39 ++++ .../201-300/0259.3Sum-Smaller/Solution.go | 5 + .../0259.3Sum-Smaller/Solution_test.go | 39 ++++ .../201-300/0261.Graph-Valid-Tree/Solution.go | 5 + .../0261.Graph-Valid-Tree/Solution_test.go | 39 ++++ .../201-300/0265.Paint-House-II/Solution.go | 5 + .../0265.Paint-House-II/Solution_test.go | 39 ++++ .../0266.Palindrome-Permutation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../201-300/0269.Alien-Dictionary/Solution.go | 5 + .../0269.Alien-Dictionary/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/201-300/0276.Paint-Fence/Solution.go | 5 + .../201-300/0276.Paint-Fence/Solution_test.go | 39 ++++ .../0277.Find-the-Celebrity/Solution.go | 5 + .../0277.Find-the-Celebrity/Solution_test.go | 39 ++++ leetcode/201-300/0280.Wiggle-Sort/Solution.go | 5 + .../201-300/0280.Wiggle-Sort/Solution_test.go | 39 ++++ .../201-300/0281.Zigzag-Iterator/Solution.go | 5 + .../0281.Zigzag-Iterator/Solution_test.go | 39 ++++ .../0285.Inorder-Successor-in-BST/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../201-300/0286.Walls-and-Gates/Solution.go | 5 + .../0286.Walls-and-Gates/Solution_test.go | 39 ++++ .../0288.Unique-Word-Abbreviation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../201-300/0291.Word-Pattern-II/Solution.go | 5 + .../0291.Word-Pattern-II/Solution_test.go | 39 ++++ leetcode/201-300/0293.Flip-Game/Solution.go | 5 + .../201-300/0293.Flip-Game/Solution_test.go | 39 ++++ .../201-300/0294.Flip-Game-II/Solution.go | 5 + .../0294.Flip-Game-II/Solution_test.go | 39 ++++ .../0296.Best-Meeting-Point/Solution.go | 5 + .../0296.Best-Meeting-Point/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2201-2300/2297.Jump-Game-VIII/Solution.go | 5 + .../2297.Jump-Game-VIII/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2330.Valid-Palindrome-IV/Solution.go | 5 + .../2330.Valid-Palindrome-IV/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2401-2500/2408.Design-SQL/Solution.go | 5 + .../2408.Design-SQL/Solution_test.go | 39 ++++ .../2417.Closest-Fair-Integer/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2502.Design-Memory-Allocator/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2512.Reward-Top-K-Students/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2501-2600/2514.Count-Anagrams/Solution.go | 5 + .../2514.Count-Anagrams/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2527.Find-Xor-Beauty-of-Array/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2532.Time-to-Cross-a-Bridge/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2540.Minimum-Common-Value/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2544.Alternating-Digit-Sum/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2551.Put-Marbles-in-Bags/Solution.go | 5 + .../2551.Put-Marbles-in-Bags/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2560.House-Robber-IV/Solution.go | 5 + .../2560.House-Robber-IV/Solution_test.go | 39 ++++ .../2561.Rearranging-Fruits/Solution.go | 5 + .../2561.Rearranging-Fruits/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2564.Substring-XOR-Queries/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2568.Minimum-Impossible-OR/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2573.Find-the-String-with-LCP/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2578.Split-With-Minimum-Sum/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2582.Pass-the-Pillow/Solution.go | 5 + .../2582.Pass-the-Pillow/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2590.Design-a-Todo-List/Solution.go | 5 + .../2590.Design-a-Todo-List/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2603.Collect-Coins-in-a-Tree/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2611.Mice-and-Cheese/Solution.go | 5 + .../2611.Mice-and-Cheese/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2613.Beautiful-Pairs/Solution.go | 5 + .../2613.Beautiful-Pairs/Solution_test.go | 39 ++++ .../2614.Prime-In-Diagonal/Solution.go | 5 + .../2614.Prime-In-Diagonal/Solution_test.go | 39 ++++ .../2615.Sum-of-Distances/Solution.go | 5 + .../2615.Sum-of-Distances/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2643.Row-With-Maximum-Ones/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2647.Color-the-Triangle-Red/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2601-2700/2652.Sum-Multiples/Solution.go | 5 + .../2652.Sum-Multiples/Solution_test.go | 39 ++++ .../2653.Sliding-Subarray-Beauty/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2659.Make-Array-Empty/Solution.go | 5 + .../2659.Make-Array-Empty/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go" | 5 + .../Solution_test.go" | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2671.Frequency-Tracker/Solution.go | 5 + .../2671.Frequency-Tracker/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2679.Sum-in-a-Matrix/Solution.go | 5 + .../2679.Sum-in-a-Matrix/Solution_test.go | 39 ++++ .../2601-2700/2680.Maximum-OR/Solution.go | 5 + .../2680.Maximum-OR/Solution_test.go | 39 ++++ .../2681.Power-of-Heroes/Solution.go | 5 + .../2681.Power-of-Heroes/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2683.Neighboring-Bitwise-XOR/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2706.Buy-Two-Chocolates/Solution.go | 5 + .../2706.Buy-Two-Chocolates/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2716.Minimize-String-Length/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2717.Semi-Ordered-Permutation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2719.Count-of-Integers/Solution.go | 5 + .../2719.Count-of-Integers/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2731.Movement-of-Robots/Solution.go | 5 + .../2731.Movement-of-Robots/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2735.Collecting-Chocolates/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2736.Maximum-Sum-Queries/Solution.go | 5 + .../2736.Maximum-Sum-Queries/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2739.Total-Distance-Traveled/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2741.Special-Permutations/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2742.Painting-the-Walls/Solution.go | 5 + .../2742.Painting-the-Walls/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2751.Robot-Collisions/Solution.go | 5 + .../2751.Robot-Collisions/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2762.Continuous-Subarrays/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go" | 5 + .../Solution_test.go" | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2766.Relocate-Marbles/Solution.go | 5 + .../2766.Relocate-Marbles/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2768.Number-of-Black-Blocks/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2784.Check-if-Array-is-Good/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2785.Sort-Vowels-in-a-String/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2810.Faulty-Keyboard/Solution.go | 5 + .../2810.Faulty-Keyboard/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2815.Max-Pair-Sum-in-an-Array/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../2826.Sorting-Three-Groups/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0305.Number-of-Islands-II/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0320.Generalized-Abbreviation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0333.Largest-BST-Subtree/Solution.go | 5 + .../0333.Largest-BST-Subtree/Solution_test.go | 39 ++++ .../0339.Nested-List-Weight-Sum/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0348.Design-Tic-Tac-Toe/Solution.go | 5 + .../0348.Design-Tic-Tac-Toe/Solution_test.go | 39 ++++ .../0351.Android-Unlock-Patterns/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0353.Design-Snake-Game/Solution.go | 5 + .../0353.Design-Snake-Game/Solution_test.go | 39 ++++ .../301-400/0356.Line-Reflection/Solution.go | 5 + .../0356.Line-Reflection/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0359.Logger-Rate-Limiter/Solution.go | 5 + .../0359.Logger-Rate-Limiter/Solution_test.go | 39 ++++ .../0360.Sort-Transformed-Array/Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/301-400/0361.Bomb-Enemy/Solution.go | 5 + .../301-400/0361.Bomb-Enemy/Solution_test.go | 39 ++++ .../0362.Design-Hit-Counter/Solution.go | 5 + .../0362.Design-Hit-Counter/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0369.Plus-One-Linked-List/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../301-400/0370.Range-Addition/Solution.go | 5 + .../0370.Range-Addition/Solution_test.go | 39 ++++ .../0379.Design-Phone-Directory/Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/301-400/0400.Nth-Digit/Solution.go | 5 + .../301-400/0400.Nth-Digit/Solution_test.go | 39 ++++ .../0408.Valid-Word-Abbreviation/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0418.Sentence-Screen-Fitting/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0422.Valid-Word-Square/Solution.go | 5 + .../0422.Valid-Word-Square/Solution_test.go | 39 ++++ .../401-500/0425.Word-Squares/Solution.go | 5 + .../0425.Word-Squares/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0444.Sequence-Reconstruction/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../401-500/0469.Convex-Polygon/Solution.go | 5 + .../0469.Convex-Polygon/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../401-500/0484.Find-Permutation/Solution.go | 5 + .../0484.Find-Permutation/Solution_test.go | 39 ++++ .../0487.Max-Consecutive-Ones-II/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0489.Robot-Room-Cleaner/Solution.go | 5 + .../0489.Robot-Room-Cleaner/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../401-500/0499.The-Maze-III/Solution.go | 5 + .../0499.The-Maze-III/Solution_test.go | 39 ++++ leetcode/501-600/0505.The-Maze-II/Solution.go | 5 + .../501-600/0505.The-Maze-II/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../501-600/0518.Coin-Change-II/Solution.go | 5 + .../0518.Coin-Change-II/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0527.Word-Abbreviation/Solution.go | 5 + .../0527.Word-Abbreviation/Solution_test.go | 39 ++++ .../501-600/0531.Lonely-Pixel-I/Solution.go | 5 + .../0531.Lonely-Pixel-I/Solution_test.go | 39 ++++ .../501-600/0533.Lonely-Pixel-II/Solution.go | 5 + .../0533.Lonely-Pixel-II/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0544.Output-Contest-Matches/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0545.Boundary-of-Binary-Tree/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0547.Number-of-Provinces/Solution.go | 5 + .../0547.Number-of-Provinces/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../501-600/0561.Array-Partition/Solution.go | 5 + .../0561.Array-Partition/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0568.Maximum-Vacation-Days/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0573.Squirrel-Simulation/Solution.go | 5 + .../0573.Squirrel-Simulation/Solution_test.go | 39 ++++ .../501-600/0582.Kill-Process/Solution.go | 5 + .../0582.Kill-Process/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0616.Add-Bold-Tag-in-String/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0625.Minimum-Factorization/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0631.Design-Excel-Sum-Formula/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../601-700/0651.4-Keys-Keyboard/Solution.go | 5 + .../0651.4-Keys-Keyboard/Solution_test.go | 39 ++++ leetcode/601-700/0656.Coin-Path/Solution.go | 5 + .../601-700/0656.Coin-Path/Solution_test.go | 39 ++++ leetcode/601-700/0660.Remove-9/Solution.go | 5 + .../601-700/0660.Remove-9/Solution_test.go | 39 ++++ .../0663.Equal-Tree-Partition/Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/601-700/0666.Path-Sum-IV/Solution.go | 5 + .../601-700/0666.Path-Sum-IV/Solution_test.go | 39 ++++ .../0681.Next-Closest-Time/Solution.go | 5 + .../0681.Next-Closest-Time/Solution_test.go | 39 ++++ .../601-700/0683.K-Empty-Slots/Solution.go | 5 + .../0683.K-Empty-Slots/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/701-800/0716.Max-Stack/Solution.go | 5 + .../701-800/0716.Max-Stack/Solution_test.go | 39 ++++ leetcode/701-800/0723.Candy-Crush/Solution.go | 5 + .../701-800/0723.Candy-Crush/Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0734.Sentence-Similarity/Solution.go | 5 + .../0734.Sentence-Similarity/Solution_test.go | 39 ++++ .../0737.Sentence-Similarity-II/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/701-800/0751.IP-to-CIDR/Solution.go | 5 + .../701-800/0751.IP-to-CIDR/Solution_test.go | 39 ++++ leetcode/701-800/0755.Pour-Water/Solution.go | 5 + .../701-800/0755.Pour-Water/Solution_test.go | 39 ++++ .../0758.Bold-Words-in-String/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0759.Employee-Free-Time/Solution.go | 5 + .../0759.Employee-Free-Time/Solution_test.go | 39 ++++ .../0760.Find-Anagram-Mappings/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../0772.Basic-Calculator-III/Solution.go | 5 + .../Solution_test.go | 39 ++++ .../Solution.go | 5 + .../Solution_test.go | 39 ++++ leetcode/701-800/0776.Split-BST/Solution.go | 5 + .../701-800/0776.Split-BST/Solution_test.go | 39 ++++ .../0800.Similar-RGB-Color/Solution.go | 5 + .../0800.Similar-RGB-Color/Solution_test.go | 39 ++++ scripts/leetcode/gen.go | 179 ++++++++++++++++++ scripts/leetcode/gen_test.go | 75 ++++++++ .../template/contributors/.all-contributorsrc | 25 +++ scripts/template/solution/README.md | 32 ++++ scripts/template/solution/Solution.go | 5 + scripts/template/solution/Solution_test.go | 39 ++++ 1395 files changed, 30841 insertions(+), 75 deletions(-) delete mode 100644 cmd/leetcode/problem_test.go delete mode 100644 cmd/sitemap/sitemap.go delete mode 100644 cmd/sitemap/sitemap_baidu.go delete mode 100644 cmd/sitemap/sitemap_google.go create mode 100755 leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution.go create mode 100755 leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution_test.go create mode 100755 leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution.go create mode 100755 leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution_test.go create mode 100755 leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution.go create mode 100755 leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution_test.go create mode 100755 leetcode/1001-1100/1056.Confusing-Number/Solution.go create mode 100755 leetcode/1001-1100/1056.Confusing-Number/Solution_test.go create mode 100755 leetcode/1001-1100/1057.Campus-Bikes/Solution.go create mode 100755 leetcode/1001-1100/1057.Campus-Bikes/Solution_test.go create mode 100755 leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution.go create mode 100755 leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution_test.go create mode 100755 leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution.go create mode 100755 leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution_test.go create mode 100755 leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution.go create mode 100755 leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution_test.go create mode 100755 leetcode/1001-1100/1062.Longest-Repeating-Substring/Solution.go create mode 100755 leetcode/1001-1100/1062.Longest-Repeating-Substring/Solution_test.go create mode 100755 leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution.go create mode 100755 leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution_test.go create mode 100755 leetcode/1001-1100/1064.Fixed-Point/Solution.go create mode 100755 leetcode/1001-1100/1064.Fixed-Point/Solution_test.go create mode 100755 leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution.go create mode 100755 leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution_test.go create mode 100755 leetcode/1001-1100/1066.Campus-Bikes-II/Solution.go create mode 100755 leetcode/1001-1100/1066.Campus-Bikes-II/Solution_test.go create mode 100755 leetcode/1001-1100/1067.Digit-Count-in-Range/Solution.go create mode 100755 leetcode/1001-1100/1067.Digit-Count-in-Range/Solution_test.go create mode 100755 leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution.go create mode 100755 leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution_test.go create mode 100755 leetcode/1001-1100/1086.High-Five/Solution.go create mode 100755 leetcode/1001-1100/1086.High-Five/Solution_test.go create mode 100755 leetcode/1001-1100/1087.Brace-Expansion/Solution.go create mode 100755 leetcode/1001-1100/1087.Brace-Expansion/Solution_test.go create mode 100755 leetcode/1001-1100/1088.Confusing-Number-II/Solution.go create mode 100755 leetcode/1001-1100/1088.Confusing-Number-II/Solution_test.go create mode 100755 leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution.go create mode 100755 leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution_test.go create mode 100755 leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution.go create mode 100755 leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution_test.go create mode 100755 leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution.go create mode 100755 leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution_test.go create mode 100755 leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution.go create mode 100755 leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution_test.go create mode 100755 leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution.go create mode 100755 leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution_test.go create mode 100755 leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution.go create mode 100755 leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution_test.go create mode 100755 leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution.go create mode 100755 leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution_test.go create mode 100755 leetcode/101-200/0161.One-Edit-Distance/Solution.go create mode 100755 leetcode/101-200/0161.One-Edit-Distance/Solution_test.go create mode 100755 leetcode/101-200/0163.Missing-Ranges/Solution.go create mode 100755 leetcode/101-200/0163.Missing-Ranges/Solution_test.go create mode 100755 leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution.go create mode 100755 leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution_test.go create mode 100755 leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution.go create mode 100755 leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution_test.go create mode 100755 leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution.go create mode 100755 leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution_test.go create mode 100755 leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution.go create mode 100755 leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution_test.go create mode 100755 leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution.go create mode 100755 leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution_test.go create mode 100755 leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution.go create mode 100755 leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution_test.go create mode 100755 leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution.go create mode 100755 leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution_test.go create mode 100755 leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution.go create mode 100755 leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution_test.go create mode 100755 leetcode/1101-1200/1133.Largest-Unique-Number/Solution.go create mode 100755 leetcode/1101-1200/1133.Largest-Unique-Number/Solution_test.go create mode 100755 leetcode/1101-1200/1134.Armstrong-Number/Solution.go create mode 100755 leetcode/1101-1200/1134.Armstrong-Number/Solution_test.go create mode 100755 leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution.go create mode 100755 leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution_test.go create mode 100755 leetcode/1101-1200/1136.Parallel-Courses/Solution.go create mode 100755 leetcode/1101-1200/1136.Parallel-Courses/Solution_test.go create mode 100755 leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution.go create mode 100755 leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution_test.go create mode 100755 leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution.go create mode 100755 leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution_test.go create mode 100755 leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution.go create mode 100755 leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution_test.go create mode 100755 leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution.go create mode 100755 leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution_test.go create mode 100755 leetcode/1101-1200/1165.Single-Row-Keyboard/Solution.go create mode 100755 leetcode/1101-1200/1165.Single-Row-Keyboard/Solution_test.go create mode 100755 leetcode/1101-1200/1166.Design-File-System/Solution.go create mode 100755 leetcode/1101-1200/1166.Design-File-System/Solution_test.go create mode 100755 leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution.go create mode 100755 leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution_test.go create mode 100755 leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution.go create mode 100755 leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution_test.go create mode 100755 leetcode/1101-1200/1176.Diet-Plan-Performance/Solution.go create mode 100755 leetcode/1101-1200/1176.Diet-Plan-Performance/Solution_test.go create mode 100755 leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution.go create mode 100755 leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution_test.go create mode 100755 leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution.go create mode 100755 leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution_test.go create mode 100755 leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution.go create mode 100755 leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution_test.go create mode 100755 leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution.go create mode 100755 leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution_test.go create mode 100755 leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution.go create mode 100755 leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution_test.go create mode 100755 leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution.go create mode 100755 leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution_test.go create mode 100755 leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution.go create mode 100755 leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution_test.go create mode 100755 leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution.go create mode 100755 leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution_test.go create mode 100755 leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution.go create mode 100755 leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution_test.go create mode 100755 leetcode/1201-1300/1214.Two-Sum-BSTs/Solution.go create mode 100755 leetcode/1201-1300/1214.Two-Sum-BSTs/Solution_test.go create mode 100755 leetcode/1201-1300/1215.Stepping-Numbers/Solution.go create mode 100755 leetcode/1201-1300/1215.Stepping-Numbers/Solution_test.go create mode 100755 leetcode/1201-1300/1216.Valid-Palindrome-III/Solution.go create mode 100755 leetcode/1201-1300/1216.Valid-Palindrome-III/Solution_test.go create mode 100755 leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution.go create mode 100755 leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution_test.go create mode 100755 leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution.go create mode 100755 leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution_test.go create mode 100755 leetcode/1201-1300/1229.Meeting-Scheduler/Solution.go create mode 100755 leetcode/1201-1300/1229.Meeting-Scheduler/Solution_test.go create mode 100755 leetcode/1201-1300/1230.Toss-Strange-Coins/Solution.go create mode 100755 leetcode/1201-1300/1230.Toss-Strange-Coins/Solution_test.go create mode 100755 leetcode/1201-1300/1231.Divide-Chocolate/Solution.go create mode 100755 leetcode/1201-1300/1231.Divide-Chocolate/Solution_test.go create mode 100755 leetcode/1201-1300/1236.Web-Crawler/Solution.go create mode 100755 leetcode/1201-1300/1236.Web-Crawler/Solution_test.go create mode 100755 leetcode/1201-1300/1243.Array-Transformation/Solution.go create mode 100755 leetcode/1201-1300/1243.Array-Transformation/Solution_test.go create mode 100755 leetcode/1201-1300/1244.Design-A-Leaderboard/Solution.go create mode 100755 leetcode/1201-1300/1244.Design-A-Leaderboard/Solution_test.go create mode 100755 leetcode/1201-1300/1245.Tree-Diameter/Solution.go create mode 100755 leetcode/1201-1300/1245.Tree-Diameter/Solution_test.go create mode 100755 leetcode/1201-1300/1246.Palindrome-Removal/Solution.go create mode 100755 leetcode/1201-1300/1246.Palindrome-Removal/Solution_test.go create mode 100755 leetcode/1201-1300/1256.Encode-Number/Solution.go create mode 100755 leetcode/1201-1300/1256.Encode-Number/Solution_test.go create mode 100755 leetcode/1201-1300/1257.Smallest-Common-Region/Solution.go create mode 100755 leetcode/1201-1300/1257.Smallest-Common-Region/Solution_test.go create mode 100755 leetcode/1201-1300/1258.Synonymous-Sentences/Solution.go create mode 100755 leetcode/1201-1300/1258.Synonymous-Sentences/Solution_test.go create mode 100755 leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution.go create mode 100755 leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution_test.go create mode 100755 leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution.go create mode 100755 leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution_test.go create mode 100755 leetcode/1201-1300/1271.Hexspeak/Solution.go create mode 100755 leetcode/1201-1300/1271.Hexspeak/Solution_test.go create mode 100755 leetcode/1201-1300/1272.Remove-Interval/Solution.go create mode 100755 leetcode/1201-1300/1272.Remove-Interval/Solution_test.go create mode 100755 leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution.go create mode 100755 leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution_test.go create mode 100755 leetcode/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution.go create mode 100755 leetcode/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution_test.go create mode 100755 leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go create mode 100755 leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution_test.go create mode 100755 leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution.go create mode 100755 leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution_test.go create mode 100755 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go create mode 100755 leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go create mode 100755 leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution.go create mode 100755 leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution_test.go create mode 100755 leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution.go create mode 100755 leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution_test.go create mode 100755 leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution.go create mode 100755 leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution_test.go create mode 100755 leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go create mode 100755 leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go create mode 100755 leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution.go create mode 100755 leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution_test.go create mode 100755 leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution.go create mode 100755 leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution_test.go create mode 100755 leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go create mode 100755 leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go create mode 100755 leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution.go create mode 100755 leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution_test.go create mode 100755 leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution.go create mode 100755 leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution_test.go create mode 100755 leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution.go create mode 100755 leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution_test.go create mode 100755 leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go create mode 100755 leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go create mode 100755 leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution.go create mode 100755 leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution_test.go create mode 100755 leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution.go create mode 100755 leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution_test.go create mode 100755 leetcode/1301-1400/1390.Four-Divisors/Solution.go create mode 100755 leetcode/1301-1400/1390.Four-Divisors/Solution_test.go create mode 100755 leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go create mode 100755 leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go create mode 100755 leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution.go create mode 100755 leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution_test.go create mode 100755 leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution.go create mode 100755 leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution_test.go create mode 100755 leetcode/1301-1400/1397.Find-All-Good-Strings/Solution.go create mode 100755 leetcode/1301-1400/1397.Find-All-Good-Strings/Solution_test.go create mode 100755 leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go create mode 100755 leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go create mode 100755 leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution.go create mode 100755 leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution_test.go create mode 100755 leetcode/1401-1500/1402.Reducing-Dishes/Solution.go create mode 100755 leetcode/1401-1500/1402.Reducing-Dishes/Solution_test.go create mode 100755 leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution.go create mode 100755 leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution_test.go create mode 100755 leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution.go create mode 100755 leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution_test.go create mode 100755 leetcode/1401-1500/1405.Longest-Happy-String/Solution.go create mode 100755 leetcode/1401-1500/1405.Longest-Happy-String/Solution_test.go create mode 100755 leetcode/1401-1500/1406.Stone-Game-III/Solution.go create mode 100755 leetcode/1401-1500/1406.Stone-Game-III/Solution_test.go create mode 100755 leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go create mode 100755 leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go create mode 100755 leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go create mode 100755 leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go create mode 100755 "leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution.go" create mode 100755 "leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution_test.go" create mode 100755 leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go create mode 100755 leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go create mode 100755 leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go create mode 100755 leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go create mode 100755 leetcode/1401-1500/1417.Reformat-The-String/Solution.go create mode 100755 leetcode/1401-1500/1417.Reformat-The-String/Solution_test.go create mode 100755 leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go create mode 100755 leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go create mode 100755 leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go create mode 100755 leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go create mode 100755 leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution.go create mode 100755 leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution_test.go create mode 100755 leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution.go create mode 100755 leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution_test.go create mode 100755 leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution.go create mode 100755 leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution_test.go create mode 100755 leetcode/1401-1500/1425.Constrained-Subsequence-Sum/Solution.go create mode 100755 leetcode/1401-1500/1425.Constrained-Subsequence-Sum/Solution_test.go create mode 100755 leetcode/1401-1500/1426.Counting-Elements/Solution.go create mode 100755 leetcode/1401-1500/1426.Counting-Elements/Solution_test.go create mode 100755 leetcode/1401-1500/1427.Perform-String-Shifts/Solution.go create mode 100755 leetcode/1401-1500/1427.Perform-String-Shifts/Solution_test.go create mode 100755 leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution.go create mode 100755 leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution_test.go create mode 100755 leetcode/1401-1500/1429.First-Unique-Number/Solution.go create mode 100755 leetcode/1401-1500/1429.First-Unique-Number/Solution_test.go create mode 100755 leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution.go create mode 100755 leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go create mode 100755 leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go create mode 100755 leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution.go create mode 100755 leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution_test.go create mode 100755 leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution.go create mode 100755 leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution_test.go create mode 100755 leetcode/1401-1500/1436.Destination-City/Solution.go create mode 100755 leetcode/1401-1500/1436.Destination-City/Solution_test.go create mode 100755 leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution.go create mode 100755 leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution_test.go create mode 100755 leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution.go create mode 100755 leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution_test.go create mode 100755 leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution.go create mode 100755 leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution_test.go create mode 100755 leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution.go create mode 100755 leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution_test.go create mode 100755 leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution.go create mode 100755 leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution_test.go create mode 100755 leetcode/1401-1500/1446.Consecutive-Characters/Solution.go create mode 100755 leetcode/1401-1500/1446.Consecutive-Characters/Solution_test.go create mode 100755 leetcode/1401-1500/1447.Simplified-Fractions/Solution.go create mode 100755 leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go create mode 100755 leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution.go create mode 100755 leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution_test.go create mode 100755 leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go create mode 100755 leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go create mode 100755 leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go create mode 100755 leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go create mode 100755 leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution.go create mode 100755 leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution_test.go create mode 100755 leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go create mode 100755 leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go create mode 100755 leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution.go create mode 100755 leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution_test.go create mode 100755 leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution.go create mode 100755 leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution_test.go create mode 100755 leetcode/1401-1500/1462.Course-Schedule-IV/Solution.go create mode 100755 leetcode/1401-1500/1462.Course-Schedule-IV/Solution_test.go create mode 100755 leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go create mode 100755 leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go create mode 100755 leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution.go create mode 100755 leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution_test.go create mode 100755 leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution.go create mode 100755 leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution_test.go create mode 100755 leetcode/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution.go create mode 100755 leetcode/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution_test.go create mode 100755 leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go create mode 100755 leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go create mode 100755 leetcode/1401-1500/1473.Paint-House-III/Solution.go create mode 100755 leetcode/1401-1500/1473.Paint-House-III/Solution_test.go create mode 100755 leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution.go create mode 100755 leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution_test.go create mode 100755 leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go create mode 100755 leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go create mode 100755 leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution.go create mode 100755 leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution_test.go create mode 100755 leetcode/1401-1500/1478.Allocate-Mailboxes/Solution.go create mode 100755 leetcode/1401-1500/1478.Allocate-Mailboxes/Solution_test.go create mode 100755 leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution.go create mode 100755 leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution_test.go create mode 100755 leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution.go create mode 100755 leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution_test.go create mode 100755 leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution.go create mode 100755 leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution_test.go create mode 100755 leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution.go create mode 100755 leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution_test.go create mode 100755 leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution.go create mode 100755 leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution_test.go create mode 100755 leetcode/1401-1500/1487.Making-File-Names-Unique/Solution.go create mode 100755 leetcode/1401-1500/1487.Making-File-Names-Unique/Solution_test.go create mode 100755 leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go create mode 100755 leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go create mode 100755 leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution.go create mode 100755 leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution_test.go create mode 100755 leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go create mode 100755 leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go create mode 100755 leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution.go create mode 100755 leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution_test.go create mode 100755 leetcode/1401-1500/1494.Parallel-Courses-II/Solution.go create mode 100755 leetcode/1401-1500/1494.Parallel-Courses-II/Solution_test.go create mode 100755 leetcode/1401-1500/1496.Path-Crossing/Solution.go create mode 100755 leetcode/1401-1500/1496.Path-Crossing/Solution_test.go create mode 100755 leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go create mode 100755 leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go create mode 100755 leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution.go create mode 100755 leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution_test.go create mode 100755 leetcode/1401-1500/1499.Max-Value-of-Equation/Solution.go create mode 100755 leetcode/1401-1500/1499.Max-Value-of-Equation/Solution_test.go create mode 100755 leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution.go create mode 100755 leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution_test.go create mode 100755 leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution.go create mode 100755 leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution_test.go create mode 100755 leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution.go create mode 100755 leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution_test.go create mode 100755 leetcode/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution.go create mode 100755 leetcode/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution_test.go create mode 100755 leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution.go create mode 100755 leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution_test.go create mode 100755 leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution.go create mode 100755 leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution_test.go create mode 100755 leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution.go create mode 100755 leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution_test.go create mode 100755 leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution.go create mode 100755 leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution_test.go create mode 100755 leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution.go create mode 100755 leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution_test.go create mode 100755 leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution.go create mode 100755 leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution_test.go create mode 100755 leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution.go create mode 100755 leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution_test.go create mode 100755 leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution.go create mode 100755 leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution_test.go create mode 100755 leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution.go create mode 100755 leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution_test.go create mode 100755 leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution.go create mode 100755 leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution_test.go create mode 100755 leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution.go create mode 100755 leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution_test.go create mode 100755 leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution.go create mode 100755 leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution_test.go create mode 100755 leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution.go create mode 100755 leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution_test.go create mode 100755 leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution.go create mode 100755 leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution_test.go create mode 100755 leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution.go create mode 100755 leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution_test.go create mode 100755 leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution.go create mode 100755 leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution_test.go create mode 100755 leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution.go create mode 100755 leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution.go create mode 100755 leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution.go create mode 100755 leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution_test.go create mode 100755 leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution.go create mode 100755 leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution_test.go create mode 100755 leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution.go create mode 100755 leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution_test.go create mode 100755 leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution.go create mode 100755 leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution_test.go create mode 100755 leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution.go create mode 100755 leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution_test.go create mode 100755 leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution.go create mode 100755 leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution_test.go create mode 100755 leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution.go create mode 100755 leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution_test.go create mode 100755 leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution.go create mode 100755 leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution_test.go create mode 100755 leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution.go create mode 100755 leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution_test.go create mode 100755 leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution.go create mode 100755 leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution.go create mode 100755 leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution_test.go create mode 100755 leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution.go create mode 100755 leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution_test.go create mode 100755 leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution.go create mode 100755 leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution_test.go create mode 100755 leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution.go create mode 100755 leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution_test.go create mode 100755 leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution.go create mode 100755 leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution_test.go create mode 100755 leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution.go create mode 100755 leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution_test.go create mode 100755 leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution.go create mode 100755 leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution_test.go create mode 100755 leetcode/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution.go create mode 100755 leetcode/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution_test.go create mode 100755 leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution.go create mode 100755 leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution_test.go create mode 100755 leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution.go create mode 100755 leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution_test.go create mode 100755 leetcode/1801-1900/1826.Faulty-Sensor/Solution.go create mode 100755 leetcode/1801-1900/1826.Faulty-Sensor/Solution_test.go create mode 100755 leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution.go create mode 100755 leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution_test.go create mode 100755 leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution.go create mode 100755 leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution_test.go create mode 100755 leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution.go create mode 100755 leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution_test.go create mode 100755 leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution.go create mode 100755 leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution_test.go create mode 100755 leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution.go create mode 100755 leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution_test.go create mode 100755 leetcode/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution.go create mode 100755 leetcode/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution_test.go create mode 100755 leetcode/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution.go create mode 100755 leetcode/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution_test.go create mode 100755 leetcode/1801-1900/1891.Cutting-Ribbons/Solution.go create mode 100755 leetcode/1801-1900/1891.Cutting-Ribbons/Solution_test.go create mode 100755 leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution.go create mode 100755 leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution_test.go create mode 100755 leetcode/1901-2000/1908.Game-of-Nim/Solution.go create mode 100755 leetcode/1901-2000/1908.Game-of-Nim/Solution_test.go create mode 100755 leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution.go create mode 100755 leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution_test.go create mode 100755 leetcode/1901-2000/1924.Erect-the-Fence-II/Solution.go create mode 100755 leetcode/1901-2000/1924.Erect-the-Fence-II/Solution_test.go create mode 100755 leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution.go create mode 100755 leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution_test.go create mode 100755 leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution.go create mode 100755 leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution_test.go create mode 100755 leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution.go create mode 100755 leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution_test.go create mode 100755 leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution.go create mode 100755 leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution_test.go create mode 100755 leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution.go create mode 100755 leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution_test.go create mode 100755 leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution.go create mode 100755 leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution_test.go create mode 100755 leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution.go create mode 100755 leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution_test.go create mode 100755 leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution.go create mode 100755 leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution_test.go create mode 100755 leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution.go create mode 100755 leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution_test.go create mode 100755 leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution.go create mode 100755 leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution_test.go create mode 100755 leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution.go create mode 100755 leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution_test.go create mode 100755 leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution.go create mode 100755 leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution_test.go create mode 100755 leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution.go create mode 100755 leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution_test.go create mode 100755 leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution.go create mode 100755 leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution_test.go create mode 100755 leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution.go create mode 100755 leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution_test.go create mode 100755 leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution.go create mode 100755 leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution_test.go create mode 100755 leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution.go create mode 100755 leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution_test.go create mode 100755 leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution.go create mode 100755 leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution_test.go create mode 100755 leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution.go create mode 100755 leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution_test.go create mode 100755 leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution.go create mode 100755 leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution_test.go create mode 100755 leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution.go create mode 100755 leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution_test.go create mode 100755 leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution.go create mode 100755 leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution_test.go create mode 100755 leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution.go create mode 100755 leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution_test.go create mode 100755 leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution.go create mode 100755 leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution_test.go create mode 100755 leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution.go create mode 100755 leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution_test.go create mode 100755 leetcode/201-300/0243.Shortest-Word-Distance/Solution.go create mode 100755 leetcode/201-300/0243.Shortest-Word-Distance/Solution_test.go create mode 100755 leetcode/201-300/0244.Shortest-Word-Distance-II/Solution.go create mode 100755 leetcode/201-300/0244.Shortest-Word-Distance-II/Solution_test.go create mode 100755 leetcode/201-300/0245.Shortest-Word-Distance-III/Solution.go create mode 100755 leetcode/201-300/0245.Shortest-Word-Distance-III/Solution_test.go create mode 100755 leetcode/201-300/0246.Strobogrammatic-Number/Solution.go create mode 100755 leetcode/201-300/0246.Strobogrammatic-Number/Solution_test.go create mode 100755 leetcode/201-300/0247.Strobogrammatic-Number-II/Solution.go create mode 100755 leetcode/201-300/0247.Strobogrammatic-Number-II/Solution_test.go create mode 100755 leetcode/201-300/0248.Strobogrammatic-Number-III/Solution.go create mode 100755 leetcode/201-300/0248.Strobogrammatic-Number-III/Solution_test.go create mode 100755 leetcode/201-300/0249.Group-Shifted-Strings/Solution.go create mode 100755 leetcode/201-300/0249.Group-Shifted-Strings/Solution_test.go create mode 100755 leetcode/201-300/0250.Count-Univalue-Subtrees/Solution.go create mode 100755 leetcode/201-300/0250.Count-Univalue-Subtrees/Solution_test.go create mode 100755 leetcode/201-300/0251.Flatten-2D-Vector/Solution.go create mode 100755 leetcode/201-300/0251.Flatten-2D-Vector/Solution_test.go create mode 100755 leetcode/201-300/0252.Meeting-Rooms/Solution.go create mode 100755 leetcode/201-300/0252.Meeting-Rooms/Solution_test.go create mode 100755 leetcode/201-300/0253.Meeting-Rooms-II/Solution.go create mode 100755 leetcode/201-300/0253.Meeting-Rooms-II/Solution_test.go create mode 100755 leetcode/201-300/0254.Factor-Combinations/Solution.go create mode 100755 leetcode/201-300/0254.Factor-Combinations/Solution_test.go create mode 100755 leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution.go create mode 100755 leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution_test.go create mode 100755 leetcode/201-300/0256.Paint-House/Solution.go create mode 100755 leetcode/201-300/0256.Paint-House/Solution_test.go create mode 100755 leetcode/201-300/0259.3Sum-Smaller/Solution.go create mode 100755 leetcode/201-300/0259.3Sum-Smaller/Solution_test.go create mode 100755 leetcode/201-300/0261.Graph-Valid-Tree/Solution.go create mode 100755 leetcode/201-300/0261.Graph-Valid-Tree/Solution_test.go create mode 100755 leetcode/201-300/0265.Paint-House-II/Solution.go create mode 100755 leetcode/201-300/0265.Paint-House-II/Solution_test.go create mode 100755 leetcode/201-300/0266.Palindrome-Permutation/Solution.go create mode 100755 leetcode/201-300/0266.Palindrome-Permutation/Solution_test.go create mode 100755 leetcode/201-300/0267.Palindrome-Permutation-II/Solution.go create mode 100755 leetcode/201-300/0267.Palindrome-Permutation-II/Solution_test.go create mode 100755 leetcode/201-300/0269.Alien-Dictionary/Solution.go create mode 100755 leetcode/201-300/0269.Alien-Dictionary/Solution_test.go create mode 100755 leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution.go create mode 100755 leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution_test.go create mode 100755 leetcode/201-300/0271.Encode-and-Decode-Strings/Solution.go create mode 100755 leetcode/201-300/0271.Encode-and-Decode-Strings/Solution_test.go create mode 100755 leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution.go create mode 100755 leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution_test.go create mode 100755 leetcode/201-300/0276.Paint-Fence/Solution.go create mode 100755 leetcode/201-300/0276.Paint-Fence/Solution_test.go create mode 100755 leetcode/201-300/0277.Find-the-Celebrity/Solution.go create mode 100755 leetcode/201-300/0277.Find-the-Celebrity/Solution_test.go create mode 100755 leetcode/201-300/0280.Wiggle-Sort/Solution.go create mode 100755 leetcode/201-300/0280.Wiggle-Sort/Solution_test.go create mode 100755 leetcode/201-300/0281.Zigzag-Iterator/Solution.go create mode 100755 leetcode/201-300/0281.Zigzag-Iterator/Solution_test.go create mode 100755 leetcode/201-300/0285.Inorder-Successor-in-BST/Solution.go create mode 100755 leetcode/201-300/0285.Inorder-Successor-in-BST/Solution_test.go create mode 100755 leetcode/201-300/0286.Walls-and-Gates/Solution.go create mode 100755 leetcode/201-300/0286.Walls-and-Gates/Solution_test.go create mode 100755 leetcode/201-300/0288.Unique-Word-Abbreviation/Solution.go create mode 100755 leetcode/201-300/0288.Unique-Word-Abbreviation/Solution_test.go create mode 100755 leetcode/201-300/0291.Word-Pattern-II/Solution.go create mode 100755 leetcode/201-300/0291.Word-Pattern-II/Solution_test.go create mode 100755 leetcode/201-300/0293.Flip-Game/Solution.go create mode 100755 leetcode/201-300/0293.Flip-Game/Solution_test.go create mode 100755 leetcode/201-300/0294.Flip-Game-II/Solution.go create mode 100755 leetcode/201-300/0294.Flip-Game-II/Solution_test.go create mode 100755 leetcode/201-300/0296.Best-Meeting-Point/Solution.go create mode 100755 leetcode/201-300/0296.Best-Meeting-Point/Solution_test.go create mode 100755 leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution.go create mode 100755 leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution_test.go create mode 100755 leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution.go create mode 100755 leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution_test.go create mode 100755 leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution.go create mode 100755 leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution_test.go create mode 100755 leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution.go create mode 100755 leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution_test.go create mode 100755 leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution.go create mode 100755 leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution_test.go create mode 100755 leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution.go create mode 100755 leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution_test.go create mode 100755 leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution.go create mode 100755 leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution_test.go create mode 100755 leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution.go create mode 100755 leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution_test.go create mode 100755 leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution.go create mode 100755 leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution_test.go create mode 100755 leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution.go create mode 100755 leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution_test.go create mode 100755 leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution.go create mode 100755 leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution_test.go create mode 100755 leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution.go create mode 100755 leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution_test.go create mode 100755 leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution.go create mode 100755 leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution_test.go create mode 100755 leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution.go create mode 100755 leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution_test.go create mode 100755 leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution.go create mode 100755 leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution_test.go create mode 100755 leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution.go create mode 100755 leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution_test.go create mode 100755 leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution.go create mode 100755 leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution_test.go create mode 100755 leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution.go create mode 100755 leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution_test.go create mode 100755 leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution.go create mode 100755 leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution_test.go create mode 100755 leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution.go create mode 100755 leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution_test.go create mode 100755 leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution.go create mode 100755 leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution_test.go create mode 100755 leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution.go create mode 100755 leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution_test.go create mode 100755 leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution.go create mode 100755 leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution_test.go create mode 100755 leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution.go create mode 100755 leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution_test.go create mode 100755 leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution.go create mode 100755 leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution_test.go create mode 100755 leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution.go create mode 100755 leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution_test.go create mode 100755 leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution.go create mode 100755 leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution_test.go create mode 100755 leetcode/2201-2300/2297.Jump-Game-VIII/Solution.go create mode 100755 leetcode/2201-2300/2297.Jump-Game-VIII/Solution_test.go create mode 100755 leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution.go create mode 100755 leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution_test.go create mode 100755 leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution.go create mode 100755 leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution_test.go create mode 100755 leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution.go create mode 100755 leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution_test.go create mode 100755 leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution.go create mode 100755 leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution_test.go create mode 100755 leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution.go create mode 100755 leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution_test.go create mode 100755 leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution.go create mode 100755 leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution_test.go create mode 100755 leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution.go create mode 100755 leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution_test.go create mode 100755 leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution.go create mode 100755 leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution_test.go create mode 100755 leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution.go create mode 100755 leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution_test.go create mode 100755 leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution.go create mode 100755 leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution_test.go create mode 100755 leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution.go create mode 100755 leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution_test.go create mode 100755 leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution.go create mode 100755 leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution_test.go create mode 100755 leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution.go create mode 100755 leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution_test.go create mode 100755 leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution.go create mode 100755 leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution_test.go create mode 100755 leetcode/2401-2500/2408.Design-SQL/Solution.go create mode 100755 leetcode/2401-2500/2408.Design-SQL/Solution_test.go create mode 100755 leetcode/2401-2500/2417.Closest-Fair-Integer/Solution.go create mode 100755 leetcode/2401-2500/2417.Closest-Fair-Integer/Solution_test.go create mode 100755 leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution.go create mode 100755 leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution_test.go create mode 100755 leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution.go create mode 100755 leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution_test.go create mode 100755 leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution.go create mode 100755 leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution_test.go create mode 100755 leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution.go create mode 100755 leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution_test.go create mode 100755 leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution.go create mode 100755 leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution_test.go create mode 100755 leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution.go create mode 100755 leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution_test.go create mode 100755 leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution.go create mode 100755 leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution_test.go create mode 100755 leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution.go create mode 100755 leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution_test.go create mode 100755 leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution.go create mode 100755 leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution_test.go create mode 100755 leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution.go create mode 100755 leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution_test.go create mode 100755 leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution.go create mode 100755 leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution_test.go create mode 100755 leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go create mode 100755 leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2502.Design-Memory-Allocator/Solution.go create mode 100755 leetcode/2501-2600/2502.Design-Memory-Allocator/Solution_test.go create mode 100755 leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go create mode 100755 leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go create mode 100755 leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution.go create mode 100755 leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution_test.go create mode 100755 leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution.go create mode 100755 leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution_test.go create mode 100755 leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution.go create mode 100755 leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution_test.go create mode 100755 leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution.go create mode 100755 leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution_test.go create mode 100755 leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution.go create mode 100755 leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution_test.go create mode 100755 leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution.go create mode 100755 leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution_test.go create mode 100755 leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution.go create mode 100755 leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution_test.go create mode 100755 leetcode/2501-2600/2512.Reward-Top-K-Students/Solution.go create mode 100755 leetcode/2501-2600/2512.Reward-Top-K-Students/Solution_test.go create mode 100755 leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution.go create mode 100755 leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution_test.go create mode 100755 leetcode/2501-2600/2514.Count-Anagrams/Solution.go create mode 100755 leetcode/2501-2600/2514.Count-Anagrams/Solution_test.go create mode 100755 leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution.go create mode 100755 leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go create mode 100755 leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go create mode 100755 leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution.go create mode 100755 leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution_test.go create mode 100755 leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution.go create mode 100755 leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution_test.go create mode 100755 leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution.go create mode 100755 leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution_test.go create mode 100755 leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution.go create mode 100755 leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution_test.go create mode 100755 leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution.go create mode 100755 leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution.go create mode 100755 leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution_test.go create mode 100755 leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go create mode 100755 leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go create mode 100755 leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution.go create mode 100755 leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution_test.go create mode 100755 leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution.go create mode 100755 leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution_test.go create mode 100755 leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution.go create mode 100755 leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution_test.go create mode 100755 leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution.go create mode 100755 leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go create mode 100755 leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go create mode 100755 leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go create mode 100755 leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go create mode 100755 leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go create mode 100755 leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution_test.go create mode 100755 leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution.go create mode 100755 leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution_test.go create mode 100755 leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution.go create mode 100755 leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution_test.go create mode 100755 leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution.go create mode 100755 leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution_test.go create mode 100755 leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution.go create mode 100755 leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution_test.go create mode 100755 leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution.go create mode 100755 leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go create mode 100755 leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go create mode 100755 leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go create mode 100755 leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go create mode 100755 leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution.go create mode 100755 leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution_test.go create mode 100755 leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution.go create mode 100755 leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution_test.go create mode 100755 leetcode/2501-2600/2540.Minimum-Common-Value/Solution.go create mode 100755 leetcode/2501-2600/2540.Minimum-Common-Value/Solution_test.go create mode 100755 leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution.go create mode 100755 leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution_test.go create mode 100755 leetcode/2501-2600/2542.Maximum-Subsequence-Score/Solution.go create mode 100755 leetcode/2501-2600/2542.Maximum-Subsequence-Score/Solution_test.go create mode 100755 leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution.go create mode 100755 leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution_test.go create mode 100755 leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution.go create mode 100755 leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution_test.go create mode 100755 leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution.go create mode 100755 leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution_test.go create mode 100755 leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution.go create mode 100755 leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution_test.go create mode 100755 leetcode/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution.go create mode 100755 leetcode/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution.go create mode 100755 leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution_test.go create mode 100755 leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution.go create mode 100755 leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution_test.go create mode 100755 leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution.go create mode 100755 leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution_test.go create mode 100755 leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution.go create mode 100755 leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution_test.go create mode 100755 leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution.go create mode 100755 leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution_test.go create mode 100755 leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution.go create mode 100755 leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go create mode 100755 leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go create mode 100755 leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution.go create mode 100755 leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution_test.go create mode 100755 leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution.go create mode 100755 leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution_test.go create mode 100755 leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution.go create mode 100755 leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution_test.go create mode 100755 leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go create mode 100755 leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go create mode 100755 leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go create mode 100755 leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go create mode 100755 leetcode/2501-2600/2560.House-Robber-IV/Solution.go create mode 100755 leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go create mode 100755 leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go create mode 100755 leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go create mode 100755 leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution.go create mode 100755 leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution_test.go create mode 100755 leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go create mode 100755 leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go create mode 100755 leetcode/2501-2600/2564.Substring-XOR-Queries/Solution.go create mode 100755 leetcode/2501-2600/2564.Substring-XOR-Queries/Solution_test.go create mode 100755 leetcode/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution.go create mode 100755 leetcode/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution_test.go create mode 100755 leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go create mode 100755 leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go create mode 100755 leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution.go create mode 100755 leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution_test.go create mode 100755 leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution.go create mode 100755 leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution_test.go create mode 100755 leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution.go create mode 100755 leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution_test.go create mode 100755 leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go create mode 100755 leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go create mode 100755 leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution.go create mode 100755 leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution_test.go create mode 100755 leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution.go create mode 100755 leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution_test.go create mode 100755 leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution.go create mode 100755 leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution_test.go create mode 100755 leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go create mode 100755 leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go create mode 100755 leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution.go create mode 100755 leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution_test.go create mode 100755 leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution.go create mode 100755 leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution_test.go create mode 100755 leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution.go create mode 100755 leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go create mode 100755 leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution.go create mode 100755 leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution_test.go create mode 100755 leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go create mode 100755 leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go create mode 100755 leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution.go create mode 100755 leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution_test.go create mode 100755 leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution.go create mode 100755 leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution_test.go create mode 100755 leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go create mode 100755 leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go create mode 100755 leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go create mode 100755 leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution.go create mode 100755 leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution_test.go create mode 100755 leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution.go create mode 100755 leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution_test.go create mode 100755 leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution.go create mode 100755 leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution_test.go create mode 100755 leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution.go create mode 100755 leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution_test.go create mode 100755 leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution.go create mode 100755 leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution_test.go create mode 100755 leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution.go create mode 100755 leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution_test.go create mode 100755 leetcode/2501-2600/2590.Design-a-Todo-List/Solution.go create mode 100755 leetcode/2501-2600/2590.Design-a-Todo-List/Solution_test.go create mode 100755 leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution.go create mode 100755 leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution_test.go create mode 100755 leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution.go create mode 100755 leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution_test.go create mode 100755 leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go create mode 100755 leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go create mode 100755 leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go create mode 100755 leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go create mode 100755 leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution.go create mode 100755 leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution_test.go create mode 100755 leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution.go create mode 100755 leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution_test.go create mode 100755 leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution.go create mode 100755 leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution_test.go create mode 100755 leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go create mode 100755 leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go create mode 100755 leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution.go create mode 100755 leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution_test.go create mode 100755 leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution.go create mode 100755 leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution_test.go create mode 100755 leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go create mode 100755 leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go create mode 100755 leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution.go create mode 100755 leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution_test.go create mode 100755 leetcode/2601-2700/2603.Collect-Coins-in-a-Tree/Solution.go create mode 100755 leetcode/2601-2700/2603.Collect-Coins-in-a-Tree/Solution_test.go create mode 100755 leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution.go create mode 100755 leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution_test.go create mode 100755 leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution.go create mode 100755 leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution_test.go create mode 100755 leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go create mode 100755 leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go create mode 100755 leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution.go create mode 100755 leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution_test.go create mode 100755 leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution.go create mode 100755 leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution_test.go create mode 100755 leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution.go create mode 100755 leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution_test.go create mode 100755 leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution.go create mode 100755 leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution_test.go create mode 100755 leetcode/2601-2700/2611.Mice-and-Cheese/Solution.go create mode 100755 leetcode/2601-2700/2611.Mice-and-Cheese/Solution_test.go create mode 100755 leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution.go create mode 100755 leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution_test.go create mode 100755 leetcode/2601-2700/2613.Beautiful-Pairs/Solution.go create mode 100755 leetcode/2601-2700/2613.Beautiful-Pairs/Solution_test.go create mode 100755 leetcode/2601-2700/2614.Prime-In-Diagonal/Solution.go create mode 100755 leetcode/2601-2700/2614.Prime-In-Diagonal/Solution_test.go create mode 100755 leetcode/2601-2700/2615.Sum-of-Distances/Solution.go create mode 100755 leetcode/2601-2700/2615.Sum-of-Distances/Solution_test.go create mode 100755 leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution.go create mode 100755 leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution_test.go create mode 100755 leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution.go create mode 100755 leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution_test.go create mode 100755 leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution.go create mode 100755 leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution_test.go create mode 100755 leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go create mode 100755 leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go create mode 100755 leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go create mode 100755 leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go create mode 100755 leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go create mode 100755 leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go create mode 100755 leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go create mode 100755 leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution_test.go create mode 100755 leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution.go create mode 100755 leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution_test.go create mode 100755 leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution.go create mode 100755 leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution_test.go create mode 100755 leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution.go create mode 100755 leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution_test.go create mode 100755 leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution.go create mode 100755 leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution_test.go create mode 100755 leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution.go create mode 100755 leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution_test.go create mode 100755 leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution.go create mode 100755 leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution_test.go create mode 100755 leetcode/2601-2700/2652.Sum-Multiples/Solution.go create mode 100755 leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go create mode 100755 leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution.go create mode 100755 leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution_test.go create mode 100755 leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go create mode 100755 leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go create mode 100755 leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution.go create mode 100755 leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution_test.go create mode 100755 leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution.go create mode 100755 leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution_test.go create mode 100755 leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go create mode 100755 leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go create mode 100755 leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution.go create mode 100755 leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution_test.go create mode 100755 leetcode/2601-2700/2659.Make-Array-Empty/Solution.go create mode 100755 leetcode/2601-2700/2659.Make-Array-Empty/Solution_test.go create mode 100755 leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution.go create mode 100755 leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution_test.go create mode 100755 leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go create mode 100755 leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go create mode 100755 leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution.go create mode 100755 leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution_test.go create mode 100755 leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution.go create mode 100755 leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution_test.go create mode 100755 "leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" create mode 100755 "leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" create mode 100755 leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution.go create mode 100755 leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution_test.go create mode 100755 leetcode/2601-2700/2671.Frequency-Tracker/Solution.go create mode 100755 leetcode/2601-2700/2671.Frequency-Tracker/Solution_test.go create mode 100755 leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution.go create mode 100755 leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution_test.go create mode 100755 leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution.go create mode 100755 leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution.go create mode 100755 leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution_test.go create mode 100755 leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go create mode 100755 leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go create mode 100755 leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution.go create mode 100755 leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution_test.go create mode 100755 leetcode/2601-2700/2680.Maximum-OR/Solution.go create mode 100755 leetcode/2601-2700/2680.Maximum-OR/Solution_test.go create mode 100755 leetcode/2601-2700/2681.Power-of-Heroes/Solution.go create mode 100755 leetcode/2601-2700/2681.Power-of-Heroes/Solution_test.go create mode 100755 leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution.go create mode 100755 leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution_test.go create mode 100755 leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go create mode 100755 leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go create mode 100755 leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go create mode 100755 leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go create mode 100755 leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go create mode 100755 leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution_test.go create mode 100755 leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution.go create mode 100755 leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution_test.go create mode 100755 leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go create mode 100755 leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go create mode 100755 leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution.go create mode 100755 leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution_test.go create mode 100755 leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go create mode 100755 leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go create mode 100755 leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution.go create mode 100755 leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution_test.go create mode 100755 leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution.go create mode 100755 leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution_test.go create mode 100755 leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go create mode 100755 leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go create mode 100755 leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go create mode 100755 leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go create mode 100755 leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution.go create mode 100755 leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution_test.go create mode 100755 leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution.go create mode 100755 leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution_test.go create mode 100755 leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution.go create mode 100755 leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution_test.go create mode 100755 leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution.go create mode 100755 leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution_test.go create mode 100755 leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution.go create mode 100755 leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution_test.go create mode 100755 leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution.go create mode 100755 leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution_test.go create mode 100755 leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution.go create mode 100755 leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution_test.go create mode 100755 leetcode/2701-2800/2716.Minimize-String-Length/Solution.go create mode 100755 leetcode/2701-2800/2716.Minimize-String-Length/Solution_test.go create mode 100755 leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution.go create mode 100755 leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution_test.go create mode 100755 leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution.go create mode 100755 leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution_test.go create mode 100755 leetcode/2701-2800/2719.Count-of-Integers/Solution.go create mode 100755 leetcode/2701-2800/2719.Count-of-Integers/Solution_test.go create mode 100755 leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution.go create mode 100755 leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution_test.go create mode 100755 leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go create mode 100755 leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go create mode 100755 leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution.go create mode 100755 leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution_test.go create mode 100755 leetcode/2701-2800/2731.Movement-of-Robots/Solution.go create mode 100755 leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go create mode 100755 leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution.go create mode 100755 leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution_test.go create mode 100755 leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution.go create mode 100755 leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution_test.go create mode 100755 leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution.go create mode 100755 leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution_test.go create mode 100755 leetcode/2701-2800/2735.Collecting-Chocolates/Solution.go create mode 100755 leetcode/2701-2800/2735.Collecting-Chocolates/Solution_test.go create mode 100755 leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution.go create mode 100755 leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution_test.go create mode 100755 leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution.go create mode 100755 leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution_test.go create mode 100755 leetcode/2701-2800/2739.Total-Distance-Traveled/Solution.go create mode 100755 leetcode/2701-2800/2739.Total-Distance-Traveled/Solution_test.go create mode 100755 leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go create mode 100755 leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go create mode 100755 leetcode/2701-2800/2741.Special-Permutations/Solution.go create mode 100755 leetcode/2701-2800/2741.Special-Permutations/Solution_test.go create mode 100755 leetcode/2701-2800/2742.Painting-the-Walls/Solution.go create mode 100755 leetcode/2701-2800/2742.Painting-the-Walls/Solution_test.go create mode 100755 leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution.go create mode 100755 leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution_test.go create mode 100755 leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution.go create mode 100755 leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution_test.go create mode 100755 leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution.go create mode 100755 leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution_test.go create mode 100755 leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution.go create mode 100755 leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution_test.go create mode 100755 leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution.go create mode 100755 leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution_test.go create mode 100755 leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution.go create mode 100755 leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution_test.go create mode 100755 leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go create mode 100755 leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go create mode 100755 leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution.go create mode 100755 leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution_test.go create mode 100755 leetcode/2701-2800/2751.Robot-Collisions/Solution.go create mode 100755 leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go create mode 100755 leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution.go create mode 100755 leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution_test.go create mode 100755 leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution.go create mode 100755 leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution_test.go create mode 100755 leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution.go create mode 100755 leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution_test.go create mode 100755 leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go create mode 100755 leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go create mode 100755 leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution.go create mode 100755 leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution_test.go create mode 100755 "leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution.go" create mode 100755 "leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution_test.go" create mode 100755 leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution.go create mode 100755 leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution_test.go create mode 100755 leetcode/2701-2800/2766.Relocate-Marbles/Solution.go create mode 100755 leetcode/2701-2800/2766.Relocate-Marbles/Solution_test.go create mode 100755 leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution.go create mode 100755 leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution_test.go create mode 100755 leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution.go create mode 100755 leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution_test.go create mode 100755 leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution.go create mode 100755 leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution_test.go create mode 100755 leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution.go create mode 100755 leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution_test.go create mode 100755 leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution.go create mode 100755 leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution_test.go create mode 100755 leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution.go create mode 100755 leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution_test.go create mode 100755 leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution.go create mode 100755 leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution_test.go create mode 100755 leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution.go create mode 100755 leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution_test.go create mode 100755 leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go create mode 100755 leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go create mode 100755 leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go create mode 100755 leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go create mode 100755 leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution.go create mode 100755 leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution_test.go create mode 100755 leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution.go create mode 100755 leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution_test.go create mode 100755 leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution.go create mode 100755 leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution_test.go create mode 100755 leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution.go create mode 100755 leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution_test.go create mode 100755 leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution.go create mode 100755 leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution_test.go create mode 100755 leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go create mode 100755 leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go create mode 100755 leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution.go create mode 100755 leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution_test.go create mode 100755 leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution.go create mode 100755 leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution_test.go create mode 100755 leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution.go create mode 100755 leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution_test.go create mode 100755 leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution.go create mode 100755 leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution_test.go create mode 100755 leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution.go create mode 100755 leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution_test.go create mode 100755 leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution.go create mode 100755 leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution_test.go create mode 100755 leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution.go create mode 100755 leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution_test.go create mode 100755 leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution.go create mode 100755 leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution_test.go create mode 100755 leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution.go create mode 100755 leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution_test.go create mode 100755 leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution.go create mode 100755 leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution_test.go create mode 100755 leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution.go create mode 100755 leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution_test.go create mode 100755 leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution.go create mode 100755 leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution_test.go create mode 100755 leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution.go create mode 100755 leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution_test.go create mode 100755 leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution.go create mode 100755 leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution_test.go create mode 100755 leetcode/2801-2900/2810.Faulty-Keyboard/Solution.go create mode 100755 leetcode/2801-2900/2810.Faulty-Keyboard/Solution_test.go create mode 100755 leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution.go create mode 100755 leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution_test.go create mode 100755 leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution.go create mode 100755 leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution_test.go create mode 100755 leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution.go create mode 100755 leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution_test.go create mode 100755 leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution.go create mode 100755 leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution_test.go create mode 100755 leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution.go create mode 100755 leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution_test.go create mode 100755 leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution.go create mode 100755 leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution_test.go create mode 100755 leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution.go create mode 100755 leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution_test.go create mode 100755 leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go create mode 100755 leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go create mode 100755 leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution.go create mode 100755 leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution_test.go create mode 100755 leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution.go create mode 100755 leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution_test.go create mode 100755 leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go create mode 100755 leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go create mode 100755 leetcode/2801-2900/2826.Sorting-Three-Groups/Solution.go create mode 100755 leetcode/2801-2900/2826.Sorting-Three-Groups/Solution_test.go create mode 100755 leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution.go create mode 100755 leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution_test.go create mode 100755 leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution.go create mode 100755 leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution_test.go create mode 100755 leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution.go create mode 100755 leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution_test.go create mode 100755 leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution.go create mode 100755 leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution_test.go create mode 100755 leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution.go create mode 100755 leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution_test.go create mode 100755 leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution.go create mode 100755 leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution_test.go create mode 100755 leetcode/301-400/0305.Number-of-Islands-II/Solution.go create mode 100755 leetcode/301-400/0305.Number-of-Islands-II/Solution_test.go create mode 100755 leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution.go create mode 100755 leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution_test.go create mode 100755 leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution.go create mode 100755 leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution_test.go create mode 100755 leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution.go create mode 100755 leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution_test.go create mode 100755 leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution.go create mode 100755 leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution_test.go create mode 100755 leetcode/301-400/0320.Generalized-Abbreviation/Solution.go create mode 100755 leetcode/301-400/0320.Generalized-Abbreviation/Solution_test.go create mode 100755 leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution.go create mode 100755 leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution_test.go create mode 100755 leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution.go create mode 100755 leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution_test.go create mode 100755 leetcode/301-400/0333.Largest-BST-Subtree/Solution.go create mode 100755 leetcode/301-400/0333.Largest-BST-Subtree/Solution_test.go create mode 100755 leetcode/301-400/0339.Nested-List-Weight-Sum/Solution.go create mode 100755 leetcode/301-400/0339.Nested-List-Weight-Sum/Solution_test.go create mode 100755 leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution.go create mode 100755 leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution_test.go create mode 100755 leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution.go create mode 100755 leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution_test.go create mode 100755 leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution.go create mode 100755 leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution_test.go create mode 100755 leetcode/301-400/0351.Android-Unlock-Patterns/Solution.go create mode 100755 leetcode/301-400/0351.Android-Unlock-Patterns/Solution_test.go create mode 100755 leetcode/301-400/0353.Design-Snake-Game/Solution.go create mode 100755 leetcode/301-400/0353.Design-Snake-Game/Solution_test.go create mode 100755 leetcode/301-400/0356.Line-Reflection/Solution.go create mode 100755 leetcode/301-400/0356.Line-Reflection/Solution_test.go create mode 100755 leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution.go create mode 100755 leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution_test.go create mode 100755 leetcode/301-400/0359.Logger-Rate-Limiter/Solution.go create mode 100755 leetcode/301-400/0359.Logger-Rate-Limiter/Solution_test.go create mode 100755 leetcode/301-400/0360.Sort-Transformed-Array/Solution.go create mode 100755 leetcode/301-400/0360.Sort-Transformed-Array/Solution_test.go create mode 100755 leetcode/301-400/0361.Bomb-Enemy/Solution.go create mode 100755 leetcode/301-400/0361.Bomb-Enemy/Solution_test.go create mode 100755 leetcode/301-400/0362.Design-Hit-Counter/Solution.go create mode 100755 leetcode/301-400/0362.Design-Hit-Counter/Solution_test.go create mode 100755 leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution.go create mode 100755 leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution_test.go create mode 100755 leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution.go create mode 100755 leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution_test.go create mode 100755 leetcode/301-400/0369.Plus-One-Linked-List/Solution.go create mode 100755 leetcode/301-400/0369.Plus-One-Linked-List/Solution_test.go create mode 100755 leetcode/301-400/0370.Range-Addition/Solution.go create mode 100755 leetcode/301-400/0370.Range-Addition/Solution_test.go create mode 100755 leetcode/301-400/0379.Design-Phone-Directory/Solution.go create mode 100755 leetcode/301-400/0379.Design-Phone-Directory/Solution_test.go create mode 100755 leetcode/301-400/0400.Nth-Digit/Solution.go create mode 100755 leetcode/301-400/0400.Nth-Digit/Solution_test.go create mode 100755 leetcode/401-500/0408.Valid-Word-Abbreviation/Solution.go create mode 100755 leetcode/401-500/0408.Valid-Word-Abbreviation/Solution_test.go create mode 100755 leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution.go create mode 100755 leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution_test.go create mode 100755 leetcode/401-500/0418.Sentence-Screen-Fitting/Solution.go create mode 100755 leetcode/401-500/0418.Sentence-Screen-Fitting/Solution_test.go create mode 100755 leetcode/401-500/0422.Valid-Word-Square/Solution.go create mode 100755 leetcode/401-500/0422.Valid-Word-Square/Solution_test.go create mode 100755 leetcode/401-500/0425.Word-Squares/Solution.go create mode 100755 leetcode/401-500/0425.Word-Squares/Solution_test.go create mode 100755 leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution.go create mode 100755 leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution_test.go create mode 100755 leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution.go create mode 100755 leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution_test.go create mode 100755 leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution.go create mode 100755 leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution_test.go create mode 100755 leetcode/401-500/0439.Ternary-Expression-Parser/Solution.go create mode 100755 leetcode/401-500/0439.Ternary-Expression-Parser/Solution_test.go create mode 100755 leetcode/401-500/0444.Sequence-Reconstruction/Solution.go create mode 100755 leetcode/401-500/0444.Sequence-Reconstruction/Solution_test.go create mode 100755 leetcode/401-500/0465.Optimal-Account-Balancing/Solution.go create mode 100755 leetcode/401-500/0465.Optimal-Account-Balancing/Solution_test.go create mode 100755 leetcode/401-500/0469.Convex-Polygon/Solution.go create mode 100755 leetcode/401-500/0469.Convex-Polygon/Solution_test.go create mode 100755 leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution.go create mode 100755 leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution_test.go create mode 100755 leetcode/401-500/0484.Find-Permutation/Solution.go create mode 100755 leetcode/401-500/0484.Find-Permutation/Solution_test.go create mode 100755 leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution.go create mode 100755 leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution_test.go create mode 100755 leetcode/401-500/0489.Robot-Room-Cleaner/Solution.go create mode 100755 leetcode/401-500/0489.Robot-Room-Cleaner/Solution_test.go create mode 100755 leetcode/401-500/0491.Non-decreasing-Subsequences/Solution.go create mode 100755 leetcode/401-500/0491.Non-decreasing-Subsequences/Solution_test.go create mode 100755 leetcode/401-500/0499.The-Maze-III/Solution.go create mode 100755 leetcode/401-500/0499.The-Maze-III/Solution_test.go create mode 100755 leetcode/501-600/0505.The-Maze-II/Solution.go create mode 100755 leetcode/501-600/0505.The-Maze-II/Solution_test.go create mode 100755 leetcode/501-600/0510.Inorder-Successor-in-BST-II/Solution.go create mode 100755 leetcode/501-600/0510.Inorder-Successor-in-BST-II/Solution_test.go create mode 100755 leetcode/501-600/0518.Coin-Change-II/Solution.go create mode 100755 leetcode/501-600/0518.Coin-Change-II/Solution_test.go create mode 100755 leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution.go create mode 100755 leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution_test.go create mode 100755 leetcode/501-600/0527.Word-Abbreviation/Solution.go create mode 100755 leetcode/501-600/0527.Word-Abbreviation/Solution_test.go create mode 100755 leetcode/501-600/0531.Lonely-Pixel-I/Solution.go create mode 100755 leetcode/501-600/0531.Lonely-Pixel-I/Solution_test.go create mode 100755 leetcode/501-600/0533.Lonely-Pixel-II/Solution.go create mode 100755 leetcode/501-600/0533.Lonely-Pixel-II/Solution_test.go create mode 100755 leetcode/501-600/0536.Construct-Binary-Tree-from-String/Solution.go create mode 100755 leetcode/501-600/0536.Construct-Binary-Tree-from-String/Solution_test.go create mode 100755 leetcode/501-600/0544.Output-Contest-Matches/Solution.go create mode 100755 leetcode/501-600/0544.Output-Contest-Matches/Solution_test.go create mode 100755 leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution.go create mode 100755 leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution_test.go create mode 100755 leetcode/501-600/0547.Number-of-Provinces/Solution.go create mode 100755 leetcode/501-600/0547.Number-of-Provinces/Solution_test.go create mode 100755 leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution.go create mode 100755 leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution_test.go create mode 100755 leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution.go create mode 100755 leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution_test.go create mode 100755 leetcode/501-600/0555.Split-Concatenated-Strings/Solution.go create mode 100755 leetcode/501-600/0555.Split-Concatenated-Strings/Solution_test.go create mode 100755 leetcode/501-600/0561.Array-Partition/Solution.go create mode 100755 leetcode/501-600/0561.Array-Partition/Solution_test.go create mode 100755 leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution.go create mode 100755 leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution_test.go create mode 100755 leetcode/501-600/0568.Maximum-Vacation-Days/Solution.go create mode 100755 leetcode/501-600/0568.Maximum-Vacation-Days/Solution_test.go create mode 100755 leetcode/501-600/0573.Squirrel-Simulation/Solution.go create mode 100755 leetcode/501-600/0573.Squirrel-Simulation/Solution_test.go create mode 100755 leetcode/501-600/0582.Kill-Process/Solution.go create mode 100755 leetcode/501-600/0582.Kill-Process/Solution_test.go create mode 100755 leetcode/501-600/0588.Design-In-Memory-File-System/Solution.go create mode 100755 leetcode/501-600/0588.Design-In-Memory-File-System/Solution_test.go create mode 100755 leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution.go create mode 100755 leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution_test.go create mode 100755 leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution.go create mode 100755 leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution_test.go create mode 100755 leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go create mode 100755 leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution_test.go create mode 100755 leetcode/601-700/0625.Minimum-Factorization/Solution.go create mode 100755 leetcode/601-700/0625.Minimum-Factorization/Solution_test.go create mode 100755 leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution.go create mode 100755 leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution_test.go create mode 100755 leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution.go create mode 100755 leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution_test.go create mode 100755 leetcode/601-700/0635.Design-Log-Storage-System/Solution.go create mode 100755 leetcode/601-700/0635.Design-Log-Storage-System/Solution_test.go create mode 100755 leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution.go create mode 100755 leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution_test.go create mode 100755 leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution.go create mode 100755 leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution_test.go create mode 100755 leetcode/601-700/0651.4-Keys-Keyboard/Solution.go create mode 100755 leetcode/601-700/0651.4-Keys-Keyboard/Solution_test.go create mode 100755 leetcode/601-700/0656.Coin-Path/Solution.go create mode 100755 leetcode/601-700/0656.Coin-Path/Solution_test.go create mode 100755 leetcode/601-700/0660.Remove-9/Solution.go create mode 100755 leetcode/601-700/0660.Remove-9/Solution_test.go create mode 100755 leetcode/601-700/0663.Equal-Tree-Partition/Solution.go create mode 100755 leetcode/601-700/0663.Equal-Tree-Partition/Solution_test.go create mode 100755 leetcode/601-700/0666.Path-Sum-IV/Solution.go create mode 100755 leetcode/601-700/0666.Path-Sum-IV/Solution_test.go create mode 100755 leetcode/601-700/0681.Next-Closest-Time/Solution.go create mode 100755 leetcode/601-700/0681.Next-Closest-Time/Solution_test.go create mode 100755 leetcode/601-700/0683.K-Empty-Slots/Solution.go create mode 100755 leetcode/601-700/0683.K-Empty-Slots/Solution_test.go create mode 100755 leetcode/601-700/0694.Number-of-Distinct-Islands/Solution.go create mode 100755 leetcode/601-700/0694.Number-of-Distinct-Islands/Solution_test.go create mode 100755 leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution.go create mode 100755 leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution_test.go create mode 100755 leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution.go create mode 100755 leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution_test.go create mode 100755 leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution.go create mode 100755 leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution_test.go create mode 100755 leetcode/701-800/0716.Max-Stack/Solution.go create mode 100755 leetcode/701-800/0716.Max-Stack/Solution_test.go create mode 100755 leetcode/701-800/0723.Candy-Crush/Solution.go create mode 100755 leetcode/701-800/0723.Candy-Crush/Solution_test.go create mode 100755 leetcode/701-800/0727.Minimum-Window-Subsequence/Solution.go create mode 100755 leetcode/701-800/0727.Minimum-Window-Subsequence/Solution_test.go create mode 100755 leetcode/701-800/0734.Sentence-Similarity/Solution.go create mode 100755 leetcode/701-800/0734.Sentence-Similarity/Solution_test.go create mode 100755 leetcode/701-800/0737.Sentence-Similarity-II/Solution.go create mode 100755 leetcode/701-800/0737.Sentence-Similarity-II/Solution_test.go create mode 100755 leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution.go create mode 100755 leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution_test.go create mode 100755 leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution.go create mode 100755 leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution_test.go create mode 100755 leetcode/701-800/0751.IP-to-CIDR/Solution.go create mode 100755 leetcode/701-800/0751.IP-to-CIDR/Solution_test.go create mode 100755 leetcode/701-800/0755.Pour-Water/Solution.go create mode 100755 leetcode/701-800/0755.Pour-Water/Solution_test.go create mode 100755 leetcode/701-800/0758.Bold-Words-in-String/Solution.go create mode 100755 leetcode/701-800/0758.Bold-Words-in-String/Solution_test.go create mode 100755 leetcode/701-800/0759.Employee-Free-Time/Solution.go create mode 100755 leetcode/701-800/0759.Employee-Free-Time/Solution_test.go create mode 100755 leetcode/701-800/0760.Find-Anagram-Mappings/Solution.go create mode 100755 leetcode/701-800/0760.Find-Anagram-Mappings/Solution_test.go create mode 100755 leetcode/701-800/0772.Basic-Calculator-III/Solution.go create mode 100755 leetcode/701-800/0772.Basic-Calculator-III/Solution_test.go create mode 100755 leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution.go create mode 100755 leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution_test.go create mode 100755 leetcode/701-800/0776.Split-BST/Solution.go create mode 100755 leetcode/701-800/0776.Split-BST/Solution_test.go create mode 100755 leetcode/701-800/0800.Similar-RGB-Color/Solution.go create mode 100755 leetcode/701-800/0800.Similar-RGB-Color/Solution_test.go create mode 100644 scripts/leetcode/gen.go create mode 100644 scripts/leetcode/gen_test.go create mode 100644 scripts/template/contributors/.all-contributorsrc create mode 100644 scripts/template/solution/README.md create mode 100644 scripts/template/solution/Solution.go create mode 100644 scripts/template/solution/Solution_test.go diff --git a/cmd/leetcode/makedir.go b/cmd/leetcode/makedir.go index ea17006b9..9f846df93 100644 --- a/cmd/leetcode/makedir.go +++ b/cmd/leetcode/makedir.go @@ -46,7 +46,7 @@ func MakeDirFromTo(problems []Problem, from, to int) { } } -// 生成木目录Dir +// 生成木目录Dir func MakeDir(problems []Problem) { for i := 0; i < len(problems); i++ { // fmt.Println(problems[i].PathName) diff --git a/cmd/leetcode/makedir_test.go b/cmd/leetcode/makedir_test.go index 875a7ecff..6f9be55a5 100644 --- a/cmd/leetcode/makedir_test.go +++ b/cmd/leetcode/makedir_test.go @@ -16,5 +16,5 @@ func TestMakeDir(t *testing.T) { fmt.Println(v) } - // MakeDir(problems) + MakeDir(problems) } diff --git a/cmd/leetcode/problem.go b/cmd/leetcode/problem.go index fdf074e85..ebbb4a808 100644 --- a/cmd/leetcode/problem.go +++ b/cmd/leetcode/problem.go @@ -2,8 +2,6 @@ package leetcode import ( "encoding/json" - "errors" - "fmt" "io/ioutil" "log" "net/http" @@ -24,7 +22,7 @@ type LeetCode struct { CategorySlug string `json:"category_slug"` } -// 问题 +// 问题 type Problem struct { Stat Stat `json:"stat"` Status bool `json:"status"` @@ -115,7 +113,7 @@ func GetProblemsJson() string { return string(problem_string) } -// 获取题目Buffer +// 获取题目Buffer func getProblemsBuffer() []byte { request, err := http.Get("https://leetcode.com/api/problems/Algorithms/") if err != nil { @@ -130,7 +128,7 @@ func getProblemsBuffer() []byte { return body } -// 格式化ID 补齐0 +// 格式化ID 补齐0 func formatId(id int) string { strId := strconv.Itoa(id) @@ -147,7 +145,7 @@ func formatId(id int) string { return strId } -// 格式化提名称 +// 格式化提名称 func formatName(name string) string { str := "" for i, v := range name { @@ -197,18 +195,3 @@ func formatName(name string) string { } return str } - -func UrlPath(path string) error { - resp, err := http.Get(path) - if err != nil { - fmt.Println(err) - return errors.New(path + " " + err.Error()) - } - - if resp.StatusCode != 200 { - fmt.Println(resp.StatusCode) - return errors.New(string(resp.StatusCode)) - } - - return nil -} diff --git a/cmd/leetcode/problem_test.go b/cmd/leetcode/problem_test.go deleted file mode 100644 index ccf8b4965..000000000 --- a/cmd/leetcode/problem_test.go +++ /dev/null @@ -1,14 +0,0 @@ -package leetcode - -import ( - "testing" -) - -func TestUrlPath(t *testing.T) { - t.Run("1", func(t *testing.T) { - err := UrlPath("https://www.baidu.com") - if err != nil { - t.Fatal(err.Error()) - } - }) -} diff --git a/cmd/sitemap/sitemap.go b/cmd/sitemap/sitemap.go deleted file mode 100644 index 094273164..000000000 --- a/cmd/sitemap/sitemap.go +++ /dev/null @@ -1,32 +0,0 @@ -package sitemap - -import ( - "fmt" - - "github.com/kylesliu/awesome-golang-algorithm/cmd/leetcode" -) - -type Config struct { - SecureKey string -} - -type SiteMap struct { - UrlSet []UrlSet `xml:"urlset"` -} - -func New(problems []leetcode.Problem) SiteMap { - fmt.Println(len(problems)) - for i := 0; i < len(problems); i++ { - fmt.Println(problems[i].DirPath) - } - return SiteMap{} -} - -type UrlSet struct { - Url []Url `xml:"url"` -} - -type Url struct { - Loc string `xml:"loc"` - Lastmod string `xml:"lastmod"` -} diff --git a/cmd/sitemap/sitemap_baidu.go b/cmd/sitemap/sitemap_baidu.go deleted file mode 100644 index 7e896d70a..000000000 --- a/cmd/sitemap/sitemap_baidu.go +++ /dev/null @@ -1 +0,0 @@ -package sitemap diff --git a/cmd/sitemap/sitemap_google.go b/cmd/sitemap/sitemap_google.go deleted file mode 100644 index 7e896d70a..000000000 --- a/cmd/sitemap/sitemap_google.go +++ /dev/null @@ -1 +0,0 @@ -package sitemap diff --git a/go.mod b/go.mod index ee0aeb8c5..67afdb964 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,35 @@ module awesome-golang-algorithm -go 1.16 +go 1.21 -require github.com/stretchr/testify v1.7.0 +require ( + github.com/imroc/req/v3 v3.41.6 + github.com/stretchr/testify v1.7.0 +) + +require ( + github.com/andybalholm/brotli v1.0.5 // 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/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/kr/pretty v0.1.0 // indirect + github.com/onsi/ginkgo/v2 v2.11.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 + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum index b380ae445..4b7c9837f 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,96 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= 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-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/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/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/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/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= +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= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution.go b/leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution_test.go b/leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1-100/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution.go b/leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution_test.go b/leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1027.Longest-Arithmetic-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution.go b/leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution_test.go b/leetcode/1001-1100/1055.Shortest-Way-to-Form-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1055.Shortest-Way-to-Form-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/1001-1100/1056.Confusing-Number/Solution.go b/leetcode/1001-1100/1056.Confusing-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1056.Confusing-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1056.Confusing-Number/Solution_test.go b/leetcode/1001-1100/1056.Confusing-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1056.Confusing-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1057.Campus-Bikes/Solution.go b/leetcode/1001-1100/1057.Campus-Bikes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1057.Campus-Bikes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1057.Campus-Bikes/Solution_test.go b/leetcode/1001-1100/1057.Campus-Bikes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1057.Campus-Bikes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution.go b/leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution_test.go b/leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-Target/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1058.Minimize-Rounding-Error-to-Meet-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/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution.go b/leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution_test.go b/leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1059.All-Paths-from-Source-Lead-to-Destination/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution.go b/leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution_test.go b/leetcode/1001-1100/1060.Missing-Element-in-Sorted-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1060.Missing-Element-in-Sorted-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/1001-1100/1062.Longest-Repeating-Substring/Solution.go b/leetcode/1001-1100/1062.Longest-Repeating-Substring/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1062.Longest-Repeating-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1062.Longest-Repeating-Substring/Solution_test.go b/leetcode/1001-1100/1062.Longest-Repeating-Substring/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1062.Longest-Repeating-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/1001-1100/1063.Number-of-Valid-Subarrays/Solution.go b/leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution_test.go b/leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1063.Number-of-Valid-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1064.Fixed-Point/Solution.go b/leetcode/1001-1100/1064.Fixed-Point/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1064.Fixed-Point/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1064.Fixed-Point/Solution_test.go b/leetcode/1001-1100/1064.Fixed-Point/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1064.Fixed-Point/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution.go b/leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution_test.go b/leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1065.Index-Pairs-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1066.Campus-Bikes-II/Solution.go b/leetcode/1001-1100/1066.Campus-Bikes-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1066.Campus-Bikes-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1066.Campus-Bikes-II/Solution_test.go b/leetcode/1001-1100/1066.Campus-Bikes-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1066.Campus-Bikes-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/1001-1100/1067.Digit-Count-in-Range/Solution.go b/leetcode/1001-1100/1067.Digit-Count-in-Range/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1067.Digit-Count-in-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1067.Digit-Count-in-Range/Solution_test.go b/leetcode/1001-1100/1067.Digit-Count-in-Range/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1067.Digit-Count-in-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution.go b/leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution_test.go b/leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1085.Sum-of-Digits-in-the-Minimum-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1086.High-Five/Solution.go b/leetcode/1001-1100/1086.High-Five/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1086.High-Five/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1086.High-Five/Solution_test.go b/leetcode/1001-1100/1086.High-Five/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1086.High-Five/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1087.Brace-Expansion/Solution.go b/leetcode/1001-1100/1087.Brace-Expansion/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1087.Brace-Expansion/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1087.Brace-Expansion/Solution_test.go b/leetcode/1001-1100/1087.Brace-Expansion/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1087.Brace-Expansion/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1088.Confusing-Number-II/Solution.go b/leetcode/1001-1100/1088.Confusing-Number-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1088.Confusing-Number-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1088.Confusing-Number-II/Solution_test.go b/leetcode/1001-1100/1088.Confusing-Number-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1088.Confusing-Number-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/1001-1100/1092.Shortest-Common-Supersequence/Solution.go b/leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution_test.go b/leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1092.Shortest-Common-Supersequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution.go b/leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution_test.go b/leetcode/1001-1100/1099.Two-Sum-Less-Than-K/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1099.Two-Sum-Less-Than-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/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution.go b/leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution_test.go b/leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-Characters/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1001-1100/1100.Find-K-Length-Substrings-With-No-Repeated-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/101-200/0156.Binary-Tree-Upside-Down/Solution.go b/leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution_test.go b/leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0156.Binary-Tree-Upside-Down/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution.go b/leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution_test.go b/leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0157.Read-N-Characters-Given-Read4/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution.go b/leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution_test.go b/leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-Times/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0158.Read-N-Characters-Given-read4-II--Call-Multiple-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/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution.go b/leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution_test.go b/leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0159.Longest-Substring-with-At-Most-Two-Distinct-Characters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/101-200/0161.One-Edit-Distance/Solution.go b/leetcode/101-200/0161.One-Edit-Distance/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0161.One-Edit-Distance/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0161.One-Edit-Distance/Solution_test.go b/leetcode/101-200/0161.One-Edit-Distance/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0161.One-Edit-Distance/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/101-200/0163.Missing-Ranges/Solution.go b/leetcode/101-200/0163.Missing-Ranges/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0163.Missing-Ranges/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0163.Missing-Ranges/Solution_test.go b/leetcode/101-200/0163.Missing-Ranges/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0163.Missing-Ranges/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution.go b/leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution_test.go b/leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0170.Two-Sum-III--Data-structure-design/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution.go b/leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution_test.go b/leetcode/101-200/0186.Reverse-Words-in-a-String-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/101-200/0186.Reverse-Words-in-a-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/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution.go b/leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution_test.go b/leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1101.The-Earliest-Moment-When-Everyone-Become-Friends/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution.go b/leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution_test.go b/leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1102.Path-With-Maximum-Minimum-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution.go b/leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution_test.go b/leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1118.Number-of-Days-in-a-Month/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution.go b/leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution_test.go b/leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1119.Remove-Vowels-from-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution.go b/leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution_test.go b/leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1120.Maximum-Average-Subtree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution.go b/leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution_test.go b/leetcode/1101-1200/1121.Divide-Array-Into-Increasing-Sequences/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1121.Divide-Array-Into-Increasing-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/1101-1200/1133.Largest-Unique-Number/Solution.go b/leetcode/1101-1200/1133.Largest-Unique-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1133.Largest-Unique-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1133.Largest-Unique-Number/Solution_test.go b/leetcode/1101-1200/1133.Largest-Unique-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1133.Largest-Unique-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1134.Armstrong-Number/Solution.go b/leetcode/1101-1200/1134.Armstrong-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1134.Armstrong-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1134.Armstrong-Number/Solution_test.go b/leetcode/1101-1200/1134.Armstrong-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1134.Armstrong-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution.go b/leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution_test.go b/leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1135.Connecting-Cities-With-Minimum-Cost/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1136.Parallel-Courses/Solution.go b/leetcode/1101-1200/1136.Parallel-Courses/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1136.Parallel-Courses/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1136.Parallel-Courses/Solution_test.go b/leetcode/1101-1200/1136.Parallel-Courses/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1136.Parallel-Courses/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution.go b/leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution_test.go b/leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1150.Check-If-a-Number-Is-Majority-Element-in-a-Sorted-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/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution.go b/leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution_test.go b/leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1151.Minimum-Swaps-to-Group-All-1s-Together/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution.go b/leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution_test.go b/leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1152.Analyze-User-Website-Visit-Pattern/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution.go b/leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution_test.go b/leetcode/1101-1200/1153.String-Transforms-Into-Another-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1153.String-Transforms-Into-Another-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/1101-1200/1165.Single-Row-Keyboard/Solution.go b/leetcode/1101-1200/1165.Single-Row-Keyboard/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1165.Single-Row-Keyboard/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1165.Single-Row-Keyboard/Solution_test.go b/leetcode/1101-1200/1165.Single-Row-Keyboard/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1165.Single-Row-Keyboard/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1166.Design-File-System/Solution.go b/leetcode/1101-1200/1166.Design-File-System/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1166.Design-File-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1166.Design-File-System/Solution_test.go b/leetcode/1101-1200/1166.Design-File-System/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1166.Design-File-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution.go b/leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution_test.go b/leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1167.Minimum-Cost-to-Connect-Sticks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution.go b/leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution_test.go b/leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1168.Optimize-Water-Distribution-in-a-Village/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1176.Diet-Plan-Performance/Solution.go b/leetcode/1101-1200/1176.Diet-Plan-Performance/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1176.Diet-Plan-Performance/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1176.Diet-Plan-Performance/Solution_test.go b/leetcode/1101-1200/1176.Diet-Plan-Performance/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1176.Diet-Plan-Performance/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution.go b/leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution_test.go b/leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1180.Count-Substrings-with-Only-One-Distinct-Letter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution.go b/leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution_test.go b/leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1181.Before-and-After-Puzzle/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution.go b/leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution_test.go b/leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1182.Shortest-Distance-to-Target-Color/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution.go b/leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution_test.go b/leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1183.Maximum-Number-of-Ones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution.go b/leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution_test.go b/leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1196.How-Many-Apples-Can-You-Put-into-the-Basket/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution.go b/leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution_test.go b/leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1197.Minimum-Knight-Moves/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution.go b/leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution_test.go b/leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1198.Find-Smallest-Common-Element-in-All-Rows/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution.go b/leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution_test.go b/leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1101-1200/1199.Minimum-Time-to-Build-Blocks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution.go b/leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution_test.go b/leetcode/1201-1300/1213.Intersection-of-Three-Sorted-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1213.Intersection-of-Three-Sorted-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/1201-1300/1214.Two-Sum-BSTs/Solution.go b/leetcode/1201-1300/1214.Two-Sum-BSTs/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1214.Two-Sum-BSTs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1214.Two-Sum-BSTs/Solution_test.go b/leetcode/1201-1300/1214.Two-Sum-BSTs/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1214.Two-Sum-BSTs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1215.Stepping-Numbers/Solution.go b/leetcode/1201-1300/1215.Stepping-Numbers/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1215.Stepping-Numbers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1215.Stepping-Numbers/Solution_test.go b/leetcode/1201-1300/1215.Stepping-Numbers/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1215.Stepping-Numbers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1216.Valid-Palindrome-III/Solution.go b/leetcode/1201-1300/1216.Valid-Palindrome-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1216.Valid-Palindrome-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1216.Valid-Palindrome-III/Solution_test.go b/leetcode/1201-1300/1216.Valid-Palindrome-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1216.Valid-Palindrome-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution.go b/leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution_test.go b/leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1217.Minimum-Cost-to-Move-Chips-to-The-Same-Position/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution.go b/leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution_test.go b/leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1228.Missing-Number-In-Arithmetic-Progression/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1229.Meeting-Scheduler/Solution.go b/leetcode/1201-1300/1229.Meeting-Scheduler/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1229.Meeting-Scheduler/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1229.Meeting-Scheduler/Solution_test.go b/leetcode/1201-1300/1229.Meeting-Scheduler/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1229.Meeting-Scheduler/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1230.Toss-Strange-Coins/Solution.go b/leetcode/1201-1300/1230.Toss-Strange-Coins/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1230.Toss-Strange-Coins/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1230.Toss-Strange-Coins/Solution_test.go b/leetcode/1201-1300/1230.Toss-Strange-Coins/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1230.Toss-Strange-Coins/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1231.Divide-Chocolate/Solution.go b/leetcode/1201-1300/1231.Divide-Chocolate/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1231.Divide-Chocolate/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1231.Divide-Chocolate/Solution_test.go b/leetcode/1201-1300/1231.Divide-Chocolate/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1231.Divide-Chocolate/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1236.Web-Crawler/Solution.go b/leetcode/1201-1300/1236.Web-Crawler/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1236.Web-Crawler/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1236.Web-Crawler/Solution_test.go b/leetcode/1201-1300/1236.Web-Crawler/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1236.Web-Crawler/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1243.Array-Transformation/Solution.go b/leetcode/1201-1300/1243.Array-Transformation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1243.Array-Transformation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1243.Array-Transformation/Solution_test.go b/leetcode/1201-1300/1243.Array-Transformation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1243.Array-Transformation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1244.Design-A-Leaderboard/Solution.go b/leetcode/1201-1300/1244.Design-A-Leaderboard/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1244.Design-A-Leaderboard/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1244.Design-A-Leaderboard/Solution_test.go b/leetcode/1201-1300/1244.Design-A-Leaderboard/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1244.Design-A-Leaderboard/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1245.Tree-Diameter/Solution.go b/leetcode/1201-1300/1245.Tree-Diameter/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1245.Tree-Diameter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1245.Tree-Diameter/Solution_test.go b/leetcode/1201-1300/1245.Tree-Diameter/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1245.Tree-Diameter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1246.Palindrome-Removal/Solution.go b/leetcode/1201-1300/1246.Palindrome-Removal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1246.Palindrome-Removal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1246.Palindrome-Removal/Solution_test.go b/leetcode/1201-1300/1246.Palindrome-Removal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1246.Palindrome-Removal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1256.Encode-Number/Solution.go b/leetcode/1201-1300/1256.Encode-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1256.Encode-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1256.Encode-Number/Solution_test.go b/leetcode/1201-1300/1256.Encode-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1256.Encode-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1257.Smallest-Common-Region/Solution.go b/leetcode/1201-1300/1257.Smallest-Common-Region/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1257.Smallest-Common-Region/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1257.Smallest-Common-Region/Solution_test.go b/leetcode/1201-1300/1257.Smallest-Common-Region/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1257.Smallest-Common-Region/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1258.Synonymous-Sentences/Solution.go b/leetcode/1201-1300/1258.Synonymous-Sentences/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1258.Synonymous-Sentences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1258.Synonymous-Sentences/Solution_test.go b/leetcode/1201-1300/1258.Synonymous-Sentences/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1258.Synonymous-Sentences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution.go b/leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution_test.go b/leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1259.Handshakes-That-Dont-Cross/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution.go b/leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution_test.go b/leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1265.Print-Immutable-Linked-List-in-Reverse/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1271.Hexspeak/Solution.go b/leetcode/1201-1300/1271.Hexspeak/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1271.Hexspeak/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1271.Hexspeak/Solution_test.go b/leetcode/1201-1300/1271.Hexspeak/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1271.Hexspeak/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1272.Remove-Interval/Solution.go b/leetcode/1201-1300/1272.Remove-Interval/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1272.Remove-Interval/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1272.Remove-Interval/Solution_test.go b/leetcode/1201-1300/1272.Remove-Interval/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1272.Remove-Interval/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution.go b/leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution_test.go b/leetcode/1201-1300/1273.Delete-Tree-Nodes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1273.Delete-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/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution.go b/leetcode/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution_test.go b/leetcode/1201-1300/1274.Number-of-Ships-in-a-Rectangle/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1201-1300/1274.Number-of-Ships-in-a-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() { +} diff --git a/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1366.Rank-Teams-by-Votes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution.go b/leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution_test.go b/leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1367.Linked-List-in-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1368.Minimum-Cost-to-Make-at-Least-One-Valid-Path-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution.go b/leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution_test.go b/leetcode/1301-1400/1370.Increasing-Decreasing-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1370.Increasing-Decreasing-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/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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1371.Find-the-Longest-Substring-Containing-Vowels-in-Even-Counts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution.go b/leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution_test.go b/leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1373.Maximum-Sum-BST-in-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1375.Number-of-Times-Binary-String-Is-Prefix-Aligned/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution.go b/leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution_test.go b/leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1377.Frog-Position-After-T-Seconds/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution.go b/leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution_test.go b/leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1379.Find-a-Corresponding-Node-of-a-Binary-Tree-in-a-Clone-of-That-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/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1381.Design-a-Stack-With-Increment-Operation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution.go b/leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution_test.go b/leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1383.Maximum-Performance-of-a-Team/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution.go b/leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution_test.go b/leetcode/1301-1400/1385.Find-the-Distance-Value-Between-Two-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1385.Find-the-Distance-Value-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/1301-1400/1386.Cinema-Seat-Allocation/Solution.go b/leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution_test.go b/leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1386.Cinema-Seat-Allocation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution.go b/leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution_test.go b/leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1388.Pizza-With-3n-Slices/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution.go b/leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution_test.go b/leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1389.Create-Target-Array-in-the-Given-Order/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1390.Four-Divisors/Solution.go b/leetcode/1301-1400/1390.Four-Divisors/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1390.Four-Divisors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go b/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1390.Four-Divisors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1391.Check-if-There-is-a-Valid-Path-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution.go b/leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution_test.go b/leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1392.Longest-Happy-Prefix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution.go b/leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution_test.go b/leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1394.Find-Lucky-Integer-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1397.Find-All-Good-Strings/Solution.go b/leetcode/1301-1400/1397.Find-All-Good-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1397.Find-All-Good-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1397.Find-All-Good-Strings/Solution_test.go b/leetcode/1301-1400/1397.Find-All-Good-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1397.Find-All-Good-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1301-1400/1400.Construct-K-Palindrome-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution.go b/leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution_test.go b/leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1401.Circle-and-Rectangle-Overlapping/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1402.Reducing-Dishes/Solution.go b/leetcode/1401-1500/1402.Reducing-Dishes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1402.Reducing-Dishes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1402.Reducing-Dishes/Solution_test.go b/leetcode/1401-1500/1402.Reducing-Dishes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1402.Reducing-Dishes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution.go b/leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution_test.go b/leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1403.Minimum-Subsequence-in-Non-Increasing-Order/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution.go b/leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution_test.go b/leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1404.Number-of-Steps-to-Reduce-a-Number-in-Binary-Representation-to-One/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1405.Longest-Happy-String/Solution.go b/leetcode/1401-1500/1405.Longest-Happy-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1405.Longest-Happy-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1405.Longest-Happy-String/Solution_test.go b/leetcode/1401-1500/1405.Longest-Happy-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1405.Longest-Happy-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/1401-1500/1406.Stone-Game-III/Solution.go b/leetcode/1401-1500/1406.Stone-Game-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1406.Stone-Game-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1406.Stone-Game-III/Solution_test.go b/leetcode/1401-1500/1406.Stone-Game-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1406.Stone-Game-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1408.String-Matching-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1410.HTML-Entity-Parser/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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-\303\227-3-Grid/Solution.go" new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ "b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-Grid/Solution.go" @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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-\303\227-3-Grid/Solution_test.go" new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ "b/leetcode/1401-1500/1411.Number-of-Ways-to-Paint-N-\303\227-3-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/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-K/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1414.Find-the-Minimum-Number-of-Fibonacci-Numbers-Whose-Sum-Is-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/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1417.Reformat-The-String/Solution.go b/leetcode/1401-1500/1417.Reformat-The-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1417.Reformat-The-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1417.Reformat-The-String/Solution_test.go b/leetcode/1401-1500/1417.Reformat-The-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1417.Reformat-The-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/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1418.Display-Table-of-Food-Orders-in-a-Restaurant/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1419.Minimum-Number-of-Frogs-Croaking/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution.go b/leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution_test.go b/leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1420.Build-Array-Where-You-Can-Find-The-Maximum-Exactly-K-Comparisons/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution.go b/leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution_test.go b/leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1422.Maximum-Score-After-Splitting-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution.go b/leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution_test.go b/leetcode/1401-1500/1424.Diagonal-Traverse-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1424.Diagonal-Traverse-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/1401-1500/1425.Constrained-Subsequence-Sum/Solution.go b/leetcode/1401-1500/1425.Constrained-Subsequence-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1425.Constrained-Subsequence-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1425.Constrained-Subsequence-Sum/Solution_test.go b/leetcode/1401-1500/1425.Constrained-Subsequence-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1425.Constrained-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/1401-1500/1426.Counting-Elements/Solution.go b/leetcode/1401-1500/1426.Counting-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1426.Counting-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1426.Counting-Elements/Solution_test.go b/leetcode/1401-1500/1426.Counting-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1426.Counting-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/1401-1500/1427.Perform-String-Shifts/Solution.go b/leetcode/1401-1500/1427.Perform-String-Shifts/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1427.Perform-String-Shifts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1427.Perform-String-Shifts/Solution_test.go b/leetcode/1401-1500/1427.Perform-String-Shifts/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1427.Perform-String-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/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution.go b/leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution_test.go b/leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1428.Leftmost-Column-with-at-Least-a-One/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1429.First-Unique-Number/Solution.go b/leetcode/1401-1500/1429.First-Unique-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1429.First-Unique-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1429.First-Unique-Number/Solution_test.go b/leetcode/1401-1500/1429.First-Unique-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1429.First-Unique-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution.go b/leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution_test.go b/leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1430.Check-If-a-String-Is-a-Valid-Sequence-from-Root-to-Leaves-Path-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1432.Max-Difference-You-Can-Get-From-Changing-an-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution.go b/leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution_test.go b/leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1433.Check-If-a-String-Can-Break-Another-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/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution.go b/leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution_test.go b/leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1434.Number-of-Ways-to-Wear-Different-Hats-to-Each-Other/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1436.Destination-City/Solution.go b/leetcode/1401-1500/1436.Destination-City/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1436.Destination-City/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1436.Destination-City/Solution_test.go b/leetcode/1401-1500/1436.Destination-City/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1436.Destination-City/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution.go b/leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution_test.go b/leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1437.Check-If-All-1s-Are-at-Least-Length-K-Places-Away/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution.go b/leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution_test.go b/leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1438.Longest-Continuous-Subarray-With-Absolute-Diff-Less-Than-or-Equal-to-Limit/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution.go b/leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution_test.go b/leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1439.Find-the-Kth-Smallest-Sum-of-a-Matrix-With-Sorted-Rows/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution.go b/leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution_test.go b/leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-a-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1443.Minimum-Time-to-Collect-All-Apples-in-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/1401-1500/1446.Consecutive-Characters/Solution.go b/leetcode/1401-1500/1446.Consecutive-Characters/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1446.Consecutive-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1446.Consecutive-Characters/Solution_test.go b/leetcode/1401-1500/1446.Consecutive-Characters/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1446.Consecutive-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/1401-1500/1447.Simplified-Fractions/Solution.go b/leetcode/1401-1500/1447.Simplified-Fractions/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1447.Simplified-Fractions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go b/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1447.Simplified-Fractions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution.go b/leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution_test.go b/leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-to-Target/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1449.Form-Largest-Integer-With-Digits-That-Add-up-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/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1451.Rearrange-Words-in-a-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1452.People-Whose-List-of-Favorite-Companies-Is-Not-a-Subset-of-Another-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution.go b/leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution_test.go b/leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1453.Maximum-Number-of-Darts-Inside-of-a-Circular-Dartboard/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1455.Check-If-a-Word-Occurs-As-a-Prefix-of-Any-Word-in-a-Sentence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1458.Max-Dot-Product-of-Two-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution.go b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution_test.go b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1460.Make-Two-Arrays-Equal-by-Reversing-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1462.Course-Schedule-IV/Solution.go b/leetcode/1401-1500/1462.Course-Schedule-IV/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1462.Course-Schedule-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1462.Course-Schedule-IV/Solution_test.go b/leetcode/1401-1500/1462.Course-Schedule-IV/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1462.Course-Schedule-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go b/leetcode/1401-1500/1463.Cherry-Pickup-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1463.Cherry-Pickup-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/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution.go b/leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution_test.go b/leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1465.Maximum-Area-of-a-Piece-of-Cake-After-Horizontal-and-Vertical-Cuts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution.go b/leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution_test.go b/leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-Balls/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1467.Probability-of-a-Two-Boxes-Having-The-Same-Number-of-Distinct-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/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution.go b/leetcode/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution_test.go b/leetcode/1401-1500/1469.Find-All-The-Lonely-Nodes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1469.Find-All-The-Lonely-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/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1471.The-k-Strongest-Values-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1473.Paint-House-III/Solution.go b/leetcode/1401-1500/1473.Paint-House-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1473.Paint-House-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1473.Paint-House-III/Solution_test.go b/leetcode/1401-1500/1473.Paint-House-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1473.Paint-House-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution.go b/leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution_test.go b/leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1474.Delete-N-Nodes-After-M-Nodes-of-a-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1475.Final-Prices-With-a-Special-Discount-in-a-Shop/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution.go b/leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution_test.go b/leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1477.Find-Two-Non-overlapping-Sub-arrays-Each-With-Target-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/1401-1500/1478.Allocate-Mailboxes/Solution.go b/leetcode/1401-1500/1478.Allocate-Mailboxes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1478.Allocate-Mailboxes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1478.Allocate-Mailboxes/Solution_test.go b/leetcode/1401-1500/1478.Allocate-Mailboxes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1478.Allocate-Mailboxes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1481.Least-Number-of-Unique-Integers-after-K-Removals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution.go b/leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution_test.go b/leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1482.Minimum-Number-of-Days-to-Make-m-Bouquets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution.go b/leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution_test.go b/leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1483.Kth-Ancestor-of-a-Tree-Node/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution.go b/leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution_test.go b/leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1485.Clone-Binary-Tree-With-Random-Pointer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution.go b/leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution_test.go b/leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1486.XOR-Operation-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1487.Making-File-Names-Unique/Solution.go b/leetcode/1401-1500/1487.Making-File-Names-Unique/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1487.Making-File-Names-Unique/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1487.Making-File-Names-Unique/Solution_test.go b/leetcode/1401-1500/1487.Making-File-Names-Unique/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1487.Making-File-Names-Unique/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1488.Avoid-Flood-in-The-City/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution.go b/leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution_test.go b/leetcode/1401-1500/1490.Clone-N-ary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1490.Clone-N-ary-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/1401-1500/1492.The-kth-Factor-of-n/Solution.go b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1492.The-kth-Factor-of-n/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution.go b/leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution_test.go b/leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1493.Longest-Subarray-of-1s-After-Deleting-One-Element/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1494.Parallel-Courses-II/Solution.go b/leetcode/1401-1500/1494.Parallel-Courses-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1494.Parallel-Courses-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1494.Parallel-Courses-II/Solution_test.go b/leetcode/1401-1500/1494.Parallel-Courses-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1494.Parallel-Courses-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/1401-1500/1496.Path-Crossing/Solution.go b/leetcode/1401-1500/1496.Path-Crossing/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1496.Path-Crossing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1496.Path-Crossing/Solution_test.go b/leetcode/1401-1500/1496.Path-Crossing/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1496.Path-Crossing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1497.Check-If-Array-Pairs-Are-Divisible-by-k/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution.go b/leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution_test.go b/leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1498.Number-of-Subsequences-That-Satisfy-the-Given-Sum-Condition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1499.Max-Value-of-Equation/Solution.go b/leetcode/1401-1500/1499.Max-Value-of-Equation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1499.Max-Value-of-Equation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1499.Max-Value-of-Equation/Solution_test.go b/leetcode/1401-1500/1499.Max-Value-of-Equation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1499.Max-Value-of-Equation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution.go b/leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution_test.go b/leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1401-1500/1500.Design-a-File-Sharing-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution.go b/leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution_test.go b/leetcode/1501-1600/1506.Find-Root-of-N-Ary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1506.Find-Root-of-N-Ary-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/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution.go b/leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution_test.go b/leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1516.Move-Sub-Tree-of-N-Ary-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/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution.go b/leetcode/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution_test.go b/leetcode/1501-1600/1522.Diameter-of-N-Ary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1522.Diameter-of-N-Ary-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/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution.go b/leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution_test.go b/leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1533.Find-the-Index-of-the-Large-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution.go b/leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution_test.go b/leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1538.Guess-the-Majority-in-a-Hidden-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/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution.go b/leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution_test.go b/leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1548.The-Most-Similar-Path-in-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution.go b/leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution_test.go b/leetcode/1501-1600/1554.Strings-Differ-by-One-Character/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1554.Strings-Differ-by-One-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/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution.go b/leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution_test.go b/leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-I/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1564.Put-Boxes-Into-the-Warehouse-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/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution.go b/leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution_test.go b/leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1570.Dot-Product-of-Two-Sparse-Vectors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution.go b/leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution_test.go b/leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1580.Put-Boxes-Into-the-Warehouse-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/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution.go b/leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution_test.go b/leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1586.Binary-Search-Tree-Iterator-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/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution.go b/leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution_test.go b/leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1501-1600/1597.Build-Binary-Expression-Tree-From-Infix-Expression/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution.go b/leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution_test.go b/leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1602.Find-Nearest-Right-Node-in-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution.go b/leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution_test.go b/leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1612.Check-If-Two-Expression-Trees-are-Equivalent/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution.go b/leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution_test.go b/leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1618.Maximum-Font-to-Fit-a-Sentence-in-a-Screen/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution.go b/leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution_test.go b/leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1628.Design-an-Expression-Tree-With-Evaluate-Function/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution.go b/leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution_test.go b/leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1634.Add-Two-Polynomials-Represented-as-Linked-Lists/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution.go b/leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution_test.go b/leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1644.Lowest-Common-Ancestor-of-a-Binary-Tree-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/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution.go b/leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution_test.go b/leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1650.Lowest-Common-Ancestor-of-a-Binary-Tree-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution.go b/leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution_test.go b/leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1660.Correct-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution.go b/leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution_test.go b/leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1666.Change-the-Root-of-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution.go b/leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution_test.go b/leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1676.Lowest-Common-Ancestor-of-a-Binary-Tree-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution.go b/leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution_test.go b/leetcode/1601-1700/1682.Longest-Palindromic-Subsequence-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1682.Longest-Palindromic-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/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution.go b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution_test.go b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1691.Maximum-Height-by-Stacking-Cuboids/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution.go b/leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution_test.go b/leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1692.Count-Ways-to-Distribute-Candies/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution.go b/leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution_test.go b/leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1601-1700/1698.Number-of-Distinct-Substrings-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution.go b/leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution_test.go b/leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1708.Largest-Subarray-Length-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution.go b/leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution_test.go b/leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1714.Sum-Of-Special-Evenly-Spaced-Elements-In-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution.go b/leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution_test.go b/leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1724.Checking-Existence-of-Edge-Length-Limited-Paths-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution.go b/leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution_test.go b/leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1730.Shortest-Path-to-Get-Food/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution.go b/leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution_test.go b/leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1740.Find-Distance-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution.go b/leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution_test.go b/leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1746.Maximum-Subarray-Sum-After-One-Operation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution.go b/leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution_test.go b/leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1756.Design-Most-Recently-Used-Queue/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution.go b/leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution_test.go b/leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1762.Buildings-With-an-Ocean-View/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution.go b/leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution_test.go b/leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1772.Sort-Features-by-Popularity/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution.go b/leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution_test.go b/leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1778.Shortest-Path-in-a-Hidden-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/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution.go b/leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution_test.go b/leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1788.Maximize-the-Beauty-of-the-Garden/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution.go b/leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution_test.go b/leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-Difference/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1701-1800/1794.Count-Pairs-of-Equal-Substrings-With-Minimum-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/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution.go b/leetcode/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution_test.go b/leetcode/1801-1900/1804.Implement-Trie-II--Prefix-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1804.Implement-Trie-II--Prefix-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/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution.go b/leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution_test.go b/leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1810.Minimum-Path-Cost-in-a-Hidden-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/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution.go b/leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution_test.go b/leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1820.Maximum-Number-of-Accepted-Invitations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1826.Faulty-Sensor/Solution.go b/leetcode/1801-1900/1826.Faulty-Sensor/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1826.Faulty-Sensor/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1826.Faulty-Sensor/Solution_test.go b/leetcode/1801-1900/1826.Faulty-Sensor/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1826.Faulty-Sensor/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution.go b/leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution_test.go b/leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1836.Remove-Duplicates-From-an-Unsorted-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution.go b/leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution_test.go b/leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1842.Next-Palindrome-Using-Same-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution.go b/leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution_test.go b/leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1852.Distinct-Numbers-in-Each-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution.go b/leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution_test.go b/leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1858.Longest-Word-With-All-Prefixes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution.go b/leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution_test.go b/leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1868.Product-of-Two-Run-Length-Encoded-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/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution.go b/leetcode/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution_test.go b/leetcode/1801-1900/1874.Minimize-Product-Sum-of-Two-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1874.Minimize-Product-Sum-of-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/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution.go b/leetcode/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution_test.go b/leetcode/1801-1900/1885.Count-Pairs-in-Two-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1885.Count-Pairs-in-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/1801-1900/1891.Cutting-Ribbons/Solution.go b/leetcode/1801-1900/1891.Cutting-Ribbons/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1801-1900/1891.Cutting-Ribbons/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1801-1900/1891.Cutting-Ribbons/Solution_test.go b/leetcode/1801-1900/1891.Cutting-Ribbons/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1801-1900/1891.Cutting-Ribbons/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution.go b/leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution_test.go b/leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1902.Depth-of-BST-Given-Insertion-Order/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1908.Game-of-Nim/Solution.go b/leetcode/1901-2000/1908.Game-of-Nim/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1908.Game-of-Nim/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1908.Game-of-Nim/Solution_test.go b/leetcode/1901-2000/1908.Game-of-Nim/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1908.Game-of-Nim/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution.go b/leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution_test.go b/leetcode/1901-2000/1918.Kth-Smallest-Subarray-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1918.Kth-Smallest-Subarray-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/1901-2000/1924.Erect-the-Fence-II/Solution.go b/leetcode/1901-2000/1924.Erect-the-Fence-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1924.Erect-the-Fence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1924.Erect-the-Fence-II/Solution_test.go b/leetcode/1901-2000/1924.Erect-the-Fence-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1924.Erect-the-Fence-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/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution.go b/leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution_test.go b/leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-Substrings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1933.Check-if-String-Is-Decomposable-Into-Value-Equal-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/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution.go b/leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution_test.go b/leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1940.Longest-Common-Subsequence-Between-Sorted-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/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution.go b/leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution_test.go b/leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1950.Maximum-of-Minimum-Values-in-All-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution.go b/leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution_test.go b/leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1956.Minimum-Time-For-K-Virus-Variants-to-Spread/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution.go b/leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution_test.go b/leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1966.Binary-Searchable-Numbers-in-an-Unsorted-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/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution.go b/leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution_test.go b/leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1973.Count-Nodes-Equal-to-Sum-of-Descendants/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution.go b/leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution_test.go b/leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1983.Widest-Pair-of-Indices-With-Equal-Range-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/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution.go b/leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution_test.go b/leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1989.Maximum-Number-of-People-That-Can-Be-Caught-in-Tag/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution.go b/leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution_test.go b/leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/1901-2000/1999.Smallest-Greater-Multiple-Made-of-Two-Digits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution.go b/leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution_test.go b/leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2005.Subtree-Removal-Game-with-Fibonacci-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/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution.go b/leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution_test.go b/leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2015.Average-Height-of-Buildings-in-Each-Segment/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution.go b/leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution_test.go b/leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2021.Brightest-Position-on-Street/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution.go b/leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution_test.go b/leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-Zeros/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2031.Count-Subarrays-With-More-Ones-Than-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/2001-2100/2034.Stock-Price-Fluctuation/Solution.go b/leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution_test.go b/leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2034.Stock-Price-Fluctuation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution.go b/leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution_test.go b/leetcode/2001-2100/2036.Maximum-Alternating-Subarray-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2036.Maximum-Alternating-Subarray-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/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution.go b/leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution_test.go b/leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-Values/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2046.Sort-Linked-List-Already-Sorted-Using-Absolute-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/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution.go b/leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution_test.go b/leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2052.Minimum-Cost-to-Separate-Sentence-Into-Rows/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution.go b/leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution_test.go b/leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2061.Number-of-Spaces-Cleaning-Robot-Cleaned/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution.go b/leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution_test.go b/leetcode/2001-2100/2067.Number-of-Equal-Count-Substrings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2067.Number-of-Equal-Count-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/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution.go b/leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution_test.go b/leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2077.Paths-in-Maze-That-Lead-to-Same-Room/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution.go b/leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution_test.go b/leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2083.Substrings-That-Begin-and-End-With-the-Same-Letter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution.go b/leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution_test.go b/leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2086.Minimum-Number-of-Food-Buckets-to-Feed-the-Hamsters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution.go b/leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution_test.go b/leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2093.Minimum-Cost-to-Reach-City-With-Discounts/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution.go b/leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution_test.go b/leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2001-2100/2098.Subsequence-of-Size-K-With-the-Largest-Even-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/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution.go b/leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution_test.go b/leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0211.Design-Add-and-Search-Words-Data-Structure/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0243.Shortest-Word-Distance/Solution.go b/leetcode/201-300/0243.Shortest-Word-Distance/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0243.Shortest-Word-Distance/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0243.Shortest-Word-Distance/Solution_test.go b/leetcode/201-300/0243.Shortest-Word-Distance/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0243.Shortest-Word-Distance/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0244.Shortest-Word-Distance-II/Solution.go b/leetcode/201-300/0244.Shortest-Word-Distance-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0244.Shortest-Word-Distance-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0244.Shortest-Word-Distance-II/Solution_test.go b/leetcode/201-300/0244.Shortest-Word-Distance-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0244.Shortest-Word-Distance-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/201-300/0245.Shortest-Word-Distance-III/Solution.go b/leetcode/201-300/0245.Shortest-Word-Distance-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0245.Shortest-Word-Distance-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0245.Shortest-Word-Distance-III/Solution_test.go b/leetcode/201-300/0245.Shortest-Word-Distance-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0245.Shortest-Word-Distance-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0246.Strobogrammatic-Number/Solution.go b/leetcode/201-300/0246.Strobogrammatic-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0246.Strobogrammatic-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0246.Strobogrammatic-Number/Solution_test.go b/leetcode/201-300/0246.Strobogrammatic-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0246.Strobogrammatic-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0247.Strobogrammatic-Number-II/Solution.go b/leetcode/201-300/0247.Strobogrammatic-Number-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0247.Strobogrammatic-Number-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0247.Strobogrammatic-Number-II/Solution_test.go b/leetcode/201-300/0247.Strobogrammatic-Number-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0247.Strobogrammatic-Number-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/201-300/0248.Strobogrammatic-Number-III/Solution.go b/leetcode/201-300/0248.Strobogrammatic-Number-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0248.Strobogrammatic-Number-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0248.Strobogrammatic-Number-III/Solution_test.go b/leetcode/201-300/0248.Strobogrammatic-Number-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0248.Strobogrammatic-Number-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0249.Group-Shifted-Strings/Solution.go b/leetcode/201-300/0249.Group-Shifted-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0249.Group-Shifted-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0249.Group-Shifted-Strings/Solution_test.go b/leetcode/201-300/0249.Group-Shifted-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0249.Group-Shifted-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0250.Count-Univalue-Subtrees/Solution.go b/leetcode/201-300/0250.Count-Univalue-Subtrees/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0250.Count-Univalue-Subtrees/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0250.Count-Univalue-Subtrees/Solution_test.go b/leetcode/201-300/0250.Count-Univalue-Subtrees/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0250.Count-Univalue-Subtrees/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0251.Flatten-2D-Vector/Solution.go b/leetcode/201-300/0251.Flatten-2D-Vector/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0251.Flatten-2D-Vector/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0251.Flatten-2D-Vector/Solution_test.go b/leetcode/201-300/0251.Flatten-2D-Vector/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0251.Flatten-2D-Vector/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0252.Meeting-Rooms/Solution.go b/leetcode/201-300/0252.Meeting-Rooms/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0252.Meeting-Rooms/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0252.Meeting-Rooms/Solution_test.go b/leetcode/201-300/0252.Meeting-Rooms/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0252.Meeting-Rooms/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0253.Meeting-Rooms-II/Solution.go b/leetcode/201-300/0253.Meeting-Rooms-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0253.Meeting-Rooms-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0253.Meeting-Rooms-II/Solution_test.go b/leetcode/201-300/0253.Meeting-Rooms-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0253.Meeting-Rooms-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/201-300/0254.Factor-Combinations/Solution.go b/leetcode/201-300/0254.Factor-Combinations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0254.Factor-Combinations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0254.Factor-Combinations/Solution_test.go b/leetcode/201-300/0254.Factor-Combinations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0254.Factor-Combinations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution.go b/leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution_test.go b/leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0255.Verify-Preorder-Sequence-in-Binary-Search-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/201-300/0256.Paint-House/Solution.go b/leetcode/201-300/0256.Paint-House/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0256.Paint-House/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0256.Paint-House/Solution_test.go b/leetcode/201-300/0256.Paint-House/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0256.Paint-House/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0259.3Sum-Smaller/Solution.go b/leetcode/201-300/0259.3Sum-Smaller/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0259.3Sum-Smaller/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0259.3Sum-Smaller/Solution_test.go b/leetcode/201-300/0259.3Sum-Smaller/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0259.3Sum-Smaller/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0261.Graph-Valid-Tree/Solution.go b/leetcode/201-300/0261.Graph-Valid-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0261.Graph-Valid-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0261.Graph-Valid-Tree/Solution_test.go b/leetcode/201-300/0261.Graph-Valid-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0261.Graph-Valid-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/201-300/0265.Paint-House-II/Solution.go b/leetcode/201-300/0265.Paint-House-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0265.Paint-House-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0265.Paint-House-II/Solution_test.go b/leetcode/201-300/0265.Paint-House-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0265.Paint-House-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/201-300/0266.Palindrome-Permutation/Solution.go b/leetcode/201-300/0266.Palindrome-Permutation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0266.Palindrome-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0266.Palindrome-Permutation/Solution_test.go b/leetcode/201-300/0266.Palindrome-Permutation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0266.Palindrome-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0267.Palindrome-Permutation-II/Solution.go b/leetcode/201-300/0267.Palindrome-Permutation-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0267.Palindrome-Permutation-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0267.Palindrome-Permutation-II/Solution_test.go b/leetcode/201-300/0267.Palindrome-Permutation-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0267.Palindrome-Permutation-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/201-300/0269.Alien-Dictionary/Solution.go b/leetcode/201-300/0269.Alien-Dictionary/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0269.Alien-Dictionary/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0269.Alien-Dictionary/Solution_test.go b/leetcode/201-300/0269.Alien-Dictionary/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0269.Alien-Dictionary/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution.go b/leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution_test.go b/leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0270.Closest-Binary-Search-Tree-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0271.Encode-and-Decode-Strings/Solution.go b/leetcode/201-300/0271.Encode-and-Decode-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0271.Encode-and-Decode-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0271.Encode-and-Decode-Strings/Solution_test.go b/leetcode/201-300/0271.Encode-and-Decode-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0271.Encode-and-Decode-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution.go b/leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution_test.go b/leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0272.Closest-Binary-Search-Tree-Value-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/201-300/0276.Paint-Fence/Solution.go b/leetcode/201-300/0276.Paint-Fence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0276.Paint-Fence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0276.Paint-Fence/Solution_test.go b/leetcode/201-300/0276.Paint-Fence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0276.Paint-Fence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0277.Find-the-Celebrity/Solution.go b/leetcode/201-300/0277.Find-the-Celebrity/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0277.Find-the-Celebrity/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0277.Find-the-Celebrity/Solution_test.go b/leetcode/201-300/0277.Find-the-Celebrity/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0277.Find-the-Celebrity/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0280.Wiggle-Sort/Solution.go b/leetcode/201-300/0280.Wiggle-Sort/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0280.Wiggle-Sort/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0280.Wiggle-Sort/Solution_test.go b/leetcode/201-300/0280.Wiggle-Sort/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0280.Wiggle-Sort/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0281.Zigzag-Iterator/Solution.go b/leetcode/201-300/0281.Zigzag-Iterator/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0281.Zigzag-Iterator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0281.Zigzag-Iterator/Solution_test.go b/leetcode/201-300/0281.Zigzag-Iterator/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0281.Zigzag-Iterator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0285.Inorder-Successor-in-BST/Solution.go b/leetcode/201-300/0285.Inorder-Successor-in-BST/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0285.Inorder-Successor-in-BST/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0285.Inorder-Successor-in-BST/Solution_test.go b/leetcode/201-300/0285.Inorder-Successor-in-BST/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0285.Inorder-Successor-in-BST/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0286.Walls-and-Gates/Solution.go b/leetcode/201-300/0286.Walls-and-Gates/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0286.Walls-and-Gates/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0286.Walls-and-Gates/Solution_test.go b/leetcode/201-300/0286.Walls-and-Gates/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0286.Walls-and-Gates/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0288.Unique-Word-Abbreviation/Solution.go b/leetcode/201-300/0288.Unique-Word-Abbreviation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0288.Unique-Word-Abbreviation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0288.Unique-Word-Abbreviation/Solution_test.go b/leetcode/201-300/0288.Unique-Word-Abbreviation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0288.Unique-Word-Abbreviation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0291.Word-Pattern-II/Solution.go b/leetcode/201-300/0291.Word-Pattern-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0291.Word-Pattern-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0291.Word-Pattern-II/Solution_test.go b/leetcode/201-300/0291.Word-Pattern-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0291.Word-Pattern-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/201-300/0293.Flip-Game/Solution.go b/leetcode/201-300/0293.Flip-Game/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0293.Flip-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0293.Flip-Game/Solution_test.go b/leetcode/201-300/0293.Flip-Game/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0293.Flip-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/201-300/0294.Flip-Game-II/Solution.go b/leetcode/201-300/0294.Flip-Game-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0294.Flip-Game-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0294.Flip-Game-II/Solution_test.go b/leetcode/201-300/0294.Flip-Game-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0294.Flip-Game-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0296.Best-Meeting-Point/Solution.go b/leetcode/201-300/0296.Best-Meeting-Point/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0296.Best-Meeting-Point/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0296.Best-Meeting-Point/Solution_test.go b/leetcode/201-300/0296.Best-Meeting-Point/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0296.Best-Meeting-Point/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution.go b/leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution_test.go b/leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/201-300/0298.Binary-Tree-Longest-Consecutive-Sequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution.go b/leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution_test.go b/leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2107.Number-of-Unique-Flavors-After-Sharing-K-Candies/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution.go b/leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution_test.go b/leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2113.Elements-in-Array-After-Removing-and-Replacing-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/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution.go b/leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution_test.go b/leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2123.Minimum-Operations-to-Remove-Adjacent-Ones-in-Matrix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution.go b/leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution_test.go b/leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2128.Remove-All-Ones-With-Row-and-Column-Flips/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution.go b/leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution_test.go b/leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-Equal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2137.Pour-Water-Between-Buckets-to-Make-Water-Levels-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/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution.go b/leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution_test.go b/leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2143.Choose-Numbers-From-Two-Arrays-in-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution.go b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution_test.go b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2148.Count-Elements-With-Strictly-Smaller-and-Greater-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/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution.go b/leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution_test.go b/leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2152.Minimum-Number-of-Lines-to-Cover-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution.go b/leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution_test.go b/leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2158.Amount-of-New-Area-Painted-Each-Day/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution.go b/leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution_test.go b/leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-Frequency/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2168.Unique-Substrings-With-Equal-Digit-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/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution.go b/leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution_test.go b/leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2174.Remove-All-Ones-With-Row-and-Column-Flips-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/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution.go b/leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution_test.go b/leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2184.Number-of-Ways-to-Build-Sturdy-Brick-Wall/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution.go b/leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution_test.go b/leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2189.Number-of-Ways-to-Build-House-of-Cards/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution.go b/leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution_test.go b/leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2101-2200/2198.Number-of-Single-Divisor-Triplets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution.go b/leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution_test.go b/leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2204.Distance-to-a-Cycle-in-Undirected-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution.go b/leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution_test.go b/leetcode/2201-2300/2214.Minimum-Health-to-Beat-Game/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2214.Minimum-Health-to-Beat-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/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution.go b/leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution_test.go b/leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2219.Maximum-Sum-Score-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution.go b/leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution_test.go b/leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2229.Check-if-an-Array-Is-Consecutive/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution.go b/leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution_test.go b/leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2237.Count-Positions-on-Street-With-Required-Brightness/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution.go b/leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution_test.go b/leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2247.Maximum-Cost-of-Trip-With-K-Highways/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution.go b/leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution_test.go b/leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2254.Design-Video-Sharing-Platform/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution.go b/leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution_test.go b/leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2263.Make-Array-Non-decreasing-or-Non-increasing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution.go b/leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution_test.go b/leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2268.Minimum-Number-of-Keypresses/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution.go b/leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution_test.go b/leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2277.Closest-Node-to-Path-in-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution.go b/leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution_test.go b/leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2282.Number-of-People-That-Can-Be-Seen-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution.go b/leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution_test.go b/leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2291.Maximum-Profit-From-Trading-Stocks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2201-2300/2297.Jump-Game-VIII/Solution.go b/leetcode/2201-2300/2297.Jump-Game-VIII/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2201-2300/2297.Jump-Game-VIII/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2201-2300/2297.Jump-Game-VIII/Solution_test.go b/leetcode/2201-2300/2297.Jump-Game-VIII/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2201-2300/2297.Jump-Game-VIII/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution.go b/leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution_test.go b/leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2307.Check-for-Contradictions-in-Equations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution.go b/leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution_test.go b/leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2313.Minimum-Flips-in-Binary-Tree-to-Get-Result/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution.go b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution_test.go b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2317.Maximum-XOR-After-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution.go b/leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution_test.go b/leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2323.Find-Minimum-Time-to-Finish-All-Jobs-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/2301-2400/2330.Valid-Palindrome-IV/Solution.go b/leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution_test.go b/leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2330.Valid-Palindrome-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution.go b/leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution_test.go b/leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2340.Minimum-Adjacent-Swaps-to-Make-a-Valid-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/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution.go b/leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution_test.go b/leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2345.Finding-the-Number-of-Visible-Mountains/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution.go b/leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution_test.go b/leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2355.Maximum-Number-of-Books-You-Can-Take/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution.go b/leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution_test.go b/leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2361.Minimum-Costs-Using-the-Train-Line/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution.go b/leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution_test.go b/leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2371.Minimize-Maximum-Value-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution.go b/leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution_test.go b/leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-a-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2378.Choose-Edges-to-Maximize-Score-in-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/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution.go b/leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution_test.go b/leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-Matrix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2387.Median-of-a-Row-Wise-Sorted-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/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution.go b/leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution_test.go b/leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2301-2400/2393.Count-Strictly-Increasing-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution.go b/leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution_test.go b/leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2403.Minimum-Time-to-Kill-All-Monsters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2408.Design-SQL/Solution.go b/leetcode/2401-2500/2408.Design-SQL/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2408.Design-SQL/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2408.Design-SQL/Solution_test.go b/leetcode/2401-2500/2408.Design-SQL/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2408.Design-SQL/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2417.Closest-Fair-Integer/Solution.go b/leetcode/2401-2500/2417.Closest-Fair-Integer/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2417.Closest-Fair-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2417.Closest-Fair-Integer/Solution_test.go b/leetcode/2401-2500/2417.Closest-Fair-Integer/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2417.Closest-Fair-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution.go b/leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution_test.go b/leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2422.Merge-Operations-to-Turn-Array-Into-a-Palindrome/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution.go b/leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution_test.go b/leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-Fruits/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2431.Maximize-Total-Tastiness-of-Purchased-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/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution.go b/leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution_test.go b/leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2436.Minimum-Split-Into-Subarrays-With-GCD-Greater-Than-One/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution.go b/leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution_test.go b/leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2445.Number-of-Nodes-With-Value-One/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution.go b/leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution_test.go b/leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-Operations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2450.Number-of-Distinct-Binary-Strings-After-Applying-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/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution.go b/leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution_test.go b/leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2459.Sort-Array-by-Moving-Items-to-Empty-Space/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution.go b/leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution_test.go b/leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2464.Minimum-Subarrays-in-a-Valid-Split/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution.go b/leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution_test.go b/leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2473.Minimum-Cost-to-Buy-Apples/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution.go b/leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution_test.go b/leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2479.Maximum-XOR-of-Two-Non-Overlapping-Subtrees/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution.go b/leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution_test.go b/leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2489.Number-of-Substrings-With-Fixed-Ratio/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution.go b/leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution_test.go b/leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-Product/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2401-2500/2495.Number-of-Subarrays-Having-Even-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/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2501.Longest-Square-Streak-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2502.Design-Memory-Allocator/Solution.go b/leetcode/2501-2600/2502.Design-Memory-Allocator/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2502.Design-Memory-Allocator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2502.Design-Memory-Allocator/Solution_test.go b/leetcode/2501-2600/2502.Design-Memory-Allocator/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2502.Design-Memory-Allocator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-Queries/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2503.Maximum-Number-of-Points-From-Grid-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/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution.go b/leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution_test.go b/leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2505.Bitwise-OR-of-All-Subsequence-Sums/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution.go b/leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution_test.go b/leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2506.Count-Pairs-Of-Similar-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution.go b/leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution_test.go b/leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2507.Smallest-Value-After-Replacing-With-Sum-of-Prime-Factors/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution.go b/leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution_test.go b/leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2508.Add-Edges-to-Make-Degrees-of-All-Nodes-Even/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution.go b/leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution_test.go b/leetcode/2501-2600/2509.Cycle-Length-Queries-in-a-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2509.Cycle-Length-Queries-in-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/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution.go b/leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution_test.go b/leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2510.Check-if-There-is-a-Path-With-Equal-Number-of-0s-And-1s/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution.go b/leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution_test.go b/leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2511.Maximum-Enemy-Forts-That-Can-Be-Captured/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2512.Reward-Top-K-Students/Solution.go b/leetcode/2501-2600/2512.Reward-Top-K-Students/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2512.Reward-Top-K-Students/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2512.Reward-Top-K-Students/Solution_test.go b/leetcode/2501-2600/2512.Reward-Top-K-Students/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2512.Reward-Top-K-Students/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution.go b/leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution_test.go b/leetcode/2501-2600/2513.Minimize-the-Maximum-of-Two-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2513.Minimize-the-Maximum-of-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/2501-2600/2514.Count-Anagrams/Solution.go b/leetcode/2501-2600/2514.Count-Anagrams/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2514.Count-Anagrams/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2514.Count-Anagrams/Solution_test.go b/leetcode/2501-2600/2514.Count-Anagrams/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2514.Count-Anagrams/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution.go b/leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution_test.go b/leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2515.Shortest-Distance-to-Target-String-in-a-Circular-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2516.Take-K-of-Each-Character-From-Left-and-Right/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution.go b/leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution_test.go b/leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2517.Maximum-Tastiness-of-Candy-Basket/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution.go b/leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution_test.go b/leetcode/2501-2600/2518.Number-of-Great-Partitions/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2518.Number-of-Great-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/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution.go b/leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution_test.go b/leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2519.Count-the-Number-of-K-Big-Indices/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution.go b/leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution_test.go b/leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2520.Count-the-Digits-That-Divide-a-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution.go b/leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution_test.go b/leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2521.Distinct-Prime-Factors-of-Product-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution.go b/leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution_test.go b/leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2522.Partition-String-Into-Substrings-With-Values-at-Most-K/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2523.Closest-Prime-Numbers-in-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution.go b/leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution_test.go b/leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2524.Maximum-Frequency-Score-of-a-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution.go b/leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution_test.go b/leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2525.Categorize-Box-According-to-Criteria/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution.go b/leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution_test.go b/leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2526.Find-Consecutive-Integers-from-a-Data-Stream/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution.go b/leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution_test.go b/leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2527.Find-Xor-Beauty-of-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2528.Maximize-the-Minimum-Powered-City/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2529.Maximum-Count-of-Positive-Integer-and-Negative-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2530.Maximal-Score-After-Applying-K-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution.go b/leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution_test.go b/leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-Equal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2531.Make-Number-of-Distinct-Characters-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/2501-2600/2532.Time-to-Cross-a-Bridge/Solution.go b/leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution_test.go b/leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2532.Time-to-Cross-a-Bridge/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution.go b/leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution_test.go b/leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2533.Number-of-Good-Binary-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution.go b/leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution_test.go b/leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2534.Time-Taken-to-Cross-the-Door/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution.go b/leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution_test.go b/leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-of-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2535.Difference-Between-Element-Sum-and-Digit-Sum-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/2501-2600/2536.Increment-Submatrices-by-One/Solution.go b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2536.Increment-Submatrices-by-One/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2537.Count-the-Number-of-Good-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution.go b/leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution_test.go b/leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2538.Difference-Between-Maximum-and-Minimum-Price-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/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution.go b/leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution_test.go b/leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2539.Count-the-Number-of-Good-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2540.Minimum-Common-Value/Solution.go b/leetcode/2501-2600/2540.Minimum-Common-Value/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2540.Minimum-Common-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2540.Minimum-Common-Value/Solution_test.go b/leetcode/2501-2600/2540.Minimum-Common-Value/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2540.Minimum-Common-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution.go b/leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution_test.go b/leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2541.Minimum-Operations-to-Make-Array-Equal-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/2501-2600/2542.Maximum-Subsequence-Score/Solution.go b/leetcode/2501-2600/2542.Maximum-Subsequence-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2542.Maximum-Subsequence-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2542.Maximum-Subsequence-Score/Solution_test.go b/leetcode/2501-2600/2542.Maximum-Subsequence-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2542.Maximum-Subsequence-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/2501-2600/2543.Check-if-Point-Is-Reachable/Solution.go b/leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution_test.go b/leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2543.Check-if-Point-Is-Reachable/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution.go b/leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution_test.go b/leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2544.Alternating-Digit-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution.go b/leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution_test.go b/leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2545.Sort-the-Students-by-Their-Kth-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/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution.go b/leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution_test.go b/leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-Strings-Equal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2546.Apply-Bitwise-Operations-to-Make-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/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution.go b/leetcode/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution_test.go b/leetcode/2501-2600/2547.Minimum-Cost-to-Split-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2547.Minimum-Cost-to-Split-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/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution.go b/leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution_test.go b/leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2548.Maximum-Price-to-Fill-a-Bag/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution.go b/leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution_test.go b/leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2549.Count-Distinct-Numbers-on-Board/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution.go b/leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution_test.go b/leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2550.Count-Collisions-of-Monkeys-on-a-Polygon/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution.go b/leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution_test.go b/leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2551.Put-Marbles-in-Bags/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution.go b/leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution_test.go b/leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2552.Count-Increasing-Quadruplets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution.go b/leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution_test.go b/leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2553.Separate-the-Digits-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-I/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2554.Maximum-Number-of-Integers-to-Choose-From-a-Range-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/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution.go b/leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution_test.go b/leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2555.Maximize-Win-From-Two-Segments/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution.go b/leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution_test.go b/leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2556.Disconnect-Path-in-a-Binary-Matrix-by-at-Most-One-Flip/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution.go b/leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution_test.go b/leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2557.Maximum-Number-of-Integers-to-Choose-From-a-Range-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/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2558.Take-Gifts-From-the-Richest-Pile/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2559.Count-Vowel-Strings-in-Ranges/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2560.House-Robber-IV/Solution.go b/leetcode/2501-2600/2560.House-Robber-IV/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2560.House-Robber-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go b/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2560.House-Robber-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go b/leetcode/2501-2600/2561.Rearranging-Fruits/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2561.Rearranging-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/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution.go b/leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution_test.go b/leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2562.Find-the-Array-Concatenation-Value/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2563.Count-the-Number-of-Fair-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2564.Substring-XOR-Queries/Solution.go b/leetcode/2501-2600/2564.Substring-XOR-Queries/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2564.Substring-XOR-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2564.Substring-XOR-Queries/Solution_test.go b/leetcode/2501-2600/2564.Substring-XOR-Queries/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2564.Substring-XOR-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/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution.go b/leetcode/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution_test.go b/leetcode/2501-2600/2565.Subsequence-With-the-Minimum-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2565.Subsequence-With-the-Minimum-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/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2566.Maximum-Difference-by-Remapping-a-Digit/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution.go b/leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution_test.go b/leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2567.Minimum-Score-by-Changing-Two-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/2501-2600/2568.Minimum-Impossible-OR/Solution.go b/leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution_test.go b/leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2568.Minimum-Impossible-OR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution.go b/leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution_test.go b/leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2569.Handling-Sum-Queries-After-Update/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-Values/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2570.Merge-Two-2D-Arrays-by-Summing-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/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution.go b/leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution_test.go b/leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2571.Minimum-Operations-to-Reduce-an-Integer-to-0/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution.go b/leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution_test.go b/leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2572.Count-the-Number-of-Square-Free-Subsets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution.go b/leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution_test.go b/leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2573.Find-the-String-with-LCP/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2574.Left-and-Right-Sum-Differences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution.go b/leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution_test.go b/leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2575.Find-the-Divisibility-Array-of-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution.go b/leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution_test.go b/leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2576.Find-the-Maximum-Number-of-Marked-Indices/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution.go b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2577.Minimum-Time-to-Visit-a-Cell-In-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution.go b/leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution_test.go b/leetcode/2501-2600/2578.Split-With-Minimum-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2578.Split-With-Minimum-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/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2579.Count-Total-Number-of-Colored-Cells/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution.go b/leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution_test.go b/leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2580.Count-Ways-to-Group-Overlapping-Ranges/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution.go b/leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution_test.go b/leetcode/2501-2600/2581.Count-Number-of-Possible-Root-Nodes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2581.Count-Number-of-Possible-Root-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/2501-2600/2582.Pass-the-Pillow/Solution.go b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2582.Pass-the-Pillow/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution.go b/leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution_test.go b/leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2584.Split-the-Array-to-Make-Coprime-Products/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution.go b/leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution_test.go b/leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2585.Number-of-Ways-to-Earn-Points/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution.go b/leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution_test.go b/leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2586.Count-the-Number-of-Vowel-Strings-in-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution.go b/leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution_test.go b/leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2587.Rearrange-Array-to-Maximize-Prefix-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/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution.go b/leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution_test.go b/leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2588.Count-the-Number-of-Beautiful-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution.go b/leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution_test.go b/leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2589.Minimum-Time-to-Complete-All-Tasks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2590.Design-a-Todo-List/Solution.go b/leetcode/2501-2600/2590.Design-a-Todo-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2590.Design-a-Todo-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2590.Design-a-Todo-List/Solution_test.go b/leetcode/2501-2600/2590.Design-a-Todo-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2590.Design-a-Todo-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution.go b/leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution_test.go b/leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2591.Distribute-Money-to-Maximum-Children/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution.go b/leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution_test.go b/leetcode/2501-2600/2592.Maximize-Greatness-of-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2592.Maximize-Greatness-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/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2593.Find-Score-of-an-Array-After-Marking-All-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/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2594.Minimum-Time-to-Repair-Cars/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution.go b/leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution_test.go b/leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2595.Number-of-Even-and-Odd-Bits/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution.go b/leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution_test.go b/leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2596.Check-Knight-Tour-Configuration/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution.go b/leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution_test.go b/leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2597.The-Number-of-Beautiful-Subsets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2598.Smallest-Missing-Non-negative-Integer-After-Operations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution.go b/leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution_test.go b/leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2599.Make-the-Prefix-Sum-Non-negative/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution.go b/leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution_test.go b/leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2501-2600/2600.K-Items-With-the-Maximum-Sum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2601.Prime-Subtraction-Operation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution.go b/leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution_test.go b/leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-Equal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2602.Minimum-Operations-to-Make-All-Array-Elements-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/2601-2700/2603.Collect-Coins-in-a-Tree/Solution.go b/leetcode/2601-2700/2603.Collect-Coins-in-a-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2603.Collect-Coins-in-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2603.Collect-Coins-in-a-Tree/Solution_test.go b/leetcode/2601-2700/2603.Collect-Coins-in-a-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2603.Collect-Coins-in-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/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution.go b/leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution_test.go b/leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2604.Minimum-Time-to-Eat-All-Grains/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution.go b/leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution_test.go b/leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2605.Form-Smallest-Number-From-Two-Digit-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/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2606.Find-the-Substring-With-Maximum-Cost/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution.go b/leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution_test.go b/leetcode/2601-2700/2607.Make-K-Subarray-Sums-Equal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2607.Make-K-Subarray-Sums-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/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution.go b/leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution_test.go b/leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2608.Shortest-Cycle-in-a-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution.go b/leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution_test.go b/leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2609.Find-the-Longest-Balanced-Substring-of-a-Binary-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/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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2610.Convert-an-Array-Into-a-2D-Array-With-Conditions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2611.Mice-and-Cheese/Solution.go b/leetcode/2601-2700/2611.Mice-and-Cheese/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2611.Mice-and-Cheese/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2611.Mice-and-Cheese/Solution_test.go b/leetcode/2601-2700/2611.Mice-and-Cheese/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2611.Mice-and-Cheese/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution.go b/leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution_test.go b/leetcode/2601-2700/2612.Minimum-Reverse-Operations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2612.Minimum-Reverse-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/2601-2700/2613.Beautiful-Pairs/Solution.go b/leetcode/2601-2700/2613.Beautiful-Pairs/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2613.Beautiful-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2613.Beautiful-Pairs/Solution_test.go b/leetcode/2601-2700/2613.Beautiful-Pairs/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2613.Beautiful-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2614.Prime-In-Diagonal/Solution.go b/leetcode/2601-2700/2614.Prime-In-Diagonal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2614.Prime-In-Diagonal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2614.Prime-In-Diagonal/Solution_test.go b/leetcode/2601-2700/2614.Prime-In-Diagonal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2614.Prime-In-Diagonal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2615.Sum-of-Distances/Solution.go b/leetcode/2601-2700/2615.Sum-of-Distances/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2615.Sum-of-Distances/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2615.Sum-of-Distances/Solution_test.go b/leetcode/2601-2700/2615.Sum-of-Distances/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2615.Sum-of-Distances/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution.go b/leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution_test.go b/leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2616.Minimize-the-Maximum-Difference-of-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution.go b/leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution_test.go b/leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2617.Minimum-Number-of-Visited-Cells-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution.go b/leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution_test.go b/leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2638.Count-the-Number-of-K-Free-Subsets/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2639.Find-the-Width-of-Columns-of-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-of-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2640.Find-the-Score-of-All-Prefixes-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/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2641.Cousins-in-Binary-Tree-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/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2642.Design-Graph-With-Shortest-Path-Calculator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution.go b/leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution_test.go b/leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2643.Row-With-Maximum-Ones/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution.go b/leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution_test.go b/leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2644.Find-the-Maximum-Divisibility-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/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution.go b/leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution_test.go b/leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2645.Minimum-Additions-to-Make-Valid-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/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution.go b/leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution_test.go b/leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2646.Minimize-the-Total-Price-of-the-Trips/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution.go b/leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution_test.go b/leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2647.Color-the-Triangle-Red/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution.go b/leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution_test.go b/leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2651.Calculate-Delayed-Arrival-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2652.Sum-Multiples/Solution.go b/leetcode/2601-2700/2652.Sum-Multiples/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2652.Sum-Multiples/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go b/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2652.Sum-Multiples/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution.go b/leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution_test.go b/leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2653.Sliding-Subarray-Beauty/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2654.Minimum-Number-of-Operations-to-Make-All-Array-Elements-Equal-to-1/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution.go b/leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution_test.go b/leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2655.Find-Maximal-Uncovered-Ranges/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution.go b/leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution_test.go b/leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2656.Maximum-Sum-With-Exactly-K-Elements/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-Two-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2657.Find-the-Prefix-Common-Array-of-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/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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2658.Maximum-Number-of-Fish-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2659.Make-Array-Empty/Solution.go b/leetcode/2601-2700/2659.Make-Array-Empty/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2659.Make-Array-Empty/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2659.Make-Array-Empty/Solution_test.go b/leetcode/2601-2700/2659.Make-Array-Empty/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2659.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 bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution.go b/leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution_test.go b/leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-Game/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2660.Determine-the-Winner-of-a-Bowling-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/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2661.First-Completely-Painted-Row-or-Column/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution.go b/leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution_test.go b/leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2662.Minimum-Cost-of-a-Path-With-Special-Roads/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution.go b/leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution_test.go b/leetcode/2601-2700/2663.Lexicographically-Smallest-Beautiful-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2663.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/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" "b/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ "b/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution.go" @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git "a/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" "b/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ "b/leetcode/2601-2700/2664.The-Knight\342\200\231s-Tour/Solution_test.go" @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution.go b/leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution_test.go b/leetcode/2601-2700/2670.Find-the-Distinct-Difference-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2670.Find-the-Distinct-Difference-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/2601-2700/2671.Frequency-Tracker/Solution.go b/leetcode/2601-2700/2671.Frequency-Tracker/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2671.Frequency-Tracker/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2671.Frequency-Tracker/Solution_test.go b/leetcode/2601-2700/2671.Frequency-Tracker/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2671.Frequency-Tracker/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution.go b/leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution_test.go b/leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2672.Number-of-Adjacent-Elements-With-the-Same-Color/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2673.Make-Costs-of-Paths-Equal-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution.go b/leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution_test.go b/leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2674.Split-a-Circular-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2678.Number-of-Senior-Citizens/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution.go b/leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution_test.go b/leetcode/2601-2700/2679.Sum-in-a-Matrix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2679.Sum-in-a-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/2601-2700/2680.Maximum-OR/Solution.go b/leetcode/2601-2700/2680.Maximum-OR/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2680.Maximum-OR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2680.Maximum-OR/Solution_test.go b/leetcode/2601-2700/2680.Maximum-OR/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2680.Maximum-OR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2681.Power-of-Heroes/Solution.go b/leetcode/2601-2700/2681.Power-of-Heroes/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2681.Power-of-Heroes/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2681.Power-of-Heroes/Solution_test.go b/leetcode/2601-2700/2681.Power-of-Heroes/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2681.Power-of-Heroes/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution.go b/leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution_test.go b/leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-Game/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2682.Find-the-Losers-of-the-Circular-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/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2683.Neighboring-Bitwise-XOR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2684.Maximum-Number-of-Moves-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2685.Count-the-Number-of-Complete-Components/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution.go b/leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution_test.go b/leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2689.Extract-Kth-Character-From-The-Rope-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/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-Substrings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2696.Minimum-String-Length-After-Removing-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/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution.go b/leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution_test.go b/leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2697.Lexicographically-Smallest-Palindrome/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2698.Find-the-Punishment-Number-of-an-Integer/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution.go b/leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution_test.go b/leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2601-2700/2699.Modify-Graph-Edge-Weights/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution.go b/leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution_test.go b/leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2702.Minimum-Operations-to-Make-Numbers-Non-positive/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2706.Buy-Two-Chocolates/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution.go b/leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution_test.go b/leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2708.Maximum-Strength-of-a-Group/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution.go b/leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution_test.go b/leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2709.Greatest-Common-Divisor-Traversal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution.go b/leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution_test.go b/leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2710.Remove-Trailing-Zeros-From-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution.go b/leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution_test.go b/leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2711.Difference-of-Number-of-Distinct-Values-on-Diagonals/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution.go b/leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution_test.go b/leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-Equal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2712.Minimum-Cost-to-Make-All-Characters-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/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution.go b/leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution_test.go b/leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-Matrix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2713.Maximum-Strictly-Increasing-Cells-in-a-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/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution.go b/leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution_test.go b/leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2714.Find-Shortest-Path-with-K-Hops/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2716.Minimize-String-Length/Solution.go b/leetcode/2701-2800/2716.Minimize-String-Length/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2716.Minimize-String-Length/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2716.Minimize-String-Length/Solution_test.go b/leetcode/2701-2800/2716.Minimize-String-Length/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2716.Minimize-String-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/2701-2800/2717.Semi-Ordered-Permutation/Solution.go b/leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution_test.go b/leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2717.Semi-Ordered-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution.go b/leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution_test.go b/leetcode/2701-2800/2718.Sum-of-Matrix-After-Queries/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2718.Sum-of-Matrix-After-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/2701-2800/2719.Count-of-Integers/Solution.go b/leetcode/2701-2800/2719.Count-of-Integers/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2719.Count-of-Integers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2719.Count-of-Integers/Solution_test.go b/leetcode/2701-2800/2719.Count-of-Integers/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2719.Count-of-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/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution.go b/leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution_test.go b/leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2728.Count-Houses-in-a-Circular-Street/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2729.Check-if-The-Number-is-Fascinating/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution.go b/leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution_test.go b/leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-Substring/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2730.Find-the-Longest-Semi-Repetitive-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/2701-2800/2731.Movement-of-Robots/Solution.go b/leetcode/2701-2800/2731.Movement-of-Robots/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2731.Movement-of-Robots/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go b/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2731.Movement-of-Robots/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution.go b/leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution_test.go b/leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-Matrix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2732.Find-a-Good-Subset-of-the-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/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution.go b/leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution_test.go b/leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2733.Neither-Minimum-nor-Maximum/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution.go b/leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution_test.go b/leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2734.Lexicographically-Smallest-String-After-Substring-Operation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2735.Collecting-Chocolates/Solution.go b/leetcode/2701-2800/2735.Collecting-Chocolates/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2735.Collecting-Chocolates/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2735.Collecting-Chocolates/Solution_test.go b/leetcode/2701-2800/2735.Collecting-Chocolates/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2735.Collecting-Chocolates/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution.go b/leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution_test.go b/leetcode/2701-2800/2736.Maximum-Sum-Queries/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2736.Maximum-Sum-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/2701-2800/2737.Find-the-Closest-Marked-Node/Solution.go b/leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution_test.go b/leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2737.Find-the-Closest-Marked-Node/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2739.Total-Distance-Traveled/Solution.go b/leetcode/2701-2800/2739.Total-Distance-Traveled/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2739.Total-Distance-Traveled/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2739.Total-Distance-Traveled/Solution_test.go b/leetcode/2701-2800/2739.Total-Distance-Traveled/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2739.Total-Distance-Traveled/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2740.Find-the-Value-of-the-Partition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2741.Special-Permutations/Solution.go b/leetcode/2701-2800/2741.Special-Permutations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2741.Special-Permutations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2741.Special-Permutations/Solution_test.go b/leetcode/2701-2800/2741.Special-Permutations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2741.Special-Permutations/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2742.Painting-the-Walls/Solution.go b/leetcode/2701-2800/2742.Painting-the-Walls/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2742.Painting-the-Walls/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2742.Painting-the-Walls/Solution_test.go b/leetcode/2701-2800/2742.Painting-the-Walls/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2742.Painting-the-Walls/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution.go b/leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution_test.go b/leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-Character/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2743.Count-Substrings-Without-Repeating-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/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution.go b/leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution_test.go b/leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2744.Find-Maximum-Number-of-String-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution.go b/leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution_test.go b/leetcode/2701-2800/2745.Construct-the-Longest-New-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2745.Construct-the-Longest-New-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/2701-2800/2746.Decremental-String-Concatenation/Solution.go b/leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution_test.go b/leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2746.Decremental-String-Concatenation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution.go b/leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution_test.go b/leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2747.Count-Zero-Request-Servers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution.go b/leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution_test.go b/leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2748.Number-of-Beautiful-Pairs/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2749.Minimum-Operations-to-Make-the-Integer-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution.go b/leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution_test.go b/leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2750.Ways-to-Split-Array-Into-Good-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2751.Robot-Collisions/Solution.go b/leetcode/2701-2800/2751.Robot-Collisions/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2751.Robot-Collisions/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go b/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2751.Robot-Collisions/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution.go b/leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution_test.go b/leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2753.Count-Houses-in-a-Circular-Street-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/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution.go b/leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution_test.go b/leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2760.Longest-Even-Odd-Subarray-With-Threshold/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution.go b/leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution_test.go b/leetcode/2701-2800/2761.Prime-Pairs-With-Target-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2761.Prime-Pairs-With-Target-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/2701-2800/2762.Continuous-Subarrays/Solution.go b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2762.Continuous-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution.go b/leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution_test.go b/leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2763.Sum-of-Imbalance-Numbers-of-All-Subarrays/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git "a/leetcode/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-\342\200\214Binary-Tree/Solution.go" new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ "b/leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-Tree/Solution.go" @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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-\342\200\214Binary-Tree/Solution_test.go" new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ "b/leetcode/2701-2800/2764.is-Array-a-Preorder-of-Some-\342\200\214Binary-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/2701-2800/2765.Longest-Alternating-Subarray/Solution.go b/leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution_test.go b/leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2765.Longest-Alternating-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2766.Relocate-Marbles/Solution.go b/leetcode/2701-2800/2766.Relocate-Marbles/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2766.Relocate-Marbles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2766.Relocate-Marbles/Solution_test.go b/leetcode/2701-2800/2766.Relocate-Marbles/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2766.Relocate-Marbles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution.go b/leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution_test.go b/leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-Substrings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2767.Partition-String-Into-Minimum-Beautiful-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/2701-2800/2768.Number-of-Black-Blocks/Solution.go b/leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution_test.go b/leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2768.Number-of-Black-Blocks/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution.go b/leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution_test.go b/leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2769.Find-the-Maximum-Achievable-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution.go b/leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution_test.go b/leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2770.Maximum-Number-of-Jumps-to-Reach-the-Last-Index/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution.go b/leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution_test.go b/leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-Two-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2771.Longest-Non-decreasing-Subarray-From-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/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution.go b/leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution_test.go b/leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2772.Apply-Operations-to-Make-All-Array-Elements-Equal-to-Zero/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution.go b/leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution_test.go b/leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2773.Height-of-Special-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution.go b/leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution_test.go b/leetcode/2701-2800/2778.Sum-of-Squares-of-Special-Elements/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2778.Sum-of-Squares-of-Special-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/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2779.Maximum-Beauty-of-an-Array-After-Applying-Operation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2780.Minimum-Index-of-a-Valid-Split/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution.go b/leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution_test.go b/leetcode/2701-2800/2781.Length-of-the-Longest-Valid-Substring/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2781.Length-of-the-Longest-Valid-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/2701-2800/2782.Number-of-Unique-Categories/Solution.go b/leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution_test.go b/leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2782.Number-of-Unique-Categories/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution.go b/leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution_test.go b/leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2784.Check-if-Array-is-Good/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} 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 new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} 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 new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2785.Sort-Vowels-in-a-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution.go b/leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution_test.go b/leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2786.Visit-Array-Positions-to-Maximize-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/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2787.Ways-to-Express-an-Integer-as-Sum-of-Powers/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution.go b/leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution_test.go b/leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2788.Split-Strings-by-Separator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution.go b/leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution_test.go b/leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-Operations/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2789.Largest-Element-in-an-Array-after-Merge-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/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution.go b/leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution_test.go b/leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-Length/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2790.Maximum-Number-of-Groups-With-Increasing-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/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution.go b/leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution_test.go b/leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-a-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2791.Count-Paths-That-Can-Form-a-Palindrome-in-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/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution.go b/leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution_test.go b/leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2792.Count-Nodes-That-Are-Great-Enough/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution.go b/leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution_test.go b/leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-Target/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2798.Number-of-Employees-Who-Met-the-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/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution.go b/leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution_test.go b/leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2799.Count-Complete-Subarrays-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution.go b/leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution_test.go b/leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2701-2800/2800.Shortest-String-That-Contains-Three-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution.go b/leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution_test.go b/leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2801.Count-Stepping-Numbers-in-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution.go b/leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution_test.go b/leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2802.Find-The-K-th-Lucky-Number/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution.go b/leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution_test.go b/leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2806.Account-Balance-After-Rounded-Purchase/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution.go b/leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution_test.go b/leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2807.Insert-Greatest-Common-Divisors-in-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution.go b/leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution_test.go b/leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2808.Minimum-Seconds-to-Equalize-a-Circular-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution.go b/leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution_test.go b/leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2809.Minimum-Time-to-Make-Array-Sum-At-Most-x/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2810.Faulty-Keyboard/Solution.go b/leetcode/2801-2900/2810.Faulty-Keyboard/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2810.Faulty-Keyboard/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2810.Faulty-Keyboard/Solution_test.go b/leetcode/2801-2900/2810.Faulty-Keyboard/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2810.Faulty-Keyboard/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution.go b/leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution_test.go b/leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2811.Check-if-it-is-Possible-to-Split-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/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution.go b/leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution_test.go b/leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2812.Find-the-Safest-Path-in-a-Grid/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution.go b/leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution_test.go b/leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2813.Maximum-Elegance-of-a-K-Length-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution.go b/leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution_test.go b/leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2814.Minimum-Time-Takes-to-Reach-Destination-Without-Drowning/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution.go b/leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution_test.go b/leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2815.Max-Pair-Sum-in-an-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution.go b/leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution_test.go b/leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2816.Double-a-Number-Represented-as-a-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution.go b/leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution_test.go b/leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2817.Minimum-Absolute-Difference-Between-Elements-With-Constraint/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-Score/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2818.Apply-Operations-to-Maximize-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/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution.go b/leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution_test.go b/leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2819.Minimum-Relative-Loss-After-Buying-Chocolates/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution.go b/leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution_test.go b/leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-Target/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2824.Count-Pairs-Whose-Sum-is-Less-than-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/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2825.Make-String-a-Subsequence-Using-Cyclic-Increments/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2826.Sorting-Three-Groups/Solution.go b/leetcode/2801-2900/2826.Sorting-Three-Groups/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2826.Sorting-Three-Groups/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2826.Sorting-Three-Groups/Solution_test.go b/leetcode/2801-2900/2826.Sorting-Three-Groups/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2826.Sorting-Three-Groups/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution.go b/leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution_test.go b/leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2827.Number-of-Beautiful-Integers-in-the-Range/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution.go b/leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution_test.go b/leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2828.Check-if-a-String-Is-an-Acronym-of-Words/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution.go b/leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution_test.go b/leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2829.Determine-the-Minimum-Sum-of-a-k-avoiding-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/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution.go b/leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution_test.go b/leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2830.Maximize-the-Profit-as-the-Salesman/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution.go b/leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution_test.go b/leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/2801-2900/2831.Find-the-Longest-Equal-Subarray/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution.go b/leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution_test.go b/leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0302.Smallest-Rectangle-Enclosing-Black-Pixels/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0305.Number-of-Islands-II/Solution.go b/leetcode/301-400/0305.Number-of-Islands-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0305.Number-of-Islands-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0305.Number-of-Islands-II/Solution_test.go b/leetcode/301-400/0305.Number-of-Islands-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0305.Number-of-Islands-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/301-400/0308.Range-Sum-Query-2D--Mutable/Solution.go b/leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution_test.go b/leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0308.Range-Sum-Query-2D--Mutable/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution.go b/leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution_test.go b/leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0311.Sparse-Matrix-Multiplication/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution.go b/leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution_test.go b/leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0314.Binary-Tree-Vertical-Order-Traversal/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution.go b/leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution_test.go b/leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0317.Shortest-Distance-from-All-Buildings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0320.Generalized-Abbreviation/Solution.go b/leetcode/301-400/0320.Generalized-Abbreviation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0320.Generalized-Abbreviation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0320.Generalized-Abbreviation/Solution_test.go b/leetcode/301-400/0320.Generalized-Abbreviation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0320.Generalized-Abbreviation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution.go b/leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution_test.go b/leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0323.Number-of-Connected-Components-in-an-Undirected-Graph/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution.go b/leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution_test.go b/leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-k/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0325.Maximum-Size-Subarray-Sum-Equals-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/301-400/0333.Largest-BST-Subtree/Solution.go b/leetcode/301-400/0333.Largest-BST-Subtree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0333.Largest-BST-Subtree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0333.Largest-BST-Subtree/Solution_test.go b/leetcode/301-400/0333.Largest-BST-Subtree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0333.Largest-BST-Subtree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0339.Nested-List-Weight-Sum/Solution.go b/leetcode/301-400/0339.Nested-List-Weight-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0339.Nested-List-Weight-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0339.Nested-List-Weight-Sum/Solution_test.go b/leetcode/301-400/0339.Nested-List-Weight-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0339.Nested-List-Weight-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/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution.go b/leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution_test.go b/leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0340.Longest-Substring-with-At-Most-K-Distinct-Characters/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution.go b/leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution_test.go b/leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0346.Moving-Average-from-Data-Stream/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution.go b/leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution_test.go b/leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0348.Design-Tic-Tac-Toe/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0351.Android-Unlock-Patterns/Solution.go b/leetcode/301-400/0351.Android-Unlock-Patterns/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0351.Android-Unlock-Patterns/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0351.Android-Unlock-Patterns/Solution_test.go b/leetcode/301-400/0351.Android-Unlock-Patterns/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0351.Android-Unlock-Patterns/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0353.Design-Snake-Game/Solution.go b/leetcode/301-400/0353.Design-Snake-Game/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0353.Design-Snake-Game/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0353.Design-Snake-Game/Solution_test.go b/leetcode/301-400/0353.Design-Snake-Game/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0353.Design-Snake-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/301-400/0356.Line-Reflection/Solution.go b/leetcode/301-400/0356.Line-Reflection/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0356.Line-Reflection/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0356.Line-Reflection/Solution_test.go b/leetcode/301-400/0356.Line-Reflection/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0356.Line-Reflection/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution.go b/leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution_test.go b/leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0358.Rearrange-String-k-Distance-Apart/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0359.Logger-Rate-Limiter/Solution.go b/leetcode/301-400/0359.Logger-Rate-Limiter/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0359.Logger-Rate-Limiter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0359.Logger-Rate-Limiter/Solution_test.go b/leetcode/301-400/0359.Logger-Rate-Limiter/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0359.Logger-Rate-Limiter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0360.Sort-Transformed-Array/Solution.go b/leetcode/301-400/0360.Sort-Transformed-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0360.Sort-Transformed-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0360.Sort-Transformed-Array/Solution_test.go b/leetcode/301-400/0360.Sort-Transformed-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0360.Sort-Transformed-Array/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0361.Bomb-Enemy/Solution.go b/leetcode/301-400/0361.Bomb-Enemy/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0361.Bomb-Enemy/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0361.Bomb-Enemy/Solution_test.go b/leetcode/301-400/0361.Bomb-Enemy/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0361.Bomb-Enemy/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0362.Design-Hit-Counter/Solution.go b/leetcode/301-400/0362.Design-Hit-Counter/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0362.Design-Hit-Counter/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0362.Design-Hit-Counter/Solution_test.go b/leetcode/301-400/0362.Design-Hit-Counter/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0362.Design-Hit-Counter/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution.go b/leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution_test.go b/leetcode/301-400/0364.Nested-List-Weight-Sum-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0364.Nested-List-Weight-Sum-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/301-400/0366.Find-Leaves-of-Binary-Tree/Solution.go b/leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution_test.go b/leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0366.Find-Leaves-of-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0369.Plus-One-Linked-List/Solution.go b/leetcode/301-400/0369.Plus-One-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0369.Plus-One-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0369.Plus-One-Linked-List/Solution_test.go b/leetcode/301-400/0369.Plus-One-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0369.Plus-One-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0370.Range-Addition/Solution.go b/leetcode/301-400/0370.Range-Addition/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0370.Range-Addition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0370.Range-Addition/Solution_test.go b/leetcode/301-400/0370.Range-Addition/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0370.Range-Addition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0379.Design-Phone-Directory/Solution.go b/leetcode/301-400/0379.Design-Phone-Directory/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0379.Design-Phone-Directory/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0379.Design-Phone-Directory/Solution_test.go b/leetcode/301-400/0379.Design-Phone-Directory/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0379.Design-Phone-Directory/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/301-400/0400.Nth-Digit/Solution.go b/leetcode/301-400/0400.Nth-Digit/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/301-400/0400.Nth-Digit/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/301-400/0400.Nth-Digit/Solution_test.go b/leetcode/301-400/0400.Nth-Digit/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/301-400/0400.Nth-Digit/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0408.Valid-Word-Abbreviation/Solution.go b/leetcode/401-500/0408.Valid-Word-Abbreviation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0408.Valid-Word-Abbreviation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0408.Valid-Word-Abbreviation/Solution_test.go b/leetcode/401-500/0408.Valid-Word-Abbreviation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0408.Valid-Word-Abbreviation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution.go b/leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution_test.go b/leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0411.Minimum-Unique-Word-Abbreviation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0418.Sentence-Screen-Fitting/Solution.go b/leetcode/401-500/0418.Sentence-Screen-Fitting/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0418.Sentence-Screen-Fitting/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0418.Sentence-Screen-Fitting/Solution_test.go b/leetcode/401-500/0418.Sentence-Screen-Fitting/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0418.Sentence-Screen-Fitting/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0422.Valid-Word-Square/Solution.go b/leetcode/401-500/0422.Valid-Word-Square/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0422.Valid-Word-Square/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0422.Valid-Word-Square/Solution_test.go b/leetcode/401-500/0422.Valid-Word-Square/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0422.Valid-Word-Square/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0425.Word-Squares/Solution.go b/leetcode/401-500/0425.Word-Squares/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0425.Word-Squares/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0425.Word-Squares/Solution_test.go b/leetcode/401-500/0425.Word-Squares/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0425.Word-Squares/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution.go b/leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution_test.go b/leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0426.Convert-Binary-Search-Tree-to-Sorted-Doubly-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution.go b/leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution_test.go b/leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0428.Serialize-and-Deserialize-N-ary-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/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution.go b/leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution_test.go b/leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0431.Encode-N-ary-Tree-to-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0439.Ternary-Expression-Parser/Solution.go b/leetcode/401-500/0439.Ternary-Expression-Parser/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0439.Ternary-Expression-Parser/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0439.Ternary-Expression-Parser/Solution_test.go b/leetcode/401-500/0439.Ternary-Expression-Parser/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0439.Ternary-Expression-Parser/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0444.Sequence-Reconstruction/Solution.go b/leetcode/401-500/0444.Sequence-Reconstruction/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0444.Sequence-Reconstruction/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0444.Sequence-Reconstruction/Solution_test.go b/leetcode/401-500/0444.Sequence-Reconstruction/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0444.Sequence-Reconstruction/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0465.Optimal-Account-Balancing/Solution.go b/leetcode/401-500/0465.Optimal-Account-Balancing/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0465.Optimal-Account-Balancing/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0465.Optimal-Account-Balancing/Solution_test.go b/leetcode/401-500/0465.Optimal-Account-Balancing/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0465.Optimal-Account-Balancing/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0469.Convex-Polygon/Solution.go b/leetcode/401-500/0469.Convex-Polygon/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0469.Convex-Polygon/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0469.Convex-Polygon/Solution_test.go b/leetcode/401-500/0469.Convex-Polygon/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0469.Convex-Polygon/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution.go b/leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution_test.go b/leetcode/401-500/0471.Encode-String-with-Shortest-Length/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0471.Encode-String-with-Shortest-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/401-500/0484.Find-Permutation/Solution.go b/leetcode/401-500/0484.Find-Permutation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0484.Find-Permutation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0484.Find-Permutation/Solution_test.go b/leetcode/401-500/0484.Find-Permutation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0484.Find-Permutation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution.go b/leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution_test.go b/leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0487.Max-Consecutive-Ones-II/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0489.Robot-Room-Cleaner/Solution.go b/leetcode/401-500/0489.Robot-Room-Cleaner/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0489.Robot-Room-Cleaner/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0489.Robot-Room-Cleaner/Solution_test.go b/leetcode/401-500/0489.Robot-Room-Cleaner/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0489.Robot-Room-Cleaner/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0491.Non-decreasing-Subsequences/Solution.go b/leetcode/401-500/0491.Non-decreasing-Subsequences/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0491.Non-decreasing-Subsequences/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0491.Non-decreasing-Subsequences/Solution_test.go b/leetcode/401-500/0491.Non-decreasing-Subsequences/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0491.Non-decreasing-Subsequences/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/401-500/0499.The-Maze-III/Solution.go b/leetcode/401-500/0499.The-Maze-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/401-500/0499.The-Maze-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/401-500/0499.The-Maze-III/Solution_test.go b/leetcode/401-500/0499.The-Maze-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/401-500/0499.The-Maze-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0505.The-Maze-II/Solution.go b/leetcode/501-600/0505.The-Maze-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0505.The-Maze-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0505.The-Maze-II/Solution_test.go b/leetcode/501-600/0505.The-Maze-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0505.The-Maze-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/501-600/0510.Inorder-Successor-in-BST-II/Solution.go b/leetcode/501-600/0510.Inorder-Successor-in-BST-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0510.Inorder-Successor-in-BST-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0510.Inorder-Successor-in-BST-II/Solution_test.go b/leetcode/501-600/0510.Inorder-Successor-in-BST-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0510.Inorder-Successor-in-BST-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/501-600/0518.Coin-Change-II/Solution.go b/leetcode/501-600/0518.Coin-Change-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0518.Coin-Change-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0518.Coin-Change-II/Solution_test.go b/leetcode/501-600/0518.Coin-Change-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0518.Coin-Change-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/501-600/0521.Longest-Uncommon-Subsequence-I/Solution.go b/leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution_test.go b/leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0521.Longest-Uncommon-Subsequence-I/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0527.Word-Abbreviation/Solution.go b/leetcode/501-600/0527.Word-Abbreviation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0527.Word-Abbreviation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0527.Word-Abbreviation/Solution_test.go b/leetcode/501-600/0527.Word-Abbreviation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0527.Word-Abbreviation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0531.Lonely-Pixel-I/Solution.go b/leetcode/501-600/0531.Lonely-Pixel-I/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0531.Lonely-Pixel-I/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0531.Lonely-Pixel-I/Solution_test.go b/leetcode/501-600/0531.Lonely-Pixel-I/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0531.Lonely-Pixel-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/501-600/0533.Lonely-Pixel-II/Solution.go b/leetcode/501-600/0533.Lonely-Pixel-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0533.Lonely-Pixel-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0533.Lonely-Pixel-II/Solution_test.go b/leetcode/501-600/0533.Lonely-Pixel-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0533.Lonely-Pixel-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/501-600/0536.Construct-Binary-Tree-from-String/Solution.go b/leetcode/501-600/0536.Construct-Binary-Tree-from-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0536.Construct-Binary-Tree-from-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0536.Construct-Binary-Tree-from-String/Solution_test.go b/leetcode/501-600/0536.Construct-Binary-Tree-from-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0536.Construct-Binary-Tree-from-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/501-600/0544.Output-Contest-Matches/Solution.go b/leetcode/501-600/0544.Output-Contest-Matches/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0544.Output-Contest-Matches/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0544.Output-Contest-Matches/Solution_test.go b/leetcode/501-600/0544.Output-Contest-Matches/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0544.Output-Contest-Matches/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution.go b/leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution_test.go b/leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0545.Boundary-of-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0547.Number-of-Provinces/Solution.go b/leetcode/501-600/0547.Number-of-Provinces/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0547.Number-of-Provinces/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0547.Number-of-Provinces/Solution_test.go b/leetcode/501-600/0547.Number-of-Provinces/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0547.Number-of-Provinces/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution.go b/leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution_test.go b/leetcode/501-600/0548.Split-Array-with-Equal-Sum/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0548.Split-Array-with-Equal-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/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution.go b/leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution_test.go b/leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0549.Binary-Tree-Longest-Consecutive-Sequence-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/501-600/0555.Split-Concatenated-Strings/Solution.go b/leetcode/501-600/0555.Split-Concatenated-Strings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0555.Split-Concatenated-Strings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0555.Split-Concatenated-Strings/Solution_test.go b/leetcode/501-600/0555.Split-Concatenated-Strings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0555.Split-Concatenated-Strings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0561.Array-Partition/Solution.go b/leetcode/501-600/0561.Array-Partition/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0561.Array-Partition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0561.Array-Partition/Solution_test.go b/leetcode/501-600/0561.Array-Partition/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0561.Array-Partition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution.go b/leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution_test.go b/leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0562.Longest-Line-of-Consecutive-One-in-Matrix/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0568.Maximum-Vacation-Days/Solution.go b/leetcode/501-600/0568.Maximum-Vacation-Days/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0568.Maximum-Vacation-Days/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0568.Maximum-Vacation-Days/Solution_test.go b/leetcode/501-600/0568.Maximum-Vacation-Days/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0568.Maximum-Vacation-Days/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0573.Squirrel-Simulation/Solution.go b/leetcode/501-600/0573.Squirrel-Simulation/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0573.Squirrel-Simulation/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0573.Squirrel-Simulation/Solution_test.go b/leetcode/501-600/0573.Squirrel-Simulation/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0573.Squirrel-Simulation/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0582.Kill-Process/Solution.go b/leetcode/501-600/0582.Kill-Process/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0582.Kill-Process/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0582.Kill-Process/Solution_test.go b/leetcode/501-600/0582.Kill-Process/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0582.Kill-Process/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/501-600/0588.Design-In-Memory-File-System/Solution.go b/leetcode/501-600/0588.Design-In-Memory-File-System/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/501-600/0588.Design-In-Memory-File-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/501-600/0588.Design-In-Memory-File-System/Solution_test.go b/leetcode/501-600/0588.Design-In-Memory-File-System/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/501-600/0588.Design-In-Memory-File-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution.go b/leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution_test.go b/leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0604.Design-Compressed-String-Iterator/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution.go b/leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution_test.go b/leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0616.Add-Bold-Tag-in-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution_test.go b/leetcode/601-700/0624.Maximum-Distance-in-Arrays/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0624.Maximum-Distance-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/601-700/0625.Minimum-Factorization/Solution.go b/leetcode/601-700/0625.Minimum-Factorization/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0625.Minimum-Factorization/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0625.Minimum-Factorization/Solution_test.go b/leetcode/601-700/0625.Minimum-Factorization/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0625.Minimum-Factorization/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution.go b/leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution_test.go b/leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0631.Design-Excel-Sum-Formula/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution.go b/leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution_test.go b/leetcode/601-700/0634.Find-the-Derangement-of-An-Array/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0634.Find-the-Derangement-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/601-700/0635.Design-Log-Storage-System/Solution.go b/leetcode/601-700/0635.Design-Log-Storage-System/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0635.Design-Log-Storage-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0635.Design-Log-Storage-System/Solution_test.go b/leetcode/601-700/0635.Design-Log-Storage-System/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0635.Design-Log-Storage-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution.go b/leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution_test.go b/leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0642.Design-Search-Autocomplete-System/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution.go b/leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution_test.go b/leetcode/601-700/0644.Maximum-Average-Subarray-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0644.Maximum-Average-Subarray-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/601-700/0651.4-Keys-Keyboard/Solution.go b/leetcode/601-700/0651.4-Keys-Keyboard/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0651.4-Keys-Keyboard/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0651.4-Keys-Keyboard/Solution_test.go b/leetcode/601-700/0651.4-Keys-Keyboard/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0651.4-Keys-Keyboard/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0656.Coin-Path/Solution.go b/leetcode/601-700/0656.Coin-Path/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0656.Coin-Path/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0656.Coin-Path/Solution_test.go b/leetcode/601-700/0656.Coin-Path/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0656.Coin-Path/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0660.Remove-9/Solution.go b/leetcode/601-700/0660.Remove-9/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0660.Remove-9/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0660.Remove-9/Solution_test.go b/leetcode/601-700/0660.Remove-9/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0660.Remove-9/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0663.Equal-Tree-Partition/Solution.go b/leetcode/601-700/0663.Equal-Tree-Partition/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0663.Equal-Tree-Partition/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0663.Equal-Tree-Partition/Solution_test.go b/leetcode/601-700/0663.Equal-Tree-Partition/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0663.Equal-Tree-Partition/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0666.Path-Sum-IV/Solution.go b/leetcode/601-700/0666.Path-Sum-IV/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0666.Path-Sum-IV/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0666.Path-Sum-IV/Solution_test.go b/leetcode/601-700/0666.Path-Sum-IV/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0666.Path-Sum-IV/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0681.Next-Closest-Time/Solution.go b/leetcode/601-700/0681.Next-Closest-Time/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0681.Next-Closest-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0681.Next-Closest-Time/Solution_test.go b/leetcode/601-700/0681.Next-Closest-Time/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0681.Next-Closest-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0683.K-Empty-Slots/Solution.go b/leetcode/601-700/0683.K-Empty-Slots/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0683.K-Empty-Slots/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0683.K-Empty-Slots/Solution_test.go b/leetcode/601-700/0683.K-Empty-Slots/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0683.K-Empty-Slots/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/601-700/0694.Number-of-Distinct-Islands/Solution.go b/leetcode/601-700/0694.Number-of-Distinct-Islands/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/601-700/0694.Number-of-Distinct-Islands/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/601-700/0694.Number-of-Distinct-Islands/Solution_test.go b/leetcode/601-700/0694.Number-of-Distinct-Islands/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/601-700/0694.Number-of-Distinct-Islands/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution.go b/leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution_test.go b/leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0702.Search-in-a-Sorted-Array-of-Unknown-Size/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution.go b/leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution_test.go b/leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0708.Insert-into-a-Sorted-Circular-Linked-List/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution.go b/leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution_test.go b/leetcode/701-800/0711.Number-of-Distinct-Islands-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0711.Number-of-Distinct-Islands-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/701-800/0716.Max-Stack/Solution.go b/leetcode/701-800/0716.Max-Stack/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0716.Max-Stack/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0716.Max-Stack/Solution_test.go b/leetcode/701-800/0716.Max-Stack/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0716.Max-Stack/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0723.Candy-Crush/Solution.go b/leetcode/701-800/0723.Candy-Crush/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0723.Candy-Crush/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0723.Candy-Crush/Solution_test.go b/leetcode/701-800/0723.Candy-Crush/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0723.Candy-Crush/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0727.Minimum-Window-Subsequence/Solution.go b/leetcode/701-800/0727.Minimum-Window-Subsequence/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0727.Minimum-Window-Subsequence/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0727.Minimum-Window-Subsequence/Solution_test.go b/leetcode/701-800/0727.Minimum-Window-Subsequence/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0727.Minimum-Window-Subsequence/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0734.Sentence-Similarity/Solution.go b/leetcode/701-800/0734.Sentence-Similarity/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0734.Sentence-Similarity/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0734.Sentence-Similarity/Solution_test.go b/leetcode/701-800/0734.Sentence-Similarity/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0734.Sentence-Similarity/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0737.Sentence-Similarity-II/Solution.go b/leetcode/701-800/0737.Sentence-Similarity-II/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0737.Sentence-Similarity-II/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0737.Sentence-Similarity-II/Solution_test.go b/leetcode/701-800/0737.Sentence-Similarity-II/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0737.Sentence-Similarity-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/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution.go b/leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution_test.go b/leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0742.Closest-Leaf-in-a-Binary-Tree/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution.go b/leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution_test.go b/leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0750.Number-Of-Corner-Rectangles/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0751.IP-to-CIDR/Solution.go b/leetcode/701-800/0751.IP-to-CIDR/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0751.IP-to-CIDR/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0751.IP-to-CIDR/Solution_test.go b/leetcode/701-800/0751.IP-to-CIDR/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0751.IP-to-CIDR/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0755.Pour-Water/Solution.go b/leetcode/701-800/0755.Pour-Water/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0755.Pour-Water/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0755.Pour-Water/Solution_test.go b/leetcode/701-800/0755.Pour-Water/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0755.Pour-Water/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0758.Bold-Words-in-String/Solution.go b/leetcode/701-800/0758.Bold-Words-in-String/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0758.Bold-Words-in-String/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0758.Bold-Words-in-String/Solution_test.go b/leetcode/701-800/0758.Bold-Words-in-String/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0758.Bold-Words-in-String/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0759.Employee-Free-Time/Solution.go b/leetcode/701-800/0759.Employee-Free-Time/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0759.Employee-Free-Time/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0759.Employee-Free-Time/Solution_test.go b/leetcode/701-800/0759.Employee-Free-Time/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0759.Employee-Free-Time/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0760.Find-Anagram-Mappings/Solution.go b/leetcode/701-800/0760.Find-Anagram-Mappings/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0760.Find-Anagram-Mappings/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0760.Find-Anagram-Mappings/Solution_test.go b/leetcode/701-800/0760.Find-Anagram-Mappings/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0760.Find-Anagram-Mappings/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0772.Basic-Calculator-III/Solution.go b/leetcode/701-800/0772.Basic-Calculator-III/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0772.Basic-Calculator-III/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0772.Basic-Calculator-III/Solution_test.go b/leetcode/701-800/0772.Basic-Calculator-III/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0772.Basic-Calculator-III/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution.go b/leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution_test.go b/leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0774.Minimize-Max-Distance-to-Gas-Station/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0776.Split-BST/Solution.go b/leetcode/701-800/0776.Split-BST/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0776.Split-BST/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0776.Split-BST/Solution_test.go b/leetcode/701-800/0776.Split-BST/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0776.Split-BST/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/701-800/0800.Similar-RGB-Color/Solution.go b/leetcode/701-800/0800.Similar-RGB-Color/Solution.go new file mode 100755 index 000000000..d115ccf5e --- /dev/null +++ b/leetcode/701-800/0800.Similar-RGB-Color/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/leetcode/701-800/0800.Similar-RGB-Color/Solution_test.go b/leetcode/701-800/0800.Similar-RGB-Color/Solution_test.go new file mode 100755 index 000000000..14ff50eb4 --- /dev/null +++ b/leetcode/701-800/0800.Similar-RGB-Color/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/scripts/leetcode/gen.go b/scripts/leetcode/gen.go new file mode 100644 index 000000000..41af723e5 --- /dev/null +++ b/scripts/leetcode/gen.go @@ -0,0 +1,179 @@ +package leetcode + +import ( + "bytes" + "errors" + "fmt" + "io" + "log" + "os" + "path/filepath" + "strconv" + "strings" + "text/template" +) + +type AlgorithmsData struct { + UserName string `json:"user_name"` + NumSolved int `json:"num_solved"` + NumTotal int `json:"num_total"` + AcEasy int `json:"ac_easy"` + AcMedium int `json:"ac_medium"` + AcHard int `json:"ac_hard"` + StatStatusPairs []*AlgorithmsPair `json:"stat_status_pairs"` +} +type AlgorithmsPair struct { + Stat AlgorithmsPairStat `json:"stat"` + Status any `json:"status"` + Difficulty struct { + Level int `json:"level"` + } `json:"difficulty"` + PaidOnly bool `json:"paid_only"` + IsFavor bool `json:"is_favor"` + Frequency int `json:"frequency"` + Progress int `json:"progress"` +} + +func (a *AlgorithmsPair) GetFormatID() string { + strId := strconv.Itoa(a.Stat.FrontendQuestionID) + + if len(strId) == 1 { + strId = "000" + strId + } + if len(strId) == 2 { + strId = "00" + strId + } + if len(strId) == 3 { + strId = "0" + strId + } + return strId +} +func (a *AlgorithmsPair) GetFormatName() string { + name := strings.Trim(a.Stat.QuestionTitle, " ") + str := "" + for i, v := range name { + if v == ' ' && name[i-1] != '-' { + str = str + "-" + continue + } + if v == ' ' { + continue + } + if v == '`' { + str = str + "-" + continue + } + if v == '%' { + str = str + "p" + continue + } + + if v == '(' && name[i-1] != '-' { + str = str + "-" + continue + } + + if v == ')' { + continue + } + if v == ',' { + continue + } + // ' 过滤 + if v == 39 { + continue + } + if v == '?' { + continue + } + if i > 0 && name[i-1] == '-' { + str = str + string(v) + continue + } + str = str + string(v) + } + if name[len(name)-1:] == "-" { + name = name[:len(name)-1] + } + return str +} +func (a *AlgorithmsPair) GetDir() string { + return fmt.Sprintf("../../leetcode/%d-%d/%s/", (a.Stat.FrontendQuestionID-1)/100*100+1, ((a.Stat.FrontendQuestionID-1)/100+1)*100, fmt.Sprintf("%s.%s", a.GetFormatID(), a.GetFormatName())) +} + +type AlgorithmsPairStat struct { + QuestionID int `json:"question_id"` + QuestionArticleLive any `json:"question__article__live"` + QuestionArticleSlug any `json:"question__article__slug"` + QuestionArticleHasVideoSolution any `json:"question__article__has_video_solution"` + QuestionTitle string `json:"question__title"` + QuestionTitleSlug string `json:"question__title_slug"` + QuestionHide bool `json:"question__hide"` + TotalAcs int `json:"total_acs"` + TotalSubmitted int `json:"total_submitted"` + FrontendQuestionID int `json:"frontend_question_id"` + IsNewQuestion bool `json:"is_new_question"` +} + +func createDirectory(path string) error { + // Check if the directory exists + _, err := os.Stat(path) + if err == nil { + return nil + } + // If the directory does not exist, create its parent + if os.IsNotExist(err) { + err = createDirectory(filepath.Dir(path)) + if err != nil { + return err + } + // Create the directory + err = os.Mkdir(path, 0777) + if err != nil { + return err + } + } + return nil +} + +func copyFile(sourceFile, destinationFile string, perm os.FileMode) error { + if sourceFile == "" || destinationFile == "" { + return errors.New("sourceFile or destinationFile is null") + } + data, err := os.ReadFile(sourceFile) + if err != nil { + return err + } + err = os.WriteFile(destinationFile, data, perm) + if err != nil { + return err + } + return nil +} + +func GenerateReadmeFromTpl(problem *AlgorithmsPair) error { + log.Println("开始生成 README") + file, err := os.OpenFile("../template/solution/README.md", os.O_RDONLY, 0o600) + defer file.Close() + if err != nil { + log.Panicf("README 模板读取失败1:%s", err.Error()) + return err + } + + buffer, err := io.ReadAll(file) + if err != nil { + log.Panicf("README 模板读取失败2:%s", err.Error()) + return err + } + + var tmpRes bytes.Buffer + + tmpl, err := template.New("README: ").Parse(string(buffer)) + err = tmpl.Execute(&tmpRes, problem) + //write(SOLUTIONS_PATH+problem.PathName+"/README.md", string(tmpRes.Bytes())) + err = os.WriteFile(problem.GetDir()+"/README.md", tmpRes.Bytes(), 0o755) + if err != nil { + return err + } + return nil +} diff --git a/scripts/leetcode/gen_test.go b/scripts/leetcode/gen_test.go new file mode 100644 index 000000000..13b8589f5 --- /dev/null +++ b/scripts/leetcode/gen_test.go @@ -0,0 +1,75 @@ +package leetcode + +import ( + "encoding/json" + "errors" + "fmt" + "github.com/imroc/req/v3" + "github.com/stretchr/testify/assert" + "log" + "os" + "testing" +) + +func TestLeekCode_Unite(t *testing.T) { + t.Run("Gen tpl file", func(t *testing.T) { + resp, err := req.Get("https://leetcode.com/api/problems/Algorithms/") + assert.Nil(t, err) + algorithmData := &AlgorithmsData{} + err = json.Unmarshal(resp.Bytes(), algorithmData) + assert.Nil(t, err) + for _, v := range algorithmData.StatStatusPairs { + id := v.Stat.FrontendQuestionID + //if id <= 2820 { + // continue + //} + log.Printf("~~ 开始生成第 %d 题的文件夹 ~~\n", id) + if v.Stat.QuestionID == 0 { + log.Printf("%d 号题不存,请核查题号。\n", id) + continue + } + //if v.PaidOnly { + // log.Printf("%d 号题需要付费。如果已经订阅,请注释掉本代码。\n", id) + // continue + //} + // 复制 Go 文件 + sourceDir := "../template/solution/" + destinationDir := v.GetDir() + + if _, err := os.Stat(destinationDir); !os.IsNotExist(err) { + log.Printf("目录已经存在不处理: %s \n", destinationDir) + continue + } + + _ = createDirectory(destinationDir) + err = copyFile(sourceDir+"Solution.go", destinationDir+"/Solution.go", os.ModePerm) + assert.Nil(t, err) + err = copyFile(sourceDir+"Solution_test.go", destinationDir+"/Solution_test.go", os.ModePerm) + assert.Nil(t, err) + //err = GenerateReadmeFromTpl(v) + //assert.Nil(t, err) + } + }) + t.Run("copyFile", func(t *testing.T) { + sourceFile := "../template/solution/Solution.go" + destinationFile := "./tmp/dst.txt" + path := "tmp" + data, err := os.ReadFile(sourceFile) + if err != nil { + fmt.Println("Error reading file:", err) + return + } + if _, err := os.Stat(path); errors.Is(err, os.ErrNotExist) { + err := os.Mkdir(path, os.ModePerm) + if err != nil { + log.Println(err) + } + } + err = os.WriteFile(destinationFile, data, 0755) + if err != nil { + fmt.Println("Error writing file:", err) + return + } + fmt.Println("File copied successfully") + }) +} diff --git a/scripts/template/contributors/.all-contributorsrc b/scripts/template/contributors/.all-contributorsrc new file mode 100644 index 000000000..c26034d47 --- /dev/null +++ b/scripts/template/contributors/.all-contributorsrc @@ -0,0 +1,25 @@ +{ + "projectName": "awesome-golang-algorithm", + "projectOwner": "kylesliu", + "repoType": "github", + "repoHost": "https://github.com", + "files": [ + "README.md" + ], + "imageSize": 100, + "commit": true, + "contributors": [ + { + "login": "kylesliu", + "name": "Kyle Liu ", + "avatar_url": "https://avatars0.githubusercontent.com/u/26195433?v=4", + "profile": "https://kyle.link", + "contributions": [ + "code", + "blog", + "design", + "doc" + ] + } + ] +} diff --git a/scripts/template/solution/README.md b/scripts/template/solution/README.md new file mode 100644 index 000000000..2f1b423cf --- /dev/null +++ b/scripts/template/solution/README.md @@ -0,0 +1,32 @@ +# [{{.Stat.FrontendQuestionID}}.{{ .Stat.QuestionTitle}}][title] + +> [!WARNING|style:flat] +> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) + +## Description + +**Example 1:** + +``` +Input: a = "11", b = "1" +Output: "100" +``` + +## 题意 +> ... + +## 题解 + +### 思路1 +> ... +{{ .Stat.QuestionTitle}} +```go +``` + + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/{{ .Stat.QuestionTitleSlup }}/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/scripts/template/solution/Solution.go b/scripts/template/solution/Solution.go new file mode 100644 index 000000000..d115ccf5e --- /dev/null +++ b/scripts/template/solution/Solution.go @@ -0,0 +1,5 @@ +package Solution + +func Solution(x bool) bool { + return x +} diff --git a/scripts/template/solution/Solution_test.go b/scripts/template/solution/Solution_test.go new file mode 100644 index 000000000..14ff50eb4 --- /dev/null +++ b/scripts/template/solution/Solution_test.go @@ -0,0 +1,39 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs bool + expect bool + }{ + {"TestCase", true, true}, + {"TestCase", true, true}, + {"TestCase", false, false}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, 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 ab7713003d1ff17a944d6652b346cba9713fdee7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 23 Aug 2023 22:05:57 +0800 Subject: [PATCH 0373/1057] Add solution and test-cases for problem 767 --- .../701-800/0767.Reorganize-String/README.md | 23 ++--- .../0767.Reorganize-String/Solution.go | 84 ++++++++++++++++++- .../0767.Reorganize-String/Solution_test.go | 15 ++-- 3 files changed, 99 insertions(+), 23 deletions(-) diff --git a/leetcode/701-800/0767.Reorganize-String/README.md b/leetcode/701-800/0767.Reorganize-String/README.md index ef97ac19f..cf625978a 100644 --- a/leetcode/701-800/0767.Reorganize-String/README.md +++ b/leetcode/701-800/0767.Reorganize-String/README.md @@ -1,28 +1,23 @@ # [767.Reorganize String][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a string `s` rearrange the characters of `s` so that any two adjacent characters are not the same. + +Return any possible rearrangement of `s` or return `""` if not possible. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "aab" +Output: "aba" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Reorganize String -```go ``` - +Input: s = "aaab" +Output: "" +``` ## 结语 diff --git a/leetcode/701-800/0767.Reorganize-String/Solution.go b/leetcode/701-800/0767.Reorganize-String/Solution.go index d115ccf5e..5010541fd 100644 --- a/leetcode/701-800/0767.Reorganize-String/Solution.go +++ b/leetcode/701-800/0767.Reorganize-String/Solution.go @@ -1,5 +1,85 @@ package Solution -func Solution(x bool) bool { - return x + +import ( + "bytes" + "fmt" + "sort" +) + +type tmp767 struct { + b byte + c int +} + +func Solution(s string) string { + + list := make([]tmp767, 0) + letterIndex := make(map[uint8]int) + for _, b := range s { + index, ok := letterIndex[byte(b)] + if !ok { + letterIndex[byte(b)] = len(list) + list = append(list, tmp767{b: byte(b), c: 1}) + continue + } + list[index].c++ + } + if len(list) == 1 { + if list[0].c == 1 { + return fmt.Sprintf("%c", list[0].b) + } + return "" + } + + sort.Slice(list, func(i, j int) bool { + if list[i].c == list[j].c { + return list[i].b < list[j].b + } + return list[i].c < list[j].c + }) + + buf := bytes.NewBuffer([]byte{}) + count := len(list) + for idx := 0; idx < count-1; idx++ { + loop := list[idx].c + for ; loop > 0; loop-- { + for i := idx; i < len(list); i++ { + buf.WriteByte(list[i].b) + list[i].c-- + } + } + } + bs := buf.Bytes() + left := list[count-1].c + if left == 0 { + return string(bs) + } + bb := list[count-1].b + bsl := len(bs) + + buf1 := bytes.NewBuffer([]byte{}) + if bb != bs[0] { + buf1.WriteByte(bb) + left-- + } + + for idx := 0; idx < bsl-1; idx++ { + buf1.WriteByte(bs[idx]) + if bs[idx] != bb && bs[idx+1] != bb && left > 0 { + buf1.WriteByte(bb) + left-- + } + } + // write last byte + buf1.WriteByte(bs[bsl-1]) + if left == 1 && bb != bs[bsl-1] { + buf1.WriteByte(bb) + left-- + } + if left <= 0 { + return buf1.String() + } + + return "" } diff --git a/leetcode/701-800/0767.Reorganize-String/Solution_test.go b/leetcode/701-800/0767.Reorganize-String/Solution_test.go index 14ff50eb4..b3d28bec9 100644 --- a/leetcode/701-800/0767.Reorganize-String/Solution_test.go +++ b/leetcode/701-800/0767.Reorganize-String/Solution_test.go @@ -10,12 +10,13 @@ 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", "aab", "aba"}, + {"TestCase2", "aaab", ""}, + {"TestCase3", "bbbbb", ""}, + {"TestCase4", "a", "a"}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b48e2f8ede690a811845eb82ba71fc5977263932 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 26 Aug 2023 12:37:47 +0800 Subject: [PATCH 0374/1057] Add solution and test-cases for problem 646 --- .../README.md | 29 ++++++++++--------- .../Solution.go | 26 +++++++++++++++-- .../Solution_test.go | 18 +++++++----- 3 files changed, 50 insertions(+), 23 deletions(-) diff --git a/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/README.md b/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/README.md index 597d68879..ad75a457b 100644 --- a/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/README.md +++ b/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/README.md @@ -1,28 +1,29 @@ # [646.Maximum Length of Pair Chain][title] -> [!WARNING|style:flat] -> 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 `n` pairs `pairs` where `pairs[i] = [lefti, righti]` and `lefti < righti`. + +A pair `p2 = [c, d]` **follows** a pair `p1 = [a, b]` if `b < c`. A **chain** of pairs can be formed in this fashion. + +Return the length longest chain which can be formed. + +You do not need to use up all the given intervals. You can select pairs in any order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: pairs = [[1,2],[2,3],[3,4]] +Output: 2 +Explanation: The longest chain is [1,2] -> [3,4]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Length of Pair Chain -```go ``` - +Input: pairs = [[1,2],[7,8],[4,5]] +Output: 3 +Explanation: The longest chain is [1,2] -> [4,5] -> [7,8]. +``` ## 结语 diff --git a/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution.go b/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution.go index d115ccf5e..141c0efe5 100644 --- a/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution.go +++ b/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution.go @@ -1,5 +1,27 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(pairs [][]int) int { + sort.Slice(pairs, func(i, j int) bool { + if pairs[i][0] == pairs[j][0] { + return pairs[i][1] < pairs[j][1] + } + return pairs[i][0] < pairs[j][0] + }) + dp := make([]int, len(pairs)) + dp[0] = 1 // self + ans := 1 + for idx := 1; idx < len(pairs); idx++ { + dp[idx] = 1 + for pre := idx - 1; pre >= 0; pre-- { + if pairs[idx][0] > pairs[pre][1] && dp[pre]+1 > dp[idx] { + dp[idx] = dp[pre] + 1 + } + } + if dp[idx] > ans { + ans = dp[idx] + } + } + return ans } diff --git a/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution_test.go b/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution_test.go index 14ff50eb4..e87b1273c 100644 --- a/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution_test.go +++ b/leetcode/601-700/0646.Maximum-Length-of-Pair-Chain/Solution_test.go @@ -10,12 +10,16 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 2}, {2, 3}, {3, 4}, + }, 2}, + {"TestCase2", [][]int{ + {1, 2}, {7, 8}, {4, 5}, + }, 3}, + {"TestCase3", [][]int{{1, 2}}, 1}, } // 开始测试 @@ -30,10 +34,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f0ab3e2e21381d8539ec539fa2314b18d87d0464 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Aug 2023 09:51:40 +0800 Subject: [PATCH 0375/1057] Add solution and test-cases for problem 403 --- leetcode/401-500/0403.Frog-Jump/README.md | 27 +++++++------ leetcode/401-500/0403.Frog-Jump/Solution.go | 38 ++++++++++++++++++- .../401-500/0403.Frog-Jump/Solution_test.go | 11 +++--- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0403.Frog-Jump/README.md b/leetcode/401-500/0403.Frog-Jump/README.md index 2a1296478..00fe30fda 100644 --- a/leetcode/401-500/0403.Frog-Jump/README.md +++ b/leetcode/401-500/0403.Frog-Jump/README.md @@ -1,28 +1,27 @@ # [403.Frog Jump][title] -> [!WARNING|style:flat] -> 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 frog is crossing a river. The river is divided into some number of units, and at each unit, there may or may not exist a stone. The frog can jump on a stone, but it must not jump into the water. + +Given a list of `stones'` positions (in units) in sorted **ascending order**, determine if the frog can cross the river by landing on the last stone. Initially, the frog is on the first stone and assumes the first jump must be `1` unit. + +If the frog's last jump was `k` units, its next jump must be either `k - 1`, `k`, or `k + 1` units. The frog can only jump in the forward direction. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: stones = [0,1,3,5,6,8,12,17] +Output: true +Explanation: The frog can jump to the last stone by jumping 1 unit to the 2nd stone, then 2 units to the 3rd stone, then 2 units to the 4th stone, then 3 units to the 6th stone, 4 units to the 7th stone, and 5 units to the 8th stone. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Frog Jump -```go ``` - +Input: stones = [0,1,2,3,4,8,9,11] +Output: false +Explanation: There is no way to jump to the last stone as the gap between the 5th and 6th stone is too large. +``` ## 结语 diff --git a/leetcode/401-500/0403.Frog-Jump/Solution.go b/leetcode/401-500/0403.Frog-Jump/Solution.go index d115ccf5e..bef5e4305 100644 --- a/leetcode/401-500/0403.Frog-Jump/Solution.go +++ b/leetcode/401-500/0403.Frog-Jump/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(stones []int) bool { + cache := make(map[int]map[int]bool) + stonePos := make(map[int]int) + for idx, pos := range stones { + stonePos[pos] = idx + cache[idx] = make(map[int]bool) + } + + var dfs func(int, int) bool + dfs = func(index, k int) bool { + if index == len(stones)-1 { + // 跳上去了 + return true + } + + if v, ok := cache[index][k]; ok { + return v + } + + cache[index][k] = false + for _, step := range []int{k - 1, k, k + 1} { + if step <= 0 { + continue + } + next := stones[index] + step + if nextIndex, ok := stonePos[next]; ok { + if dfs(nextIndex, step) { + cache[index][k] = true + return true + } + } + } + return false + } + + return dfs(0, 0) } diff --git a/leetcode/401-500/0403.Frog-Jump/Solution_test.go b/leetcode/401-500/0403.Frog-Jump/Solution_test.go index 14ff50eb4..4702bc679 100644 --- a/leetcode/401-500/0403.Frog-Jump/Solution_test.go +++ b/leetcode/401-500/0403.Frog-Jump/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs []int expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{0, 1, 3, 5, 6, 8, 12, 17}, true}, + {"TestCase2", []int{0, 1, 2, 3, 4, 8, 9, 11}, false}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ac092030fe7a682a6a0e385cf74b7588e9441075 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 27 Aug 2023 13:05:31 +0800 Subject: [PATCH 0376/1057] Add solution and test-cases for problem 2583 --- .../README.md | 40 +++++++++++ .../Solution.go | 63 +++++++++++++++++- .../Solution_test.go | 36 +++++++--- .../binaryytreeedrawio-2.png | Bin 0 -> 14853 bytes .../treedrawio-3.png | Bin 0 -> 5570 bytes 5 files changed, 128 insertions(+), 11 deletions(-) create mode 100644 leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/README.md create mode 100644 leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/binaryytreeedrawio-2.png create mode 100644 leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/treedrawio-3.png diff --git a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/README.md b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/README.md new file mode 100644 index 000000000..239c3ecf2 --- /dev/null +++ b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/README.md @@ -0,0 +1,40 @@ +# [2583.Kth Largest Sum in a Binary Tree][title] + +## Description +You are given the `root` of a binary tree and a positive integer `k`. + +The **level sum** in the tree is the sum of the values of the nodes that are on the **same** level. + +Return the kth **largest** level sum in the tree (not necessarily distinct). If there are fewer than `k` levels in the tree, return `-1`. + +**Note** that two nodes are on the same level if they have the same distance from the root. + +**Example 1:** + +![example1](./binaryytreeedrawio-2.png) + +``` +Input: root = [5,8,9,2,1,3,7,4,6], k = 2 +Output: 13 +Explanation: The level sums are the following: +- Level 1: 5. +- Level 2: 8 + 9 = 17. +- Level 3: 2 + 1 + 3 + 7 = 13. +- Level 4: 4 + 6 = 10. +The 2nd largest level sum is 13. +``` + +**Example 2:** + +``` +Input: root = [1,2,null,3], k = 1 +Output: 3 +Explanation: The largest level sum is 3. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/kth-largest-sum-in-a-binary-tree +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go index d115ccf5e..1bdf1de07 100755 --- a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go +++ b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution.go @@ -1,5 +1,66 @@ package Solution -func Solution(x bool) bool { +import "container/heap" + +type TreeNode struct { + Val int + Left, Right *TreeNode +} +type list2583 []int64 + +func (l *list2583) Len() int { + return len(*l) +} + +func (l *list2583) Swap(i, j int) { + (*l)[i], (*l)[j] = (*l)[j], (*l)[i] +} + +func (l *list2583) Less(i, j int) bool { + return (*l)[i] < (*l)[j] +} + +func (l *list2583) Push(x interface{}) { + *l = append(*l, x.(int64)) +} + +func (l *list2583) Pop() interface{} { + old := *l + ll := len(old) + x := old[ll-1] + *l = old[:ll-1] return x } + +func Solution(root *TreeNode, k int) int64 { + list := list2583{} + queue := []*TreeNode{root} + for len(queue) > 0 { + next := make([]*TreeNode, 0) + sum := int64(0) + for _, item := range queue { + sum += int64(item.Val) + if item.Left != nil { + next = append(next, item.Left) + } + if item.Right != nil { + next = append(next, item.Right) + } + } + + queue = next + if len(list) < k { + heap.Push(&list, sum) + } else { + top := heap.Pop(&list).(int64) + if top < sum { + top = sum + } + heap.Push(&list, top) + } + } + if len(list) != k { + return -1 + } + return heap.Pop(&list).(int64) +} diff --git a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go index 14ff50eb4..8bf1b6dfe 100755 --- a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go +++ b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/Solution_test.go @@ -10,30 +10,46 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + k int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 8, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 6}, + }, + Right: &TreeNode{Val: 1}, + }, + Right: &TreeNode{ + Val: 9, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 7}, + }, + }, 2, 13}, + {"TestCase2", &TreeNode{Val: 1, Left: &TreeNode{Val: 2, Left: &TreeNode{Val: 3}}}, 1, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/binaryytreeedrawio-2.png b/leetcode/2501-2600/2583.Kth-Largest-Sum-in-a-Binary-Tree/binaryytreeedrawio-2.png new file mode 100644 index 0000000000000000000000000000000000000000..034733fad6f9a2dd23866f52bbe5a84e6165e64f GIT binary patch literal 14853 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 X?bR|LLc9R}lm$5=u=eG!Q>Xs}d`a}7 literal 0 HcmV?d00001 From f93733e34ee9d93551be6620dd8813d5d25990d9 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 28 Aug 2023 21:42:41 +0800 Subject: [PATCH 0377/1057] Add solution and test-cases for problem 225 --- .../Solution.go | 33 +++++++++++++++++++ .../Solution_test.go | 22 +++++++++++++ 2 files changed, 55 insertions(+) diff --git a/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution.go b/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution.go index 2ae41e49e..adb29a208 100644 --- a/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution.go +++ b/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution.go @@ -58,3 +58,36 @@ func (this *MyStack) Empty() bool { } return false } + +type MyStack1 struct { + q1 []int +} + +func Constructor225() MyStack1 { + return MyStack1{ + q1: make([]int, 0), + } +} + +func (this *MyStack1) Push(x int) { + tmp := make([]int, len(this.q1)) + // 先将queue清空,按顺序放到另一个queue中 + copy(tmp, this.q1) + this.q1 = []int{x} + // 原有元素入队 + this.q1 = append(this.q1, tmp...) +} + +func (this *MyStack1) Pop() int { + x := this.q1[0] + this.q1 = this.q1[1:] + return x +} + +func (this *MyStack1) Top() int { + return this.q1[0] +} + +func (this *MyStack1) Empty() bool { + return len(this.q1) == 0 +} diff --git a/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution_test.go b/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution_test.go index ce8aa82cc..1da932d7e 100644 --- a/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution_test.go +++ b/leetcode/201-300/0225.Implement-Stack-using-Queues/Solution_test.go @@ -25,3 +25,25 @@ func TestSolution(t *testing.T) { t.Fatalf("Top Test: Expected pv to be %v, but got %v", 1, pv) } } + +func TestSolution1(t *testing.T) { + stack := Constructor225() + for ix := 0; ix < 5; ix++ { + stack.Push(ix) + } + pv := stack.Pop() + + if pv != 4 { + t.Fatalf("Expected pv to be %v, but got %v", 0, pv) + } + stack.Push(6) + stack.Pop() + pv = stack.Pop() + if pv != 3 { + t.Fatalf("Pop Test: Expected pv to be %v, but got %v", 2, pv) + } + pv = stack.Top() + if pv != 2 { + t.Fatalf("Top Test: Expected pv to be %v, but got %v", 1, pv) + } +} From e1b239fc1f56c7348b6496934e9f5ac534263264 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 29 Aug 2023 21:36:45 +0800 Subject: [PATCH 0378/1057] Add solution and test-cases for problem 2483 --- .../2483.Minimum-Penalty-for-a-Shop/README.md | 47 ++++++++++++++----- .../Solution.go | 30 +++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 69 insertions(+), 22 deletions(-) diff --git a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md index 6b8b35371..efde06b7c 100755 --- a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md +++ b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/README.md @@ -1,28 +1,49 @@ # [2483.Minimum Penalty for a Shop][title] -> [!WARNING|style:flat] -> 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 customer visit log of a shop represented by a **0-indexed** string `customers` consisting only of characters `'N'` and `'Y'`: + +- if the ith character is `'Y'`, it means that customers come at the ith hour +- whereas `'N'` indicates that no customers come at the ith hour. + +If the shop closes at the jth hour (`0 <= j <= n`), the **penalty** is calculated as follows: + +- For every hour when the shop is open and no customers come, the penalty increases by `1`. +- For every hour when the shop is closed and customers come, the penalty increases by `1`. + +Return the **earliest** hour at which the shop must be closed to incur a **minimum** penalty. + +**Note** that if a shop closes at the jth hour, it means the shop is closed at the hour `j`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: customers = "YYNY" +Output: 2 +Explanation: +- Closing the shop at the 0th hour incurs in 1+1+0+1 = 3 penalty. +- Closing the shop at the 1st hour incurs in 0+1+0+1 = 2 penalty. +- Closing the shop at the 2nd hour incurs in 0+0+0+1 = 1 penalty. +- Closing the shop at the 3rd hour incurs in 0+0+1+1 = 2 penalty. +- Closing the shop at the 4th hour incurs in 0+0+1+0 = 1 penalty. +Closing the shop at 2nd or 4th hour gives a minimum penalty. Since 2 is earlier, the optimal closing time is 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Minimum Penalty for a Shop -```go ``` +Input: customers = "NNNNN" +Output: 0 +Explanation: It is best to close the shop at the 0th hour as no customers arrive. +``` + +**Example 3:** +``` +Input: customers = "YYYY" +Output: 4 +Explanation: It is best to close the shop at the 4th hour as customers arrive at each hour. +``` ## 结语 diff --git a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go index d115ccf5e..77e00ce98 100644 --- a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go +++ b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(customers string) int { + l := len(customers) + left := make([]int, l+1) + right := make([]int, l+1) + n := 0 + for closeTime := 0; closeTime < l; closeTime++ { + if customers[closeTime] == 'Y' { + left[closeTime] = n + 1 + continue + } + left[closeTime] = n + n++ + } + left[l] = n + y := 0 + for closeTime := l - 1; closeTime >= 0; closeTime-- { + right[closeTime] = y + if customers[closeTime] == 'Y' { + y++ + } + } + ans := -1 + for t := 0; t <= l; t++ { + if ans == -1 || left[t]+right[t] < left[ans]+right[ans] { + ans = t + } + } + return ans } diff --git a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go index 14ff50eb4..75b860f3c 100644 --- a/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/Solution_test.go +++ b/leetcode/2401-2500/2483.Minimum-Penalty-for-a-Shop/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", "YYNY", 2}, + {"TestCase2", "NNNNN", 0}, + {"TestCase3", "YYYY", 4}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ff5659915afce14fda4320ccabe2e0f77e932483 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 1 Sep 2023 22:32:08 +0800 Subject: [PATCH 0379/1057] Add solution and test-cases for problem 1530 --- .../README.md | 35 +++++++++----- .../Solution.go | 37 +++++++++++++- .../Solution_test.go | 45 +++++++++++++----- .../e1.jpeg | Bin 0 -> 10663 bytes .../e2.jpeg | Bin 0 -> 18066 bytes 5 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/e1.jpeg create mode 100644 leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/e2.jpeg diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md index cda81e8fc..0fcfda373 100755 --- a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md +++ b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/README.md @@ -1,28 +1,37 @@ # [1530.Number of Good Leaf Nodes Pairs][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given the `root` of a binary tree and an integer `distance`. A pair of two different **leaf** nodes of a binary tree is said to be good if the length of **the shortest path** between them is less than or equal to `distance`. + +Return the number of good leaf node pairs in the tree. -**Example 1:** +**Example 1:** + +![example1](./e1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,null,4], distance = 3 +Output: 1 +Explanation: The leaf nodes of the tree are 3 and 4 and the length of the shortest path between them is 3. This is the only good pair. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./e2.jpeg) -### 思路1 -> ... -Number of Good Leaf Nodes Pairs -```go +``` +Input: root = [1,2,3,4,5,6,7], distance = 3 +Output: 2 +Explanation: The good pairs are [4,5] and [6,7] with shortest path = 2. The pair [4,6] is not good because the length of ther shortest path between them is 4. ``` +**Example 3:** + +``` +Input: root = [7,1,4,6,null,5,3,null,null,null,null,null,2], distance = 3 +Output: 1 +Explanation: The only good pair is [2,5]. +``` ## 结语 diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go index d115ccf5e..16d661d33 100644 --- a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go +++ b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func dfs1530(root *TreeNode, dep, disLimit int, ans *int) map[int]int { + if root == nil { + return nil + } + h := make(map[int]int) + if root.Left == nil && root.Right == nil { + h[dep] = 1 + return h + } + left := dfs1530(root.Left, dep+1, disLimit, ans) + right := dfs1530(root.Right, dep+1, disLimit, ans) + for ld, lc := range left { + h[ld] += lc + } + for ld, lc := range right { + h[ld] += lc + } + for ld, lc := range left { + for rd, rc := range right { + if ld-dep+rd-dep <= disLimit { + *ans += lc * rc + } + } + } + return h +} +func Solution(root *TreeNode, distance int) int { + ans := 0 + dfs1530(root, 0, distance, &ans) + return ans } diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go index 14ff50eb4..5a1ed7f64 100644 --- a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go +++ b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/Solution_test.go @@ -9,31 +9,54 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + root *TreeNode + distance int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 4}, + }, + Right: &TreeNode{Val: 3}, + }, 3, 1}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + }, + Right: &TreeNode{ + Val: 5, + }, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{Val: 7}, + }, + }, 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.root, c.distance) 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.root, c.distance) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/e1.jpeg b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/e1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..1040880d4b46b91b49f11dba7eaef4e59c3df967 GIT binary patch literal 10663 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 J2}sYz{uk$|hOPhr literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/e2.jpeg b/leetcode/1501-1600/1530.Number-of-Good-Leaf-Nodes-Pairs/e2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4d6f04c55baf839004d85ffcf3dcc844ebcdc3ba GIT binary patch literal 18066 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 Dz Date: Sat, 2 Sep 2023 12:36:28 +0800 Subject: [PATCH 0380/1057] Add solution and test-cases for problem 2707 --- .../README.md | 29 ++++++++++++++ .../Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 75 insertions(+), 12 deletions(-) create mode 100644 leetcode/2701-2800/2707.Extra-Characters-in-a-String/README.md diff --git a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/README.md b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/README.md new file mode 100644 index 000000000..828438f5f --- /dev/null +++ b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/README.md @@ -0,0 +1,29 @@ +# [2707.Extra Characters in a String][title] + +## Description +You are given a **0-indexed** string s and a `dictionary` of words dictionary. You have to break s into one or more **non-overlapping** substrings such that each substring is present in `dictionary`. There may be some **extra characters** in s which are not present in any of the substrings. + +Return the minimum number of extra characters left over if you break up `s` optimally. + +**Example 1:** + +``` +Input: s = "leetscode", dictionary = ["leet","code","leetcode"] +Output: 1 +Explanation: We can break s in two substrings: "leet" from index 0 to 3 and "code" from index 5 to 8. There is only 1 unused character (at index 4), so we return 1. +``` + +**Example 2:** + +``` +Input: s = "sayhelloworld", dictionary = ["hello","world"] +Output: 3 +Explanation: We can break s in two substrings: "hello" from index 3 to 7 and "world" from index 8 to 12. The characters at indices 0, 1, 2 are not used in any substring and thus are considered as extra characters. Hence, we return 3. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/extra-characters-in-a-string +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go index d115ccf5e..796501d08 100755 --- a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go +++ b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, dictionary []string) int { + dic := make(map[string]struct{}) + for _, str := range dictionary { + dic[str] = struct{}{} + } + if _, ok := dic[s]; ok { + return 0 + } + + cache := make(map[string]int) + + var dfs func(string) int + dfs = func(str string) int { + if _, ok := dic[str]; ok || str == "" { + return 0 + } + if v, ok := cache[str]; ok { + return v + } + extra := -1 + for i := 1; i <= len(str); i++ { + part := str[0:i] + tmp := i // delete characters + if _, ok := dic[part]; ok { + tmp = 0 + } + x := dfs(str[i:]) + if extra == -1 || x+tmp < extra { + extra = x + tmp + } + + } + cache[str] = extra + return extra + } + return dfs(s) } diff --git a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go index 14ff50eb4..0ad05eea1 100755 --- a/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go +++ b/leetcode/2701-2800/2707.Extra-Characters-in-a-String/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + dic []string + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leetscode", []string{"leet", "code", "leetcode"}, 1}, + {"TestCase2", "sayhelloworld", []string{"hello", "world"}, 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.dic) 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.dic) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 7c52d91a23fd5899a0ad5900aee59582cca90522 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Sep 2023 11:51:50 +0800 Subject: [PATCH 0381/1057] Add solution and test-cases for problem 998 --- .../0998.Maximum-Binary-Tree-II/README.md | 51 ++++++++--- .../0998.Maximum-Binary-Tree-II/Solution.go | 18 +++- .../Solution_test.go | 83 +++++++++++++++--- .../0998.Maximum-Binary-Tree-II/maxtree1.jpeg | Bin 0 -> 13220 bytes .../maxtree21.jpeg | Bin 0 -> 11835 bytes .../0998.Maximum-Binary-Tree-II/maxtree3.jpeg | Bin 0 -> 13050 bytes 6 files changed, 127 insertions(+), 25 deletions(-) create mode 100644 leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree1.jpeg create mode 100644 leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree21.jpeg create mode 100644 leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree3.jpeg diff --git a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/README.md b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/README.md index 3ae2f6aba..69bf5b966 100644 --- a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/README.md +++ b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/README.md @@ -1,28 +1,53 @@ # [998.Maximum Binary Tree II][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +A **maximum tree** is a tree where every node has a value greater than any other value in its subtree. + +You are given the `root` of a maximum binary tree and an integer `val`. + +Just as in the [previous problem](https://leetcode.com/problems/maximum-binary-tree/), the given tree was constructed from a list `a` (`root = Construct(a)`) recursively with the following `Construct(a)` routine: + +- If `a` is empty, return `null`. +- Otherwise, let `a[i]` be the largest element of `a`. Create a `root` node with the value `a[i]`. +- The left child of `root` will be `Construct([a[0], a[1], ..., a[i - 1]])`. +- The right child of `root` will be `Construct([a[i + 1], a[i + 2], ..., a[a.length - 1]])`. +- Return `root`. + +Note that we were not given `a` directly, only a root node `root = Construct(a)`. + +Suppose `b` is a copy of `a` with the value `val` appended to it. It is guaranteed that `b` has unique values. + +Return `Construct(b)`. -**Example 1:** +**Example 1:** + +![example1](./maxtree1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [4,1,3,null,null,2], val = 5 +Output: [5,4,null,1,3,null,null,2] +Explanation: a = [1,4,2,3], b = [1,4,2,3,5] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./maxtree21.jpeg) -### 思路1 -> ... -Maximum Binary Tree II -```go ``` +Input: root = [5,2,4,null,1], val = 3 +Output: [5,2,4,null,1,null,3] +Explanation: a = [2,1,5,4], b = [2,1,5,4,3] +``` + +**Example 3:** +![example3](./maxtree3.jpeg) + +``` +Input: root = [5,2,3,null,1], val = 4 +Output: [5,2,4,null,1,3] +Explanation: a = [2,1,5,3], b = [2,1,5,3,4] +``` ## 结语 diff --git a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution.go b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution.go index d115ccf5e..76e944363 100644 --- a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution.go +++ b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, val int) *TreeNode { + if root == nil || root.Val < val { + return &TreeNode{Val: val, Left: root} + } + r := root.Right + if r == nil { + root.Right = &TreeNode{Val: val} + return root + } + root.Right = Solution(root.Right, val) + return root } diff --git a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution_test.go b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution_test.go index 14ff50eb4..b14189f40 100644 --- a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution_test.go +++ b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/Solution_test.go @@ -10,30 +10,93 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + val int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 1, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 2}, + }, + }, 5, &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 1, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 2}, + }, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 1, + }, + }, + Right: &TreeNode{Val: 4}, + }, 3, &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 1, + }, + }, + Right: &TreeNode{Val: 4, Right: &TreeNode{Val: 3}}, + }}, + {"TestCase3", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 1, + }, + }, + Right: &TreeNode{ + Val: 3, + }, + }, 4, &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 1, + }, + }, + Right: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 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.val) 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.val) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree1.jpeg b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..2c1b683170016d50664f7620f0f0ad3016071df1 GIT binary patch literal 13220 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 literal 0 HcmV?d00001 diff --git a/leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree3.jpeg b/leetcode/901-1000/0998.Maximum-Binary-Tree-II/maxtree3.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..d1dcf0755575ee7edb973bc98ec1b24435bcc73e GIT binary patch literal 13050 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 literal 0 HcmV?d00001 From ae799ef1d9df4b32b9dc4cddfbfc1f8c0c26fa2d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 3 Sep 2023 12:26:42 +0800 Subject: [PATCH 0382/1057] Add solution and test-cases for problem 1080 --- .../README.md | 36 +++--- .../Solution.go | 28 ++++- .../Solution_test.go | 110 ++++++++++++++++-- .../insufficient-11.png | Bin 0 -> 73375 bytes .../insufficient-3.png | Bin 0 -> 55096 bytes .../screen-shot-2019-06-11-at-83301-pm.png | Bin 0 -> 34336 bytes 6 files changed, 149 insertions(+), 25 deletions(-) create mode 100644 leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/insufficient-11.png create mode 100644 leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/insufficient-3.png create mode 100644 leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/screen-shot-2019-06-11-at-83301-pm.png diff --git a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/README.md b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/README.md index 947d51eea..66e2aa8c6 100644 --- a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/README.md +++ b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/README.md @@ -1,28 +1,38 @@ # [1080.Insufficient Nodes in Root to Leaf Paths][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the `root` of a binary tree and an integer `limit`, delete all **insufficient nodes** in the tree simultaneously, and return the root of the resulting binary tree. + +A node is **insufficient** if every root to **leaf** path intersecting this node has a sum strictly less than `limit`. + +A **leaf** is a node with no children. -**Example 1:** +**Example 1:** + +![example1](./insufficient-11.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,4,-99,-99,7,8,9,-99,-99,12,13,-99,14], limit = 1 +Output: [1,2,3,4,null,null,7,8,9,null,14] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./insufficient-11.png) -### 思路1 -> ... -Insufficient Nodes in Root to Leaf Paths -```go +``` +Input: root = [5,4,8,11,null,17,4,7,1,null,null,5,3], limit = 22 +Output: [5,4,8,11,null,17,4,7,null,null,null,5] ``` +**Example 3:** + +![example3](./screen-shot-2019-06-11-at-83301-pm.png) + +``` +Input: root = [1,2,-3,-5,null,4,null], limit = -1 +Output: [1,null,-3,4] +``` ## 结语 diff --git a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution.go b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution.go index d115ccf5e..4a24d6672 100644 --- a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution.go +++ b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, limit int) *TreeNode { + var dfs func(*TreeNode, int) *TreeNode + dfs = func(tree *TreeNode, sum int) *TreeNode { + if tree == nil { + return nil + } + s := sum + tree.Val + if tree.Left == nil && tree.Right == nil { + if s < limit { + return nil + } + return tree + } + tree.Left = dfs(tree.Left, s) + tree.Right = dfs(tree.Right, s) + if tree.Left == nil && tree.Right == nil { + return nil + } + return tree + } + return dfs(root, 0) } diff --git a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution_test.go b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution_test.go index 14ff50eb4..fb3d6e1f8 100644 --- a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution_test.go +++ b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/Solution_test.go @@ -10,30 +10,120 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + limit int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 8, + }, + Right: &TreeNode{ + Val: 9, + }, + }, + Right: &TreeNode{ + Val: -99, + Left: &TreeNode{Val: -99}, + Right: &TreeNode{Val: -99}, + }, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: -99, + Left: &TreeNode{Val: 12}, + Right: &TreeNode{Val: 13}, + }, + Right: &TreeNode{ + Val: 7, + Left: &TreeNode{Val: -99}, + Right: &TreeNode{Val: 14}, + }, + }, + }, 1, &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 8}, + Right: &TreeNode{Val: 9}, + }, + }, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 7, + Right: &TreeNode{Val: 14}, + }, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 11, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 1}, + }, + }, + Right: &TreeNode{ + Val: 8, + Left: &TreeNode{Val: 17}, + Right: &TreeNode{ + Val: 4, + Left: &TreeNode{Val: 5}, + Right: &TreeNode{Val: 3}, + }, + }, + }, 22, &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 11, + Left: &TreeNode{Val: 7}, + }, + }, + Right: &TreeNode{ + Val: 8, + Left: &TreeNode{Val: 17}, + Right: &TreeNode{Val: 4, Left: &TreeNode{Val: 5}}, + }, + }}, + {"TestCase3", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: -5}, + }, + Right: &TreeNode{Val: -3, Left: &TreeNode{Val: 4}}, + }, -1, &TreeNode{Val: 1, Right: &TreeNode{Val: -3, Left: &TreeNode{Val: 4}}}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.limit) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.limit) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/insufficient-11.png b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/insufficient-11.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c4ad0c47a6b89417059ac7ca3960f236830b23 GIT binary patch literal 73375 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 GGywnyS05?> literal 0 HcmV?d00001 diff --git a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/insufficient-3.png b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/insufficient-3.png new file mode 100644 index 0000000000000000000000000000000000000000..b6728d985b5272bb723de256d90cf8a98620ec33 GIT binary patch literal 55096 zcmdqI1y@{Mvo4AT_uvrR-Q7KSaCdjtV8I=N1x+BhySux)yITlO;I7X5?Qg&1-h2MQ zVKjqY-D|E{RkP|TB|=F-3JD$$9t;c&Nk&@y6Brmo4;UEu9_%~d6Lu6C2QV;1DJwBC zB^fa>VkKt>b1PdjFfi$eWDOWim0_%Goli2Bfl5DvH^gaX@`I;HVWlx`gURESjOAcS z-OaS17a2*vR~(guM^!+_*BdiM8DFAEs3y5p8;b4A!ymP5`ds=PJ|AqnW%C>gQMfpm zgH080%jA0%F@ilNLTHJaQrq}y^G40VIU2&(fxnCP^leTeBqD~{`V&PqY;_v_f8Nhw?sS7;{Ak(}N3#Av&QN^kE1SKwn?I zycB;#JP$BA;NoBQ-yI{^*}JX@t7^eYj_>Vrw))^O@U|TL#_;GB*^P7OI3-?F1Z6f} z<-p}qC`reHwDUp6+?Js43AGa&LG=zbPc?y*R?99f{d%8ZiLEPmNxlmqDs%~P2UbSk zHd-?08%6AvD53_eHaX)KrIjx>-2Qe1-UQzATyT>}CdF8;o)a?1Q4Ch$@k9#jg}m?o^RD)fwW6n-B^5up zE}1K;y*wII{AUdmglK3&X3^k+gE0r2fpd~l><^JJqJBd$Y)&d$k#Ru@OP8 z@&_X)orkYFNSm&DCQ?p$-`|scgzdlfQM9wLt0ciPQ|vsC=Up88(cv6w-VrzXSTGCW z8TYz@t`mITuV6A*Rl6io23J)@rpe|G&iAuVtn?_s8WTxUR%!n$f)~Kd;B23&`=<-_ z%Z2kh837Gq`cHmD;1(sWp>mlFw1(B&sRlzkA0NmrV6mpQs z)_ZOg#z31bWL*KhEuJH22N9tlV)EcvW>kzm^lC9(RFpn!IMJR29CC0OG1hon@gVAW zts&8$1X>ZQBpLC%dt7^9&WJowb!3h4Fw$JV;2*<{sgXE@$CZ6t$xotcrY+gwvVzU? zW~Yqnp!6cubL)>3>d*v2v!yD35FWYIp+Kf#4fK^UYm8y<8aiq6ri2Vv@o3_z2hJNK zX(GI2RT>g%qTGQ~?I31`wDw>Ugi!7J`r-+~7zAl-uU<>OK>0!Y2i)%%z`6$Ec86>! zZlMog)WFTc3c?h*M4n9zkvnup1*gQ98jn2{>V2Q&(p#$()fT zNK=wye=42b<{sf*@80Mh)t+A@ zV}I<9VniM+H5>IPwGK5yQdAP-M{H=h@1A#Oc8<;ao{*2QVZt=aI14_jofq59+m)u}u7yA^`+{KIdL6Qb z%k}v;j`xMPllP;y>~Hs@ta+aj#hJ!Mltt{L)FX!lp^DAnE*wroRR zJ?A5i_D+*d>o$%P*-p;(>76UwJC1@{JX^!{7Fz32s1Wb*8FBUbUP9@{lh3t}v@f3w zpIxW~HJ_%QLoH_ke)G~0C& zcCtBpJex_XIT}57h54iayVs^{F;2f+Kd1e3o7o1^#=2mGAg&;XAeS$a@9yW+hwN*z zhmfc7TfU?F?#{xdk27-1oSBvj%#7vGVhEk|>)MQ78-(w9+ z4fP%Eu6j{3P(_9o;;C$@+>w2#o+XNOis)VakN9GREI1D>aj>v()v*?^Du}WP^fCQ} zdU#3sas_j_X6T&F_ok^uRbA&Ii|}<_7;|(6&k1+g%6{uLz3&}5}eKX#t z*U=v<)R@$eHgiZ&nHhi78)==ZnoBMw+?9&W5qR}Yw@T+O=gCUSPVC@lcMyFD=D=v7 z^p>a3^8B3G`!iR@f+|B{BE#1*a^n3)Qaf&N^jtI{ZjPr@o3_3IC08wFZR+H9<-QPh zFswR4OGsc(au1bOpcY+iwmFP><;VpVbQG<)fN^Zo#}`&AS__kj*0rWJyJkqQVz1U; z!;iR+Fyv2(y2BC0SSnEk4YGPa^JikMUS}8NPLm}@8%EF`$-P_x!Plw`l(=dAl=!I; zY0DUWg#^r=Hb~n^Wu`-LC)ltiJwFjBzl_THQu>>p(wA!8SO}zzXSZ7+vr@Szoa$yY zQ@FGqNKC8>=I{!6yb>X-VU_7#nH!z-q@dpp#R{X0lFkee{HN}f*wJNhox8~(3atm`+h>iAsIvtGRw|S*qa6?4e9m_n@?UD zraFUn!RJ&bz9%Q{Y3G{iaSL=OtsV+%UdM}71{wIe_?+j)7qpv5?sV=#&kVbbr#`v& zbr-kmt5uWs2IGDMuQifCog_^hz7`ed@sv0J=}LnvX8>n-_9wc2Zup`OQ;LH7LEAme zyJ_#LD`AK1vsAv6PplcyscqJb_u<3Cu7+YX-?TgH)801~w8GdN^Bh5E%B!*N+E)vd z%o~A4*Ntc2UFb@L=eMgT6aNekon48XsPWVn#`?NAdm&$*hhNonMj8rw`}zX@40qbk zw|l2t4svbNPAZN!$K`E0Ob*x^7oBXEjNA6h0_#4Q_v06fucOBXt-Nh~$O5oFj@w2% zy?j|O6Nhnoae{8i`~^Z4p2m+qFNz0ezpSIJr)JB0F5K!qwRIN$R%{ot(dX`1y4M&o z!1f-zcW+N>C-AJ_s~s@bD5Wyu6E=EwB2-JcXFARtUg8A%NwW zK|=mHg?T6F5IDR6v310L`}m1Q+>`TxM?9he7vUiAa&I$a&~H!Bf)mIuz~CIEwOqi! zuqZ&k;4+`cuYjZ@%Su(#Ra0J$*Tlh&(a6-n*o@KB&Jnm942<8C7kF!D=4wRjX=iKi z!s{tO`u7fA;63PLCQ{X=x+FLr7mN2I&0}XwB{~+FLt^scL-gH+T+xVcaJt1oAaw zakhxT(f{@0BU6fwt;#Cr9;f)%=SomVus7I&P|^Ya^Xg)Rn?h?CH7lGZ7l!!n%Qg6s z?_ZbXhN-~9)%}`T%YW~|+w(&BuPxE5WFcIG&z+a8*x};A{`(>{dPV-%CEOAPIB$=8 z^BH^k|Ih#;CYISB=6|UQfI3SABQ$E&b;pzcU#iH3rP4Yf|4StB#$6^Lwn~qYFNX48 zOnxUD+x*uhF?cJmaEUQBOY-agQU!2*aQUyx_y9fh?_{>AqY8O4{}oOENL(KOx|IIE zM_fZu!tM&lJBs9_+p6djnS60B*o>t6GiE>aT0>74XPwCS@cSdd6=Gwlw@=_3S@XA) z8|d5k1(f)Q{d^LIHyOy9z``-o5eZ#piGV_ZLni zI*s4rF|^6b`JbRw-?z5z2b<^=n9?-0v~*4X;CAk-aFSHVs?cwZottCNRBR6Zd2{Hr zGpE%@mEDtEy6AjJx4jc|AdgSH)CuQXqCO!o0rL;BPs9MRM5n?G0I}@E#A5iloVNWZ z466yGnVLM2QJOGsp|?{-_I7jkw`kkQ`B6WIulr`X9l4Qx`WRh$irJc7IEqvdesqtM z_&fij*GFFfUHx1JSq~UP6?0&{j)(E_2~ty%yM#=Mem=T3hfQRPJbur7|1#-JK3SW@ z8Gq$w2Z9!tJvDAjNbfoWyLcalOV|?W6b}tZDDMNn2)7}+c8URd2gp!UN*wDAGQ-`GLcA~ z$({A{H||_J8!r^hi6|GX2*`Ht!~q)>DCe}J0Ouo)Pjkh>c*~BPJxo+CF@-}sC5#Pt z=hsr_Yu@La(B$Fb!Cj|@fOxi`oa+6F<}U$i00DMxW>(m6OC*70*Hp}YPXs?B(9P>h zyiDc-vRfP+tNnb~U$s$-)l1E0B|SBd#{OzdYx9UhiO~SZ5#K6YuP z=S7Z(3@$z(6v~vUvC=<-w564zG;510>~2x1#Y=)PR!}8LO-dpTdp9+`3e~ssiKG~ct+24pB zOK1UsoUkA46xsv|MYb4VRMC}Ion4I$Oey;x%ry7?pRe|&zM zT$LzoV2$M>fvEn@2k`9HNUjQK5wQ@IDNeTsMnSR4+wBw>`*rEpoKZxVi9Rias?U?) z5AzifhmuGv(Hp8sAeD;-9d&|wR0|-kJ@kiPi!$LtUhsrEjpA<=M$LnE``yVli&xi6 zn~pT+@Jo)p>gvhvfWjZe0QS>f4tq-ij_yeuSQN9$>~s84_4n^CpGl$HuA3O|o`&`3 z>%p@SM>nVLXC{G|nOqTAn12A|5#W@QNOnRTpd1`ri|Rqh;4PePv7%JFdmQh$)+V!A zDLR7{;Tf3_oNw}56!jsn331>Xa4-*VT32Ym!GOc2q3^x;e!g1k6+`;&G_4vf{FHl0u*@8!6{NCy4?PA!Bhp9EUMiaisC) zH+)67_lxhOxWk|qBGDULK-S^U=dVc<$$8(T7)=1PZ`n6>0)hg z`0BySQC?hpLW0w3wU2<;<9_P)#f4vG>bUz$m<*fal{A6m?PUZ2O6D1<7=M{=2RYlC*E@7w&J;lM&9N$v**Sjo@t+O*z<@0>Vml;{6eVu_YB0pFZlsMlUgCz_N`=ubB zgwiv2jkc;aPeRbCtwjNN>XWeT1X$5JD!1bUj$h^rm$mxMK&fJEU6a1WWOo1aWoPA1 zJdxL40?Yszm;IV1_u&NABHinrmG9$e4(F!wtS zOe7%oict6gupME4D9Q=#fO8*YOLbn`=ezSXZYR zfWf1pQ&ik*YiuV)Sxa&G?WLN@T+g;{GQY+#R8SW{E;?R=EZpgb|Bm&^9W zOYe1b7}MNLxikbgxb6rHs(9e15XZp4V5kILJ4u0!rpoAopq zfh++tPY*)~*$XqFku32+Ch$ym5X2HPaLQAFlc5idjPxK7`G)NDM;V>@Z&o$IvA*MG zW&Jdq@B_u|bYWbjfd8^~Qc%UIcfM3(5Z^&lpR0JN#cn#SgBiUXGQ-$2$KLB?;0uUU zVTeaEVJU9^OiwHTZ!qE7s0p^^wo(26+>JWARr|s;zNEJ}Zi~|EwWx+D`reFlr3Xui zSFDFa(=Gf1btt2iCH!%J0}lXeT!U`{dc=UIK9OEsaP7utI>TKGzP$$mNY}iz0{IMP zvyu1tlZ82c@LXJ@sqPuL)dZ!DXTon+O0I}-Ge`)ufBml{C~yximCTaqnt=7?GNMHu z%;~Dl3;phQo{m-j`fGob+vOlSQMuM!9+S$KDR4A}q4(wSW}au$@3|ayliIIR1%Q{s z;@T>%JJ=6IYuMv>>x8YgoFbWjBcwAR&@$rFG)r{5oXg}as_)9aDJO!NKDnO1U z{0d7TE8Vx)DKAMe`RifwM)BY>moyU-6EkGF)}j>m<G{aMuQx=}+-~pk!cau>ygU96R7#@9oIDx-4i`zsCByd~ zqD7aHk)eIxGde0;ug$1Z5N*yYEh2N6c-_5p?dYCJc&ESc)4aOi-6tFn7;6Rs%0MSv zC=DP?5QemTYY+g0rHn5R^A=kd1?6Pgjxpmt5`87Nn)I&@%XMfUK1|KFeRbgk;a-&r zpz!Ce+g6-#I0;=3od<@C-C{@U#e_Yp^_;nIAq$V~4*mm=Q8YMY?!EYtdQQmypk*$` zcQReq&`cm97bb)7F-G1^wW?L#Xr~wS^s1BmRL*4noDG@AZ39lLhN{MvUF$oKc&a0Z z1cH8Hd|=D^Z8;i1s^+9u$BGz^zs9sc@igZ+-jtSOSE8YGF| z@1UyI#l=39tJ|u>;WacQI9@2m*q7a1-+*+?fMGw1>R(UPzhl(%tSc<%cyzC5(RFAqHu#I85{W>GqZqL8TxM{CuhEOl`|t z3B9fiLR+4UUyS30|Sq<8CopAM$xT@qD zlEs9Nz}+}ufRgT(VR8UPou)5c$F+wnW+Fc=1$^PSYFM4lS2#SqQU+&xVZIxCnW!Z; z&BM97yM@$#WfO(S`0k;Z!B=*m@>lb~UC@BoiZL-W3^*+n2%vq?r@9Sg(4HNuJ>Sk! zWJCS>-Y$IKDXzxe)7H^ou1sA*B@3R8-Z&XH4E1evx=|L!GcxP^7>&y#^be3uRei{U z=i{g(`&)HsLIGmr`@r5*fYaYHh8|;Raym_NG>b*{4ADpHn7KchSy^jASsVekFCsGF zxlG^mEvJ753dTH0mD1dhR#_eD-`W~BD!|&g)rL6BtvPKUF^Ne^Ql89}G1{I%XjoY2 zt%~l0jNsq#4^N={^fR+VzqZ5=v)Okz#O_L$1YZv$OAw~HvPNS`7^a2z&n8sLUipET zZY(@pTyzI_yAK=Vx~qNa1-bA~-#2o!r)or+RL0)cPZIlxqwDtn7%BJ-Dj=#4v6&%& zs30NexaPHmYVt#CeMe@ZQ14SpP5ELt?%hsJeQs!W*_m|Xl7l5fLlygiaJ z(blK|%|BPj2dY7+gzP1$VnQUQxgzh6q;y|xY!^{x8vp-*0VD)M9;e}-*!7Q}CZ`rG zSJ&PGKbge!gM3K5jGJ>X6sN@EUHSI5{$1dr_D=8-WVI%(Hf0XKi@N+~g9O;SD0AHY zDD2M4rqg5GH2R$%aeX-fQBfG7_wZ5zXpG(eB*;qafSE=O#AyJEWhpF787o8eDYkpP z7jQuvd6eW*Nk$h$^ipXxmN(Q+#mcOw2^z>n=J=?0-|H0M%zdsxR&`nkcA`>o{e zFMYnMYB9H*RDdlqXcS(&G5rVNRsq}U$b!iM4DBdfSkj!bV9X#?GlBcyXfHg0)M%_S zejBMUal-g`MSiLJ-moGB9O?9j#B8YLiG^R-ubq5V3R(AXwsYxJS}oDKAY{qH`0u)e z@K1)XBW_C%iq3kMv3964Wild#TaSP-06zgYIu}9HR1pqPMw{{FV0r?1W6!W{; z_?vn=+<>XA1EA2sPRRIsazFQaAQEYH?v_x8OA0#yb?86BbOeNnFcGZ*awTa2a)@7J zSQ*2`S#TwpMajdxQrH}HE7z*mYix+zFZf_-E*F#=~-TdC0RtY}%Lh%*0BI7vmOtm@h1ME1O3wZ$ZgZAuXy01@iE#yKpIZTnu0 z<)BitP~Q%73idN!ee2*ie!0J~ry~ASiIi3uZ?HaRZO}iwR@VL9=*;zmv$e5BDPbnGm!l= zxR1BKm$cLW8{WFh0x-7DD1bx-{s(Od(*?($p{~Ou)%6uZA%`z+4*}ch`V-zvg}#Kh zH*ZZ%t+L$9;oe>VdM=XlGHbpnb}M}LhpP%rG}d>Tr%tQbFhtk=BC1JMzp-J;?SAru z^rz}QfFvoTqo9ZcUVLjo=TG;Jy1&rI$s|{2#t(8?3F=`pw3+SVo#JuAkBJUuo}?g0 zjuQ@GBqRft8U?rxMU^PIKZC_Djf9kYW9yQVDiWLbqkE#b8hY){(_ayye!ge=TRF}G zLHZ4Jt~a^iDU>|}%mQ5*(h5`!fu_--Zc0W5J+0l4cfW#yLJ#hR?vb-g$b8`9U*C}c zDn86uD{G)vu|W7s&<|EXzOjcNk>H85Gy4k|;ESa&xfDp1p(05m7rTUozat-~SE?s9 zh`b^P@i)Z-@W*RFTp|V0AT6vOoL0k(9=5B{wXAiaTVqz$yyzt|=WV-GEhWFo#x7p> z)85)1E%R@Pji?BSemgb(U3@?_EP2#Zdkw$#&Nr75$xFv=D2-CpX-!ES@zrGfMw8{x z@{g-kTf)JO48Br)U()0_0AWgh7Y3qJY*=hXfO~5AK#bhuzB%YoahaOYs|r<-b10uA zH@cCewmWbDXfAu(Fm2|wL|&1mJ6)b(bh}eQPv`P2G3-ZYg)gV}MZ>wB`*jQPW z3(Yz9p;~!$8n%PgkQNfI)>)*O?Y3F-m4UD=@-qwJv6R|hQ?teu(G1QEka5rriloN1%`Dv}g(0cHwejkb`L!;KCMl_;~@K-O;0lBF|C{~jj zGC?gw1(%1AI?2W^jN|1g4mR8ww_Kd@yWO=phkj+!7tM#?PiE7d?$z_~{zURu=#hYW zluN5111U53w;~FRhP@+#8Hg(a!)Hy!Qli42a|S zkH;EX)_<#jSU|mc2||g70&a;eu#^-{b^$geLaTyt!n&|JR*}P}-w3u9yL=_wZPkND zuhqjcLO?q#;=(7C`%i%2AhGUxrGP(pU{sZ%6VDF054txAoAN z94y0wsB6uvGl4l#(1&Z2d8VbJbQ$Wf|}HsOe!M58tnUZ7+FI%rQ~Kub`7 z(mJ4TzetHO%1m>U3G9GyS3^@;zwkN@94?b5wah(qQcqf>|JMi7jaCF8Jw>#HQv*Rl z;4=UTzW#!~$$x8SvJ%GgvKwG`G>( zd)3aWI9z|o{Z(%$V0p^-5gwVYcW`@qdqspjpTlBlPDAfcf++p!?WR7ZyHW*ylg+F8 zd^tXV4=K(Ok&;^i_0QH2pslMS>jI(Z<%rKuIEL(Xz&Kf!9tyAiWe$EguGoX%cVGqF+ldQmjTq-eDii9$PN9Wb}$s99K+3;=+O&H zG_F6fv{e(mb3+>a9E0-z3g#@ug(;=w(QZv0!h?&S zI&zgmm*Cu8P4f_Au1>YbUVEKN7917aIq~N1y07$qdGv}b@~ZHFL^lK~^|cjU;lM5N z1lp0ZSf@zGCz4eq5WVx*t;orG`?zN2wcmy%HtblHk5tHY&Eb$pW&}l;Dcz`~Urk?{97DfO7z7lCwMG(Es{Uvr zaV<;)MIXd~_zo_?fxMhCu%8soIz~D?k*v**xhE)NzheM~JRTcdOIiE^aWIQJB#}aQ zexl03?Xpc_pXKk?guvDc7!gX&zb|LNMda}{rO-Zd5Coo`5!AD_ zU0#jj&9Y{Q*zO>C^+mDo`!PNbN# zJJ+5s(bQoW;bI2Yvd~<>PXQQ;hpmKTui{Y60=&Qiz;nYbX2EB2M-&LwZW-S08Y9V& zU;A?kRjGx80uu*D=tDw*9IN6z`zIN2sdgD$5|dN$F9u_5Aeayq10{;V^2+4ju^|S< zjla4ERfdaG<&-3=5o$KhP~7HzxUB+*SiSEzJV?x-cu40c3nN+QTM1BO2U6y)1rVmz zW9AD0V-pZSfxkB?Bw+{*P65egvClDKX>UvE1zh9W44s-g@Qc*0+HMTK7T1=BEW6n; z1~L_=84b6zJ`lVavH(Odgr;D84S0pMMT?Mg5f}YRz##6k7HAt+s(D2;iWaWO|D|{* zO5sQ^2#nx9E zMZ;3S8#~4Z$qk(#G%EBo%${N?$#a9F5JIDvBX~JVv~?MwK~~%K2arMs5n+cU1Sb&0 z(+~Gi@Vs+J!X!bvwdonjTZf@X{o6eSyP>57SQzbrl@l9r#Gk9FP=lNRKgbXah)kG znTrAx%yCw2v?qm$(q=nOIGYxt0=F9WlgQ76$%yXD6>wm!Z5%5)rda<&xDL0zC z-L{_YoS9PN7tsT-$O3}JgBE2Q^ro0D^8`TI_C zS5JLKAtcEh83gn~WC$XJz_GEZFe#N63tOhgzIOo1^$t`~Ax4nkkl9iItW%m2ZLb;>$Y9!Hg4wf38IRF=g!vK~~9hHmF zf$mFy9C@O`Rm7~twt7Kbi=A#>b- zlK^a@S=#wS2C?J0H?JvNVP+=5bjlJqg>L42Md^oV+4pebGjJWm=#jJeCc*WHeogGJ% zB)4y=)JLBD_B?F%1*(Z(VQ6$Qo!brTKiy*1*cs}?=%T&>`f18w6Lx{oSlPg z#XyrA&W%)+D7;=yK=eEPJ(el`VP29D!My%5k|(+oi&5i=^X{fUTz~t73hFQ}+Iva;Jhkd$ER8o5$RUi{J+!?wm>iq-y7-l0E=+2TSEF`}@N-6j6t~GiD`x z5ska$ocm$?AW!V=mo4T_^+hY}v!8OR{_6Yt0q#05^_!2q zgdz$Qhh6YOp!~Lai|WO7uHX_*JNAu6naV8GGnaVh#Ca4iMI{xu7zQ`Z>%0B+1O%E? zlDAl?aL%3m^>GgmO3n*z&da4JJD>YfR2q!3$bEsitnVesbh#g)6{}ZI8QnjRcFB;J zZSVkDckKJ?Y^S>*-%0K`j6#LoG)sTRO<6fHeSGrQ0v(PUY>$jJ`LIX8tc6WL&g-3m z(+cVmDZ!9hMq|{^nxDFXF{cZXU*8#16}U6pf~P!-k`N7{$Tj!2+4v(ehNB3~9sz?B zu_Pk7B*N2znPx%pa_?3)yJ@M$c z?E7QeVdlYcF_yU6AR+MfI+yzm(CDg8yGY#r#D5^1E)x-uxBJeF&Ws+|^V&W%!t9bF zNdkUZ%rCX>_NL+&HwTQQJIXKBnELO z2SAWOWk<|X$EhLxt9~6ps<>z-fk4knu1^?hsWz2|4_3Kun8}WM5y81OXD=`|b5Z(r zZ9ARby$LyrkkKNcj>_TwX`cQ8dGT||l>~Z~2n2Nd7iV$u^>Ng!Q-v&nO3UDS`(k%v zJ%%LDRHD6_NcmvT$t916B3^+ir_YGzxX8yips-vs7Oisc1)NoW1s3?uiGA8X# zcX>ou6fv^|;k?vp+jYt@gAU1JvQes-vqe4fL$8he4Lg=Nv(fMoR6V8gaF#d^xNShp zMi7rN#RlzOFy@RMS|Rx@9%hJVc<(mx=3T|id+#iNY<@H~H!E)1L;KuX3Xj{O93KfF z7^qNef?%z9AeY__tK+_D+evHU)EcJkf&HL=wkzK7PzNnLckwk^$k$bgNV;&HT_G|! zhX#SnN!hg92Z743>09lVyfe^rwax01oR0PCupFfiD;t`6i>0NjHKPuO)l1A1Q*uE( znU)b)SQU~vWZGi7&L%kx8@(P101Cr(KQ`um3X&UQfI^Nw)|FJW8ude_S@Y5}8{E-* zpxX*-nf8XGYcn-6G}e<-i@i7SD#-G)a)w7eSVRs}p{khiM0y)a=jN`AV@Zh;F70dA zMH*RJgX6dK8Ycl|51kkJVHPiYaeL%$X62~Xn1M&gj}Z{BH;X;_nw{t7XH|&hi6rU- zfHOUy0Gw$XKTpOxD8DpzNT6}{!}i;Zr?sX3gKBARpz2L{yiWz7~^hct0t7 zMqIf6BMfGbWm;hLOhW$Ytcaws{~$vnao<9x&H77`N1Fni_x7|=(P$)VN|*wiJ22)@ zrAJ?T9iv-o2J;%*^zE1-%TNgN;$*EEzF^%BcjbEJYu<(Lw@Dx@jT9z+5~lad5Y!kq zq#HIbn4Utn3$OXGw3N4T>F4dXh|ZInF4hN zniYK3wCL5wZFa}ND%1P|c%!Sk+Bln)CsjJj1RE}R{Kb-;$IJGs_mP-%1<95pB;Xlj zRc4EVa_P0O6AB7II6$Se(Ox#bOsz9K>g))NXnJ1u7b;DRk003n6e0hP3DB>dP>>0M z(d0>kdFjW849sA7eq4jFrL~7%IblBc_ORK+6X0v8RbvCj>NJx;gPJy&uNqmfOZRTYKge)rAg@Opb`Gijj`UdIML zg9nK9;1z&5jP7sO@JO)aS&9QNn{gV68+bQGKVCwnJ8v%n(R#|Ez7EMw^i`n)f8_~YGFIild@{5?b^x-N=i>FHQP9OHiT{4;wQ@3tFS zlC0I+>ipx7btPoCV63M@Olqpo#mCiZb;R;S#Q?nuFYxX45<642gZg7+#0lN)sg^uS zIkchyPK4WP?sSD28{+XWdbIXUA^$E=fwFz!sN+G{%V_a+X)MeloF%;g;>pfe4wz)| z!sa*r`=7_m{y-SJ7S`3VM25rVmQun07IIr!e&Fys#vk>RX#V_3LQtd;+H_w(@+uM!PCkR=a=tB!XVW z87NbWZ8UoExx^{d_Pdcoud3U@bYS~*n+&86Th3jgFsKa9h%TsaYY)*l(DwQ7%!m_b zBkcMlm(4YN*-9H>7LWxRc&1(4<_D1*+CfzMy)abd7w!@&+q60N!>1R2&B}_|+cVAN z^FWTxEvQUQ#U4qS@36lfiP2%PuzC-HKMxFMK3kd#K_>(-fNGiurIuoxwrkBWDu)b` zy}TVbY|ioX^sDVYT;`M6S#+JBpYM*As!c9jWCfX%Kb7vNfjbD@G*L)6*@N{RS%2-Dc$KiLBCtvrq<-@I_?QYh)@dR(|4m!-9O5;4GpNT){UP#?=uF;Ce<_!y@;F3Ox)?fHD( zSiS@6u<8QlKc*c}aC^E{Yy?>+DdI(L2n#_|T{f}1 zH^WppYium`gRz8Z%tk@Hmw)azHGW{Es86h1=A<;l-TVtF3?X!K?~P~HVA*ZF%0)m?&jfl0nmgI6ewgUFVWwv7}x0$@-Wn8fWa zw8m_^o1>1(XmQ$=l*{5(TW5JX$Z*&?%k)so_yU8n1B^o|J+(bww3eg?=O?#jx^}|VNC9w(EU^H$Xy57&> zg%vb~_RP@6ju&tW*`^&}gmErFP$E9y8aC}B6NRgd0-w_4ocl_C00vTJ^Zc*Jh$C(7D-T=WbGxD{ zEG-Qu*@C!K`uFJ~N*1phYw8iq#LdK_&^FL*ZhPCAz54CwzxBuu)EB`(|40I{j+(~n z565}26!T*Tvb_AkaMpUr`@75Ggv4+n1&M=63eC;i{z%zAtn8}6>ygb*3)9GkVy4`m zrKRfJ)L~GFV*eSuXW(r_65X8mk$%L`$t@)*SwgsJ+#lJ!xk;2vt0ro0PKl0=PTWgs znz$BEA~sc~#U}5{3io&vw(0nE=GDe=psZTHXU030130&Ppse#C==hM>07W?&(RHBb z!_wx!RcF7Tim?rdT?x*)hWb?uMIaa$gIwLyo<;N1GwmJyh?moT%|DVv>y@Do)Q!l& z#Kp@8cjiy0%f(>5L+j@eBic;JI)z6+S$QDiz9Z?SJXt9BIh4ine_d{h;CA92F4?DI zuqTI(5BLTuh_NXtXm~<=mB?K)Phh@R%Bg^b`_1$s4&C(YFvovjqupow^fW3}-}|^? z=YGL8*x-+NT?{Z^GAY67Yn6aG2^3x(`GC=4PGaMEUS;#DdTO?%i#u$F-)BeDc_n4J zWsGEDWnA{wMF~ks!K%u`qOscb*4x*EL}6#_h4T-;3*orE4(K;LpU_k*KgrNl136nL zC1B`NqZT?NlbUsiKqUTt{ReLZqw+X|eWq(bJ{kS4!=~?zyr<9RddzTo>=nYLe_$E@ z^241_W!LiX@D4vUFu^Wq*#9)1)@sYqBd*a5j^~;j6&2O%vH7{MWoW)k3**Z>BvD}Q z)4msrkT6E8*1WhTY6dRll7#i_W7PHQo47~w9>PPMC5N6&UFHE02zi2nNfh%wHg?h~ z$9+6{y;`_+zB-Y(Do(6q+TBONrz5gVA^#6Qe*D1Ub~McX1?bV}k|8dc?f3zy7sR#* z`V?9q5}&)#%1b`%okMiOA0JKKTBgny^qL+yz+YWIomQ5XpnAb2&r_IU;ynt^R+~uu zzT6Z7Mic$cVkSGKR+38}_UbJ_(+0JZlW;O!Sis>m^s8|c$(M3nc8&FqqRp%kq1;|r zE7PSg8C2{%o7RkmqmgZS$C=hy%@%9}4vm(i!0RTXbxu%FkXoZ6Q{wh(E3dQ1U|t!% zps!i9gqf2wIx}rxJ4@L0P2F;lK`Ui8AxB@X`A~dVFNGJ z48G9O3~Bp^dMkW$CanmdV8zm=*ho6wA0^YJ4mWgwRud6S@aA*Lf%eg~c>og_b?oVU z`{O`SO3c^8nxN32)$n`C?Fx0^jRVHd*yDu<;WAcd1q%oiw1H9hG77s9Z{omI!54Vk zZ(0wkeND~B!~^mh@X3wh{|Pi;P8=#Q=1iRcM!d>Iwt6oIcgG%0 z=Z&=*v>W!A_YsG1wz)Puce6>=#3_)~v)dP*W|A(u;V5=io`Uk*- zAO{E@+&#Dx+}+)s;10pv-QC?ixI=Ic?gV#tXNP<5yZ?Rme1JLAJ>6YZKdD}#SD_8l z2nR}xJV7}E$lC);$BxQPPDQx; z(qKq6tvPmwJ-ywLM2RS=#ze<}-S^*xzbl9{fE+|8zP5)kn}DGEN}I8+u8#1$XxKhH zJEZ3KZ=&`Hpe!fw28y8lXq3t6knYU~a6porMm9|M$S{l*RZ~$&Z9!>q+mnS4&lL=Q zBSG-EMcV#+%ErdQv7vd{FVB&agjZWzo5JhO6NS&4Rs8+%R!3*Ko_!tN9elfJ zLZD$p$Hk$3x0n8kISoqu|A+%i_0u21G-IQAXnPj2k$#1SZ#P5oD&aB8#6jWk?v*S@ zHN~Rvv!UQuk{jW=Z+(DW&BZ`W7o7QK^xR08hmM^c6VR8{kJkYRV0`8W~i*?-2^&iG z_G{ARC_y)>%+EZ@p?e~$HCm(W(diOrY`6i^m||H{nu5fy;V!2$=eFG3Uu+^>zbR9h z)xla3IkE|w_*Kw%B{N3ZCvGeYM+snlq z9*wXfYGit9U)W@Y%j{}zg(q(ktiK5;k)|g`Lz#Ll#9ERhbDczS7XPUsMLudsmrKh? zkOzwwV{ct4XElp?=`)ewhOJLVBZBo+->GNbOvs+iUyT9)Ay6FQ3Y! zR~RgYVF2*QZy^iE2!(YDg#0&*&vMnygZGk7*=l!NHCq^36}?hOQ(ET6SM7z>lXi7Y zLU8%RpCODt8^UFVz&+Xc0JAps6&ech<=*>r|9Sb zy|6vn0IEr;6Bwv)?M--ywnZNk@5^#AWG+{%*Iq$k;z)uo8hnZ3-A}+W)%1od>EQ-h zu65vhPw0d&7D{Y&(ec2kqVKzBn7#DEs#f(+vtY{uqJZ|B2hcXQ5Uf}?3^;tK_U3!2 zwm$p1=b5;R@^>2untG%bYYXNgy08EfcIWo@>6v9v;kOS!6ENo4%3BQ=oWEy8E#_aE zi>jS{UD*<2%M6$tlvXO@zQ2%rczjySORWzDXC~A;Vg_)Qr~^5(M@Z~649DOYCAQ#=uk36`72NPb>F0eA{jfmp2!_ zX;+2x$Tch{mbD>j^LpK~%P zMKWLo%lvF=$*2z=!hvw6C-|!wD78`Y@D; z?)zy?d>DYvK5R(b-4``)pw(9F=|U^|r(b6|yrkE;u`haWcGF)Av^#=;SSC#PV*S`0 zR{VjdC3IuTdtGW?1~Q!7@ z8pCsbsT6iy+#h*NINn#^ys|i8ldH7?y}#5-vdk{FDLK<1BEoR1T*+ARjt;>LvZ z9By=^vaoZF<1sfGnN~rD@45L8ujh}H=^dfER`L-3OY0(PKaNa2z@x^PYl+{+9hS9_yX6Sda(26(V6hwh~7` z6FKaUUI3Y!BRZ({ia9=UjiFbjihHyI^O2UbC=LDDSj)1^sP+^a)La0Iy1@?&j5h>P zcY(%N&2IF1QXN(qEVIql4+>BM6?r*27M?rGkN(;N)zjsM$4LkOSfo@r6flu% z(7_bZsQZ%+xQEat3iI>*ThnJLb3)I?vOAbzVDkIyrPw2xg!RrpofzpGSW;2q)8#%;e?LGjQK zeg>3WH4X?sGZuuMot&~{a)YRKk4e+@W?zZ+Tfjut%5vo?)oGFeP+Eu6HP%)*yq+q7 zc3e#DyzP$d{#K4IN&pfFctdOndoCG0k<{8XnAbuyiW4XSU2JOu0)OxZU-@^6?I)rI z>+Y-+VhOLcw7Cz*-6f&Q6y=lLcj!e4e%THrKMp&uY z|Fii8nf?oqoEiHJQQQdgk)=}WHbIBxt;XOmN)at~F#y1ssI9y%#6DGz57=!;TxpSmq=cVAlF_5h?-dbnV9Nma=3`}{*)&kVg# zA=>ND`|u~B>=6KnN;q1XDgsE1|K>!wOd{&Tu#~GRJEZE2p35!?iLNt*p(aw@;q#P@ zG!I)Co$-a3md((XEPW9yh7Y?>FApI$h@a19PkxkR73;{6q!vHKZ4~?GRjN-CZJ1<9GXvY} z>LuGvGElwmo8Z+4o8nAdU6LF`)d6NKn=|}AV#@$sJ&8kdQVd-mW5Jez1$Dn)<_xfd z%wB5lU!cM}GT8-}8O;P8aqrJBoZY*eHfo2cb;xHjKIM8{AQ^3Z;6Py?S<}?RrMW*+ zOdBJEfvR!*5P__C2Q~7L1B@lVQEWYtAoUJ>EFc-R#{)o5A1}}eCrD%4pJ=UG-FpM!@hms)_Opz)V@AeoL($f|d zQ6Z(S4;{7D99|c1|7&e+Bm_6dzC>$E5w{Kk5)e9C#_|CW?Sp(hiHz)|(4dO%!8F-W zh4ILJSe<}~y+l}Z?=NANgQ2l8p+=XP7*z6E_aIxD(IljEOd^urazAp3P)_MRoUVzK zYJtw9xeCJ8om=|-*^F@TlMm{(P17DLgD_6{?Ru>mrf-mrn-u1l6B!1W4>-h_!oOY_ ztWcqO@YR-vJX*|4wf%(W#^Rj2$@ekcWCytO18Cy~(j+<1z$nx7iV(SxLOAVUcxAJL zDf3F+VDll5#aWI3C`Jw(Y(@xua19C}yz3OkMWpZV@>TL`FOkxAQ!4DYN}kN+Tt~iq zqL^(!Y~2OKgq8E0#DH)c z9I@MUTT9`FzgMYNKIUN{M>l&}YJ5yK!-GuE`EhWFjzHha=(Qfql2D1+q6?o>3BP`n zIe7?pe{O`SW`~J|sICWYJ+7T|;W8TJJW6%xI#-jCP;Gzix7ZV9`+gKf@4zeVXQNKm zBZ2A4K1e1Cxf%C;`c_a77nvfjjIJ}gdel#8go$C#Kd=iXfu>AbGHX3`pTE2w%{l3-ZKF^-)^ z&-&`eKjdbw@K$N01P`B(9EE>1C+I@PDbj{6_rcNUNJ71S7nK&{+Xr6l*u%FZ%N2Tv zb?Em^jB{a_i`Nd{wamm4um_k)>BVPZ*6GY47cQy_w)|L7tC;jJLrv&ql;UFY-Gfz3 z{}J(-U@71t|0M?|>q!gU+=vjYXhLe0r4~_726!8!5Vbla0BcgnT>5DUJ!x-g(dnuC z)tEL^f$G8*AXem7MDyozFp%j#ItL7BbDHabz>2OUUR&!$YfNoMfKot@3rzDKr|)D) zS>jR@>c&U65^I3zj{p{(b`xef>$wm#I(h`sumkF7a$O7w@RyArbgESaape%XFP(RG z&^5ZkMFuFmgz^vZ$F`0T?pA`*GGC*j1_#8>Sfiid>NB~#DeiDN0BVY=jCHI(9Ce0| z62Nf(PuF%VfY|KDje8#birX)QJu9pGh8}j=n~V6(6&hMCn(qieki_d{J5%g2d-8mR zc&EhtwynW_yBA3jC0Olz!J6&=i!5o8>p``HJJZ+@1@IsBMD*Uf902u$ewL>nV3~aasLE9G;HXUg=QKOytxz?2 zc%EaZpi#;Ir~c5A6%N_!tRbaP@*v)YAOwBh%r#vq=sdg07XZLiSCs!{F4a07=3@8{ zD)$r5LUz?fdXl<;o^ z`)1PcjI&VtE40PMXsNY7SuLRldkfsdOp?UX5TnIoVUL3blv*fAOufUq5_- zMira>_+(|;v9dyWI3K6%8?;t)LK#Ow3k&Cxsak4HLKqN)VCkD67*! zTMY>?NK$$Wvu};3k^B${&Qll$p8$y)#w_w{iRXnW*IP=R8U=HS1xDJByP0VF*#Pj0 z5359Cw_-&jxD>=5lp~7GTjaxDHI1hPF`(;L>kw9QQE!9JTWkt5tJGO4*F(8DaYv?a zNKGb>@G9Z;Xs24c*6IZ8!hlJ?hP#5%s&9XrJY1+{)a7!MutcktD->8(2MOJsy@T|w z>k5TyF=v4AN1r>>++3@{m`*dYvJIiTcTGAlERk0IPxFAB1M+twU}*}24~^c+0vhM~ z$Ae=gbd0ZYD5SV~-dSuzQeAMES_hjbLzBWIvMaNddEOOl-S705=Csb2+9C z_@*K^J6cn$tYv^N4wR~X_c#SQoqqof5qoFxE&<>tKHcx1KYe13-)G!QU;1GcK!ZVwblcqXST19RXe5s2OZzWF zW|c}wBmSiW)3NwLe6vXLZ73ZU-|5^3@W3BCGji0vC@qpo>9%U9uQbL&nYSj+gzg#? z5$N%ND})eR^3WHOTM^Ma@4DfzJHl&gF!L4urd?)Ms6Ylk!SEgb%zv?l8UTRFdLZ_m zM~D4-L*@$3+qItH+G*!DtY3P?^WP7Z7F!{QO#J}45u)hg04zbTCZ2D0@tELGC1#$} z1yomu-I^C4Mn3`q5DA9wh9P;aX=OD>mq~h&ts`yLhQ+SXH9^gQH@edqg7BUc=B0i# z{7@EYohwI@4)|wW0)nU-crxgYHmmOc~ z^w_g_y`zd8%kueeC5-U}IixVan35ki`j)Q0t2BRtbhb*a3E!dS@BRb=M(rbm6T2g4$eafH}@44NSip6R~n&<(`r6`)Dj7OIp^ zy#nTRD?iO_l~&K4NGOCI5xvc=2o8@OWZ>0)Zi%O8fmAHf#Pv=NL5?#p!ue;Iu-8kX z?$w@*V71j+g7xE7*7fThIDS6F8ZI#T`?GEQYNL>l2oXnQYg1V;`04ua?rm~eWrpnr z?4}KsqHnE@mIc~|{fztsn7}YIzFzDoSP|ElsS><^-Sy;~3)feuDy|HKIr{nZAf=pj zKo(DE3qcPGV9d5e_Lx{i9BM;%@k=37UECZhGM6gD!C9y<4D|g(^W&oi-YyCvsGS)N ztS$uon(flS$zlxyRa*kf!k!VEpHCE2akb*>^CdVYG60L`WF1eP(PTRI_Rh-u;Bw|d zqfXqH;9udLCmn|4-4+Pj(a1>WVKaNFS#qT|8}7t+RUwhqIe-9=z&YWvh0J+z&Mlrh znuTu(!z}l~V=^Ct9!}STr8&REQYusSU&+(koE12esltF^3G(6SN796(7~+8woe6Dv zEAA5uazJ@-{_=6T~!D2VRjD}lDRy&>2AZ(>1N$@+OeYS3&V0%SB%}Vq84dEeZbDN{rc_dj~FP$ zh5opuEw@D!j#yfHj|g-C<|_`XN^ml*oIraP(21*Y@W+_p>J+5ag&XQEhW6akD_XLz z6WXa+-t`LRs*3pcGuRgBSTDA(uaB7CztK>3y3sP4Ra$<%#bt{#hU#Oi!yp%%MZX-u z!5B_aR^*=tB?<{~tEpNg6yR#5@u-|Fj^^v1fDLOp!owhfC`JuDj~tDGT^Ah`k;(>p zf6m)o!p|Mcq=}}zNG$>bCc>w8yslUAuM?Z#a}a`fVujdSyGTmX7$F+iiod`{9Sa}s zV~#r%8|oPPv9>D(=m7S!UBGRFj)4^zVlygcVC~Evv0>27!(Oi!bhCgA5^xSV5ZFG< zs*h>5@H@^G3JWSx9$Q9P7b3tB)mYA`fCu3T!^1GwTxpR#btaO54v;>c*KBTZt%<}Y z)}9O-a{pUtiU?z4>8NslB;C)4Ko1Z6kIg#SWuTGE%>gvlY)M2>!`k>v?MrNM{Bo%Fi=fOD3j#!ZTN2C$A)KkwB~=1SW9> z(F1dt5hSJA3R&DsOX-GR^cYJ90)Zt7cUznq2jFoAf|1mBkJyze7B`;wOt%>$vY|Rb z&m>o=+|^s{_@-I!G8?925P?X*fdQlV#bxAEfe%Qf_&y7rUq5bS4P^<#?EY$SF{n60 zT*N^H|EJ9_md*+nB)6&Lg{&20tP47U=ZQ${T$w9?Lbh=i-?B*tCJ*9c@_s8AnD`+! z^K&I{8@muH4t#xZ6Z;3QO-v3A=EpaU2;y-<4xfK23wK9W&MlWiC4&?DqSf&Kq7160 z*d28$96eR4ANNOy;jZ|NJI=84KtZilhe_LyGgY1c&1P|GdQ_=0qFZMb~7`~N4v zs5J5g&0zii1(;%%>pnbw0-2BV1O<(~L=`+`C61jId%nVttfB1C5zC;7Ajb?GkH<~Q zzHQX@RV4sfNlzcb%&(h!%X)vSMH9(cu2KN=m!*O%9}+lov=7^#G+iPFdInI+fyYz5 zO%x+(7}=fzyDB0gIC4n$YT~io&MZ4yTnyMggd_^M6evKuGe~^rtAmAnHRO?sBU1;d zH^gUYB4BuA$-)s5lwkkfSa5MFpA2kmevZdcl&%c{rzHU*0vOMV=>jP|IHnlirl7qa z5M;0>Q|%XZkN`dg5}Cj+_3*6Pd)EQ%}1Bn_#Z;^|t)C|5mDE?@vBXpi_$u7IsaqJYL%! zaCm@)%P*cNn+^H_CoMTuH6|3g$ERyvdT5rN{e;i!Dk1L!^$o81eedw-AK>ZZXU}se zlUr72AGFINf%?cy5Rp&=H+sp3eAyyV_9q6-v?1LNM#V~@aUk|g>6w0TxxIjERrIxy z+p(C0t+#R{2WYCB{FEeVQ2ypQKo;w9bvk6KMBWo{N0LDxjp%|7_JaG0fU2z1VFzn% zB#~<|DstYsqkCRAgY6cLy& zmRimJ>B56+IezZ%13Y;Djt|!@=1j^06bZi`&60J_>@*Wx(1BOQTysoWKx8Q_gE2kQ z=TEj_L2)=CKg;r6@M{r>F3z$MD8xDa$Oy@*q=(?RQbO83q7lqJZq5K31cxUbNmI}$g{+lZexU!#HTCTT1y|vxTOAn1^c1CSJ&wl~z16ppkQp<1T-q?qCDU zQpIsN7AoZe)8yT(KK9lc@*PB{GuY73h~1$i2%4h>5xAx+hQ=XS{_ZqTMnOFk{(B}R zRLbBkm-8Ff1-F^F$u<10(r?2y;)73TLjRN%X_f0i8q@o}4xxrk+EDNY4gX{u4?1YA z0} z&*4GDed*3;h2Oi40%exs`lo8uzbqS!mJ-(YeIq8mI9YO_{<#>7lM`W=WG7t%rZ$FP08=w55 z$BpOc1bs1w?NQ%VY-?#}@f#aG*&!sV`bI_%qf3SwK!7P?Y1k=`F z6|SU2wK9u~uz~_*z_j@YD~WqYHX66E5Sncz!5x)=$!SVwQxwlX*#y(Ee_n;z84g5) zGdDb)=Qej={%@{6qp~;L3@PB_yiXQK{bRvCflB#n)Z?{5=%fgxmzVm*e36~@GGRRp zHZS<8Y_{ z$P05&t&57ym{=6o?OaFjg^Dh*=31qS699*F7bH-^X#{$-;LWy=)l0B;nJyTo1gfey65~QgPNEl3g^fsH3`H$Q6^gQi{cfE0N=R&~Frm|q6r;p5Xf5km zv*4Pv^H5+$-08w5!7o>ra|BaX|j?zy$E4&#TNV<6%fm%|)8K7#nR! z{OVx#ddhAzZJ}J(gWryJbDo-2$<(p^#`%u#3qiGjB-qO@e8pR$=`Q^F_Wj)aS@|M% zJEilXFiy*A1m$eLHMJ2A?U*_8Q*oYjMw{9$6nfF>2ER6E448q6^a{=j+XS{w7m&pt ztv6y`!b?hvTYB8QXyE8`S7!}aA^@tirSIr&us4|w~L35oK*Nyp-Mo#6ag{Hj=#w313J+BR3 z6IUeV4N}sC8~#a|)>S)0(G*+*>n|Kl#BWyU{uMEvvVu7J&pO_9<8Nb+;SW{=U~{_R zZVgJL?Moa@_M#Og?+X=y1rw;g=DVYL(IysDngqRvxS!vB_^4Mls*5gp3YVG(hzW9n zU4vrUPwNAz5=t|_H?`pHvH^)7vVZp&X?a48JdXn0YqO1N`HV5yz`S#2+p;q@tMxx= zb0-RV13o%w)b`F%Cs$tUkNgxHojnZ%-u$3{lCZQf3syvMye{&tS)w&`xpMOucHits zjKF-2_*5daitOZh#Gt_Z;=Ya?$RFJ}E?@WC>M&=l7K78zFBJ09Xat3maiTwCY^w4` z9}4tfxg;)t$=RbYkPUw#E`a6wi}(1E%Cjb2$ZW9||CL{tqH6vzEbOCU&#d2LUCEH; zzuf%q;QfWNHRH)_^-%4T{_3&d)IB4@5lfNbHKYyMyO`2v)H$8+|#cK z5;YMD+%FV!{-l4qFsAX%rVCiF6h>CZd_Ik?%6i<&v6Wc3E0HYO=GR}&>}^s*GqtFG z4_?RB#5B@yVn+ZXj{Va353@ZDEx>Gy48DOcnom)mYFe%Kb7M3bG7W+4a5x4;Z^J4X zQup(c{>xtSHSKUJY_ix>QrQ02nrp+MbUEU9HyKJyUa6F*V-mcX*?h=l=CX36(J@0v zSeq9vGcur7@Llg?IH@9x^0*%R>*aesHvCO!g9It>S~Xlu%=OhoXoF>qWi9x7=s(rA^>FH}(quSV%~Iuq4}hebqw> zBkbTvE!P~sb$F4&ARALJIC*kA;EM~MC}hX(Cs-lAxaMWDJ6v`Q^Kktu7;on=BF&yH z9AaR5v%%8{r9=G}2Q0a_y8Ig<>q-3En*4NW$ety0GQanfO)vCQq$%GPQ$-ZHv^N0H zRCKY-1oXGl+|2Z0jwH$ZKO>XM@JKHjQ4mXMuFrkPuZZ69SBEiPyR$%!9Zu#X@5JK} zYq}OI*))91$O|(Jlx4{cSz2&qN=BCK%QbY06>vEFV-%6jBTIAf1HUV{y~TcU!2nyY z5eT_@NLCCG@rG*Qlv{0zM(tDBilv_SgWp)jCwUK`$O3?ZF$MAA?tZu#6DgDjS0h)W z-@d3f=yjBckQyy6xoofNaq%IlOCNn23u4z} z!A^|6T6}$A)ovy5A+Ip7t-;@V_VK-}|H<8qnnKuL(kv1wjIHpGxUx_si$*unY;j6Q ztzd$+`6C#-g*kptphI{Qgvh^}_DZ3LTd-cu!;PCSQOT|7kkZ_Hga_ZF)eP^*4VKS- zDB=!vUdGcnQHsgt!S=IMk2rt9Hq-9^XjG+PMr-lXsNdVTR-(}P^~trdcDkeye~+@z z|K))acPDw0SET4Grln1Snw|r=6tl!w_Bhw_-E`wAw+|^#`uF#EQmP|!J#>pQN==!%8_fO^qX z2EkjhJ3ZmNWwk9@JACnn$LqH|p95fA0+Fvrh5o20C^Vq}#iLo{y00@^x))ScnWka? zUHWd^^-l)fYP+>`z4<||IClT{W5NqqiU^&Y;9g(t<(|rl@LS0FA+aJ2U;Wosq~zv& zkqTs{^^eTwTtIBy8_u`C9IQ7BR@=51MM`*Colc#?jr_|oO+guV0q=F84l5=$1- zZVflV#jEZNqKx0?yD~1*FhA6>^z^(xUrzLgjiN3I5WTKhJIQrigX_)c-$s$dVu`X) z;5=L&MZ6zQVT3&M6t2HfvaD6q1NoLZr4`1=81z^Uy&v;-I4Z?YmHfQCyp7%6Kq}R$ z60cx*+_2Ra2XeQs4!0=(x)sHl2^0EIS{n$FVkxaJGsy`0wK2(y#${ zY~|1N3Cica1QY8=iCr!F90$&HUqmddFr!f&n3WnNpc%1nZ_xbaJvXKkp7(@Sh(}-1 zRYOhb;t8JEN%wz%Hcp;@LWD_#o*XYv*|K9{eVe_(3^wartAL}c=wEf$8`k3$X;k*2 z)@vUI(je>%dS?eJ?7-(hZTw}-ZxMkOtYtKM>oBaU?)=mB>8w_M(a{Ki?W3r5Jb?nm z3urdp1iyKH{+{;bVm@BCL%q>b{VOIT31RVod(>f1jc6NMiF&C=`~EQYfQTLzYIvYr zZ3@j7@Rz?2y$HMn92^{wCqUEUJZbD>R7dZpZ5KCs4?p}+4%#+cxxxNVmD}h5_ULk1 zVdW-wfHbDl2w7DqvGJOfWsI2xYYnLCqpVgMOW&po#0C3*$j%=3vHjUQA}5S*bz#AI zPiKa0`EAmlvWZW!gUmkY14?NY{7645|56&K>i_&nvNx9MA5Sh@_9m4b9KiNxb91x# z*P(*n3B7RI+S(f6FT2{Y@pL}z4~x_cVen_`U%|*$mpdh~m)q^}hpK5L9%EtFlI)eYi;9v2(26aPg?A*gVJ^k{u+|MdAl2^$ zXyl#)* zH|2Dh7YNz0&$w9Z@8Oi65=v)90+1L5uZv>VRHk!CnKWkcwS{bttI#LhO(;nV&Ohaz zP5Rq+YfhS?hVlKfdpW==Lg907eZkLz=Mxe$FHEeuX|gZ9Q?W z8!hJKJ?;C3$mYfR6~&lNK;B^HaSYOuBN~refdUEmQIajfn`IJ0EWWtD>)aB&I*ZqbFB=euo zP)Bl|2US$EZ{tWMmE5$WaM&;ARCRlN@uaMFLBZN&p@$R>A*z}wN)=wjBzAmu0r8*= zZXM$?_9OCw&}GlW6s6V^xgSt85pq)pGL-2qHL9Jv|siY zx@ZQ-3}*sa4>o{2;Ftb5Hw~=__T4L6VFt@)Thk01smVzJ+aJ3~lPa&Rqx5L2^;&GI zA2!5}E#?J`3j`mq4L=gwuNP)Ach`KWVS|SnRg>`X>5Qn0x7TL|hdrs=jbRyqx0lCp z<9ppY^euo&d?;~7PoR~bwS1Kjed5!jm@2X&ePXttvSutFd4Id-y|q4&Gm(lj3mi`)$K9&1s?L zfg|$A)Tu92jms(77E+biFaGh5R08|kXGJ`Ma+B0}j#KI8v0c!0^mR1vTZuv}rD|1$ zeat@`D)#p*0R#xB!_983+b_el!c`4CVAm=Sda@UUH>N9JS*TR&(>`~0b^@mX1mn*k zADhlc$W$hiD9ja=D0=J*Xo$!xxr-23s1_f&v__z^R$DpF$2^u=;Z9{V?xxG#F1;+nQv!11^Y=F&n}nrzC!S_Vn> zraRo7XUmk2S(K~}LD3I~Ke#+@FbqR&c!@91BxhJZ&O3KcWwdNlswy!>Yu#O|aZJjgCVJKl+y(zXiaF8H0uQdl0f=+jTiZlF`Y;lst|y99qt zAu(5m5DQ*>3FLX!6>S-_)d$erxFE_j&rKE^zR4RQdZbi(vEM{YW1L)CmI)>H-BUwr zAf-IJ`DxG4>$9&~XAk~=YkQIZ#PKk`p;{E6u?2)yrnpv7uxp>umfr|Y6ul%J6EDLx z3WK5T@jOkt zy3|jZpWcM6C9p!+ECzaX->4M+W@t<5a`1JN5a~yr3##Dl;zp(au*vg!eUfk?qYbg# z1^sisK+N}g6MPl9vMFRf{g}PG1u-TxMjOiOVz28<_n~yEVBr(SA; zE-KNUqxtV*19iE=j+JM||7`4P${BOA$JIxx(C@U4%CNJpA`Sp39)*zLuBY>CvYB|7Tx!b)!cq#0P9fmtH!qD%itIU zKz+$i2{TwFkfycZsC}etIMQk$Z6yy7=5uqXOpFQpW}E!TRDEAW{5GgA^5dQZg@rPe z$~5Gv+JHzc+)3rD)d1QNWROLdEJ|jMgB`iYYH_(RoKCw7L!-^VtO5qL+E{f(>LmdC z52Vl;-4Iaw+CYz%lo8B*OY?C}lM~~9Ym6GQ6S5}Q^&X>l)&F}Bb%mrtqpts@upd+C zi}Zgr5gpHoETw`gHRH?<+aJIb4glSfGqQM`8Zf%!N_)} zvU#2nmwvzSW>>3o$O@3ZKTdkjzW%E>16qL?vWNBlkWR1tNeYj{Q?(e7qAZqn_i@%e zTNGfzPU?0B)hZejJ4abQoW%z$tdNlRAgh*Bu#%dw^1AA=LFmV86LF+6Q!D@ggBP z=h3t(e*1?tbXfpkgSOMQbt~l}3M?m{Wnm3UJsB;glVfwTTCg2@a~$9&ydkWSTz_Zt zjkSu07&!Sh#vUaB@W^8)_s^6~sn0Aj4Mh|^EC5Nk-=AqKRqNn(xZVB^Fk|rax?Uk! z4Quz0^?&Xz&3XKpZU`BJ-pZ%9mXvvs`_5I?k}FwW#M-ok7FAO!N6Q2)`#S0ON0Ak3 zK@Sp;kkmjl-29SS;lWM+A>@yxJkFExzli|v!uf#|D?f!H%=;2`)r*fV17A#8p5%V8dT+Mgmet5y~w(qhL1YvsE-r1Vt~~BtYB)GzUS$7Uh`d0W+b~ z`txvj9m+yNRU7P~=iqO(33@(T^+!!_jNAIDu8>hL^^`O2%aZdM2=2D>H0-4D^_Jqr ze;x|F5hURYhdX6~d+)l8Y3fbgLdeKzMfyX#xfEuX1;aFGju!}J4i`vuw%fb)pcWpi z27|0Vmk77StO@H+>6NEH9HvZz@!BmAQYj^Sw9Kl!t8*Sq)8-E}2ZRQ2^U!A!f4mMHFWmP`HWV|3;(=zm z;PAYRsCji9eO#I(6)6_so|AD*kB0*!kr@@X@?%ei0(_V~rY@yQm3g%jF*Y#WX!6`t zPI7l5ry2tXYV`xDmZ&W;6Ob-rfYo5_Q9I%alVx zJ}1$!uNA1RD58rn1lU#~iu&jmgHm(_&bHl?`N7NM$!mMK?ltz;DnNdtB-|a*SjCuK zKv-ivN=u2n?0ZE^3S8)6GR-lysf@Bu(=(-LQfgXHiyArqck^rCPf3D{eQLT4F6W*+ zkL#owPIgcGn4N1~GM|1U9^&EKJdzGt=?`^MMRvnh9ofPJB{3C7>@ z&gYvQXSi}bg$YITf)Ta2U{fR&SN)678}2{*e6qgpsSP;|sG04=Cs4hU?~W7~`Ehw+ zOdv*&RVI$b>N5ub=mmfdyO7%d9QVT)`8pM2l*H8EmqN&oJgRRwoYjxiNYV;8y;L`)jn8{ zxGJCRkBF8s)i}k;7U~O!RTb9h{}8%Fk;XInm;6cIw~C}bnW+EZhA&R1{a2BiG2|vr zAN6JbHui$68_!)zo(=$LhONZPUs$e#ZY`9iu7CA8!4lEWSzro8XA9hhRUORb7D9;r z)?OH#4AB3RAw1$Ug?}R$`=Y>S)ix*gGz8RfxSTC&?)wNg4i@f6d6P= z`OB<5US~5nU!sv)k-Im>@|jmQ1CZU?NQA{qsH))TXVT@MjlDl+r#AmOZQX1puAW9; zrHeNym)Mw~!OpL8H=^mLVKv3@U2G%i;H>v^@3+TlWVI`TzybC9B_7WS=l?4{Q2iY0 zMGDXV%=y8!jj}!vW(sOVcy-a8ChgFF1r-JVAu6EdNK+CiJVgJ{owPZn)vl6M4ns18 za)|cctY;yqUOZr4EA@yb0*UWrUF3Q($(<(j=Pm%c|F==?ge3Cy#0rFYR)blEA)@=sY^H#fPH#Fr7l}S}!nX6G#%nExMiOmp z;@-FqHxBjwPvsD2iMYZDw~&N-lZ6>m5+D7FJg1aLCKOS0H$RUeFhjqdl2XD@jqa(**F1JY{yTwYL;QGR<_FfJ~K=hSe zVKkJh2sO=*1J8_&H@TR6DIB>oCLx;9DEZ>p5@mx$6LpauGSn3x*zKo$j9BwdU7u?^VZ}ve82LdCu>7cEcL38>0E1Uc$sX-1(JW`>=o)EopOXO4rN13v)I4Q ziEo}d)sczQI4GsnRz2cX(A^p0ItZXl;`}~c%P_q&H!UjAU%eDxhF z`7V`qUP)92XkCT6WURjRhRqivIXzMu(`g4{Hxc(BS?x_u#8KqWkE1;^M*#{1#dN89 z^Hs`32l)nc3dN$?<~hC-fhmmyyjksOf95XZPzE`i&AuGceKHK+LZ0+m$8#@7FMu)n z`Kud z3+GDCU*eRmX;J7QHgpG)vy(eYX|X!UaQ#*RpBCp9$ZbH7XI@-jvV!)VuK`2D>VN3W zNc$5@8M3#NU}YMm6X}O!4FCkR?ySLCPZuMBmYJm}qe;|JGD7@GoT81+x~Bb1PT&xR z!^_foGGaykM>DxBSG&VT!mvNTyYp>8NZWr@dAMA8MJqMNEWb?W`5YAQb@sz)-0vvb zR>eWNP5gm~%uwx_n7`OxTA#SI;JbWh6GRpYl~Kk~GXwv%M*?&$6@{Hn)}8cmzC4XH zrzXX7N)@0Hshwa=H#)eCS8F!^!bX|I;Yc~1Rb35zRCs~iR5RjCB@msduvqgX?_Bmt zCXq66ye7^!GP--<^t0M&o3?ZUruZ^zRdFcSli;B2jNmbvR^cQ>lausOuHEU;QNxQY zVhuQ$?04MpaF^0Ay4*OeiH;)aBDV>Q`J@AqQrT}pzRhtw2$NYIe5`T7dmelCB)Qb% zDL|~V9CMtTt!TdTfEG?maSBRT+ypaKDTdV2me5#}S&!NlyDh?XpIs~+zC4{StKG{( zQh^eItj7W)pUhOnDH!YPj-)6|n=h4F>76$rZ}~-|W%Z25_HtFHUckrm%W@u(RE%8) zAc5h)T~woptH;(RD%IE0Oa-!`0N}Zj;l;u*Kp}Dn(oL=0wNZ<~6O)T>$mpc(NWm z2wV!8Nd^ZL2f*qxR=xX3y;ivh0+YYnotC$g1(8HrV6i7st$hDHR zDk`Y~(`N;4Eh1Eg8>am%U>HQJQxFq|tV+FYsZtcgDeoMLx(j}X%M}KwfCeK5mE@#D zP?Yf?4GCh=RfP1`k0RMTw!TtM-FrhMZ!Jo-Icmw7n2*u+^cSK^CM)3F7Hto|jARU9yT0X($d3A20*;X+S|qzFU}TyX@_}_=6Tr452oQqO z5$Sh%L5>PM@NyIYk|Oz(X*5PMfdqfo2s)h>$f&n0HtZlKl6Xt=LmZq0i40MeAC!9I z)*RG;zObCgHpYGiy<$n|mbjF`{u32_=gtz3%so}HR6tC=xw+Xv2ICE`_Vh54Fhxfd zAeSpU>$`btd;2Z01(65w^A63azE}KkV)hEDL7!%e_0G0hsNbFLSO`$6OK_5j%C|NX zKS@lLKvN37p^7fXjFx4JL*R12pToU{d6~`T;QfE7`Udv8x-Qx_w$ZS$(OWe1tS zo8x)JUw7pxN|}kET2nfTbi*zlFME{uKNQ(x?V_zkMRuMlpymu2ywrxfBZ$nEG{*?s zaE}o+?(nnItGP@0420gT7?wr=h7kr7m&X$ve^4aB!zDDJkvPyH`#Ba14dnerS)RCl zN@ZpKr7(p}a#qcnJBQ?)zCYg-{i#^L^WGtt6~?O3B2P+zK7yr09Z%Y6adzF*Y1;L& zstRR8;G0)N`)47)KHEzYy{??~LibW8kkXo!1;oYffN%0tErwZvEWcVwfPjxa*r6S*X* zD-ufu5)ULKxi5!n14h6ZSMom{YdMZS--UD!X1Hy4x$#1e@AZgsb8kX}6d{*n zL{v+%$;Pak*ATT{v?t4K)d%%H9$)`xCOE4_%Ne$dani=%qsl9DcPbXU9sazIitgiS zd}!xu^pQkhl+@!ARDQnb{}!upaJJ5$u}Wg<>!dB*M3k3zeEjxVxT84Rw=}G!IVkIm zF?!G3C=_B3Adb0Ea&&80gjfzuWe$}a@|@JlQc|U}7FnQ^V+gWuazI^H4q1lA+Ri6A z$>PuSk%{`TQ=RgG^I%a@4St`*C5?-R{8Jth9_tJSI8BEDVq-Z>gwy%d^x6Kpc=}hM zXnwO18BF9l+14x@&etwE+!in{eHxwUi8K7@(GnI*JM#A+4zoh>*b%qpV7P&4_k$U9 z1=xNu!Vo{Dh-;4}(0;u;4JNuFsoZb;*}+?2j4R4cmH%gR{g*WBo;9|`zfBrqEP?$1=-8ts#aQZX!cx`?Fa);T%j zi)U0_c#6ZWVpryfxloNv1|MUtSyVu+gNEXfa#321NkDTEf!}K{?JuHU)+gc&?$NJ! z|CV6H5Zal|{wk0PXnvqTe7#+ebd9ofjA;~0xGixO_@!A@t{p74wVRO={%AEnR2s~= z7K;er%!Ypyo(I(=rN{U1_i5iaEI;G_$dNt7fdBCuMjz`S{h=Rx%w}7H?F2bO#y;xg z07xLC0MvW_?n>m#-`L(~{Dh%zrye`;OA4@D&TwNaR&r>8xD?yLz`#E^-VBR!jCHDw zAv?eG@nvdSb86LH&~CQFy9q{i|6}c+Or*EYmj+f67&w6`)M4zt7YL0LZpfPPmR>Kk9^m=d2tBV=`yBo zg9b>vH#qh1amN_~dw4=x6S3q$_(@pWJ~u$~1jyllW((o7veB*pBZlb7ay<`vYJ!X= zBsOQ7u%#zyV2+r4`J6&e)}ZcuJUft)H)Fpsg_CUge!Hwd#CWmM3Qg4FB#3INVXg|fGB5g=o)J^{l843hi za0}OVr0zRTQzP%WW~2V?=Ri?!^xvu}6TyG`0V+rD zMIB}tGcF$yPC+aIs^tR?A2}+Ts46*ZffD08Nyh_qKF(&oGBZ=TnsAvB@RnGtJbY<9 zYP+BAv;|Ujsw^WOBLV+Ly$lOd-ai;>@w?7w&=`$GJcBA>yRZ{zs0b*8q6E;6@g?>ru`=zr&In7P4-LEuFBNv5fqVAPIp|%rDtNnCkF`>CO|GE2}kS! z^RbS)P++;@K4(i>8GQ>^S@ zJ-j`SV(=2=Xs(leG@hbVNnt{N3GSkS&E?!T6w3Z50HFRIaK1Gt=Qt1zB+8lu%59-8 zMA{vm5du-f3^u>VGFBpV;dW8@(?|=o?>Ik=?ik_!F@7gF=D^Kawzsb4ip6A~){jCq zkIw8K;9r=XN>a%VVeBWXnf?VPFrOu4Ht}36MlmkG)yqyTK-4t3Bul^5wTx^Ov|JI+ zDBO*MZ4)?{84H9CZJn_3^Z!Yklcq(&)RA%t?6q-_xb>*`Ff+w zW#WIKX#zQ!Z`3?V%%?&xg33g`Ep_6oCh#*WvG!T?tS;{7L$PM2*N@=gxhTPy7@1as z#A+p)?Xr$ttTN$gmkZFmD*tX+iHcBb>m6Vwen?}0$-YGKvGnOtZL(ywLw1`Mql&I8 zI*=8%$0>1+B;LY>PAdHRvGJzVO?zjh+d#H4s}aFVB<>72%VXhr9AUy1twhvgq4w#X zXi~nL>1*{v{hJ7j5I!MAriBRSZ7j;FTZ=ig%ER_om+wXk^FSI!3CIt65aeq~8~P^lS3Tr`;@0Z?hpHo8~(#+?6cJ`>=S zs~Ze3tH@)ViNoaGEvxGK1+X+T7;0MiU7g_kk_PI%C!^}R+V;xjLo;)SKNc3iGbc`$ zKD(d!bjRUCg{~Ze`hZ(89Lod8+99}mW==1;Zl?g04Y*78Ml+Ry>gc0J!aQDVwvM3V z^Mak}Lc{+bYe7%%l3`X^M{?yP9_13tW5#eKnIF~h_h|5c@>3y7q83Ww{J4toXj|}) zYp|Lfq`Z1i!d%+CEssB9l%;7X5kg2lbXauHjk5Un zZ|13HvGDl?KuMP;-M3P#RMMV7h;;8TG^H8*r-^8KJP+ceZB=$gcgn(ZD0~O>uyb-_XI6T5Yx7_{jnm&PSog z{UN(;Ixq!epMGX|f*896jZ&eQt_@f1%ui&J$?K6C*dccj-SF~?IHEJMRvw)7e8)R7 zzzYB|nLf*8uTonD*)B3(a_-wlfz!#7N$+>T<)38wC5_+To6R}Vs5SXe9Zd(I==7tZ zNXbHA3M6yg$_CXLBv1bZet?ZLPD~imM?xZ3QqI^~k3<-Rzd)>oSa@7x&^8e0#`iIDJ#;2B!Regc z%Z;rlxZ^p!51f9nl`SV}X}*}q4Oy)>gugeE018~e4HXRETmMB7Wj=4vPfcQS6^0$D zm&NKcFvKU;!EN_ni=R?IKrO5|oeB}Ok?G2ZF!HP-gp9`ZW-sLFljvqg6oT|gPlo`O z^m2g`@mqQuno6&AwrxeJiDF%;@&sDjzq?$F1*ANCP{J(W`tSpW#;s??a6&=x_$zgC zD)y%fC(9Sf815aP*jWJu0K4Bb);DJF8Osgt1QKi*z1fqNG`!i9qHLabTt>9la&-^& zUaWf)DO!h&DA)hC&~5JUaqWrJ8a$`Jk%j*rF8FJyv+9qydY$sRPq%^DH zFf0A@GTlg-?u#o~uLrdM#mBdRPt-u&R$Xo<)+>u`zkn3qr`vC++F}>uXTBH*^`z}j zt<*CB`z+s?XJf%8S`tn6P3PHA9t3;h1zgjYz}i2(kVzs zfY5M1QkM+2Z{H1vAlFy=N`82zt>&wM7P?jSl-Og+<;7C3Fqh{onSL3yvh{~=NEgo< zH^+oJ+5Gg0E9k>AY!c^q0Fz+d*;HIq_wm3IU`l{Z3ggXeD&SMaM&@f$0!!QoP}eB) zGsp_+Q}@~%&<|eQl(?7iP68b5%&#tSp!)8fYmp0?Z< z-m*E5qO1M#W<1t(?SOsX=wk0j#Zm zMM&e|;8WbqPF1v(dz|{hbhQzBgqks~J-)&U^x<#e&5oeEh(Ecm1GR%G>ElAcO$rzE zi8{LmMIFdwT>bupqAZaxYGXe?>d$h%2K&DLEJvY(4|ld-f?jtziU7bWvzB+S+BY`@ z-Q7rTfI$HX*e~3^Z$_(N@at~o?5ei*eEp~^frnttva9~YJy!gH;68fopCDq z4wu6g;#$R8h$^%_3U?Xrcim5xJ+1~0O5pUje#fXc?@5(rbADl>N~8?1qQz0OAvxw? z0odo(TU9NR3poHD7Y6cF23@pO{~-cO5OQ%Q1Beh~8=Q?MSRhGes^E5NYUAkto6s?D zbHDO$o5ex_rs#61&8la$Ao-O3TPeI)3RMA-=u{?Y*jYp^G3=t{W`w1i-?l3K*Fc90 zT~WrQk`L&-2mr)T<0P@ia=nOA6ZuuGKL^;OooUEbj%KFHxFLtZ?M#0@0OBv3#c_&V zBbxq*Rb&(GCWsTII873By7BA7DW$h{KrJ~yJ^s==`|mCStSnc3eQT`#SnZ9*L^xZv zt*+p<;bw&$Gy@3n3O6Rn2oFGrjR=#eUkv9e`5wSe1^G*5UR6sKEE~yshGg_+Rwl&K z5<}+Oh$RcdS?Yu#F#f&!h^SIeMA|RI(WYD*O<`0HcR)fTkRJS&(<{HHDOl>;ml9gY zEUH2PJJF{WVi4eS;B-x>=hGZ-mY}C+gqn0yJu~Z_kKVG`o#2+n+w&J4z@K75rL+Ls z9EgF!Je^QHuJY{Nr%;l0cpyWQ{(5(RlV0AWw35<@Zf0pd^qPqSDvTXdYBiZ?7Lz%p zWw2anA-jfu0zzJOXQ%1_&k2r|6%s5RVB4J{eO6{M2w=1#hP>meJXJeG0=JZQx#Hmc zxQzBGzHdt6OVM<)0qh!F{Z&LH_frzff#+VI#vR@~x>lN8Q>$lTLRc0^upTEBq=M4D zLd67`)N1kY4;1t);GHm`x?N6*KE#|&#BSOsN)RirG>Fo4SywbQo%ahh-icDrEf3DZ zhYe^IqnWwF_-&GCax0i~#$>LV#Y~CH`V#Apx$Ca+xBgoVWRn9q(A)I_XE~iR@R=GWuo|73~Gja++jH1U}o z$e1^O%yL8mfauXF07PS4BbUh=YSgzfj!f3t-akd*^U8g$ji*%T_PHRH=bT7oC$9a? zkWk9jE8bBTYqMTpzRiZ`2z^MW)dOJGX3uL3j}~q(W7(I2Bs!;WXp>o(G668zKWB)b z?UJ3tq3t`A-u>Dd1#5c2H`o)?bv?k^gZYW#lS!x&zlB&;V3QAf&k4DE9rTiFHrt`A zh!y+gjY6BI9OsnsZLFPWQ%U&Z7o_7RoZ1UiCfEa~s{1?Cn%gB`iA-jjGgeZiW*@pf zyzU_>AuYhyI$@kx+ZzZ&6R{lv-g?PU(;qY)$brHrIXC)=s*fI{QD)ySW%ydh+X zdz5!)?%>@pTAUF(qa5;QxZ_zu>63XX*M3BGM9SKJxq?+D1kr>Ii-Mz`(soHoMKXvm z8V5Rw54bl*Y!j3VSlN6fPne3+4LY0{Y-4AyHRLB-nGhH4L2^`dPCC4rD{|)J43?X5 zLKc7T`2BFLQ>kdHNTCsmUzxG#uJM|dAgrdxq;#VAMR*+SWt~tu4GNI#qXQyK`TmU< zqI=q1rdU719?=JFjsh^b4XzL;aF>WjZ9B0v<#oyS=a+{OgS9-jkc+%FTQ2AQ@x%m} zJBe(fbxB+%1~Y)10z&=#FoJpt#pUh&3TYdW+gX@MD@g{JB9cVnsd=_a4l6TzZQJ^9 zadB^Fbl6~#Pi79GK7D6mKGcsaR%#)lYD;9n6PV61xZJ1~7Jg>y3eFq-@RIreUmXz) z@e6^D=bYZ_kO&=j!U<8CYc9s#PEauWQ=o57W_F&N3qV3&iiDJpTnSKP8OH7h#wK(Vlh}MJtoj`(4-9 zcu&X&)<9w}J(|6{U6URpC9z3yqug*;;LBXT^#yDob`!#85VT z;eXuO2nJ)^BDd1ir+bL^jQva3!RBg!S^!}Bff~w=Aru4hDChkW?hnSsh92}7_NdL_ zbcJ&3k~vFxp3pDeN(OXYebu4uX5fHg!JOit+D5G~2RdAVha z+@74VfUG^c`jaTQU}R=D(C|oqmU_9yO0^6d5Pw(ju+2DK@yD_Ha6v<4rESde|;O5w@iMal---r3(8-p4{HI1#xqakVH|PmwM+P zwo8G6Z9JvgxP#amaH#@TG;C5?bemdkI$>{r58H{(PFhf?`CJ+IFLa2F$>MXzAt_eI z?M4a@_z|S?Ru*caBI|syc=-^|j!j)P-ps!Ecy9@+?zagF{}M$w3hbWl3$-1-nT|^( zdIl;v-4)?=pRj6l+}Z|)N5?Ti`gQ~OeMRS*;`>P7BxS40j2}=`k7A; zP`@N5GaEu~;JC>@6Vb6tv`BxLl=WZrL-;XyWyy?Y?ZZW~f{t0M_v4Ty5m)<(g&1Ur za+cRT1rc9vr4Lmif}w$Ge=OTEA(X;Y4;gKe7IyioucaHJcOK~42Yvxm)H~8$48JLW zY8gL)6__*R;E**Wdr{Fmv?kb@Tt)1P%SdMb&T_Np)BOx8+QO>vDJXD6!(14p)gjrU z=eVmC%%5Z^aqTs=O>jQmle2>J;A}ra$1_wY8QM`*4;MP(1BrSPEnajR{9eN2;=RTr zoN&~c3CK#Ro{TwBMA=fD5WGfcSGS^2>(>V+Qv8uq=SvWhP;3ufO5VYV)`CCFXL|K;Y^*!uPrDU#VNPZcByaq?+I|o0XAdE)$(~ZgXQiqqqGTr6Dqk zezsbZaQZ;ORR7*Jbd$lg>c%W=EK6ko2*D!B@E3YYU>2=_Dy9|P)E@HvBG_N~xvPjT&qVB1SMK}V5%Zn2@V9qi~ z586s&C0_TYTf`mkOfEF zy7U{XO%%ftDy@&?>kH23$(F1p{fg4TLu}-!#0W+0_pYh>^%&+G?>3*@g*8pd1U~Cf z1Y-goH6Z(-3k#j;Ty?J`f=(w71rT$U1MbvoVqHR#D(?HVN7W9Lr#fnD<*4sS=Yi)0 zYUq5~buzL($NmXW_Y}d~HZiw^KOCmHy&72Tc#f|~ubpYM?NDKi;cXQ0o-+fQH-mq3 z-fBP3JPV%RfS_cC?jbxm=cdtYz=za9pT9L(4bRnla(|K?cHhV4C!mBnh04_u2;HzP zQ*A|SZL*Xxg*uL#O&F-!RxAf3!-_&tDc}$eRzdDJDyb|;s+}`mJ=;JM7ywU&yc<7= z6?z&3>P7{v5&bOblZ?MYO)S}xZdwIDLy2*RatED)vpmV@E(g^@Yro%HZ^~FY#MpHY z$VzIj=WFKA6ez_#6jBUT_@iT>55@fF(an|{&7XH+j z>lCLJF8Wy(Ht0_H1Dv5UNa}CBxKj7AEy+Km3{+35*m|Lb5|5_=0d9FGeRAPxhZSCT zD37bDR1~wvm4u;{mPE{vR0+zgh2N*c!w-EsbRoUREJ16Me6?e#47LJT+88DO z2S@KeGe0b_m!oYPc5V{8KhyO*Gpb}-2ut5F1~;kgk!3aNL4ss6<=Dr+-X81Uf~-GO z)O9(rHKn^0w$xsLogWL@lxhN?YtS&YNltO2H3|JV0glczrIj9()sJp!}< z!&GjPo*LJ4x-O13TWUTT;1zzVe7qrTO6xpTJ^#DgxgG;>j=(evCKQrkZ3bhLV)QyJ zT1-$!^3|9DGH-%H}4AtbJa?GVn zW5m?}qnorXBTI3c2XA={Noj@b4$YGd_tsPArxkf6ZT{c77=NQ;`B9RIWOy9Qr5?3xI| zIcSmZBkE>|NYxgd%^Q(1c)Mq2?$6>GLzKGl@a~%dYO&N8u=Fs_ZG+JOCW#L#B|zU* zRoJH(a*n+<$O_YFJF)w_&iLV?Kc!j3rQv_V7Tb)%F@ti&R^0^%LrzEuTxRuPN?>eO zRXRlz;41ex4b7)XBXz;5+?vOMP8O9~W{FKSG2b?Jf@cuDq(Omh4g03NESH*JdUW<= zk6}9?<+>Nj6?yJf|EeR=HNhrPocSN(BlX~r0;Hy>W>)$w9NQVW(7 zNHs*-a)6Qvv!T-bL=1V`I8MNFy3p_4!!?{Wi%^e|#@2gP9$NC9N4668B#gjtH2x~R zWU~*jIh$P^0Acpojz?4$a5$u`O_q{HbGW2HA7VH7v2=%l)wh_D`kuF&fGQ`RooT&N{`VatL3BN0ooSt|hADncz! z6wlTFZdYZ9q&8t6dRf)GklUkZo3N<4=_WHucv>i%z0($yL?nNO1!3X$4ggi<%f_Xw z^_ZTUBV$oDm^Np%+JUswZH7NvT{wunSWK>K7sgkU&j=>jq~v2zX333I0FV(z=JJ@;7+|PiL%ec)1$wE<_ac-7HT`tS^uv*! ze8S7;@JE1nh+^8e#2@z55W5&6Q@O)LBtyP)H!$I(SSUwU$e5!UYZjQ-Yi-ob5NdP z0NHcbQ9pCZdYEC4#f+ZR36rUFG}4O?iNW9ji$(M}g0yjkR}e7uSFGAUIleEN;$eEh z!~^BDZb7{B$0ho0n>%irXE};nwhr|@S`V=1@;$%U5-e6K0BLP9wMupwU`0lVcW1XE zI_Gr`ChUjQNOaaKNP+axA(M-kT(CiDGL!lxwqmGAKV{)#j~VQ)`^2@d?sa@mZ=N`Q zaKiEXHJJDX!k;>1+LaMmUB!_$;w@vP^QzMJ{SjcaHw(_Q|1~u3WHuu0-8G)%zj(+8*486*(A>$)Q=y{gsa&I1Rib=803(mI+w)tWD4Bcv`dI&uVKTw$is z_;r6Et1jm5b6=7V!Qx@p3pmEwLufI}HR^t0{T?B`3lBO`CYPlOKTv;WgPxWm_>4V? z{I+=%6$hD%RRz@FFp>+?@rDGz=})+KXOjCvX>#(Z!o2a3M=0 za=GJp-^&4dgLk&w=?@Ij+ED-T1*`=+-U{(vB*U&TMIRO-hBTe}yuMU5dU?KBK-B{E zXUL|#KMHG-!UXmuUxcXqb%sc5-Z|{wa$_kc61Z^&;krb`o-n`fCMNmMJChPE42GPb{$DNpABjya9&>jAW!>>__6g?S@rp$L1zjeZ|4TU z?$q&j(74*Wy0~mVTGIQ=2nWIj-VUH z#dLd1YT@3Zn;%VP3snArfu*-53#I6#N_F2t9GjU_(MFR*DXm8$2%(O!e7=%N z^#LZX^yOZx@pg9g4~m{ISE5{=FKqm~?oY=>!-=#SzLV0E;@Tw0U19kRn8*(U>aEORQiW8k0y|1Jb5pfa1*@n85I1OZ?%lS2g$wiUGO>l~{no+1(d}D0@lI z`*I0tw>KQKbsgur0|>t9?T@LN(VTjxd9>nIBD8dj^}{H(RiXMIRkf{>Gq!;B*dC4{ zhH=7h92IC=e_{Rp{ksvZ-Tr96Or9vQAjBUit@7m~#7!-q)DiZN?N>qnpP1=4)s3F< zWV*{4S$GT1rZcjzPWQ&f#)-*PCbwLkNCfL7{X4HTA{cG)N*AfptE40sNZ;U#M5+H& z`S~XZFfiTY*#fHA_(0G4EF?$@Rt>gZuF7Mdt=DtB?GyP}L~&FwhakSo89;SoQm}x_ zx6z8vXcTUz{B(C#_SOl{q@toyCUh-@2sZBBHzQ>lBC5M^Pyys0q84zw8_bvVfrUH4 zH=8exfhjZ`fA~&ed$GZdPP)-xo|GD#mWBg?fSddvPPz><2g+ZPD@~d%JRPEzgbd?I{$XnpIpX+%8{#^UnhH22mOp{ncDCL zXu!k~!29+9dRiTh$GM2DAa(gg=k1A=DDNWHZqF?r*YuIX!54mRB;@b=luG!f;O89(0K8y`$d9?K*w%WZW z-@i(=aqSx>kuyw}*h{0i>mcFws-ewFo1qN-RTS+4%0dAzYfD3a#t}u)`F5(9G-a4PLv9bG0 zjiV5x^A5nY>5uHz{UFl=ugV5C3=!-tEMX(ww{t`P_bF>pszor#$qS(GVYBUSAWZb- zH$C?=z{`Mv6Hzb_j{kS9;V$Pw`H)x2cSy`{Is-+ZuG!57dUbah%ai@cWc?t5QM!}0 z%*Be6!ZBRr7((_y%a~I@^h?|Pw23j(9&?jFxbjzB0+oSvF!5wc2xqYqD5R>}HOE-EfGTKvv6i%A{~ho!6N z;p@GW))H%lACfT@Pz5Z?)T4p6N5TxQ+A%z}DCw%KV&?**n|xFiu$8 zT4wxmeTb&nh3-?un|qeVmAKv+!d;21J$0q+*X<`dUFQKiZ$oWeM`^op352hOheqe* z9iOjU?*3D6&ut5(XO<9+a26(Dfe~1e165O3LrYnN(%555rZ(zeMWQyg3V#+W5){V4 z7nA68lpiw#U@?{DI1v$}oG@ln-1HnFzzw!jBZ}opxLg~}_0G@X*Rv?k=y?l-+=WY! z)lEL!Pk<%s_Cb~D+GCP3ZvZb_B-DN92h0P}ewDVWnJ=>qA&VyK{%+>}ROZoe74HTJ z*_9Yx!c`$H_PdiwkVN6nL5F-FciV0Ebl0Gy@`~1wTt^KD2qZBD`z?FM^3;Q&>|+L} zRWy81yWU?c4@TX5y~&Vu?=X#g#Kj#HPzP1XmBL~7n{_LdE7U_Fu7C-&)mLbDwxuug zXD*(Tf&iO2Kekxmt~gc4e&rm{ayR5qdFzbq{tcT%@A>4;hEC-jbD_pNJHYT3>-~x8U3^#(GT5YX zd+~w=+1}dA{qK|O85_2s>h`~SUh^{hbamngyBt!+v0!}|LnDL8W^$48oZ7}urJ#6u za*k3d(+eUg6x$lafEG4TsnwFeV9*rX@c`}*IDN2xj*f~QJ(DpPu_yXTHEYTlA%2-! zM-aj@29_B0DmRF=kBzrY)ZlFD^aaBE#lIn>?AzMk=Ri9Z)6m(%?xTUAvP%n(-psEC@iLrF%;sV_fiPMWolcm{v`QwS# z%3j|aoXBjHlvcm$lz0%wfq=j!P8m=!z_jkb0xlzr%ct-a#O)oBZ*4idl%wLr$ zz*w%R7i$XF)X*7v9}M5T;wVL$L6rBNL`Ns$4fgCAKC?rGr!&F-t(M<8jbad49#=m{ zlc_ftLSUeQ@t}`ClYIu5UrPP(ZEbB~rMh<2!CZk1y*QL2%ZLX4g8R++R+TY!qmQn4miplN(9R-gQc)#zC63k@j_POsRzjRP*tt7ToT zt*jz;QhU#he_=jrven>yktaN>^((y2%OPH|zIoo>Ye|cF)kZDq9WD<7og=(YBtI?M zpDt_xViFH4$ob$G+y>er~o0xE5LGZInDJ5r-QJL5$y>tqMQ%kEbvi zhFrue%W^hYeeP)U|FWvIfe8H)P>TFD#|$hXO+~T;BsF<{UJ-D%2rL!@ERYnwa5xmx zTsN3JS|`ieEBB`=jJL!_!0Y8_MJK~;zSM)XuWN00c%^l{Iq9LwfFp|`F3!xzi4{@q z!vh`08)vdSD0vhQN8@qjzaUn0Vm4kNSwL;V5>})NW?A8(;{;;EZC{U2(*GGU-0~SA zyr7Q8&HduuSzQU`&Tt{x9Dhgtau~tCb*wDNY>=mkGD?}Ftk?sl;OM-cNDnx3gPlMH zWk*)qAwCu2#%UhLqR<_?Zt6~gjU<#5&}y}!QQWPKj=~(}NJO&iwiQIXQ=$*TxuBc5 zwT{_}`z`4Tewh(-Epj}1P50IQ(SpMrBc1YH*x8R#hMa;z?EKrF4juC=mDJlEWU=-F zK3N2Q<~vUpeWZ81)NC<+VzFmKl`Uk79v$pz1t^Si}S_mD)om z!4owSxqz*pWo$k=GaX$OQCvY^Z?7(J%Js8==G!Css^X-+n@5{CaXud7Ap%K?5d1332!ucy0dpvg^5eLY>`gPOsH3Gf^75{hG21Poqp z?!jSUeowc5`ZzDp&bH#_ONVtcc|2Nw_gQ?etKIIS>k0@}PP|<3zlR}`-($w9{bVNm}C(b6B|pE*-gQsYHCdn@2a(I1r@~wr?m>nKNWfQb2mE)c7`kV z6EEqK)KF0A=yzU4aomM1h$L!en*7wRqHFrV$;ZrbDM%{Yl@zAjkFgho zr$~l`_k~I&_n?bC@KtGb_W$gA2NdUJ<&M#fl-rr!H{@G(mWBR3X!oIi3z? z6vxz^+}RiKjQaV|48%6nha2M zo?1PC)gPQhc}RxT!{+D&r|xD9#nHxR!HmnVO*^Q=lP%D@g4s>!k->6muM7}e(4gsqNHj&DV+LiXqODSi?b};jx#}hFd0lyu@X!AU&^@Z~> z%R;>6XWzkO2JDT{!QLK8=1D?0JQ>`OzD(Z^Gfqxq5l%S%-_+UrLZd1#jEL^487PNR zWpo}acBvR!iZkTI9Y4-&R}mfX1x7TVDa-{tAEn~NYRmq%hCG{P-~fm6?L@a5y>l05i1c zx0~Gx;0ZQerb1`q=;-Mlr{>ue`P~kcVKF^)ems?}aoGPyokMnXTrDBsCf1&%(pO?1 za%mTJ_+zWZ)Q8q^cmJMxiGRL?v9$QL;@8gZRS7R_*4vm_%87U#CJb|8jGs=AA)jo8 zEcty`I4YaRIU>OTSdv-f<;*ba&pca1!LVUiDURzsXflHU3EI__Q5-V|o<|}H!Z#SD zv(j#_p-$S>hg)Yt@vsy$F|iP#N|8_!hp%$r8m(2spAUC-KpcT?W54({$#=HoRNFi- znFgoF^uG9(1P%t;_^3tiWya5=ew)Tq(}~sPf*w+MKJ94gp3&amMNosJ?i(xe$-x09gBcwLepGM@Rxl&ZclOblmwCJvOb zcGoOBA7S8vaSN!r>>c+zBhn(NcGigpM)I^ETeMgQZ}Z}Xp#{ut zr^5`35?j&UZy_YK9_!{844i~VJToGc7AEz6HSlP0>Z2DPkaC6$MoM%ge$JXuBXNEG z{Y6vFW-9?aLYmNN>66cm`O!$)b;k13aq{+$3I5IpO;D}a{j-diBNFIU(A#$I?RBpX zqA})MPh|1fsS)IBF%il*(OfWtQT|*_l7?boF}P)FFy1(I{CjQ&fJ9^U_n-)5{=UXwq)cRua zU~e$!`T1p}Z$DWowYolMjjIzh{vahRrO01ubXnqAZoDU$w=07-*xW+oP?)+Nd8oTw z|GU`@@(YJN0w3Z|sWkZsrIdYBpd1a&58ZEt#TumQ<}^3e(^fRun-cn^){`2S0~u5r z`zaeN@sYYUrS@WgU1jiA>fz=Oc&@~O2I!OCTdeYI^dlf93j zqY&vjF>kK&MwAC%+rUGq{8UGHnf8CZ}$(pYD1v|e8PpL0!X%#E+xejuw{aV!a zFl$Q7U;hA6m+#_yx>TI_TKmUAoq{U-YsK2rGfO*eDE1odSSCc%`0%403~Df&zk2bi zqmQ(qd9rsTN(c7?9vcRHm(^ON8SDP`u2YchY#G)?lVNkO4U)>26aC-&az@|UEC%(y zaNVX>Y*X;rz^$1#cSH8+ur_DK;s7h`+o?#F=!o?sPiJzXQ5D?L&~V&zhFtw;3)#lb zq1$;fNB>w`gLqom`u@ceSJ`@;r92b-{>8WK53c2N+K#cHYWJMxwldMRc`;jeRElo%vS?7Eiud_l|I&^FXYOg zD<+tw3}Z?fpP&=^i!AO1eMt;6r0wb_ z!nq-xYvxHzI<1QQ8%tV%>_ZJ>Zfoe1x)CQKIT{=_$Lgahg`njvo;&~a>jJFDXM%}) z3%sk`XSwdMC-0yxmkVfKv(LnhPy0)I*1V9Xi}A>?SZ7sIa@{MxYN@XF1A1H<5B`!y z%hnToh&iTy!JL&(kNCBSN~aAX+k{Q8-z~|PAXmRQNkZD!UQl)kea7QpvH-xBKgA7% zCY@dRIP7j$RlQ;P`!Gr|qItTHg?RcrVuZds<1Gw6wPJiQZn-sGi)A=q%$DWiaPl>v z>g!kmW6P7Or#@-zV9J)zejP!w!RSZGpwD^~K5gxI^gRo;wgLX_tC%yy^nQ-#Tc79#PZ_w@B%T$=9XYGGsf0?`I{32VytW z6=Rpft|rUqH&RxvGgkPM9Qloi28s+pRtTzpO?_TQsnKyz4nqv&tz7vuw7U~2Fy*Vun7GAC> z6{g8VFTtnt^jI=WJu2F9nl?FNi<~TJlOhg`WJDUJjd2lIF}9!R+Lt)?sMhaFTrKuKAp2XEMr2P-hmg`(Lwn* zUfqCrdrbLkfyciTLFiOe)9BYswP!LRp7EEW73J~Z3Gh~wbny;X-`%6sGgxbDds0irtYxeot^0pk9BmT8u+!8_;tg;aj!-Zn#{NE3Mx_XXqGhKMMm~fxo8Mop=YV% z)1zG!j3&%qKqora64Jy_986^`S_Kl5@Ak{}s5*7hkx6h}k24N%g*`gTie8;8to9P( zXWf+C3Wz68QcUzpYk?JqZp+^cljO=toeg}$`_a@|P|A@KoeWmi=r8!x07qCSTF`t; zLRw6Xmiq2c;F!nl-VnWb9z5)%Z8|pbLF?2O7@0<(v*-4+Q)I?`&*zmlNOzgaml5; zP+MJ`ZE_JS|E+KEvcrbuIQK}@X3WT>*h#)#*8M6MIz5~>?0(iUo1`9Qe+)W9uQe;) zO0Ec{ze9)`X8y?m{xkDU8HpwkuAv)1hF*LmP)G<#J+|cJd=6I{QBF|69pm=*ua=#c zYu=-S^$KAdP4-|tTAk*Fs#|Hi6+MwtyBb!V_>CMRk4#rFr2X%RXf;OHi4gG7?@2pizm2s;gUC zK&6=+n3R}apTF85Cj6gfto)ztGmaw}Vj@FzjyWsD8F$psNE~gIr0ty5H60y>L{;5g zQv{PZN~@{0aaB=FXiHTOS0z)E!;G3MRFi5~El~+t`>tEp^*`A20qAR#X^QwFmUJSRL&k)(_A!LOy5ov6j>Q z_z}%NN~y5>o2Xx2X6`lCch-Y$;P2(CVH>0==@=Z%Z>1OZC2=1avaJF=NAaykw8Dm6 z#l0>r;~pE^{R|P^`sM*Q%-=$&$HB*zeDtW9AeR3VeJ}n+F+Qe&ne1{OyV)BhXF8`w zus5+hNY{3>bN{{SGLJtqCOUC0k(Kflqnf@@3K903)w6@6cI$|)wBhfS(2Agf61;u9 zvfE8wDWBMcMcynQ9yRQ4ao>)ADQk!K8%6L8*To^u`4o5Kmdl{P)oKY}rTK={BGKGC z)E#zyC)5Y0rjc+~JKD}^^+7r$NcYtNb)zpwKiT@rz;Wm;GT z5Suf6bpw(frI|P5bTeUrq1u@A7MjuB!gz`qv$K_!(KJGjx)kl1IJ?NZsdqtk8@ekJd z*{oan$*%-`8U=+))smD{j1?@%Fx-3imQsqo<_MoVUVCD{rS#D*YxD$`W3TI5*d7>c znS*(a81lgZPfUBxw~3otdG03zQ>KVBoh$6o!5W`#UXRD*En~-TqK}&00jI95kjvO7 zh;It`p&@`?wsCe|bYU^zkDjqQ6)=JJIkjTf8J}d*q?fcUytQuDc-r^4P_06<0-oP; z(9$+FzxjCQXj>*FC4uuxmqG_=hVuLnO0ZsFc{cu)r00bu=}FLi>$KC)AX*))j+G_g zsM8tfiP4zgek0j$xbxn}#`H;#<4$znk3JL=qg=)8_iRuyl3jmsH>}d;s^t)z4S4uQ z$Z>YK@X(l!c1<#~^9ZP>pfXc9J2qj27NEprjVudUEtFk_C?lZDobF7rSf(`Lk+)sT zhOg##CN52GZjc1b9iP-}tZjv;p7Te~z#}3ZqJuvNWFU*X&0Q6-iVvM@g*KN28Ow0- zKy7cWSd4*&VW+B?N=n6Ro}>g_BxGTH?nhSFaGlQp)R-5EPbcoaD-> z!yq>>(eaYkBT44`r;KR$I+Cz_5SJ1e& zjxL>n)pSK1)0VaDzPuly3)#8n2MQ21g$7vhWo^m@L@N^-4hQqLbGF(R%vpP}QN%lfF%hlYQqg%dh$0 z!QhV`%`H2;aT{3!|5XUBm-fB=OAl(V!_)M+7nj4>>BR~Q3^P+q0s_n`d;wQTKboxR zQpA{v#0GP&KMW6-17>X_Ytjv-%c$GzCPR;AMWuk$2_MX4283zYBz&~cYWq*vJEx{` zcMj9T;m(31OS&6SaIv5L=9lTu^`kUxK&MW}UDK7{0p8q?u=%S2HZyMvUp3Z+5(8(SE znvQ3m&PT+=`+$bsIMzkL)%T&fZUX=fS}lNnL@dn&XqXXsfdvfXLvw^;08O6vQvM@i fZt8^p!S-%}f+Bnih_oe{zt$cvf6t#Vgv>ty`HajI literal 0 HcmV?d00001 diff --git a/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/screen-shot-2019-06-11-at-83301-pm.png b/leetcode/1001-1100/1080.Insufficient-Nodes-in-Root-to-Leaf-Paths/screen-shot-2019-06-11-at-83301-pm.png new file mode 100644 index 0000000000000000000000000000000000000000..21953a544cc486a6ac5acd9eadf7e5b8fffc25f1 GIT binary patch literal 34336 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

      G6}Yd=OzvJ-Yil^aG9 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 sW=&0W*vEe#J>dTd Date: Sun, 3 Sep 2023 16:48:23 +0800 Subject: [PATCH 0383/1057] Add solution and test-cases for problem 2385 --- .../README.md | 40 ++++++++----- .../Solution.go | 54 +++++++++++++++++- .../Solution_test.go | 43 ++++++++++---- .../image-20220625231744-1.png | Bin 0 -> 77134 bytes .../image-20220625231812-2.png | Bin 0 -> 6672 bytes 5 files changed, 111 insertions(+), 26 deletions(-) create mode 100644 leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/image-20220625231744-1.png create mode 100644 leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/image-20220625231812-2.png diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md index 8679eed4b..cee086c17 100755 --- a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md +++ b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/README.md @@ -1,28 +1,40 @@ # [2385.Amount of Time for Binary Tree to Be Infected][title] -> [!WARNING|style:flat] -> 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 **unique** values, and an integer `start`. At minute `0`, an **infection** starts from the node with value `start`. + +Each minute, a node becomes infected if: + +- The node is currently uninfected. +- The node is adjacent to an infected node. + +Return the number of minutes needed for the entire tree to be infected. -**Example 1:** +**Example 1:** + +![example1](./image-20220625231744-1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,5,3,null,4,10,6,9,2], start = 3 +Output: 4 +Explanation: The following nodes are infected during: +- Minute 0: Node 3 +- Minute 1: Nodes 1, 10 and 6 +- Minute 2: Node 5 +- Minute 3: Node 4 +- Minute 4: Nodes 9 and 2 +It takes 4 minutes for the whole tree to be infected so we return 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./image-20220625231812-2.png) -### 思路1 -> ... -Amount of Time for Binary Tree to Be Infected -```go ``` - +Input: root = [1], start = 1 +Output: 0 +Explanation: At minute 0, the only node in the tree is infected so we return 0. +``` ## 结语 diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go index d115ccf5e..422c78b80 100644 --- a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go +++ b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution.go @@ -1,5 +1,55 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, start int) int { + if root.Left == nil && root.Right == nil { + return 0 + } + father := make(map[*TreeNode]*TreeNode) + var startNode *TreeNode + var dfs func(*TreeNode) + dfs = func(t *TreeNode) { + if t == nil { + return + } + if t.Val == start { + startNode = t + } + if t.Left != nil { + father[t.Left] = t + dfs(t.Left) + } + if t.Right != nil { + father[t.Right] = t + dfs(t.Right) + } + } + + dfs(root) + q := []*TreeNode{startNode} + visited := make(map[*TreeNode]struct{}) + visited[startNode] = struct{}{} + ans := 0 + for len(q) > 0 { + next := make([]*TreeNode, 0) + for _, n := range q { + for _, nn := range []*TreeNode{n.Left, n.Right, father[n]} { + if nn == nil { + continue + } + if _, ok := visited[nn]; ok { + continue + } + visited[nn] = struct{}{} + next = append(next, nn) + } + } + q = next + ans++ + } + return ans - 1 } diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go index 14ff50eb4..d96966f69 100644 --- a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go +++ b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/Solution_test.go @@ -10,30 +10,53 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + start int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 5, + Right: &TreeNode{ + Val: 4, + Left: &TreeNode{ + Val: 9, + }, + Right: &TreeNode{ + Val: 2, + }, + }, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 10, + }, + Right: &TreeNode{ + Val: 6, + }, + }, + }, 3, 4}, + {"TestCase2", &TreeNode{Val: 1}, 1, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.start) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.start) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/image-20220625231744-1.png b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/image-20220625231744-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd96439f55dc27dad87a52ff57bbd55f29b30ba1 GIT binary patch literal 77134 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 b?(Ao|Hsq5wP8i$=|4~=bxma+)=KlW&Yopps literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/image-20220625231812-2.png b/leetcode/2301-2400/2385.Amount-of-Time-for-Binary-Tree-to-Be-Infected/image-20220625231812-2.png new file mode 100644 index 0000000000000000000000000000000000000000..34bc1ffba816b70ff16e7f189d833f9fad6f79fb GIT binary patch literal 6672 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 Date: Tue, 5 Sep 2023 23:33:36 +0800 Subject: [PATCH 0384/1057] Add solution and test-cases for problem 1992 --- .../README.md | 45 +++++++++++++----- .../Solution.go | 30 +++++++++++- .../Solution_test.go | 20 +++++--- ...15-copy-of-diagram-drawio-diagrams-net.png | Bin 0 -> 21406 bytes ...26-copy-of-diagram-drawio-diagrams-net.png | Bin 0 -> 9001 bytes ...24-copy-of-diagram-drawio-diagrams-net.png | Bin 0 -> 8046 bytes 6 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-23-15-copy-of-diagram-drawio-diagrams-net.png create mode 100644 leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-30-26-copy-of-diagram-drawio-diagrams-net.png create mode 100644 leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-32-24-copy-of-diagram-drawio-diagrams-net.png diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md index 0eee2f903..230d0c90c 100755 --- a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md +++ b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/README.md @@ -1,28 +1,47 @@ # [1992.Find All Groups of Farmland][title] -> [!WARNING|style:flat] -> 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** `m x n` binary matrix `land` where a `0` represents a hectare of forested land and a `1` represents a hectare of farmland. + +To keep the land organized, there are designated rectangular areas of hectares that consist **entirely** of farmland. These rectangular areas are called **groups**. No two groups are adjacent, meaning farmland in one group is **not** four-directionally adjacent to another farmland in a different group. + +`land` can be represented by a coordinate system where the top left corner of `land` is `(0, 0)` and the bottom right corner of `land` is `(m-1, n-1)`. Find the coordinates of the top left and bottom right corner of each **group** of farmland. A **group** of farmland with a top left corner at `(r1, c1)` and a bottom right corner at `(r2, c2)` is represented by the 4-length array `[r1, c1, r2, c2]`. + +Return a 2D array containing the 4-length arrays described above for each **group** of farmland in `land`. If there are no groups of farmland, return an empty array. You may return the answer in **any order**. + +**Example 1:** -**Example 1:** +![example1](./screenshot-2021-07-27-at-12-23-15-copy-of-diagram-drawio-diagrams-net.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: land = [[1,0,0],[0,1,1],[0,1,1]] +Output: [[0,0,0,0],[1,1,2,2]] +Explanation: +The first group has a top left corner at land[0][0] and a bottom right corner at land[0][0]. +The second group has a top left corner at land[1][1] and a bottom right corner at land[2][2]. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./screenshot-2021-07-27-at-12-30-26-copy-of-diagram-drawio-diagrams-net.png) -### 思路1 -> ... -Find All Groups of Farmland -```go ``` +Input: land = [[1,1],[1,1]] +Output: [[0,0,1,1]] +Explanation: +The first group has a top left corner at land[0][0] and a bottom right corner at land[1][1]. +``` + +**Example 3:** + +![example3](./screenshot-2021-07-27-at-12-32-24-copy-of-diagram-drawio-diagrams-net.png) +``` +Input: land = [[0]] +Output: [] +Explanation: +There are no groups of farmland. +``` ## 结语 diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go index d115ccf5e..22950c04d 100644 --- a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go +++ b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(land [][]int) [][]int { + ans := make([][]int, 0) + rows, cols := len(land), len(land[0]) + var findEnd func(int, int) (int, int) + findEnd = func(x, y int) (int, int) { + + x1, y1 := x, y + for ; y1 < cols && land[x][y1] != 0; y1++ { + } + y1-- + for ; x1 < rows && land[x1][y] != 0; x1++ { + for l := y; l <= y1; l++ { + land[x1][l] = 0 + } + } + x1-- + return x1, y1 + } + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + if land[r][c] == 0 { + continue + } + s, e := findEnd(r, c) + ans = append(ans, []int{r, c, s, e}) + } + } + return ans } diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go index 14ff50eb4..7b9f3b6f8 100644 --- a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go +++ b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {1, 0, 0}, {0, 1, 1}, {0, 1, 1}, + }, [][]int{ + {0, 0, 0, 0}, {1, 1, 2, 2}, + }}, + {"TestCase2", [][]int{ + {1, 1}, {1, 1}, + }, [][]int{{0, 0, 1, 1}}}, + {"TestCase3", [][]int{{0}}, [][]int{}}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-23-15-copy-of-diagram-drawio-diagrams-net.png b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-23-15-copy-of-diagram-drawio-diagrams-net.png new file mode 100644 index 0000000000000000000000000000000000000000..1f07a308875ab67f66424d0bda2b1642d812f7f8 GIT binary patch literal 21406 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

      NL4>yE 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 Mz8mg+d*FwE0mM%_EC2ui literal 0 HcmV?d00001 diff --git a/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-32-24-copy-of-diagram-drawio-diagrams-net.png b/leetcode/1901-2000/1992.Find-All-Groups-of-Farmland/screenshot-2021-07-27-at-12-32-24-copy-of-diagram-drawio-diagrams-net.png new file mode 100644 index 0000000000000000000000000000000000000000..2e9c08fe78b7d8ed0cfeab7a3398e212f9c2463c GIT binary patch literal 8046 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 literal 0 HcmV?d00001 From 5fa1027dc642f0c7894f000b5916128022e5302b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Sep 2023 13:39:00 +0800 Subject: [PATCH 0385/1057] Add solution for problem 377 --- .../0377.Combination-Sum-IV/Solution.go | 27 +++++++++++++++++++ .../0377.Combination-Sum-IV/Solution_test.go | 10 +++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/leetcode/301-400/0377.Combination-Sum-IV/Solution.go b/leetcode/301-400/0377.Combination-Sum-IV/Solution.go index fc638a337..e8e2024e7 100644 --- a/leetcode/301-400/0377.Combination-Sum-IV/Solution.go +++ b/leetcode/301-400/0377.Combination-Sum-IV/Solution.go @@ -12,3 +12,30 @@ func combinationSum4(nums []int, target int) int { } return dp[target] } + +func Solution2(nums []int, target int) int { + var lookup func(int) int + // dfs + cache + cache := make(map[int]int) + lookup = func(sum int) int { + if sum < 0 { + return 0 + } + if sum == 0 { + return 1 + } + if v, ok := cache[sum]; ok { + return v + } + + ans := 0 + for _, i := range nums { + next := sum - i + ans += lookup(next) + } + cache[sum] = ans + return ans + } + lookup(target) + return cache[target] +} diff --git a/leetcode/301-400/0377.Combination-Sum-IV/Solution_test.go b/leetcode/301-400/0377.Combination-Sum-IV/Solution_test.go index a99f8fbac..be563c5b7 100644 --- a/leetcode/301-400/0377.Combination-Sum-IV/Solution_test.go +++ b/leetcode/301-400/0377.Combination-Sum-IV/Solution_test.go @@ -24,6 +24,12 @@ func TestSolution(t *testing.T) { t.Run(c.name, func(t *testing.T) { got := combinationSum4(c.inputs[0], c.inputs[1][0]) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + got = Solution2(c.inputs[0], c.inputs[1][0]) + if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -32,10 +38,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2ce52d181c225873495ad2636ac54530e3f5013d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Sep 2023 16:13:42 +0800 Subject: [PATCH 0386/1057] Add solution and test-cases for problem 526 --- .../0526.Beautiful-Arrangement/README.md | 33 +++++++++++-------- .../0526.Beautiful-Arrangement/Solution.go | 21 ++++++++++-- .../Solution_test.go | 16 +++++---- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/leetcode/501-600/0526.Beautiful-Arrangement/README.md b/leetcode/501-600/0526.Beautiful-Arrangement/README.md index 4be1df629..362799f0e 100644 --- a/leetcode/501-600/0526.Beautiful-Arrangement/README.md +++ b/leetcode/501-600/0526.Beautiful-Arrangement/README.md @@ -1,28 +1,33 @@ # [526.Beautiful Arrangement][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Suppose you have `n` integers labeled `1` through `n`. A permutation of those `n` integers `perm` (**1-indexed**) is considered a **beautiful arrangement** if for every `i` (`1 <= i <= n`), **either** of the following is true: + +- `perm[i]` is divisible by `i`. +- `i` is divisible by `perm[i]`. + +Given an integer `n`, return the **number** of the **beautiful arrangements** that you can construct. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2 +Output: 2 +Explanation: +The first beautiful arrangement is [1,2]: + - perm[1] = 1 is divisible by i = 1 + - perm[2] = 2 is divisible by i = 2 +The second beautiful arrangement is [2,1]: + - perm[1] = 2 is divisible by i = 1 + - i = 2 is divisible by perm[2] = 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Beautiful Arrangement -```go ``` - +Input: n = 1 +Output: 1 +``` ## 结语 diff --git a/leetcode/501-600/0526.Beautiful-Arrangement/Solution.go b/leetcode/501-600/0526.Beautiful-Arrangement/Solution.go index d115ccf5e..6187fbdaf 100644 --- a/leetcode/501-600/0526.Beautiful-Arrangement/Solution.go +++ b/leetcode/501-600/0526.Beautiful-Arrangement/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + used := make([]bool, n+1) + var lookup func(int) + ans := 0 + lookup = func(index int) { + if index > n { + ans++ + return + } + for idx := 1; idx <= n; idx++ { + if !used[idx] && (index%idx == 0 || idx%index == 0) { + used[idx] = true + lookup(index + 1) + used[idx] = false + } + } + } + lookup(1) + return ans } diff --git a/leetcode/501-600/0526.Beautiful-Arrangement/Solution_test.go b/leetcode/501-600/0526.Beautiful-Arrangement/Solution_test.go index 14ff50eb4..aa9b06928 100644 --- a/leetcode/501-600/0526.Beautiful-Arrangement/Solution_test.go +++ b/leetcode/501-600/0526.Beautiful-Arrangement/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, 1}, + {"TestCase2", 3, 3}, + {"TestCase3", 5, 10}, + {"TestCase4", 9, 250}, + {"TestCase5", 12, 4010}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e5e067af4f396c9703dc7714dbac8ba2b4e79158 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 9 Sep 2023 17:07:34 +0800 Subject: [PATCH 0387/1057] Add solution and test-cases for problem 221 --- .../201-300/0221.Maximal-Square/README.md | 35 +++++-------- .../201-300/0221.Maximal-Square/Solution.go | 48 +++++++++++++----- .../0221.Maximal-Square/Solution_test.go | 29 ++++++----- .../201-300/0221.Maximal-Square/max1grid.jpeg | Bin 0 -> 17943 bytes .../201-300/0221.Maximal-Square/max2grid.jpeg | Bin 0 -> 3763 bytes 5 files changed, 67 insertions(+), 45 deletions(-) create mode 100644 leetcode/201-300/0221.Maximal-Square/max1grid.jpeg create mode 100644 leetcode/201-300/0221.Maximal-Square/max2grid.jpeg diff --git a/leetcode/201-300/0221.Maximal-Square/README.md b/leetcode/201-300/0221.Maximal-Square/README.md index 459c6cee4..9ac2c25f4 100644 --- a/leetcode/201-300/0221.Maximal-Square/README.md +++ b/leetcode/201-300/0221.Maximal-Square/README.md @@ -2,38 +2,31 @@ ## Description -Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. -**Example 1:** +Given an `m x n` binary `matrix` filled with `0`'s and `1`'s, find the largest square containing only `1`'s and return its area. -``` -Input: +**Example 1:** -1 0 1 0 0 -1 0 1 1 1 -1 1 1 1 1 -1 0 0 1 0 +![example1](./max1grid.jpeg) +``` +Input: matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]] Output: 4 ``` -**Tags:** Math, String - -## 题意 -> 求2数之和 - -## 题解 +**Example 2:** -### 思路1 -> 。。。。 - -```go +![example2](./max2grid.jpeg) +``` +Input: matrix = [["0","1"],["1","0"]] +Output: 1 ``` -### 思路2 -> 思路2 -```go +**Example 3:** +``` +Input: matrix = [["0"]] +Output: 0 ``` ## 结语 diff --git a/leetcode/201-300/0221.Maximal-Square/Solution.go b/leetcode/201-300/0221.Maximal-Square/Solution.go index 83e1c8506..60fcaef05 100644 --- a/leetcode/201-300/0221.Maximal-Square/Solution.go +++ b/leetcode/201-300/0221.Maximal-Square/Solution.go @@ -1,19 +1,43 @@ package Solution -func maximalSquare(matrix [][]byte) int { - return 0 -} +func Solution(matrix [][]byte) int { + rows, cols := len(matrix), len(matrix[0]) + cache := make([][]int, rows+1) + ones := make([][]int, 0) + for r := 0; r <= rows; r++ { + cache[r] = make([]int, cols+1) + } -func max(x, y byte) byte { - if x > y { - return x + for r := rows - 1; r >= 0; r-- { + for c := cols - 1; c >= 0; c-- { + one := 0 + if matrix[r][c] == '1' { + ones = append(ones, []int{r, c}) + one = 1 + } + cache[r][c] = cache[r][c+1] + cache[r+1][c] - cache[r+1][c+1] + one + } + } + if len(ones) == 0 { + return 0 } - return y -} -func min(x, y byte) byte { - if x > y { - return y + ans := 1 + for _, pos := range ones { + x, y := pos[0], pos[1] + canSelect := rows - x + if r := cols - y; r < canSelect { + canSelect = r + } + for add := 1; add < canSelect; add++ { + width := add + 1 + right := y + width + down := x + width + one := cache[x][y] - cache[down][y] - cache[x][right] + cache[down][right] + if one == width*width && one > ans { + ans = one + } + } } - return x + return ans } diff --git a/leetcode/201-300/0221.Maximal-Square/Solution_test.go b/leetcode/201-300/0221.Maximal-Square/Solution_test.go index 9d83f1d4f..33c91ce69 100644 --- a/leetcode/201-300/0221.Maximal-Square/Solution_test.go +++ b/leetcode/201-300/0221.Maximal-Square/Solution_test.go @@ -1,6 +1,7 @@ package Solution import ( + "reflect" "strconv" "testing" ) @@ -12,30 +13,34 @@ func TestSolution(t *testing.T) { inputs [][]byte expect int }{ - {"TestCase", [][]byte{ - {1, 0, 1, 0, 0}, - {1, 0, 1, 1, 1}, - {1, 1, 1, 1, 1}, - {1, 0, 0, 1, 0}, + {"TestCase1", [][]byte{ + {'1', '0', '1', '0', '0'}, + {'1', '0', '1', '1', '1'}, + {'1', '1', '1', '1', '1'}, + {'1', '0', '0', '1', '0'}, }, 4}, + {"TestCase2", [][]byte{ + {'0', '1'}, {'1', '0'}, + }, 1}, + {"TestCase3", [][]byte{{'0'}}, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - //got := maximalSquare(c.inputs) - //if !reflect.DeepEqual(got, c.expect) { - // t.Fatalf("expected: %v, but got: %v, with inputs: %v", - // c.expect, got, c.inputs) - //} + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/201-300/0221.Maximal-Square/max1grid.jpeg b/leetcode/201-300/0221.Maximal-Square/max1grid.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0517c5d9c8e28399b371aa28c550d1191e8c0ebe GIT binary patch literal 17943 zcmeHu2UOI_viF}LLE?ZQ86`(0XGA4uh9H6Dj$^cklPT_qFGMhpw)!s_v@puK%x&$Bt(KVkJ36IRFg}0MHQs zfa6I(8o)q5X(vB15DgOx^Q7TmVV%Lk#W{Nx7Y7&jEItwbSv*2KTwDSW0U;4FF^Kpq zJ_#uaF)8Bz#3xM9PDWy2;vfbRoaWeqILA#C?i-E=fpo7pbKxoHp0L_W0 z7-)zF{MK-=uyN0zV`3nBZx90jCI-eCY(iXobab>c2of}O49qiF*f=0u64HxRl)@r6 zbe-eRk&&OL;MI0=iK`rd4>AZ{lehHCZkuQ1mjhclJkBYvXkB2A;xl29ku^1QJed_S z9s0?vzs(5%XRt7_aWK%(5xvqN#4PCOc=$M27{5~dIxCr=mbOE5MtQ{mi2OV+zkrav zpUvP^}Syuvyt1Dq|w)G5M>-ojk?!m7Sjc%3y|sBqA=|EBrd8J4tFJ0$to(qTW`Y#FZRJdEoKL$_ggHlvba;wv3;=yi{ZP2pn(EiaGx=TA9`r_T~V|)=iJ=3y)Mk z?$R61EzClsh^bFJYv31>R^JA5KLqLt4SK0Kn!iVRf9m zTr)}FP*rHd@tNE>IN0_wU)->LWG{D(QSY5z%uKF1HQZN=Oz~pd{ONm0wjV3>wv4@= zlJ=(Q&i<(u{P98&S{bM<*BC)-s1_kNhIH1sTFB0g+_vB>n7^2G>rPYBcoMFhUfUDW zh%QAgr#UNWq}Jt&=9RO}$AAQD^3~GjKh=akUMZTsXDR)6UQFH*?1C5P6^`jW;$Sao z?9$cgkQS&J_Y$lWAPKDu5@Dr}jlQ|o))#ZwD40G;D&r)C3ENCl75x!3f8mNgAd6#d~dz~a&kn$JXBw@vEMez- z(t>nXTQak;Tb80`1pYmS5y9$-kJaPM&qgW^B#ZMB*QB1P(X&Au`+C5%=sR5!#PFvB zRXHP>%^~DFD*gC#{9IQXyiaDq^oj2G#W>u03Po>1mFA=mdnvKUn3)*Fua{-U6L}BH z{v}{W?_y1|qG>j}d|qH+XiuB3^PNlw>b~1l9;UI+lP{eGbNYsbKgx>}g+Fmrk(h+& zYFU$JGRMH$_jQbA3=f^q%)C!H<6y6=mTciZZi{p{5OwPbEnD!cY=~QqmA^e@`~}12lUdNOBDZD`iZtK* z^q((jcre#%n{!_lh?mz9yl=)#0u#WnAo z-6Yj;yP7Z54j>~ufWh)@TM#?;Y|I^vg2#n1Uam>LU1t<)*bvbg07SPvlxbfqu0w+z z&ETSy+J=GMu`QDP_G0IH$|0P$*_a`wJ+YQD(LGk@)+FZIl--ytaC0}S!LK#;U%;TE zB9B>BMRO|bE>Vh(*|yT~Han+p_S7BZ9$`~{)Z6-6d5}WG-k|JfyLoyJ(Yd76K{wB8t0b7iu zWqcj$W0`Ziuk&DL+o4R6^FdHHrx`@ne&@FmI1|Y z@29xCsW;1uRe(7qZB1A*+p6hUEX_ozUaVEEeF~f6>PiY$g0I)d#aC1nZG$PLGr_Ce zX4WSPNAjH>1#>9d!yD1H+`hr(e2`FH!`>UAu+$57X1t_@`Kh<Ni>ie=;uL|Uq|Rs0%$H3{@$bDtn+Ry)TmF#x ziN>nas&%z?Tjt=dG1_?9i481}gVG5v8 zhDaABg;pm;x{c?4H04naY!y{llqqH6uXrOX4$_jYiL()82a9PR0}~{cLM6BMs~D`6 zd7`NER&y=42h2k^{W6u=6ra);lEs&uIWURyt?@MzkhD9C>74$@n@g)2zM zoVU%-Px*Ry&oI|0%kG_}_K@a{1dE}f>bPvH;J_|gstB+x^;Lwzm?&P2;_U$PK=RXO zHb_2b8=}+TP%Xb+fEa_ewL+DwuTY(&66h#4J1W-b6ny(bel?zIWl5zLKjr=DKPD9k&M_V$z#iN(u7=LnVK<=ZcIL7+I`9zl(pMVbgyCQw&`dVd5mXpy1#|MYSb}6 zmzT(D%AkLJr_+DJ=TZ&?kB@72{)xp$%C$@R0LHs`{Qw9)&%`ZgRWxyIJZ5Z^v5d@> z<`dC=7Hb}e$>oehb6dtRAZ{XpeWkRf2@M6%>w|aJiiUbR424ap#7nk7RPuBokd6?! z?zMa6O6OdY6ha7GDOS=>nE!l>Jx%C(MqAQfTtW9~R3-17g;Rxr9fJ_s=m24LTRNp5 zacc;p^-$JqT+IhuNvohah@`#r)TRA|#OjqZS#LA)Okk>FSzfOSSa8Pz<0BhCn$)Bz z=OyKnIC@BQ?^z@@M@blT(OvE6g6vdU9a*rQRnGj%&#<7dLqdG#?=Q zoDa)N^sTQ%wH!1bY7?bgdCyJ8=_~Wvxm5zq=QFZzW8cJ}>diw&-#wo%dGulr-{^Db zVg*HR_`70YAp3m3N>647$+ijN;@;5~?{BQC8B`tO3DzI6LTnT@Q%g%%5V0o*y2r|% z^vAE{G5*6Ii*pRD)jBsf+SJP>P!8rcw-^T&I=_ZYxY+pTm6f1jt;9#ZNqOnN+GA?i zGOs%7olk#KqD zp%Hyt2iNW}UoP%a&6rSl3yV!wzlR+#J`8$AN&iIevu|YqV>q9bNae_QaaidB1n>%&t~#Kkg1 z<{5WFuDrSRT_)>aM1mV2Z)$-%EDI`S!d@&#tI~!IWv`|tSYAR2)Yp)?&OTc$8J>?dmY*O<5 z$R#Xmu&q*AbGIJwk4EyU+h|)Cn!NJ@dSfI)Col2(@L;DN%?r;%ep^Uldo=!}dJD6$ zdoPoWtC_zDY?HfNyv)@w?S8=p_qx+(ke@bR&)n6i$_8w|32dbd42QmTy7Shw9D#_7 zITOL@2w|=dE$^It;CYBg9r_<5$B1(|`%LF;@waBm(!w#ZAbz{&J!$9iAFRB09+^}( z_7$+@S|`F+#=mztfmDps!C}RdNdHsRriS^G+4xa0R=PyLSRl-W^-{v@ZmA;OF4n># z{E)7Cg>fd`0zem>dQxxXJMx^#V~9E?L3zu4G%La#F#u;2$;eL4@N&!A?P$qWat(md zu(Lb+i=-`F{<$=5RVYl@B(3N}en}R-PP;%ZQ~97Zqo?Ou*shE?o>Su|O5?2M3+0z% ztMST=o%b7cG98ufme)(L)M4*ldUV65zG6C4FmkDQ)UIKgbzJxu5M6gEpUF4|Hd6F* zSHlp0sBWB^#{Rb5x6d>BeDBgRU}w}Vwc)Sa^rS!k#n(&Q+G+1aaXWGBGo_~;K71%y ziwWvV%}D;%B?K;xbEr`rh&6wke&%WEz}>>f8~sY8G%rSZbzF3G9u^)0IMNQApBE1+ zzm3@$ew%8F_nJKKifgz5b}3qhve5{QHi~~qI|lS{e(NRZZkkN^*neQU3Cs+ickgo^ zXoY&THU$&yM*1(l-RR!8Ix3rLII8pFItFSkZ4vy!>Azt_uevb5PTMx}yiTmPe1|<( z%ULpW@Vyj!X8&qTZ(naK4H3S5^TEpvI$Eb~hV*T1qjZgql)@@A<_yuY=Xt|>DO*NU zAvx>4hD+9+i6AQ%{r7ie)pfBaf`?`20vg)XoUJS$mb)(=1HvQUYTtW(g6<^;;?T?N6BB(oxR}dv&TS>uy>)3Sgthuz651{-j$f?6}!@`g*nG4$-o6Q zCiORq^)Z^(9Je3&h>K&u12>hO9^ zpY^vTubd{!Z)`67M}h~!+j3jL3^$tZa#N3pP$9*o2kN4k2fv7&*-~00Rpw5fS?s~O zI`e9gH%2XIm76a0YS)v261=Z4HqVNn?l`j{_cM`CmYP3jTy8uD{CO|R zjJ+&SffHYljhnW8I;8z+&I4=^*r+}|$1Gmb?xOfvb^ppM58Bns355bj;GAP%e`)Ex z)Lyttr~mWqss2x+>u=ksFqq%=Sq;5?c-}Q4ZPf`+^dg~vwRnl)^zf&rPt>%JXbiYA zP3mKGInAdjVYwXIe++bLpXg*RPiQbzL%Df%so_xBd2q z&6EDCY}Cydu2on>Pmckf*@+_Kx^0Q2-&QK3RkC4J&pZaV-{PxX+GBT4`H{n^!#1i) zdpI4%JAV<1x2>%uFPOBiaD;r~pcsr}dE|GQgzT3j%>)iIH}_v3AmK-L2|(G!rTz+eQ&_lH7^&S&Cv-lHhF)xj8aw+cjz)Kd;}t{<$W@tmvD)$b^J@vpUI`|8)3cdFFM|DB`weo)#K`8 zt#&(yj$BviblHLJ3cr<|xrm?OC7P=B@RQ*jOR>Q-!wn0eGs*5QlAjtWi~-D*0`I>n zhvw=u+7=wp4)*kuo@$+1 zBNsAd>ied;O>+_eP?Hdev7=(iLlTGsD}wVTDu@Wh9!hU=MNX<_m21Xk4#~*KS(;vJ z5CYc`EMF#&ELXbSn{b9LuBGGEHEpFQD{7)SbkM58{3_gm=+2(G!-6t~OW(x2%bNj! zg7(E-GV3XL^15B<7K(xY=?ID8Gdx^+sJb`c5-5G@ltG2Mm(F|Wsrp#Xr1U?$j70&U ziP@z6Rg$9EaSuDd@PR_!1D*5lwRzbIA?L{^&b4Iihu)F5))WWOx^l@VYgCWsY>3#% zSjN(IaCK3fCO|)>1MzU}51F{Rv3J?*j#e^VRBuwox|~4{?n-jdn;eS}Mg8q-oXX_p znS4y~W+J(I%j68VIvLqir5+Z9Uk~X0)D7uuyC??f6^yaJ*V)&4o8nzKMm3SAMgO$a zdy)R={(#}Tb3vbHnlUPk5xW*~1?UuQ;V!waCdrG(CRfKQ!d%@K^eX3~#YyLU_T*V3 zSBb)E3q}3w!hDvhJWo1a@}AR|VVaHA*!seJGamN~2g8-^c*&2HGx}XrU>5gYZU=Ro zK=!pLFyE_r3dM`BNG3GaSTeaSv*?^5hl!yib3A>TqF~NW{Pil3TATKpjcoleC2h4h zsn3sLVTJMEpg2h+Jxp?|V)^5Z_w^XX-&w=ENUQ=@+bxRFJjX1IH`2y>iEh1E5&QHp z)jQnDJmZG@$V*lEAR7slo(>1Whog|u73ybtaf0XKvd5h`xh)`ia~XUAa+yQ=9d7_E z?7PYB`oaP^2h^DoDBCLnx8&N9a#~!PT~V!duQ^lCsc#aWIxK_DaJS#gh?cQlZLZ^6 z2R)hWS2BDh=_J{9XFndu6*Fqk#JORY-+YyT9_hg) zL$`b`za6#LF0Yki_V~uw4B$cB{F!5z4tNF zrIV^1-nmrAj*&xGruN`lCf)#PPQl+NI?~ca_fR4yN#s(LyX`FbB1J%C;$_5h~ZaKqZQOxKPIo z`;|bwtB5|)l?R1B6YF0mFK(*d?+Pc^y~W%y$7oFZka*2N36u!N7pV{mQ&PjdWj7l$ z;`)>&X7rro%T1VD$n8jd)vp}>l(B;a@`vsj#wme85WIdCY8%XYSQgjo%F%H9gx6L@ z^;rOszn%?k7Edb#S_4%FnE{3xV0^yS6gJI-h2_x@JW7)O^qR6SXcn43c0sOwGtfe!Z`YGm% z)DFR{z{BxlKvBvUadDbKZvfk2HhCGgYj#Xi#BF|w008dng@0Qnl%VtHoN1Zw;DSO` zQMLjw;w7h+5+~QSbI+%>Y{-+X3@vjk`BoZ;2c})T1K}c{Zm9|A3mM(=3)aYNgUj5s zZGNSCVkH1&TmR%jps)^Lb3D%T;4d?~p6CeOnc0AphJkUioM`N|5wFB`hEW`sw?ZqKvrtYF_3r{ z%`mSP-KeQ#F5k>9RB7)}-Wwo?fBZ$Q|E#>U-oT<(aG0UvWY8G2X8gfKaWP#Xn8&X$ zH@ZUf!O<7XkwM-NCd!)BM@r4RNeY2mukh{pXKuy27;iOPUD3X}i~M%>Jsg?))LA(b z;Z+gF$zUy}j7eO2Bc?;lxdkXtpANCpoA!OVfsqYHZvrs?7&-Q(5_Sh=k(xprj*_%0 zPLHY75CXNVqZB*ayy!~DnIk>bL?Sh@z&9|I2!-LEo zX;U5LFLa@WIZAuizbg@D_Ml`^S0(O)zc55k{La&$%A|tI1pTm*_V(9IQG;?9=L^~; z@z+9mYDofa4a9p`LKrmdxfFW*I(Wn%%y10UWebl@(~%nZeoeT>d39RPZXoHkW6g4c zY35zpaTkl~hqjFC9(iJ^<#nCSkg6kaN=^$$f9v%pGoLBDj!Ywv;z$$y_-3I%{R7ny z7mi32U6FdGe@`r(>Uyp2R8K!oL~hxUs$<`{IcYOc<_xvBpJfOtA|Ht0*C@7470_k9+p06sO{BXNtELTX9Fjd-q3Ides>4turAJ}#NsXgQ4}&jTGAKceK7_`#UK>-Ptf zY+2^s#iaN*^0v}o+t3|$r`CJDu}@`AB`SE^PP*~j8{4w^FUZ?u{%xZFzJ>ooPlmrO zLxB3S{-2rLK;)Sn^4sO0C=jpfI>>K<9O)yu_TB*S7sDU^?FZMNezrseC=5-&WsBhE z(y&piy5adE%{?d8Jbh@2QxYt(J7-;5-f0G%QDJ@nDl%X_{?Lw`{dxqcBFLl^gH`}Q zG_>EB<`6VQzK=2FPoK@4)#S6vd%IIQT+o4_+s8oQ7Jxo+Tm9b_>Q7G_U7=;vvQ;Fn zRE$CZim8@$!^@SYhlSE1HBKWomS&fd%L!;lU2(z~BV?=QWiu^ypWVzpE1}9H>)(if z|ILY=erFQycka^@jwkIWh?ZXn{&3PD+|7KxG*6$t=DcNfk$>vyOx3QiA&bgO$c|X4 z6u&}7UvHn9h)ZP%-9Dat?V_K<;I&WTL^C)_4RoYzuT>qR&hL2U@32>K^~%6W1!tVO zaEKgrhd&^`_=J3;fOG_H^EXq_BLO0WZ{x|jRk7hBQm!n=02#)zdOg*P0nKLuDgk$X zNcjt>%@^@3wVw0H| z>)-<*Q1~A0$I^Az^QSpf443@%XywswjeW+(0@KQwt9g$FQ~eWY_(RKENnR0+NZULA zhW$vtmCql&mB)r31j=hl9xDjid^R#7o*L(SBO6A-3Dz3?%o%k)*6V|Zx5SlGa0l%v zmP3EzarSPVVpaX5BJ~bm4CDi_g+yeWPLftbk}$H!G5}?|+ta0*`wXKMi8wh0m^>O& zGP)I;EL#=T#Lq7Dbhde8$F)#yDfX?|eRJf5CO0N^;5)XIr4|nL(K?jWlq#ww2%F7Q z+mEIgFa{xP21|;yG?$UN34?)%aAEthk3K0B&l$O0p*7FOR#xDPjd#o}2Ql!^-0exN z<5_6f@A;a%nXyS6uO>8=eqiEkxN;+6ys8TEe6?aBVoGc--fZ@6sQ4D(+qEu7N!&^dp|GZ=P$?gzG0{S}f^ z^ansPzZ2Jjyj@>A6*wSFZ{+?19ePPWzk-E+iBC1`HIsIt+3Yq#u`eS#p}u^zV#Q@w>Dag8 zaoGVbZt5%w6A6#qJ+CiTNtf%$ub4H6fTARL2@C74@z$QgP(oXgc>IgP)v_~{DOD5y z4dCNXLyr6oM&<9d#s$P$rQ+4aogiPQDSB>)ls8VZgqasjx#uDBfxOM_FEHkYlh`|- zl_A9Kcv4B=l*OE(q|*0QV@^X3hMa$ci#UK9G|hI6^~VqvMn&%tAR zH&=tggopN1baPgB z&G2w)+Nh{w_E&sMm{R>8AJRkH{j5yX4+2J8ze0sC7cmUtxXn!_QZ@lwTumBLA5T5AOe# z>Xt}8v%A7ZZW?(_bx}q^7%W0NPJ3}@Lk?iSRQdc>`J?)G!O3lm z_qml58;aFo?LNJyIGP)Ki0N3!Oj0>gLt-PL44$*JizG4d} zbc)2ipR^6`J{R!JaOX0wEgVm=NmiqkFUd*a7>LkTAuR`SUvyh&g#gMpiQP-xlpKy7;tWH4?Z&X_4m~*-DUIGpTqHSJ7BeksMP-dL5zLzf^>FGVXgr zsZ{zerJ=vkpaxnL`V+(c)-ZiysNL!hy8L91dV&!J(7d(DrHy&oMpLg#n}4H0{Qf7`@&gFOE~>41Q#U*?x_0K>B*mTS%7Kxw!~ITrlXQz~=meo(`!=%VAOF zg2Nrs4R3(92C5ZXU)s-mWz2cJT1|7cNuuq*7{G=mYcF0Z-04xTL7@Q9kV6BI6aau6 zYJ#Nj2Baj;Wa%>%knw2Nf6nv`P>QdrXdC$aMoBYFiBCyeHYi^S{H>B-D%LZ6QYgR6 zP%RK`z{Q2nE45*(w}7w z6hopiC+a@~ArHEwoR@%*h{MRuo-l@A{*9VgWxE~c8C%T=J=hxmX2bxhU4Ovof9#@7 t97glngZHlbMnnWTv#_vaB}?q|bB)xJ=PC>#An34@w#Lr`0A9!A{|BjZk*fdz literal 0 HcmV?d00001 diff --git a/leetcode/201-300/0221.Maximal-Square/max2grid.jpeg b/leetcode/201-300/0221.Maximal-Square/max2grid.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e276e2bffa17c5cc40540fc91be2416662239e1e GIT binary patch literal 3763 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 literal 0 HcmV?d00001 From f23e7a3c0be45e15f7d23e65b114c7a2b5fba681 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Sep 2023 10:55:37 +0800 Subject: [PATCH 0388/1057] Add solution and test-cases for problem 1359 --- .../README.md | 34 ++++++++++++------- .../Solution.go | 24 +++++++++++-- .../Solution_test.go | 17 ++++++---- 3 files changed, 53 insertions(+), 22 deletions(-) diff --git a/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/README.md b/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/README.md index ea09f489b..e44abc53c 100644 --- a/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/README.md +++ b/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/README.md @@ -1,28 +1,36 @@ # [1359.Count All Valid Pickup and Delivery Options][title] -> [!WARNING|style:flat] -> 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 `n` orders, each order consist in pickup and delivery services. + +Count all valid pickup/delivery possible sequences such that delivery(i) is always after of pickup(i). + +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 +Output: 1 +Explanation: Unique order (P1, D1), Delivery 1 always is after of Pickup 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count All Valid Pickup and Delivery Options -```go ``` +Input: n = 2 +Output: 6 +Explanation: All possible orders: +(P1,P2,D1,D2), (P1,P2,D2,D1), (P1,D1,P2,D2), (P2,P1,D1,D2), (P2,P1,D2,D1) and (P2,D2,P1,D1). +This is an invalid order (P1,D2,P2,D1) because Pickup 2 is after of Delivery 2. +``` + +**Example 3:** +``` +Input: n = 3 +Output: 90 +``` ## 结语 diff --git a/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution.go b/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution.go index d115ccf5e..a5004e16d 100644 --- a/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution.go +++ b/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +const mod1359 = 1000000007 + +func Solution(n int) int { + // p1, d1, p2, d2 + // 1 -> p1d1 = 1 + // 2 -> + // p2d2p1d1, p2p1d2d1, p2p1d1d2 + // p1p2d2d1, p1p2d1d2, p1d1p2d2 = 6 + // 3 - > p2 d2 p1 d1 + // 5 + 4 + 3+2+1 = 15 * 6 = 90 + sum := make([]int, 2*n) + for i := 1; i <= 2*n-1; i++ { + sum[i] = sum[i-1] + i + } + + cache := make([]int, n+1) + cache[1] = 1 + for i := 2; i <= n; i++ { + pos := 2*i - 1 + cache[i] = (sum[pos] * cache[i-1]) % mod1359 + } + return cache[n] } diff --git a/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution_test.go b/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution_test.go index 14ff50eb4..765c19d1f 100644 --- a/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/Solution_test.go +++ b/leetcode/1301-1400/1359.Count-All-Valid-Pickup-and-Delivery-Options/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", 1, 1}, + {"TestCase2", 2, 6}, + {"TestCase3", 3, 90}, + {"TestCase4", 128, 761756041}, + {"TestCase5", 345, 432656738}, + {"TestCase6", 500, 764678010}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 94c2988d9934ae1635324a525f4b769bf6b4b22d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Sep 2023 14:47:39 +0800 Subject: [PATCH 0389/1057] Add solution and test-cases for problem 229 --- .../0229.Majority-Element-II/README.md | 26 +++++++++---------- .../0229.Majority-Element-II/Solution.go | 24 +++++++++++++++-- .../0229.Majority-Element-II/Solution_test.go | 14 +++++----- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/leetcode/201-300/0229.Majority-Element-II/README.md b/leetcode/201-300/0229.Majority-Element-II/README.md index 5a5905c46..0186ae4cc 100644 --- a/leetcode/201-300/0229.Majority-Element-II/README.md +++ b/leetcode/201-300/0229.Majority-Element-II/README.md @@ -1,28 +1,28 @@ # [229.Majority 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 an integer array of size n, find all elements that appear more than `⌊ n/3 ⌋` times. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,2,3] +Output: [3] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Majority Element II -```go +``` +Input: nums = [1] +Output: [1] ``` +**Example 3:** + +``` +Input: nums = [1,2] +Output: [1,2] +``` ## 结语 diff --git a/leetcode/201-300/0229.Majority-Element-II/Solution.go b/leetcode/201-300/0229.Majority-Element-II/Solution.go index d115ccf5e..211aa76b2 100644 --- a/leetcode/201-300/0229.Majority-Element-II/Solution.go +++ b/leetcode/201-300/0229.Majority-Element-II/Solution.go @@ -1,5 +1,25 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int) []int { + ans := make([]int, 0) + sort.Ints(nums) + need := len(nums) / 3 + count := 0 + // 1, 1, 2 + for idx := 0; idx < len(nums); idx++ { + if count == 0 || nums[idx] == nums[idx-1] { + count++ + continue + } + if count > need { + ans = append(ans, nums[idx-1]) + } + count = 1 + } + if count > need { + ans = append(ans, nums[len(nums)-1]) + } + return ans } diff --git a/leetcode/201-300/0229.Majority-Element-II/Solution_test.go b/leetcode/201-300/0229.Majority-Element-II/Solution_test.go index 14ff50eb4..aef9d5672 100644 --- a/leetcode/201-300/0229.Majority-Element-II/Solution_test.go +++ b/leetcode/201-300/0229.Majority-Element-II/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 2, 3}, []int{3}}, + {"TestCase2", []int{1, 2}, []int{1, 2}}, + {"TestCase3", []int{1}, []int{1}}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 73ded177974a7b0e8b1e86fe697f81f51c2826fb Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 10 Sep 2023 15:42:08 +0800 Subject: [PATCH 0390/1057] Add solution and test-cases for problem 436 --- .../0436.Find-Right-Interval/README.md | 36 +++++++---- .../0436.Find-Right-Interval/Solution.go | 60 ++++++++++++++++++- .../0436.Find-Right-Interval/Solution_test.go | 15 ++--- 3 files changed, 89 insertions(+), 22 deletions(-) diff --git a/leetcode/401-500/0436.Find-Right-Interval/README.md b/leetcode/401-500/0436.Find-Right-Interval/README.md index a42d5d2ae..e5f38f207 100644 --- a/leetcode/401-500/0436.Find-Right-Interval/README.md +++ b/leetcode/401-500/0436.Find-Right-Interval/README.md @@ -1,28 +1,38 @@ # [436.Find Right Interval][title] -> [!WARNING|style:flat] -> 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 `intervals`, where `intervals[i] = [starti, endi]` and each `starti` is **unique**. + +The **right interval** for an interval `i` is an interval `j` such that `startj >= endi` and `startj` is **minimized**. Note that `i` may equal `j`. + +Return an array of **right interval** indices for each interval `i`. If no **right interval** exists for interval `i`, then put `-1` at index `i`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: intervals = [[1,2]] +Output: [-1] +Explanation: There is only one interval in the collection, so it outputs -1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Right Interval -```go ``` +Input: intervals = [[3,4],[2,3],[1,2]] +Output: [-1,0,1] +Explanation: There is no right interval for [3,4]. +The right interval for [2,3] is [3,4] since start0 = 3 is the smallest start that is >= end1 = 3. +The right interval for [1,2] is [2,3] since start1 = 2 is the smallest start that is >= end2 = 2. +``` + +**Example 3:** +``` +Input: intervals = [[1,4],[2,3],[3,4]] +Output: [-1,2,-1] +Explanation: There is no right interval for [1,4] and [3,4]. +The right interval for [2,3] is [3,4] since start2 = 3 is the smallest start that is >= end1 = 3. +``` ## 结语 diff --git a/leetcode/401-500/0436.Find-Right-Interval/Solution.go b/leetcode/401-500/0436.Find-Right-Interval/Solution.go index d115ccf5e..9596e7e5c 100644 --- a/leetcode/401-500/0436.Find-Right-Interval/Solution.go +++ b/leetcode/401-500/0436.Find-Right-Interval/Solution.go @@ -1,5 +1,61 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "sort" +) + +func Solution(intervals [][]int) []int { + l := len(intervals) + ans := make([]int, 0) + inCopy := make([][]int, l) + ai := make(map[string]int) + bi := make(map[string]int) + + for i := 0; i < l; i++ { + inCopy[i] = make([]int, 2) + copy(inCopy[i], intervals[i]) + k := fmt.Sprintf("%d-%d", intervals[i][0], intervals[i][1]) + ai[k] = i + } + + sort.Slice(inCopy, func(i, j int) bool { + if inCopy[i][0] == inCopy[j][0] { + return inCopy[i][1] < inCopy[j][1] + } + return inCopy[i][0] < inCopy[j][0] + }) + for i := 0; i < l; i++ { + k := fmt.Sprintf("%d-%d", inCopy[i][0], inCopy[i][1]) + bi[k] = i + } + + var bsearch func(int, int, int) int + bsearch = func(left, right, target int) int { + ll, r := left, right + for ll < r { + mid := ll + (r-ll)/2 + if inCopy[mid][0] < target { + ll = mid + 1 + continue + } + r = mid + } + if ll == right || r == left { + return -1 + } + k := fmt.Sprintf("%d-%d", inCopy[r][0], inCopy[r][1]) + return ai[k] + } + + for idx, in := range intervals { + k := fmt.Sprintf("%d-%d", in[0], in[1]) + if in[0] == in[1] { + ans = append(ans, idx) + continue + } + left := bi[k] + ans = append(ans, bsearch(left, l, in[1])) + } + return ans } diff --git a/leetcode/401-500/0436.Find-Right-Interval/Solution_test.go b/leetcode/401-500/0436.Find-Right-Interval/Solution_test.go index 14ff50eb4..4f622f219 100644 --- a/leetcode/401-500/0436.Find-Right-Interval/Solution_test.go +++ b/leetcode/401-500/0436.Find-Right-Interval/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{1, 2}}, []int{-1}}, + {"TestCase2", [][]int{{3, 4}, {2, 3}, {1, 2}}, []int{-1, 0, 1}}, + {"TestCase3", [][]int{{1, 4}, {2, 3}, {3, 4}}, []int{-1, 2, -1}}, + {"TestCase4", [][]int{{1, 1}, {3, 4}}, []int{0, -1}}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 345fe63ba203df828e0b3e18ca0e37d8eb26313d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 11 Sep 2023 21:54:08 +0800 Subject: [PATCH 0391/1057] Add solution and test-cases for problem 1282 --- .../README.md | 32 +++++++++++-------- .../Solution.go | 17 ++++++++-- .../Solution_test.go | 21 ++++++++---- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/README.md b/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/README.md index bcbd86a38..1b70cde3e 100644 --- a/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/README.md +++ b/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/README.md @@ -1,28 +1,32 @@ # [1282.Group the People Given the Group Size They Belong To][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There are `n` people that are split into some unknown number of groups. Each person is labeled with a **unique ID** from `0` to `n - 1`. + +You are given an integer array `groupSizes`, where `groupSizes[i]` is the size of the group that person `i` is in. For example, if `groupSizes[1] = 3`, then person `1` must be in a group of size `3`. + +Return a list of groups such that each person `i` is in a group of size `groupSizes[i]`. + +Each person should appear in **exactly one group**, and every person must be in a group. If there are multiple answers, **return any of them**. It is **guaranteed** that there will be **at least one** valid solution for the given input. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: groupSizes = [3,3,3,3,3,1,3] +Output: [[5],[0,1,2],[3,4,6]] +Explanation: +The first group is [5]. The size is 1, and groupSizes[5] = 1. +The second group is [0,1,2]. The size is 3, and groupSizes[0] = groupSizes[1] = groupSizes[2] = 3. +The third group is [3,4,6]. The size is 3, and groupSizes[3] = groupSizes[4] = groupSizes[6] = 3. +Other possible solutions are [[2,1,6],[5],[0,4,3]] and [[5],[0,6,2],[4,3,1]]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Group the People Given the Group Size They Belong To -```go ``` - +Input: groupSizes = [2,1,3,3,3,2] +Output: [[1],[0,5],[2,3,4]] +``` ## 结语 diff --git a/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution.go b/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution.go index d115ccf5e..5b943bdf5 100644 --- a/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution.go +++ b/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(groupSizes []int) [][]int { + groupBy := make(map[int][]int) + for i, gs := range groupSizes { + if _, ok := groupBy[gs]; !ok { + groupBy[gs] = make([]int, 0) + } + groupBy[gs] = append(groupBy[gs], i) + } + ans := make([][]int, 0) + for gs, people := range groupBy { + for i := gs; i <= len(people); i += gs { + ans = append(ans, people[i-gs:i]) + } + } + return ans } diff --git a/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution_test.go b/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution_test.go index 14ff50eb4..cb1d33c9c 100644 --- a/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution_test.go +++ b/leetcode/1201-1300/1282.Group-the-People-Given-the-Group-Size-They-Belong-To/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,24 @@ 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, 3, 3, 3, 3, 1, 3}, [][]int{ + {5}, {0, 1, 2}, {3, 4, 6}, + }}, + {"TestCase2", []int{2, 1, 3, 3, 3, 2}, [][]int{ + {1}, {0, 5}, {2, 3, 4}, + }}, } // 开始测试 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 { + return len(got[i]) < len(got[j]) + }) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 9a39542415e36b583c8e5b9f9f083daa4cfd59d5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 13 Sep 2023 23:21:24 +0800 Subject: [PATCH 0392/1057] Add solution and test-cases for problem 2149 --- .../README.md | 36 +++++++++++-------- .../Solution.go | 22 ++++++++++-- .../Solution_test.go | 13 ++++--- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md index e1275e674..0accf8be6 100755 --- a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md +++ b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/README.md @@ -1,28 +1,36 @@ # [2149.Rearrange Array Elements by Sign][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array nums of **even** length consisting of an **equal** number of positive and negative integers. + +You should **rearrange** the elements of nums such that the modified array follows the given conditions: + +1. Every **consecutive pair** of integers have **opposite signs**. +2. For all integers with the same sign, the **order** in which they were present in `nums` is **preserved**. +3. The rearranged array begins with a positive integer. + +Return the modified array after rearranging the elements to satisfy the aforementioned conditions. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,1,-2,-5,2,-4] +Output: [3,-2,1,-5,2,-4] +Explanation: +The positive integers in nums are [3,1,2]. The negative integers are [-2,-5,-4]. +The only possible way to rearrange them such that they satisfy all conditions is [3,-2,1,-5,2,-4]. +Other ways such as [1,-2,2,-5,3,-4], [3,1,2,-2,-5,-4], [-2,3,-5,1,-4,2] are incorrect because they do not satisfy one or more conditions. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Rearrange Array Elements by Sign -```go ``` - +Input: nums = [-1,1] +Output: [1,-1] +Explanation: +1 is the only positive integer and -1 the only negative integer in nums. +So nums is rearranged to [1,-1]. +``` ## 结语 diff --git a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go index d115ccf5e..b56b4e73a 100644 --- a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go +++ b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution.go @@ -1,5 +1,23 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) []int { + l := len(nums) + neg := make([]int, l/2) + pos := make([]int, l/2) + ans := make([]int, l) + ai, bi := 0, 0 + for _, n := range nums { + if n < 0 { + neg[ai] = n + ai++ + continue + } + pos[bi] = n + bi++ + } + for i := 0; i < l; i += 2 { + ans[i] = pos[i/2] + ans[i+1] = neg[i/2] + } + return ans } diff --git a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go index 14ff50eb4..4941121bf 100644 --- a/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go +++ b/leetcode/2101-2200/2149.Rearrange-Array-Elements-by-Sign/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{3, 1, -2, -5, 2, -4}, []int{3, -2, 1, -5, 2, -4}}, + {"TestCase2", []int{-1, 1}, []int{1, -1}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 66144efe197d5e6dd5c78ee03b07ff5d8cbea34b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Sep 2023 12:43:27 +0800 Subject: [PATCH 0393/1057] Add solution and test-cases for problem 1631 --- .../1631.Path-With-Minimum-Effort/README.md | 40 +++++++++----- .../1631.Path-With-Minimum-Effort/Solution.go | 52 +++++++++++++++++- .../Solution_test.go | 14 ++--- .../1631.Path-With-Minimum-Effort/ex1.png | Bin 0 -> 10284 bytes .../1631.Path-With-Minimum-Effort/ex2.png | Bin 0 -> 10886 bytes .../1631.Path-With-Minimum-Effort/ex3.png | Bin 0 -> 19600 bytes 6 files changed, 84 insertions(+), 22 deletions(-) create mode 100644 leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex1.png create mode 100644 leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex2.png create mode 100644 leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex3.png diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md index 23e649586..8fed394f4 100755 --- a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md +++ b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/README.md @@ -1,28 +1,42 @@ # [1631.Path With Minimum Effort][title] -> [!WARNING|style:flat] -> 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 a hiker preparing for an upcoming hike. You are given `heights`, a 2D array of size `rows x columns`, where `heights[row][col]` represents the height of cell (`row, col`). You are situated in the top-left cell, (`0, 0`), and you hope to travel to the bottom-right cell, (`rows-1, columns-1`) (i.e., **0-indexed**). You can move **up**, **down**, **left**, or **right**, and you wish to find a route that requires the minimum **effort**. + +A route's **effort** is the **maximum absolute difference** in heights between two consecutive cells of the route. + +Return the minimum **effort** required to travel from the top-left cell to the bottom-right cell. -**Example 1:** +**Example 1:** + +![example1](./ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: heights = [[1,2,2],[3,8,2],[5,3,5]] +Output: 2 +Explanation: The route of [1,3,5,3,5] has a maximum absolute difference of 2 in consecutive cells. +This is better than the route of [1,2,2,2,5], where the maximum absolute difference is 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./ex2.png) -### 思路1 -> ... -Path With Minimum Effort -```go +``` +Input: heights = [[1,2,3],[3,8,4],[5,3,5]] +Output: 1 +Explanation: The route of [1,2,3,4,5] has a maximum absolute difference of 1 in consecutive cells, which is better than route [1,3,5,3,5]. ``` +**Example 3:** + +![example3](./ex3.png) + +``` +Input: heights = [[1,2,1,1,1],[1,2,1,2,1],[1,2,1,2,1],[1,2,1,2,1],[1,1,1,2,1]] +Output: 0 +Explanation: This route does not require any effort. +``` ## 结语 diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go index d115ccf5e..e23fb6240 100644 --- a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go +++ b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution.go @@ -1,5 +1,53 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(heights [][]int) int { + // binary search + bfs + var ( + left = 0 + right = 1000000 + bfs func(int, int, int) bool + dirs = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}} + ) + + rows, cols := len(heights), len(heights[0]) + bfs = func(x, y, limit int) bool { + visited := [100][100]bool{} + queue := [][]int{{x, y}} + visited[x][y] = true + for len(queue) > 0 { + next := make([][]int, 0) + for _, item := range queue { + if item[0] == rows-1 && item[1] == cols-1 { + return true + } + for _, dir := range dirs { + nx, ny := item[0]+dir[0], item[1]+dir[1] + if nx < 0 || nx >= rows || ny < 0 || ny >= cols || visited[nx][ny] { + continue + } + diff := heights[nx][ny] - heights[item[0]][item[1]] + if diff < 0 { + diff = ^diff + 1 + } + if diff > limit { + continue + } + next = append(next, []int{nx, ny}) + visited[nx][ny] = true + } + } + queue = next + } + return false + } + for left < right { + m := left + (right-left)/2 + if bfs(0, 0, m) { + right = m + continue + } + left = m + 1 + } + + return left } diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go index 14ff50eb4..4e41dbdd9 100644 --- a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/Solution_test.go +++ b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/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}, {3, 8, 2}, {5, 3, 5}}, 2}, + {"TestCase2", [][]int{{1, 2, 3}, {3, 8, 4}, {5, 3, 5}}, 1}, + {"TestCase3", [][]int{{1, 2, 1, 1, 1}, {1, 2, 1, 2, 1}, {1, 2, 1, 2, 1}, {1, 2, 1, 2, 1}, {1, 1, 1, 2, 1}}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex1.png b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..eb36b17f2b89150cb36274ebc8784568ae426262 GIT binary patch literal 10284 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 literal 0 HcmV?d00001 diff --git a/leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex3.png b/leetcode/1601-1700/1631.Path-With-Minimum-Effort/ex3.png new file mode 100644 index 0000000000000000000000000000000000000000..883262d91c74be7a5e7209c095d101a718565df5 GIT binary patch literal 19600 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 CdA-H} literal 0 HcmV?d00001 From 63ffadb661b07b0caa418d1624db9a299c69fbfc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Sep 2023 16:57:28 +0800 Subject: [PATCH 0394/1057] Add solution and test-cases for problem 2131 --- .../README.md | 38 +++++++---- .../Solution.go | 64 ++++++++++++++++++- .../Solution_test.go | 15 +++-- 3 files changed, 95 insertions(+), 22 deletions(-) diff --git a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md index 5c8b6f31d..248d072a3 100755 --- a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md +++ b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/README.md @@ -1,28 +1,40 @@ # [2131.Longest Palindrome by Concatenating Two Letter 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 +You are given an array of strings `words`. Each element of words consists of **two** lowercase English letters. + +Create the **longest possible palindrome** by selecting some elements from `words` and concatenating them in **any order**. Each element can be selected **at most once**. + +Return the **length** of the longest palindrome that you can create. If it is impossible to create any palindrome, return 0. + +A **palindrome** is a string that reads the same forward and backward. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["lc","cl","gg"] +Output: 6 +Explanation: One longest palindrome is "lc" + "gg" + "cl" = "lcggcl", of length 6. +Note that "clgglc" is another longest palindrome that can be created. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Palindrome by Concatenating Two Letter Words -```go ``` +Input: words = ["ab","ty","yt","lc","cl","ab"] +Output: 8 +Explanation: One longest palindrome is "ty" + "lc" + "cl" + "yt" = "tylcclyt", of length 8. +Note that "lcyttycl" is another longest palindrome that can be created. +``` + +**Example 3:** +``` +Input: words = ["cc","ll","xx"] +Output: 2 +Explanation: One longest palindrome is "cc", of length 2. +Note that "ll" is another longest palindrome that can be created, and so is "xx". +``` ## 结语 diff --git a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go index d115ccf5e..3ffcd63ea 100644 --- a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go +++ b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution.go @@ -1,5 +1,65 @@ package Solution -func Solution(x bool) bool { - return x +func revWord(s string) string { + bs := []byte(s) + for s, e := 0, len(s)-1; s < e; s, e = s+1, e-1 { + bs[s], bs[e] = bs[e], bs[s] + } + return string(bs) +} + +func isAllByteSame(s string) bool { + cmp := s[0] + for i := 1; i < len(s); i++ { + if s[i] != cmp { + return false + } + } + return true +} + +func Solution(words []string) int { + diffStore := make(map[string]int) + sameStore := make(map[string]int) + + for _, word := range words { + if isAllByteSame(word) { + sameStore[word]++ + continue + } + diffStore[word]++ + } + + samMax, diffMax := 0, 0 + evenSum := 0 + for k, v := range sameStore { + if v&1 == 0 { + evenSum += v * len(k) + continue + } + evenSum += (v - 1) * len(k) + if samMax == 0 || len(k) > samMax { + samMax = len(k) + } + } + samMax += evenSum + + for _, word := range words { + if _, ok := sameStore[word]; ok { + continue + } + rev := revWord(word) + c1, ok1 := diffStore[word] + c2, ok2 := diffStore[rev] + if ok1 && ok2 { + s := c1 + if c2 < s { + s = c2 + } + diffMax += s * len(word) * 2 + diffStore[word] -= s + diffStore[rev] -= s + } + } + return diffMax + samMax } diff --git a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go index 14ff50eb4..eb31d287c 100644 --- a/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/Solution_test.go +++ b/leetcode/2101-2200/2131.Longest-Palindrome-by-Concatenating-Two-Letter-Words/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{"lc", "cl", "gg"}, 6}, + {"TestCase2", []string{"ab", "ty", "yt", "lc", "cl", "ab"}, 8}, + {"TestCase3", []string{"cc", "ll", "xx"}, 2}, + {"TestCase4", []string{"dd", "aa", "bb", "dd", "aa", "dd", "bb", "dd", "aa", "cc", "bb", "cc", "dd", "cc"}, 22}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 09c0249e59b68acdab732930480bb84a007966a4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 16 Sep 2023 17:51:22 +0800 Subject: [PATCH 0395/1057] Add solution and test-cases for problem 363 --- .../README.md | 28 +++++++-------- .../Solution.go | 32 ++++++++++++++++-- .../Solution_test.go | 18 +++++----- .../sum-grid.jpeg | Bin 0 -> 7108 bytes 4 files changed, 53 insertions(+), 25 deletions(-) create mode 100644 leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/sum-grid.jpeg diff --git a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/README.md b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/README.md index 5b38e179c..cb96893d8 100644 --- a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/README.md +++ b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/README.md @@ -1,28 +1,26 @@ # [363.Max Sum of Rectangle No Larger Than K][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `m x n` matrix `matrix` and an integer `k`, return the max sum of a rectangle in the matrix such that its sum is no larger than `k`. + +It is **guaranteed** that there will be a rectangle with a sum no larger than `k`. + +**Example 1:** -**Example 1:** +![example1](./sum-grid.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: matrix = [[1,0,1],[0,-2,3]], k = 2 +Output: 2 +Explanation: Because the sum of the blue rectangle [[0, 1], [-2, 3]] is 2, and 2 is the max number no larger than k (k = 2). ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Max Sum of Rectangle No Larger Than K -```go ``` - +Input: matrix = [[2,2,-1]], k = 3 +Output: 3 +``` ## 结语 diff --git a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution.go b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution.go index d115ccf5e..eaa90d147 100644 --- a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution.go +++ b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(matrix [][]int, k int) int { + rows, cols := len(matrix), len(matrix[0]) + cache := make([][]int, rows+1) + for i := 0; i <= rows; i++ { + cache[i] = make([]int, cols+1) + } + for r := rows - 1; r >= 0; r-- { + for c := cols - 1; c >= 0; c-- { + cache[r][c] = matrix[r][c] + cache[r+1][c] + cache[r][c+1] - cache[r+1][c+1] + } + } + first := true + ans := 0 + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + for re := r; re < rows; re++ { + for rc := c; rc < cols; rc++ { + x := cache[r][c] - cache[re+1][c] - cache[r][rc+1] + cache[re+1][rc+1] + if x <= k { + if first || x > ans { + ans = x + first = false + } + } + } + + } + } + } + return ans } diff --git a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution_test.go b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution_test.go index 14ff50eb4..db6997e03 100644 --- a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution_test.go +++ b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/Solution_test.go @@ -10,18 +10,20 @@ 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, 0, 1}, {0, -2, 3}, + }, 2, 2}, + {"TestCase2", [][]int{{2, 2, -1}}, 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.k) 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() { } diff --git a/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/sum-grid.jpeg b/leetcode/301-400/0363.Max-Sum-of-Rectangle-No-Larger-Than-K/sum-grid.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4dca35cc9ebd5465fd4689c89dc7c323d79e5124 GIT binary patch literal 7108 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 literal 0 HcmV?d00001 From a64cb5966146ae119853bb0bd2efc72abfd3f023 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 17 Sep 2023 12:21:54 +0800 Subject: [PATCH 0396/1057] Add solution and test-cases for problem 847 --- .../README.md | 29 +++++++-------- .../Solution.go | 34 ++++++++++++++++-- .../Solution_test.go | 17 +++++---- .../shortest1-graph.jpeg | Bin 0 -> 9147 bytes .../shortest2-graph.jpeg | Bin 0 -> 13170 bytes 5 files changed, 57 insertions(+), 23 deletions(-) create mode 100644 leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/shortest1-graph.jpeg create mode 100644 leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/shortest2-graph.jpeg diff --git a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/README.md b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/README.md index 75adfbeea..a5d7811dd 100644 --- a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/README.md +++ b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/README.md @@ -1,28 +1,29 @@ # [847.Shortest Path Visiting 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 +You have an undirected, connected graph of `n` nodes labeled from `0` to `n - 1`. You are given an array `graph` where `graph[i]` is a list of all the nodes connected with node `i` by an edge. + +Return the length of the shortest path that visits every node. You may start and stop at any node, you may revisit nodes multiple times, and you may reuse edges. + +**Example 1:** -**Example 1:** +![example1](./shortest1-graph.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: graph = [[1,2,3],[0],[0],[0]] +Output: 4 +Explanation: One possible path is [1,0,2,0,3] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./shortest2-graph.jpeg) -### 思路1 -> ... -Shortest Path Visiting All Nodes -```go ``` - +Input: graph = [[1],[0,2,4],[1,3,4],[2],[1,2]] +Output: 4 +Explanation: One possible path is [0,1,4,2,3] +``` ## 结语 diff --git a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution.go b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution.go index d115ccf5e..518ec4efb 100644 --- a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution.go +++ b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution.go @@ -1,5 +1,35 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(graph [][]int) int { + queue := [][]int{} + size := len(graph) + + finalState := (1 << size) - 1 + visited := make(map[[2]int]struct{}) + for i := 0; i < size; i++ { + queue = append(queue, []int{i, 1 << i}) + visited[[2]int{i, 1 << i}] = struct{}{} + } + + ans := -1 + for len(queue) > 0 { + nq := make([][]int, 0) + ans++ + for _, item := range queue { + node := item[0] + state := item[1] + for _, next := range graph[node] { + nextState := state | (1 << next) + if nextState == finalState { + return ans + 1 + } + if _, ok := visited[[2]int{next, nextState}]; !ok { + nq = append(nq, []int{next, nextState}) + visited[[2]int{next, nextState}] = struct{}{} + } + } + } + queue = nq + } + return 0 } diff --git a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution_test.go b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution_test.go index 14ff50eb4..5eb033501 100644 --- a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/Solution_test.go +++ b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/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}, {0}, {0}, {0}, + }, 4}, + {"TestCase2", [][]int{ + {1}, {0, 2, 4}, {1, 3, 4}, {2}, {1, 2}, + }, 4}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/shortest1-graph.jpeg b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/shortest1-graph.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..913a832953f6f78455214a3eb1f4e44ff8450064 GIT binary patch literal 9147 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 E04KF+nE(I) literal 0 HcmV?d00001 diff --git a/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/shortest2-graph.jpeg b/leetcode/801-900/0847.Shortest-Path-Visiting-All-Nodes/shortest2-graph.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6632915c15046ae9ea4b5eb6c0302224f3d49024 GIT binary patch literal 13170 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 Date: Sun, 17 Sep 2023 23:14:47 +0800 Subject: [PATCH 0397/1057] Add solution and test-cases for problem 388 --- .../0388.Longest-Absolute-File-Path/README.md | 61 +++++++++--- .../Solution.go | 93 +++++++++++++++++- .../Solution_test.go | 18 ++-- .../0388.Longest-Absolute-File-Path/dir1.jpeg | Bin 0 -> 11616 bytes .../0388.Longest-Absolute-File-Path/dir2.jpeg | Bin 0 -> 24847 bytes .../0388.Longest-Absolute-File-Path/mdir.jpeg | Bin 0 -> 31041 bytes 6 files changed, 150 insertions(+), 22 deletions(-) create mode 100644 leetcode/301-400/0388.Longest-Absolute-File-Path/dir1.jpeg create mode 100644 leetcode/301-400/0388.Longest-Absolute-File-Path/dir2.jpeg create mode 100644 leetcode/301-400/0388.Longest-Absolute-File-Path/mdir.jpeg diff --git a/leetcode/301-400/0388.Longest-Absolute-File-Path/README.md b/leetcode/301-400/0388.Longest-Absolute-File-Path/README.md index d4203eda7..8a91b97a2 100644 --- a/leetcode/301-400/0388.Longest-Absolute-File-Path/README.md +++ b/leetcode/301-400/0388.Longest-Absolute-File-Path/README.md @@ -1,28 +1,63 @@ # [388.Longest Absolute File Path][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Suppose we have a file system that stores both files and directories. An example of one system is represented in the following picture: + +![1](./mdir.jpeg) + +Here, we have `dir` as the only directory in the root. `dir` contains two subdirectories, `subdir1` and `subdir2`. `subdir1` contains a file `file1.ext` and subdirectory `subsubdir1`. `subdir2` contains a subdirectory `subsubdir2`, which contains a file `file2.ext`. -**Example 1:** +In text form, it looks like this (with ⟶ representing the tab character): ``` -Input: a = "11", b = "1" -Output: "100" +dir +⟶ subdir1 +⟶ ⟶ file1.ext +⟶ ⟶ subsubdir1 +⟶ subdir2 +⟶ ⟶ subsubdir2 +⟶ ⟶ ⟶ file2.ext ``` -## 题意 -> ... +If we were to write this representation in code, it will look like this: `"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"`. Note that the `'\n'` and `'\t'` are the new-line and tab characters. + +Every file and directory has a unique **absolute path** in the file system, which is the order of directories that must be opened to reach the file/directory itself, all concatenated by `'/'s`. Using the above example, the **absolute path** to `file2.ext` is `"dir/subdir2/subsubdir2/file2.ext"`. Each directory name consists of letters, digits, and/or spaces. Each file name is of the form `name.extension`, where `name` and `extension` consist of letters, digits, and/or spaces. + +Given a string `input` representing the file system in the explained format, return the length of the **longest absolute path** to a **file** in the abstracted file system. If there is no file in the system, return `0`. -## 题解 +**Note** that the testcases are generated such that the file system is valid and no file or directory name has length 0. -### 思路1 -> ... -Longest Absolute File Path -```go + +**Example 1:** + +![example1](./dir1.jpeg) + +``` +Input: input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext" +Output: 20 +Explanation: We have only one file, and the absolute path is "dir/subdir2/file.ext" of length 20. ``` +**Example 2:** + +![example2](./dir2.jpeg) + +``` +Input: input = "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext" +Output: 32 +Explanation: We have two files: +"dir/subdir1/file1.ext" of length 21 +"dir/subdir2/subsubdir2/file2.ext" of length 32. +We return 32 since it is the longest absolute path to a file. +``` + +**Example 3:** + +``` +Input: input = "a" +Output: 0 +Explanation: We do not have any files, just a single directory named "a". +``` ## 结语 diff --git a/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution.go b/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution.go index d115ccf5e..8dbc3ed7a 100644 --- a/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution.go +++ b/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution.go @@ -1,5 +1,94 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(input string) int { + + ans := 0 + if !strings.Contains(input, "\n\t") { + if !strings.Contains(input, ".") { + return ans + } + + size := 0 + for i := 0; i < len(input); i++ { + if input[i] == '\n' { + if size > ans { + ans = size + } + size = 0 + continue + } + size++ + } + if size > ans { + return size + } + return ans + } + + var dfs func(string, string, *int, int) int + dfs = func(input, path string, index *int, tabs int) int { + if *index >= len(input) { + return tabs + } + + l := len(input) + for { + // "a\n\tb.txt\na2\n\tb2.txt" + i := *index + // 读取一层dir + tab := 0 + for ; i < len(input) && input[i] == '\t'; i++ { + tab++ + } + if tab != tabs+1 { + return tab + } + + size := 0 + start := i + isEnd := false + for ; i < l && input[i] != '\n'; i++ { + size++ + if input[i] == '.' { + isEnd = true + } + } + addPath := path + "/" + input[start:i] + *index = i + 1 + + if isEnd { + if r := len(addPath); r > ans { + ans = r + } + continue + } + needTabs := dfs(input, addPath, index, tab) + if needTabs != tabs+1 { + return needTabs + } + } + } + + start, end := 0, 0 + dirs := make([]string, 0) + for ; end < len(input); end++ { + if input[end] == '\n' { + if end < len(input)-1 && input[end+1] != '\t' { + dirs = append(dirs, input[start:end]) + start = end + 1 + } + } + } + dirs = append(dirs, input[start:end]) + for _, baseInput := range dirs { + index := 0 + for ; index < len(baseInput) && baseInput[index] != '\n'; index++ { + } + path := baseInput[:index] + index++ + dfs(baseInput, path, &index, 0) + } + return ans } diff --git a/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution_test.go b/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution_test.go index 14ff50eb4..b8bb436c6 100644 --- a/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution_test.go +++ b/leetcode/301-400/0388.Longest-Absolute-File-Path/Solution_test.go @@ -10,12 +10,16 @@ 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", "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext", 20}, + {"TestCase2", "dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext", 32}, + {"TestCase3", "a", 0}, + {"TestCase4", "a.txt", 5}, + {"TestCase5", "file1.txt\nfile2.txt\tlongfile.txt", 22}, + {"TestCase6", "a\n\tb.txt\na2\n\tb2.txt", 9}, + {"TestCase7", "a\n\taa\n\t\taaa\n\t\t\tfile1.txt\naaaaaaaaaaaaaaaaaaaaa\n\tsth.png", 29}, } // 开始测试 @@ -30,10 +34,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/301-400/0388.Longest-Absolute-File-Path/dir1.jpeg b/leetcode/301-400/0388.Longest-Absolute-File-Path/dir1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f96fb88ad2ae5954e8d1a3eb9f3e01f70581225e GIT binary patch literal 11616 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 literal 0 HcmV?d00001 diff --git a/leetcode/301-400/0388.Longest-Absolute-File-Path/mdir.jpeg b/leetcode/301-400/0388.Longest-Absolute-File-Path/mdir.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..36a6473c318cfdf3e3e533145b8bb3cbb31a1bed GIT binary patch literal 31041 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%0DP(iY@A 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 KH@?e-tbYKBa_s*A literal 0 HcmV?d00001 From deebdcca18c3bc54ac143cefca39fef5e0f078f5 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Sep 2023 15:56:45 +0800 Subject: [PATCH 0403/1057] Add solution and test-cases for problem 424 --- .../README.md | 27 ++++++++--------- .../Solution.go | 30 +++++++++++++++++-- .../Solution_test.go | 20 ++++++------- 3 files changed, 51 insertions(+), 26 deletions(-) diff --git a/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/README.md b/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/README.md index 24874fc90..7dd9bccb9 100644 --- a/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/README.md +++ b/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/README.md @@ -1,28 +1,27 @@ # [424.Longest Repeating Character Replacement][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a string `s` and an integer `k`. You can choose any character of the string and change it to any other uppercase English character. You can perform this operation at most `k` times. + +Return the length of the longest substring containing the same letter you can get after performing the above operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "ABAB", k = 2 +Output: 4 +Explanation: Replace the two 'A's with two 'B's or vice versa. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Repeating Character Replacement -```go ``` - +Input: s = "AABABBA", k = 1 +Output: 4 +Explanation: Replace the one 'A' in the middle with 'B' and form "AABBBBA". +The substring "BBBB" has the longest repeating letters, which is 4. +There may exists other ways to achive this answer too. +``` ## 结语 diff --git a/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution.go b/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution.go index d115ccf5e..cfb9fecd8 100644 --- a/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution.go +++ b/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) int { + byteIndex := make(map[byte]struct{}) + for _, b := range s { + byteIndex[byte(b)] = struct{}{} + } + l := len(s) + ans := 0 + for b := range byteIndex { + start, end := 0, 0 + sameByte := 0 + // a b a + // 0 1 2 + for ; end < l; end++ { + if s[end] == b { + sameByte++ + } + for end+1-start-sameByte > k { + if s[start] == b { + sameByte-- + } + start++ + } + if end-start+1 > ans { + ans = end - start + 1 + } + } + } + return ans } diff --git a/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution_test.go b/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution_test.go index 14ff50eb4..4868630d9 100644 --- a/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution_test.go +++ b/leetcode/401-500/0424.Longest-Repeating-Character-Replacement/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ABAB", 2, 4}, + {"TestCase", "AABABBA", 1, 4}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.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 064b70d4af40228867737231dd54cef11deec0a6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Sep 2023 16:45:15 +0800 Subject: [PATCH 0404/1057] Add solution and test-cases for problem 609 --- .../README.md | 33 ++++++++++-------- .../Solution.go | 28 +++++++++++++-- .../Solution_test.go | 34 +++++++++++++++---- 3 files changed, 72 insertions(+), 23 deletions(-) diff --git a/leetcode/601-700/0609.Find-Duplicate-File-in-System/README.md b/leetcode/601-700/0609.Find-Duplicate-File-in-System/README.md index 0499ee111..c361a73e0 100644 --- a/leetcode/601-700/0609.Find-Duplicate-File-in-System/README.md +++ b/leetcode/601-700/0609.Find-Duplicate-File-in-System/README.md @@ -1,28 +1,33 @@ # [609.Find Duplicate File in 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 +Given a list `paths` of directory info, including the directory path, and all the files with contents in this directory, return all the duplicate files in the file system in terms of their paths. You may return the answer in **any order**. + +A group of duplicate files consists of at least two files that have the same content. + +A single directory info string in the input list has the following format: + +- `"root/d1/d2/.../dm f1.txt(f1_content) f2.txt(f2_content) ... fn.txt(fn_content)"` + +It means there are `n` files (`f1.txt, f2.txt ... fn.txt`) with content (`f1_content, f2_content ... fn_content`) respectively in the directory `"root/d1/d2/.../dm"`. Note that `n >= 1` and `m >= 0`. If `m = 0`, it means the directory is just the root directory. + +The output is a list of groups of duplicate file paths. For each group, it contains all the file paths of the files that have the same content. A file path is a string that has the following format: + +- `"directory_path/file_name.txt"` **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)","root 4.txt(efgh)"] +Output: [["root/a/2.txt","root/c/d/4.txt","root/4.txt"],["root/a/1.txt","root/c/3.txt"]] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Duplicate File in System -```go ``` - +Input: paths = ["root/a 1.txt(abcd) 2.txt(efgh)","root/c 3.txt(abcd)","root/c/d 4.txt(efgh)"] +Output: [["root/a/2.txt","root/c/d/4.txt"],["root/a/1.txt","root/c/3.txt"]] +``` ## 结语 diff --git a/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution.go b/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution.go index d115ccf5e..688de784e 100644 --- a/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution.go +++ b/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "path/filepath" + "strings" +) + +func Solution(paths []string) [][]string { + cache := make(map[string][]string) + for _, path := range paths { + files := strings.Split(path, " ") + baseDir := files[0] + for _, file := range files[1:] { + nameAndContent := strings.Split(file, ".txt") + name, content := nameAndContent[0], nameAndContent[1] + if _, ok := cache[content]; !ok { + cache[content] = make([]string, 0) + } + cache[content] = append(cache[content], filepath.Join(baseDir, name+".txt")) + } + } + ans := make([][]string, 0) + for _, f := range cache { + if len(f) >= 2 { + ans = append(ans, f) + } + } + return ans } diff --git a/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution_test.go b/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution_test.go index 14ff50eb4..af9828a49 100644 --- a/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution_test.go +++ b/leetcode/601-700/0609.Find-Duplicate-File-in-System/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,37 @@ 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{"root/a 1.txt(abcd) 2.txt(efgh)", "root/c 3.txt(abcd)", "root/c/d 4.txt(efgh)", "root 4.txt(efgh)"}, [][]string{ + {"root/a/1.txt", "root/c/3.txt"}, + {"root/a/2.txt", "root/c/d/4.txt", "root/4.txt"}, + }}, + {"TestCase2", []string{"root/a 1.txt(abcd) 2.txt(efgh)", "root/c 3.txt(abcd)", "root/c/d 4.txt(efgh)"}, [][]string{ + {"root/a/1.txt", "root/c/3.txt"}, + {"root/a/2.txt", "root/c/d/4.txt"}, + }}, } // 开始测试 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, b := len(got[i]), len(got[j]) + if a == b { + for ii := 0; ii < a; ii++ { + if got[i][ii] == got[j][ii] { + continue + } + return got[i][ii] < got[j][ii] + } + return true + } + 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 +50,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6d5cde638572ee1afc4c05a8d20ebea1322e74c7 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Sep 2023 18:58:34 +0800 Subject: [PATCH 0405/1057] Add solution and test-cases for problem 743 --- .../0743.Network-Delay-Time/931_example_1.png | Bin 0 -> 7562 bytes .../701-800/0743.Network-Delay-Time/README.md | 32 ++++++++------ .../0743.Network-Delay-Time/Solution.go | 41 +++++++++++++++++- .../0743.Network-Delay-Time/Solution_test.go | 27 +++++++----- 4 files changed, 74 insertions(+), 26 deletions(-) create mode 100644 leetcode/701-800/0743.Network-Delay-Time/931_example_1.png diff --git a/leetcode/701-800/0743.Network-Delay-Time/931_example_1.png b/leetcode/701-800/0743.Network-Delay-Time/931_example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3b07d8364e9b83ec151c2f92a0cb43c7d2255ca3 GIT binary patch literal 7562 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 [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a network of `n` nodes, labeled from `1` to `n`. You are also given `times`, a list of travel times as directed edges `times[i] = (ui, vi, wi)`, where `ui` is the source node, `vi` is the target node, and `wi` is the time it takes for a signal to travel from source to target. + +We will send a signal from a given node `k`. Return the **minimum** time it takes for all the n nodes to receive the signal. If it is impossible for all the n nodes to receive the signal, return `-1`. -**Example 1:** +**Example 1:** + +![example1](./931_example_1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2 +Output: 2 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Network Delay Time -```go ``` +Input: times = [[1,2,1]], n = 2, k = 1 +Output: 1 +``` + +**Example 3:** +``` +Input: times = [[1,2,1]], n = 2, k = 2 +Output: -1 +``` ## 结语 diff --git a/leetcode/701-800/0743.Network-Delay-Time/Solution.go b/leetcode/701-800/0743.Network-Delay-Time/Solution.go index d115ccf5e..fd5110223 100644 --- a/leetcode/701-800/0743.Network-Delay-Time/Solution.go +++ b/leetcode/701-800/0743.Network-Delay-Time/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(times [][]int, n int, k int) int { + adj := make(map[int]map[int]int) + for _, t := range times { + from, to, weigth := t[0], t[1], t[2] + if _, ok := adj[from]; !ok { + adj[from] = make(map[int]int) + } + adj[from][to] = weigth + } + visited := make([]int, n+1) + for i := 0; i <= n; i++ { + visited[i] = -1 + } + visited[k] = 0 + + queue := []int{k} + for len(queue) > 0 { + nq := make([]int, 0) + for _, q := range queue { + for n, w := range adj[q] { + costTime := visited[q] + w + if visited[n] == -1 || visited[n] > costTime { + visited[n] = costTime + nq = append(nq, n) + } + } + } + queue = nq + } + ans := -1 + for i := 1; i <= n; i++ { + if visited[i] == -1 { + return -1 + } + if ans == -1 || ans < visited[i] { + ans = visited[i] + } + } + return ans } diff --git a/leetcode/701-800/0743.Network-Delay-Time/Solution_test.go b/leetcode/701-800/0743.Network-Delay-Time/Solution_test.go index 14ff50eb4..77df2dc18 100644 --- a/leetcode/701-800/0743.Network-Delay-Time/Solution_test.go +++ b/leetcode/701-800/0743.Network-Delay-Time/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + n, k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {2, 1, 1}, {2, 3, 1}, {3, 4, 1}, + }, 4, 2, 2}, + {"TestCase2", [][]int{ + {1, 2, 1}, + }, 2, 1, 1}, + {"TestCase3", [][]int{ + {1, 2, 1}, + }, 2, 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.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 %v", + c.expect, got, c.inputs, c.n, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 26fd26a968ffb46883156e3b82aa66088b5ebfb1 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 25 Sep 2023 22:07:31 +0800 Subject: [PATCH 0406/1057] Add solution and test-cases for problem 769 --- .../0769.Max-Chunks-To-Make-Sorted/README.md | 31 ++++++----- .../Solution.go | 55 ++++++++++++++++++- .../Solution_test.go | 13 ++--- 3 files changed, 76 insertions(+), 23 deletions(-) diff --git a/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/README.md b/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/README.md index c2d9dcd44..4ab7a2683 100644 --- a/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/README.md +++ b/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/README.md @@ -1,28 +1,31 @@ # [769.Max Chunks To Make Sorted][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer array `arr` of length `n` that represents a permutation of the integers in the range `[0, n - 1]`. + +We split `arr` into some number of **chunks** (i.e., partitions), and individually sort each chunk. After concatenating them, the result should equal the sorted array. + +Return the largest number of chunks we can make to sort the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [4,3,2,1,0] +Output: 1 +Explanation: +Splitting into two or more chunks will not return the required result. +For example, splitting into [4, 3], [2, 1, 0] will result in [3, 4, 0, 1, 2], which isn't sorted. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Max Chunks To Make Sorted -```go ``` - +Input: arr = [1,0,2,3,4] +Output: 4 +Explanation: +We can split into two chunks, such as [1, 0], [2, 3, 4]. +However, splitting into [1, 0], [2], [3], [4] is the highest number of chunks possible. +``` ## 结语 diff --git a/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution.go b/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution.go index d115ccf5e..7066a16b7 100644 --- a/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution.go +++ b/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution.go @@ -1,5 +1,56 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(arr []int) int { + l := len(arr) + indies := make(map[int]int) + for i, n := range arr { + indies[n] = i + } + sum := make([]int, l) + sum2 := make([]int, l) + sum2[0] = arr[0] + for i := 1; i < l; i++ { + sum[i] = sum[i-1] + i + sum2[i] = sum2[i-1] + arr[i] + } + group := 0 + target := l - 1 + targetIndex := indies[target] // 理想情况是是这样 5,4,3最小合 + + for { + if targetIndex == 0 { + group++ + break + } + a := sum[target] - sum[targetIndex-1] + b := sum2[target] - sum2[targetIndex-1] + if a == b { + group++ + target = targetIndex - 1 + targetIndex = indies[target] + } else { + exp := make(map[int]struct{}) + for i := target; i >= targetIndex; i-- { + exp[arr[i]] = struct{}{} + } + which := -1 + for i := target; i >= targetIndex; i-- { + if _, ok := exp[i]; !ok { + if which == -1 || indies[i] < which { + which = indies[i] + } + continue + } + if arr[i] < targetIndex { + if which == -1 || indies[arr[i]] < which { + which = indies[arr[i]] + } + } + } + + targetIndex = which + } + } + + return group } diff --git a/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution_test.go b/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution_test.go index 14ff50eb4..07cb18841 100644 --- a/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution_test.go +++ b/leetcode/701-800/0769.Max-Chunks-To-Make-Sorted/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 3, 2, 1, 0}, 1}, + {"TestCase2", []int{1, 0, 2, 3, 4}, 4}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From db180d287864495a76bafac4b420130e902ec2de Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 26 Sep 2023 10:45:38 +0800 Subject: [PATCH 0407/1057] Add solution and test-cases for problem 316 --- .../0316.Remove-Duplicate-Letters/README.md | 22 +++++-------- .../0316.Remove-Duplicate-Letters/Solution.go | 31 +++++++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 43 insertions(+), 23 deletions(-) diff --git a/leetcode/301-400/0316.Remove-Duplicate-Letters/README.md b/leetcode/301-400/0316.Remove-Duplicate-Letters/README.md index c61f94cb1..302c4ded9 100644 --- a/leetcode/301-400/0316.Remove-Duplicate-Letters/README.md +++ b/leetcode/301-400/0316.Remove-Duplicate-Letters/README.md @@ -1,28 +1,22 @@ # [316.Remove Duplicate Letters][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a string `s`, remove duplicate letters so that every letter appears once and only once. You must make sure your result is +the smallest in lexicographical order among all possible results. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "bcabc" +Output: "abc" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Remove Duplicate Letters -```go ``` - +Input: s = "cbacdcbc" +Output: "acdb" +``` ## 结语 diff --git a/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution.go b/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution.go index d115ccf5e..f048bee64 100644 --- a/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution.go +++ b/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + // stack + // bcabc + // a:1, b:2,c:2 + // abc + count := [26]int{} + visited := [26]bool{} + for _, b := range []byte(s) { + count[b-'a']++ + } + stack := []byte{} + for _, b := range []byte(s) { + count[b-'a']-- + if visited[b-'a'] { + continue + } + for len(stack) > 0 { + l := len(stack) + last := stack[l-1] + if !(last > b && count[last-'a'] > 0) { + break + } + visited[last-'a'] = false + stack = stack[:l-1] + } + visited[b-'a'] = true + stack = append(stack, b) + } + return string(stack) } diff --git a/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution_test.go b/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution_test.go index 14ff50eb4..1b00ec440 100644 --- a/leetcode/301-400/0316.Remove-Duplicate-Letters/Solution_test.go +++ b/leetcode/301-400/0316.Remove-Duplicate-Letters/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", "bcabc", "abc"}, + {"TestCase2", "cbacdcbc", "acdb"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b9d031a43f6e37ac409b6b2f9bc1dc465fff35cc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 26 Sep 2023 13:41:10 +0800 Subject: [PATCH 0408/1057] Add solution and test-cases for problem 1081 --- .../README.md | 21 +++++-------- .../Solution.go | 31 +++++++++++++++++-- .../Solution_test.go | 13 ++++---- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/README.md b/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/README.md index 1f3206c46..1eba234f4 100644 --- a/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/README.md +++ b/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/README.md @@ -1,28 +1,21 @@ # [1081.Smallest Subsequence of Distinct Characters][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a string `s`, return the lexicographically smallest subsequence of `s` that contains all the distinct characters of `s` exactly once. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "bcabc" +Output: "abc" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Smallest Subsequence of Distinct Characters -```go ``` - +Input: s = "cbacdcbc" +Output: "acdb" +``` ## 结语 diff --git a/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution.go b/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution.go index d115ccf5e..f048bee64 100644 --- a/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution.go +++ b/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string) string { + // stack + // bcabc + // a:1, b:2,c:2 + // abc + count := [26]int{} + visited := [26]bool{} + for _, b := range []byte(s) { + count[b-'a']++ + } + stack := []byte{} + for _, b := range []byte(s) { + count[b-'a']-- + if visited[b-'a'] { + continue + } + for len(stack) > 0 { + l := len(stack) + last := stack[l-1] + if !(last > b && count[last-'a'] > 0) { + break + } + visited[last-'a'] = false + stack = stack[:l-1] + } + visited[b-'a'] = true + stack = append(stack, b) + } + return string(stack) } diff --git a/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution_test.go b/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution_test.go index 14ff50eb4..1b00ec440 100644 --- a/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/Solution_test.go +++ b/leetcode/1001-1100/1081.Smallest-Subsequence-of-Distinct-Characters/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", "bcabc", "abc"}, + {"TestCase2", "cbacdcbc", "acdb"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 099ff6d08682e36d0e641587bc0f21e23d156e30 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Sep 2023 16:55:17 +0800 Subject: [PATCH 0409/1057] Add solution and test-cases for problem 880 --- .../0880.Decoded-String-at-Index/README.md | 37 ++++++++++++------- .../0880.Decoded-String-at-Index/Solution.go | 28 +++++++++++++- .../Solution_test.go | 17 +++++---- 3 files changed, 59 insertions(+), 23 deletions(-) diff --git a/leetcode/801-900/0880.Decoded-String-at-Index/README.md b/leetcode/801-900/0880.Decoded-String-at-Index/README.md index f6d09e150..8f91b55b9 100644 --- a/leetcode/801-900/0880.Decoded-String-at-Index/README.md +++ b/leetcode/801-900/0880.Decoded-String-at-Index/README.md @@ -1,28 +1,39 @@ # [880.Decoded String at Index][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an encoded string `s`. To decode the string to a tape, the encoded string is read one character at a time and the following steps are taken: + +- If the character read is a letter, that letter is written onto the tape. +- If the character read is a digit `d`, the entire current tape is repeatedly written `d - 1` more times in total. + +Given an integer `k`, return the kth letter (**1-indexed**) in the decoded string. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "leet2code3", k = 10 +Output: "o" +Explanation: The decoded string is "leetleetcodeleetleetcodeleetleetcode". +The 10th letter in the string is "o". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Decoded String at Index -```go ``` +Input: s = "ha22", k = 5 +Output: "h" +Explanation: The decoded string is "hahahaha". +The 5th letter is "h". +``` + +**Example 3:** +``` +Input: s = "a2345678999999999999999", k = 1 +Output: "a" +Explanation: The decoded string is "a" repeated 8301530446056247680 times. +The 1st letter is "a". +``` ## 结语 diff --git a/leetcode/801-900/0880.Decoded-String-at-Index/Solution.go b/leetcode/801-900/0880.Decoded-String-at-Index/Solution.go index d115ccf5e..20be3c311 100644 --- a/leetcode/801-900/0880.Decoded-String-at-Index/Solution.go +++ b/leetcode/801-900/0880.Decoded-String-at-Index/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +import "fmt" + +func Solution(s string, k int) string { + size := uint64(0) + n := len(s) + for i := 0; i < n; i++ { + if s[i] >= 'a' && s[i] <= 'z' { + size++ + continue + } + size = size * uint64(s[i]-'0') + } + kk := uint64(k) + for i := n - 1; i >= 0; i-- { + c := s[i] + kk %= size + if kk == 0 && c >= 'a' && c <= 'z' { + return fmt.Sprintf("%c", c) + } + if c >= 'a' && c <= 'z' { + size-- + continue + } + size = size / uint64(c-'0') + } + return "" } diff --git a/leetcode/801-900/0880.Decoded-String-at-Index/Solution_test.go b/leetcode/801-900/0880.Decoded-String-at-Index/Solution_test.go index 14ff50eb4..ca2283965 100644 --- a/leetcode/801-900/0880.Decoded-String-at-Index/Solution_test.go +++ b/leetcode/801-900/0880.Decoded-String-at-Index/Solution_test.go @@ -10,18 +10,19 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leet2code3", 10, "o"}, + {"TestCase2", "ha22", 5, "h"}, + {"TestCase3", "a2345678999999999999999", 1, "a"}, } // 开始测试 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) @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ff38c106417a8f4e6f2c84dc7796c0a8ce2fecb4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Sep 2023 22:27:54 +0800 Subject: [PATCH 0410/1057] Add solution and test-cases for problem 394 --- leetcode/301-400/0394.Decode-String/README.md | 32 ++++++---- .../301-400/0394.Decode-String/Solution.go | 63 ++++++++++++++++++- .../0394.Decode-String/Solution_test.go | 16 ++--- 3 files changed, 89 insertions(+), 22 deletions(-) diff --git a/leetcode/301-400/0394.Decode-String/README.md b/leetcode/301-400/0394.Decode-String/README.md index cf93af49d..f3ddcc2e9 100644 --- a/leetcode/301-400/0394.Decode-String/README.md +++ b/leetcode/301-400/0394.Decode-String/README.md @@ -1,28 +1,34 @@ # [394.Decode 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 encoded string, return its decoded string. + +The encoding rule is: `k[encoded_string]`, where the `encoded_string` inside the square brackets is being repeated exactly `k` times. Note that k is guaranteed to be a positive integer. + +You may assume that the input string is always valid; there are no extra white spaces, square brackets are well-formed, etc. Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there will not be input like `3a` or `2[4]`. + +The test cases are generated so that the length of the output will never exceed `10^5`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "3[a]2[bc]" +Output: "aaabcbc" ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Decode String -```go ``` +Input: s = "3[a2[c]]" +Output: "accaccacc" +``` + +**Example 3:** +``` +Input: s = "2[abc]3[cd]ef" +Output: "abcabccdcdcdef" +``` ## 结语 diff --git a/leetcode/301-400/0394.Decode-String/Solution.go b/leetcode/301-400/0394.Decode-String/Solution.go index d115ccf5e..43fc3ada1 100644 --- a/leetcode/301-400/0394.Decode-String/Solution.go +++ b/leetcode/301-400/0394.Decode-String/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "bytes" +) + +type stackItem struct { + num int + str string +} + +func Solution(s string) string { + l := len(s) + ans := bytes.NewBuffer([]byte{}) + + stack := make([]stackItem, 0) + buf := bytes.NewBuffer([]byte{}) + base := 0 + // 3[z] 2[2[y]pq4[2[jk]e1[f]]]ef" + // 2 + // zzz yypg jkjkef jkjkef jkjkef jkjkef yypg jkjkef jkjkef jkjkef jkjkef ef + for i := 0; i < l; i++ { + if s[i] >= 'a' && s[i] <= 'z' { + base = 0 + if len(stack) == 0 { + ans.WriteByte(s[i]) + } else { + buf.WriteByte(s[i]) + } + continue + } + if s[i] >= '0' && s[i] <= '9' { + base = base*10 + int(s[i]-'0') + r := buf.String() + if ls := len(stack); ls > 0 { + stack[ls-1].str += r + } + buf.Reset() + continue + } + if s[i] == '[' { + stack = append(stack, stackItem{num: base}) + base = 0 + continue + } + ls := len(stack) + top := stack[ls-1] + stack = stack[:ls-1] + r := buf.String() + top.str += r + buf.Reset() + for i := 0; i < top.num; i++ { + buf.WriteString(top.str) + } + r = buf.String() + if ls := len(stack); ls > 0 { + stack[ls-1].str += r + } else { + ans.WriteString(r) + } + buf.Reset() + } + return ans.String() } diff --git a/leetcode/301-400/0394.Decode-String/Solution_test.go b/leetcode/301-400/0394.Decode-String/Solution_test.go index 14ff50eb4..cc89a9ca2 100644 --- a/leetcode/301-400/0394.Decode-String/Solution_test.go +++ b/leetcode/301-400/0394.Decode-String/Solution_test.go @@ -10,12 +10,14 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "3[a]2[bc]", "aaabcbc"}, + {"TestCase2", "3[a2[c]]", "accaccacc"}, + {"TestCase3", "2[abc]3[cd]ef", "abcabccdcdcdef"}, + {"TestCase4", "abc3[cd]xyz", "abccdcdcdxyz"}, + {"TestCase5", "3[z]2[2[y]pq4[2[jk]e1[f]]]ef", "zzzyypqjkjkefjkjkefjkjkefjkjkefyypqjkjkefjkjkefjkjkefjkjkefef"}, } // 开始测试 @@ -30,10 +32,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bfcca2e95ab3ebb837f7f4fac880e5a84099c734 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 27 Sep 2023 23:12:41 +0800 Subject: [PATCH 0411/1057] 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 0412/1057] 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 0413/1057] 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 0414/1057] 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 0415/1057] 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 0416/1057] 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 0417/1057] 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 0418/1057] 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 0419/1057] 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 0420/1057] 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 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 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 0421/1057] 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 0422/1057] 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 0423/1057] 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 0424/1057] 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 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 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 0425/1057] 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 0426/1057] 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 0427/1057] 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 0428/1057] 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 0429/1057] 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 0430/1057] 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 0431/1057] 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 zcmb9Cby$>N^frnkjxdP80D?3_iXcb~oijts(B0BCbeH6Sl;j{%B8>cZv{hd7k@j9vn?Kn5c1y{hakU$o0m6- zkUWQ=pryMzpAE*+-qX^>i_g{88@L5LcX6}9*kNpK{*@8r7Zl(X;OFHR)#VrG5Q6gy z06#+Fe8S>l#{bG&+S|JRSD`Q;KTrXe0mjwF&Cd%sRo4Z61o(m5LI~gtcpw7%cj_+! zy9eBXySqEv8rWK?V1TbH3JZzy35fu=xl~ZPYN{N9NZ{NV<75jQlx(e?+%8{1I(WLd z0CyC{VSN02FcE$cK2ZVSzK*4xr6=b9R?B5)Y`rb*|8)f6qU92(WACcu?XIiFs{|KP z*8wWIEaPkI>4kA~{Z~vtm=DG$^zVUpfV=I#yEeAI80)LzLJEK^{}USUF6KWmDF+0i z^wf+rklLcCKzS=aV--Wuf0eje0*$>Ax00u&yTj#8Aq7!=2X$*4*l6OBfzxxhW0k>0L~9D)cteH$gXy%xW&qqmQOkc~)ykBF|f zg0ioxKMba6Xlp49_t6mWRnSKUqP#WqEsey*{fz^K6ukocg^(zis~1vC%gPb%W)H(? z>p2B@+B-Y?JNoLYI4Jq6Vgi-z-IP=`ke&+senv_zDsVwXdkjiLP))?vTS;DD$k0*^ z?G2N+f~zYC+B%6N6}0W#_*K^Dpa(z7$5+Ef zL&HD=gHcu%!+1D30ji*=uH&idD;8kjC~SlXaD_SQsd_qDssbaf=%OU50t1fj{+4z~ zSKtKrvobRB1r92zDvI7p>bABBHBoszMLoEck%Nm)00!m?_ZIZh3s6?DQAY&$86dUv z)EvB#&MJbciXQ%GM;DZ#j*bz`Ho#rj-d|l)ALFO*;pO7vDWoCbtmCikgwfFzw|CX| z6Xf?-48-_q*?KA<#r$+sHSKNPeH^p{tweN$_%Y5t0&c#F+Pa2<9`^q3>RP(aMtYw1 z7)33VrWjI4Ow9mL7Q|)C{SEEx#Iyo{D^WX`m4cwCm8!Lsm4k|%gMp%(qA}80)l1Jg zz)4I&(BIDzrG*f((-hay)#k@|$qNf>7z?A_J;VY9HN1S3ZB-l<9Yqab1{k!iuMS!l z1NRjdQt(x=$5^WyIw-3+it6zj`Fq*IG}Kib4BfO9y{v5zXj>&mQ6oh?2MxGDfCAjn zP*KfE2Vunz3lPy)Q55u1Qc%!!wsH^j7Xj=R;i_ikhw;?#)VIM8ZcEKZC`bStE0b-H8N1t-^N?e(8^8REkNDP#Z^t% zz&AkE-$79ss1~IG{MdOY0OGI~7K35*5x)Mmc9v?Mn!p_=K|2-Tp_VVqP7LPaEg~-F zt;uibW2CGESUN(;KG4?*ING}EiC(tQK^N_U@pHf^Y5M_J2scF=YfEF4n~F_D&E3OFPypx? z0;vSFLq|-|GC;t|($7=X-o?h%S=HUmFTl`S&_mG{696|BQn0r6*HjR<@z4+xvDXqp z0Y)9*>Lp|-4igaw1l||5_3;og6ojD#tb|4NErrGPL~OK#ZPaXlXTE?G6dnCU{l$T! zt1!@VH*I5tfv>QeDoW&1Q-J#jc?~;1_@z$}0{ole|2UH?&jMWk=ct7gR98+b@bI8` zXnDA4#PYEr_?(%Gp9v#{> zLG3IY6~T;)-+LPs51EJa28F^oY-uN}ex<-Wl#V&n+Ej&Y&o2FY`0Cejb zvK8VEhGjtqA?m4n7_(H z|5)p_qV6)+{4iU@WjKn2zQ$>ya@+Adw@4578@FdY!oOiBdRcd#Ac#%@lKa%Vu1M(A zHjzdEQK*x0+3Q(jQEe>2XmozSAF; zLPMfr0V&YnN68U^))gQxl^YC)J$mO_LPOQEU}#EC)xkV?1f8$e^tW%dHeV@tP2X#p z)XkU0{1iaXrFh$arnaJ_#Rnug7zrNDf+of=H|O4Xl8=mD#}e}m{`{IM6m9njd!yla zy?noo_`&;HIY>GxkaM?v3ja!=T`c&u>@ma~eU?emkN%GKW(u)+c4f;^7?^rIHVfX@ ztFOV}mX}>}>X?8I@`K(f=23%&G=}lf)|0(oVkw0m{dL~|twx8GvF%J`%#sOipnhPs zLH!;<;n+VOR5__{d)2icaxmQ8gOG8d{ zL;mdU^x>5v{bUSRCR)tKHFqxaHEtvNGATbWWf_;KWtV*Lk~Afs!+GoJxOGvxT{S2T ztc!pMu?J@d1mrCbkw3i0DfWh?(U30{RzCc8L+YxpS&ZSHL0%6`QjEqXJ_Fm zF;tLkyjEA=bUDm)pkW9ofHaAsdzzbc4c6)&zw(}w^six0D(cB|Mth)n6=8C8*gWUI zGzcSu*U;S8PG2(wtWCl9=|<5Hoet_u{;Aqi)|k>D0<`%YpQ6;TRd08ZcK757dm?v zbC-VRy+`KOj>1PN8uf%p2dNV8tG2s@p>nP zS?SMVC0yv2+}bc4L6S)qQL2lvj0h((NgJ2zS6Go;@L}rMCRFd(rUE?-W6?x{g0L}; zd`lHi4>UrLb#i>hjRH4oCp;A(X6Wq;9O#3L&gWlN$SV_17ROJ7HnaaaeMgs7jUyz}RC@0S72s{yM40WTG-7L&6nt_~@^+Q?~Y z-09|NSS@(+B|DHS016)WKK;|_^j*U9rm)(u3$D&K>3PMasox5phR%br$ad)uW#|ks3C$8w0%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 0432/1057] 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 0433/1057] 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 0434/1057] 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 0435/1057] 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 0436/1057] 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 0437/1057] 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 0438/1057] 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 0439/1057] 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 0440/1057] 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 0441/1057] 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 zcmeHP3p`Y5|8L*6LM{`wZB;Ub6b3V9u(~iqNQOnIXqqvD$(W-t?kyXGk=4GXD^ZeS ziH3+MT}BeMTkiK(Np6)w>)LzHTuRGp+qU|@`}vRCobx-+^Lw82`+a}6=R8NW4c<&j zLP28ItXWbP<|ek_XFvFxEH)SXyU=vY1o-iVkF6PYR@U7mU9)DbZDyJ}F}(uZs5Htf z6%>wtq=MA;0DPD#C=(SVlIZP?AXAC%45F70f=*$AB=EWyK&HA;DP(>dq&5N~j*bcn3m$Ev(tQKK z&j5W40i(MLJTmt7rcoRzBugqd?glhU4}ro!T`bM*tv0D3ao{nH>PZ1V%qXs&0MrHN z!2rBK$_5=BZ3OQdB-#<(hz#l^7SKIVm_&E}{PlwDyixW@I>|!M0@#4xWlr}B;?LWU z!tkL2bir-vAaoF5Pw*B^RkV#k7SIn0ClC*KLMMVl^TcKY-m#_*p9xhUCagc+%zP6L z<7R2Tk>JR*FxV2{@kee#o?ZcF45GJ(6+ouYK*r<%K3g3W1{@TcJvmS?cU@2-5W$@x z97ixLM6ja<2_~c?=;!WBB~yF^-1t4206=3>z27Ce0(3gXRiHBgMS4zv;|kZh{DDKf{zE04EXc= z^GK7m!k42^nhXE{`At&V7qd96)&Ej*|+@+M*+;0vjQ$47XEbpv|~nCW16MhqblG#VyF z2w47%yoqn+z!S~P%6O|1GYV+UOhzEcR=^RdYry9zFaTX$fnfdL!U-v)c}#|q&~%6b z2)n=G4bA#})C{%}pk(IxL!R^xV47Zo=)b5zTL|!24}d`pf)qysH3I4Ak6QKdr+U$d zbkLHBkahB!2uN6f=Q;Sj7=R}Q2hadW`&7CIg#r3m6qX5i3p&v#ZjjQU#w38r1iS<% z41s|{7p5YH%mBRYi41ozSn&IT;e{p~h7Qmn9C`y(I+LddG*$(T1*MPEMxa&DV93FN z=O9Le=O77c&S2sIx(|~9f)!#*A^I@=DNvC5Fc40!4xT~HtlDXz`Df4*!ts9yd4i}h z$#)1`)-=uov|c8aNV5gw0g>*`^CKQiF9>{)%kcN0GAVZ6L|4eq_=8akqzR%2-{}Y- zIz89`&|A3Ccz)c2N+wglSc{zoFMkb_JakbQrhcIFg+K;P^MicV^f2LB?calm&=*a1 zP&1+AeMWl=&9|CDYEQ!E`wU8?F)0i>kx9Vzg>q3n_y*aN4?aH1ky972MfKo6@PVM99-PK*{wejK zXpxzpRL#7XVcMjEZ^WW{aI&l99}67jn-X|t8GQoxI(4~CltjE|67j*P7S)5Fw;n_Z zAT3(-`0I-ve;4GUdhoN=gHyN8iCp<-a^*VHAEFIS{GFeFmfF1E22teHr{JP` z@Sj@`P8S~jDFvZu{q4gGLY@`R>=A?olIQ`U@Wq<{T0Zi2*3T@>_uYVx6lD>gAJw9Q z@beag$fAm!Z0}24Z?4|5u=Ld- zr9HZ5#8x|pMTBisigns+Y7Wz&Cr5m-AhSjub9j&LsxLY6_8MW|U)R*IHQ|UkrCY5w z%{qA+W@!55GM^WhV*+=tu|m2hqEMa>7JiKy{blQD8D2H?aanI~uh}^VIYs*)Bm%7W zG&F1(hA&?Rezj&?sn{Dj_WN(T%^eM`hOy&8zvSXq`;Dn^6V)DHE0ZP3#Mc^^vkGQ& zibrg)y_-9)IO@SClJH3(^6;Sx-xC&Evr7)%8kJGvw!V7)+SiCZ-k06I4>sCF#`XfC z;=7E-I%=pV7T>Yz1;PuX$NRMOAd>1(;k{<=1m>ZXTCFC;hQe1km2o_6 z!-20@v4RmA`plC}*uI_2VAzICjIA2py}h-qjpFHPIWjt$x;;BXhNvVh&+V-{USh+3 z*k91w*H_-rkt!c!O28GDlxTT+dcNrVWm$A7X>Z+z6u6w69D~7Fer(g+YudeX+xXoQ z`+8`q^LCWriZ5JHmXVR^P9NxWWistU#z$0|nwqYJ9Uaf_)%{INzWp`c3#OD5AAf+1 zTs3drJg@U-s;J^oH*C}GchAuo^=hDACtx$hQ#l-+V<%1=NlZ-4mz+O;{(TyzqqldH z-Q%J2X?5J*i>XE8q2e6XgZkBvBNh5zT4IJR*=XZ6Yu9QtK_p1>aCIit6m#(g&4mB~VSS2hcIg3PoMytn|1|bCb&@_)J_^3JD52kddK|CYF_zb+=5X5B!Z=O5M`k$8Q@$?jS62PMgR+N4wl_SPUy;)#iOJKX~?Tpr*J$v?skY|kt^?U0Mz9=XjTfH3bx#CzsbnGo@ z%iCwGwA1gXEayJHU`AHuiXD>bRN_WT{dznJ=DDyw@;R%1?$-k~M(jbVrxh7Xi~VY= z1f08-oTsh^&##cVm;vX~)prutU}?##5Qk0JF7j2iHmrIF_vZ8%SW!w!&39s)nxO&b zCGe+Pu%okKq|vqAsaR}tOpv0%5m+!c4N;-Yb&=>ytrFuLY3?p|z&01UB^idpg74<+ zlZeFa_VHO!=#1Z)7e6pKn7%l(@9ERq4<76=i+J^7$0M6u!bnp^W=N;A8dpn83u$1G zPVYPROJ~RUxJ!P1{^^nuLigaMOLJDX8yQ!IbZPBOA`(oS+uDxg<)M9xesR(`GvcYM zfYi}}-}SOa9g{reUOyhxpfzqPsmqkp($p-!aU(ov_4x3jrAs%z>T79j-7p{-4%yS` zlAtmLiT>*9gUWFh2KxFQJ*yM(mikK$Z%jRPu_^RaN)kS|?eK#E$7fDBxZ>i)al^xb z4Gj&{o}EOZar~V##}gB~`W8xp#vzUm9o&b8*QRN~Rk;dfJ%EQAx2me@fVuLc=g-fd zyC^g!Bse!u(oj=Q+(h?MPc?2uMFk@`SiQ5e)61pw;jVJGTw9HWgMRZvzP%H&Ev$-g z*;Oi{zeOi*~AU@wmJ5*4Eb5eRUz(#{Ba7UgvXuS2rwG zV?zR~)LlX{u_JUCVaGOWvP*IatlN(nFp^K>4Wu0DX!Qo!1*8=@u5q%Y%+@C~)}nI- zdv>$xe|U2BAZw9Ye!4xY{@{zF#jHgsx%V_!^=V^`adMg6!LE{_Q8qJ0mp$<3QP_tEfhL--+o zN91T9UQa7=&S-zYHk04na!SS5`hIy2^o{O^Goux_$rHc-ettt}OT=?DhaREHwq|Q; z8@r0LoKgz%S*qN8{p7RK*i19Wj8n3tj9%}{i?F?yP7lpd<_-n6yP2};tHa%+VjnRK(rb3!ud7?>3d|1_anxr>?9%#w1h;yB}@uFE~&!cGvGIB&E!P^+2ed{ySlm} z*RR(yG&J;b(bUi|&uuuEn~S>K5(alG(Y)4`-O2$?Wl)97a(WmrE+rKa5EQgkHk!3W zQ89lIv_NIqX!Am6&{Tu1DnqvU-RIdtKw#h&IskNxjTN8E2v~z?pgHUhjd9@`Syz!^?ZH5 zRfye~Z1eBBI>(0QX8UCmX$~3ekj>K7HPj)?&;>ZDhsNzWUhR|YBG?txzZuUK!u>4F z6K=pr2`ychG1%s!$XYWcZtb>eyFILemBYomkno{M>lOzKcG2d$xXuM6nPWAk>8yhJ z_lo@_;6w4Qi8YpN!>Wq7pH#U?7y6n^Z@{k<7VdXOtjybLH8L_nrql6${{9qi@8?aX zuSSfZ024aeQ`tT^n5Th2+Ish$8EFg zYBbFj%#$Du^#GxXTh^{wb1*hm>YH!A**`iO{92gObq}54IBn{0^w1@fNLV}`uN+sd zv?#LW#L@AQCW5=uJBc9J>)pJrnLnRzU)Bvz`(!-Wm$1w(`PUDPco~b^QE9!jnuRm(c9nVbQq^Z z_1&OVxhyhTl6LWEJy2m)GP2m5ZJBx?Gb`(MOG~1pjEuSz0)gN*IGsIv7KuWI?^u){ z-H=@}E~U%`0HC{@sjF}Zo2-tDcl~?~~W~#bV!+N>JCj;U5mX zcUM|r^r!AH`(m`ayZicy qSMKCwyPIUNf?}S#+S{8sHZLdUOVV?R7U+L?&9X4Xn`B{kg#8C&`vJND 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 0442/1057] 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 0443/1057] 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 0444/1057] 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 0445/1057] 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 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 Date: Sat, 4 Nov 2023 17:21:34 +0800 Subject: [PATCH 0446/1057] 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 0447/1057] 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 0448/1057] 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 0449/1057] 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 0450/1057] 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 0451/1057] 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 0452/1057] 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 0453/1057] 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 0454/1057] 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 0455/1057] 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 0456/1057] 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 0457/1057] 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 0458/1057] 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 0459/1057] 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 0460/1057] 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 0461/1057] 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 0462/1057] 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 0463/1057] 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 0464/1057] 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 0465/1057] 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 0466/1057] 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 0467/1057] 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 0468/1057] 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 0469/1057] 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 zcmZ{JcQ{*b*ncRcwM$FwRi%_zv07V=3QBDnd(__42(@ZciM?vpE)|NJsl7|>t#+*< zvGY6q{;uo2uJ?~O$#qW7b8_F$JwBiNe$JC9Ee&O|yYzQKAP||VilR0Mgl7$WS0ug- z91Za~vw#zUtsGPi1gc3OxiTjNu30Trw4or-J1!6?I1B{30EU9MKp-zL2()7c0!gNU zK(ww|O|PB-H*Qa)zQmyq_ zS2Wi!OQAM40s8CaD+=qpFniZW%u9jl?h_sZ$QMDu?le)(X-bRO@3$Qlu2_T22U1vS zt>OyD22VV5J#chGzArx3Fmnu@e3sGG$*_m!o}V@}!vlv8e3<2J&3fXQ)N`e?n-5wu zYrep7LF(hbtD5)ebtI6%+IM-ZONY`Bc9mmB&3ZUb$+(eCUerV8N9_b(oHEgo6v^sb zJ%11**;2}2I=)jkB%;0^vgo@;#&6oB2!)bSNT0EKYz{v~8KS#u`HYN=&JNKOjR&ol z1~nE+rBHgvk#APEl#l!Bk2^oNMUFRy)>a}}x(~3avvuZfm_LSZ{MPSZTwH*m$>+zL z$9pdDIZ=$Q8)GC4cQNJZ>3R5rT2l)KgS}0T=!&9#?0fo4pQQdNtThYCtFMtp#uYrW zx%OD*JPK>Yj~}J@p7xDzh^WJ)>y)XF+wWegf68+L{;Ixx`&P|qk*v{m1z(`$HS(Vp|%UrQ}Xoomb}bvDbq0KtAQ>Wlq&@qE23EBF&6t=W5TRRDfY z0y^Ft+00zJvgx4B@!ywV_Fcxq{FzZuRwim#3X*b|sv3IUIKC}%(1K;oh2Ka-DdP9I z8Pr;-Is=&)V!@p$$1_RYZfEkD?t%gD_1yVx#y=`{Qy zUCf0UNC@v)z)EMhcBZIfSy`F;0Rsa=x~Rj0ZO^6&o45}cj5m-|-#;}yzWa@vYJgOd zwzjFMY10y{H9#U0;$*QgnEqq!NDlU)%ffM~HTyoV9uNmEY21~EM$WVJOB~>UxIcz( zcd~LVQs#>ie z?`o|2?&(Wf1;0$?ADfsUXzz-l^~22As+Noc;6MNvq9P`+b9UxOJya_A`gL3sy2+Pf zJ+`ngl*FO@E#O=zhE{+drHX#xFa#vdu+jaImzP%&#P&63vMM>Fcw)JohKP+gBNrn% zH8DYzL;Ebs!9#EiK!C@^iTwjU16lT@Wgw={Fw>TUInNom1AZE(bcNg^n*Q!5++mhz z2JU^1okw?s5_t^O%+4CM9%mmM&N@^BD1vF}=&Usr8%ejcw1|j`)&Q*Y-ka?L90Y97 z5_ij=D27VLGe1{zaNq@E!;9kKSRL1tS=WSLPy>|N*s#$LzmGjwqG+$R9#C5y?N;;h z5^Y%UX6Q*^DXFZCTU>ktahz^{Pe{Twc-uo97OlwMhz)9!nab*)ys;V1lK34|V?bId z+IBwV;yzb5Nw|*3XYeIBLHgpui1cObdHrlx3cv48=Gf z#2oE6AJhVgM`$+&C}LU|-gV9g91m5%+N805fPdeQho#mx5!K3&s`cGemcr*0Y}ZeFQ2Akmeuz3(YfM%+YD&Z-KjxGqsPf=cOe%t0gkm+h^sf zTwJ@@OTX2q$L@FD*VotYN`HG6JyNPua<*^~)N^sVn=WjtQ9ATcG^i~XfQ!f0D4V`G z3cy{m3g_9c>LA@O*V`qzHUQ=w=fBlVaK)!>Y;3%Db*g#TuOHXPGc`3uO&%%Xx(vcD z!Daptv$C>MJzMgA@5GnPjEuA8P>K&P3PeOi@=)Ei6P0yj@e(3suH~Z6o5P* z6drLs|GRF|fc%Gre}xw)B8y*S$3^_MK1KTOp{DHY?ajyXmH3S7D_D)c19jsK{Msw% zd;q4cs~c`@SYgum@p8YJqQ`Bz)|vzgh4Ps;(FD5$?izo;*eRcPA9!k6W@?kEF(XGn ztps!l28g5CC1%fYp$VzQ{llm2a^a(mhq651gEiW=Go}6G#TNgWW*-5d>~4e*F#|S> zab|)S8$BLN`Rorm!LN>b(giJFlnyns{VS{m3DWXvQQFZ!c8}v+0tzN<$Vk`}J3<9^ z=Sk7MEdo9O*L#3w7lXLR^9Z}>fA9^4y%mTYRXQ|?Ut1O*PW5(eaLQCLcNamBd6lD=RCn zsz^_C@9!d*dit0?Z>Bwe_N*Tn(pq+<(^QZL^cqF>5bb`Cer9H7>jACSGWKjCtx>-P zG#XuC@^GvC$s~_MWlKhFWTf(p@Tk6Sh0d_|`0;swNuztw#D*{MBJGof>DFjS%yAyR z{ikJpP!=Z2lLbgbDmMxNB6T|6j6EKM|0Wm$eww5q!61%h{HIYu7*SoOQbPJheFm71 zNxdwsc1=7-2XlDH?Qr{|EZV#O%~>a4$b34@O3cN@JHCOxowWby`Oi>y%<}jDEc+il zsp1qA6h2^{rXSW6BF)oQ-r4n0g(LA_*L&fk$vZqKn)}wcc2~qCebN2;wLGLePu%2G zJ?~x~B2*hPJ4T38PWD5xt$)T@jkeM>Q2aLFFn>mpGU-f+>uyUqC8>LlPW=kq+3$WuE>C|Z&qj)FXQ@<jsjo43-UkZd1XYtHq%ROAn zZ=9!E=e=@YN3~i=t)um&SM)D&aqydQnQ>+pmcLR54Xx1q$6u#XBbbzz82?_HmTKhS z{%k%w9&4+uK5gsKO{SX5EmHqOG&;NTv*Y?|Z7dg0PTMf?}!{x3B4vSW{(We#FDCl~?y{$3D2ZylT9@a4W~GS6vovm1G6}rD?`? zrSB)7g=QR^Zk{hS<7k^T_xR6nMXeAGZzcx!rGnIi(OIv0v$>lX_{NL^uCvRR;kjGP zntpsjIlprQ%mI4YxAy(?KvNjiM9&8GG~yupqO|x#nB60pSHvjzLHcOXgFHmsMDU*3 z1!u89ukpw=gWl3FH`K!3MYG|h`(z;Zf84;C#herDtJkjyKT7%{$DaLLhT`V23#0!n z;~DPC>7c*Xj>uu*)!Df^%j4A$THzVHy~E98_;Q;@i`q|(L^Ym@x_pixYZC`jz$Rk3 zflQoSpp(edpy<$;(lRMpmN-O@K6ih$w;A4RDx7nJEDCJgmA1bZI74m1*HeL#KP`za z(B+D7UN!;D@S|G`gPO_f;i2wSjS{3Afy)FezBR>>rCVPwWOQ>`BZz|24$P4gUBEmyzuAmM>Z8oS09DFF7_?7_Bd;kS>C@-kz{X4 z%aFQr@NRFw_&?4?2y}B4^M&R0!?G_;m_++>h?FH5cb|z=xJx@<7cR4JZKJA@4?o1e zd^%H!aS*v1{($lxd5fvOR@pbPN)YfoVPtoYR^a2tEL2aOXcKbHt90o;wGhLTP)91V zX;IlY5|?D`aZp5~*lC0FKfH{5T!hqXjFC#$Hkd?-&sH=UHeyp(ow%RZ(`6d(jqr1p zDsjb^c+w-3B&k@EnPCx>iCeAFKZdQ*$FPEqxC{OF80Yc8pFa@C+dDh-zk=dx&#~x{ zpJu~m&|{;GiG|_I&Bfs;TJnb{-A-4nNzdo_UQ(0ZU3F_VyJQj**a$dyh{;(RD%q6Y zWYN3fz!L`Vta+DT$LpPVzgeB0tM)*(WUDwm^{HrLK@MLn`i800O&aKZocI+}7wCo` zU{2pAlq(C4P9!g|f8F#7r#8A6*JKM=lEJ9qSI1p>=Zr8?fa&+zaqbrj%-ynpUnd5F zAaxzeyYy)rz5K5S^av2FNNimt`3s2$muc6u*hF>l>C(|c)YA6LznHI@=3M^75%MPc z;v<=lrHdws^W%;f=9BiD26r{Dsqsm&Q^Fh=zTu)+bc|&zUx!GG?ZEELHow9KJb?tf zA}yp0&Xe4^MFy8XwbjUKQ+Jsk_7bVC6pUOT=(m{5;LU!J7*(#+$@S@T*A0oktV5H( z6M7ej4-@IrHc|z#=a7a&n3rWui4!#NcDC!uryg^l#}i*broji12g7&!`@L! z!v3V1U~l2Gf5`P(p}Ue9@ht_LoX?`a(qDwH*){n)N>&>cj^AY?2%*X`8E{vbqaUZ4 zm^v>lg$TwDM*WGNnXVsJUu2I{wTG|1eH`(ylb~=?g$#Ij&*itcR|98Hb4-R<7g2s< zRkJD<7*{F0b)+bE^lDgW>%}#%oWIykPQoUljew0)v_lfq$wm!(uryBPZ$6;H}+V-kn&BnezvX zJ#373@25QF4AP-YKqZtp{!dJwl?2=>R<^-UCv^+VW*PtH{T>yu_zjKJAem#%Pwk;Z zl8jS|Ok9>mrxDV&?%7p&7kLbo&zv?ujV?pUP>C8Jq2FzrRdjWA&F8%3pbm8{4z)YFP$z&LX zf{n(XcAMnM(S>aOY4}PVVe(`UtPn4Z?zQp2WJR2uUbiIK;cLGC_cf@-Pu6v>S%GJ`wpC~pZMD+<9L4-NY z6^=eS-Qxk<#I!TD*fvacwpkS$z!k2;ya(RpliprSYJ|Up=2e+BQ&L9JO-!EM%@D6I z@F)nv4>AP1tMEYe`JmrN9@cd#n|_OLYsMZN_Kk_9@^%JQ+S_G?gKwt_GvA`Sx*7CD z+!8Eo*Z23ZiSH9!esayL;;+BGsHv|%_1m?-D-WVILjCgQF{ z$GC0UWz~*~hTK+2IBv-iL|ceFG5rK5e0y+r;rKA?FR@m3$?`RBV6|0apKh3(CvWWn zSHHF}edPROTeC(c;LfEnF3eBIt*NtdCMYBd_BM8wCv8EH@zpnarTSuT)b*3290DFG zVab8fbL(D{DXz*6Z$?MPk5M$wkEDO{khCpnT3T{+j?(!_@$wKCK3cIK7rK#+$v=U( zhTb4Qw=e*7CV|C*c6+^F!)*9kxmQUjTScRgkI=>#5n(C`kwLk z!{HDt(qmn5pMaJGuUF+(M>FId23vr#**P)HdVsG(*O+PS0Bj>#_D}E>Cfg$lR1NiP zEWDN1yPkYqKbhkuFyakE5X7k;&m`WCus4%>5V75cSyL-`BqB2OLVir|*fr(`S=?gm zIkGCTPGzQ^uJBt5NAXer6$_4?T8n{Dz85HZ6#WY#f!1b=rVz+u16R8Ss4B?rY9oB zCWGda3hdA@0imWqWT>8>sl$~n>*KQ-gAL4PiV1CW(@YFl$wrlx8o3)?gcxUOn3%5D zq0FR_H}Sz6b{uj#BncbkE=p1Z7x}RXNx6QSUho(&z(r5Cl6qky3~5Qstu*?%wYFcI zzY58S^69sBhGT4y@E#&1Yozm>_8H3%NZ(M!*8c}(81e>&FBNhk6- z_j&5vzDWe4z+q$Y3^btsPi?H%e_*<2D#}!q!+0KaOVfF8&>@{_~aRY>+}Sj%UMYiCGUF#sNJzobCaNo*Z!{JPZSwAyoTKo=VT)JQc&&+gAJ80>qV z@RgYFbE~CWVR#vM?kSc;5NkNR_`ww5(H3oY_9Xtbom24WbxX;G|6NwC{%u$_*@d!j zo@a4m#hBgG8i50Lw;fi|xFLhU60JVw-`v!4937$;`e_*F(LinSbpt-VEBOLw`s4Kv zT-TF{w5j*xS$8vEazvB-8Oh)Zmn{d$XR2_f{3NF8W)<#NBTky~6RF0qlh%^6xma!_ z{N%=?CwVG=R;b7=BiE4qWhW$!8Kf<-3i}z95F#n1v+zk(;-_?7iW#F;9hq7TQ!w^5Me_dkWYdZQ(Yl zVYZ^$sWy3(fd4{^;!+yrcuMTn<&*mYzNt&KZjAJK5yC|L!xew<$->?`x5IlW8WB==-xo|=N@Q`Am?o#e(p{? zHtX9fsn{Fw{Pa^hZ;&5R|7imvkG)|uHBD%zJCy~2DTzD1%0It3^H5~PkC2nxQ@9f~ zf%&GNGH`iOYPL6E$T(fJ9+GI;tNc99FycfKrhddVwaVt;DO;66a_8NPgJ=d6f&AA^=+zTC5Y6>#d%NC4mhp9urh;M7`xU`!f)>n{>>~?SX0#~%#_4kOV1D9Q)yO2jeo8t| zO4%qN!D<3HBy(J7xHSIMv9NWheR9?n*?OuH7Yks2<_{Bf9I6RAa%h+wPw?3odVRd9 zC+@jm8E_ZcUo)w*b*)XTbDnJQNoQn!evptx`nmMI&n+kvO1=%Z{{DB;z{0}I(?5&Y zC`x807ncSjAus%^l17_9s_YqccnrQIqz(bwPKd!>u~Wyr3W z|K3k^1B0=ulg_6hry$SP6JxI>$(`xi;_V2z|KrPsq3R;=|eKWV%Ql+ z$l2c7h$^rIiFBWgD<{PyalHC_g{!h^VG5t~Xi1EYCXv0|5#4J&TQK__*qJJxG1+50f*Dwz9+554Y$GLc<9MxFE)!0acO+Iho^I%V>2_o2D&ocRsr)yeo$Rq z8q(YBHoqs4JF{OB*4G_gLa+Ta6vfWw1AsCzGNBh+pBNLAPxt2gD~u}tI>Zt+c`e`K z;NSq{$w3P?3ZVsdwLNS7S&mVA!t$;eB!b`_+Hi3)pep(HHqDJFjov@*+e_#XV(5kW@9M-m5mJ`T#L6e^N~d$ zp2SR}Cs12k`=<|9rv8GyG#-KA(l2Mk1DCs*ts(Qxem}#`=Ba3Cur6|Wy_SaRz96Pz zQ&48IkagPtp7EQ*g|;?XokH0`zQR!b33N{nS&kM-IG%_%-ZV)-xuK!_XL=fg+nU(| z__{GPK;8_E+OSK1ymCQ*TF=x<^y_Dn)!{*pnyUMkmTYk6eHnsA8)I8fG_xMt==py7MMKD$M{{%Y=JvMTNRhH{Kmc}Hlep<<=ou>; zn*fcRHS}7{5nE7FU+;r1cnXINkpe?I5Q;HCb6uj@L2NwMkn?;k!96RY+6ZG5^rhbfQ=QR7XMKAnE`L|lAm(+AU62Fc|a z+&JQ)k1LcG;-;derc3B{kj^yHsI~1R0W`O?1Z^T>0+*wh9gcIjyuY#cLcGz1qHvhO zJyAu=gr5CnYHDiH$B@{W@d1qi61d!h)do23hB_lc<<2X67$~RhPZn{a0OFPXmHp_Y zC@eFR314J#wkH+e0XPrCEe6J1M44R`4F14Ci5r>2(92>b61Ipr3$vVB!vLXIB`u1VJsEa6KIQx`zcwX`JMt%c}>XT`|81Jo0 z$8S-Y8TdEt=Io4k!LKy?e=Dk}ggS@+-#*NvPljPYiiL%RwfhD*D5KSe9CaFVsOQKu zpDPo|*BA?HaFvaITMD721<1$AGp-%Q>$7e#R;u%*f>R+1DUp-rx|KPPusecLWP#nc za98#!b?>GHP42?wk@%3Z2OrPH;~*pmcOf5y(xM#Xzah-pDFn zd2uSyK}R*uY*L9xH_`iG{Glv#gIYzX0M$&wm&3b$M~^>#I=qWQbo-KtTC(~1;uLhb zBd&ee|I+2nWy|8S7)T|7rf*z((~r(Ex_x@<&_Ox$ap;>!LZK_ssK0+kwuqAA(~dz! zjK*)}ZHFa`gqdJ8ukF36et;kPa!0H4HJuNF7yeE;vb6a!$xqBT#z9~_IT=56^3|3{ z%Wu|ng>K#wCnoamaw^N;-8WP=i>HXKB`bPvC=80fDRr$2MQE>3s)$xg&FO_~^NRT5 zl!PmDjP6M_i*pmdte=XUSY}E167d5Qs|uFzsVvNh_?hwM$-T)WzWU5a1@ZT- zvORfJp|w;eRv#|s^tgD?Azt)|&O!?oL}ivrO&fN^SK>(0 zPs{xn^X}IZL3yw(Sh<8WAP-#2`{0n~``8gNYuaicq-}&TIMM z#WCjZ1Igs%c0!gLD$t==I(vG08untC*X_a<`7*SO8<9`Is$gla@^$}>9uU_^?pwP8 zVO9o`i=*|y&ZF-F$O?&dszJZ=Mljo|p<_76CKMI-O{`IF1CX&)Y9U|#I+xtg-m{dD zJ7Ob<;S+JU$TsB`dNOw|@uNfZd*z9UQet<;ZUVHcH8-5!^^<_f9WCl81p>@#v^Lba z1f`yKl|#+=@5P*ar&RYAGS)R~1H)f@BGR#6G(iO>V#daQ19P7-A@XMjci3~d(mQ{Y z^nbY0|6Jz)LmhqJ3Q5;rWv{67rvRCH->~uFkSa+(z@8q9oz3vKSi387D0wg@KDG(Sa;`5C8;&taglAhr6TxqfEp!j zmY9tf)jr&p0o^3YG(5q8HvfHS>99`@sxxk8M{`b?Gf8PVC8k%GQ|StPnJ1B0?b@)- zlRP;e@>3p5AHTml2j#TFowJ zC#R0MyA8%uPiFeG5v$~knctK`@?S`HHQ0z8y{@KO611p(P5nhpX|sJCyKj@ECp7Id zrDlIOHw8+!9}1)?4E0DyEz`vp6R#Xd?(XjL-_MSJk2LN|$ThUE=s=X^%4|FpeMUmb zycp5_pJn)$&>OZxJXeG##J+3NFHuGnh^oEO*dw@Z>nZjls$UIn3YJF)fXAn9TxLTE{p>x}m51qK<9dGNmVA)t8!jE~ntSGJPNpe5BmR^w(-^BZ zwuxpoYYQbR{)fu64?bsgSPB{~CkRAkbbO?Uh())YJ9VqsB_H>WA4o@2@{==LXbwfba3wZPdk2)iISBL#+Z6@V5-^XilWl=Yg?mIk5=)^`kA9Hwz+T_INaKO9K$D_lMMvryI zc [!WARNING|style:flat] -> 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 0470/1057] 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 zcmeFYWmKF?vj#d0PH@)*cXyZI?gV!Y9^4@$xNCsm?gR_LU4y&3yF1*M{q66Zv)280 zf8SYa*37(ZRn^s9Pd(ies-z%^gn*9#0)ddErNmS~AP8aLT@MEXJVDkmr~rZBFResH zm83;QiIu+Cn_JnKfk0BBiAip1m=-v_t0~8k^;eBoD~sR>uXufNv-$7&6;*0z%CUw} zq+ua&)L*}q7{ZGii-`R~g~F_|h$YVIHWa~BY88=_Qy95#y%gA8`qTD@&Bv&`dF@i43myDz!eJDIZwP@^1PKmI`DuB0d<=p5obp=@I;1H;>%_?JVxLH!0o(S_Q)E6Y9@^9Z5 z;NoLKL3JT**G8|o7TpE{c!)O!&Gku4ANg?ipEGmsR%JpIpKD$Zx(8x^f`rITVq;*C z+u?{SV2qMjcZ6G=!#Ovo+oWWmv-7_cB!?5@qBOwY23P(5BF`?wH(qvYb^Re zdNjg<5+;79GO^CG1%agc{YuB*lRA+?j0q0QZ5R0H-5fwbhWLMggM=r3hZ%rB1_RR$ zr3oTfgIn^)IfErJ#4!A783Sq{CNd4sBSyjWe_lhShE-pKvIG^jYmGrL`qQoPHXy-t zz_~-Y8=^NuIjsq3ekF#3RVJn-hZqnUjG;6Ijg!#zqh0uWXQNUR8jBKAV-0?F6@^w} zQA1W2jU2<<<9CK`ghvuV$#MjAfMn>T{(<kdX2k{Z|?D2Ss+4_MUHp>Fwte{ zz~!VQiVvpgnKD{no@FNcA^q2j9-A&qy(iUJuZm<&^N7=iORnZlhCKWt_oQxDfV(|Yi^>K(;bkVuN5 z!Wn55oDRJBH|>u&>&QlNRbrUrCFl&HFWs6OjK+AszPm@>{kTgKBc+M?D`OX)}>C z={|(p!x}&v@U1eh()ohhSlbw0DPQDXR9>8(-0m!(;lQ-u8!%#kO#ni`CD;Uf`BhEC zM}(;Zs^en^Wk=fA$&cJ5SR|4pNlF!C@Y$swG1M^CV?QgJsko_H7ta>OcWN4`8+}^W zTnDeKc0zVKk$xnVAPpeJBgG=c5qHm_R>o5PH10l5I$o2Ln-gx#YFuv|YwXpd-5u0} z-JRcU+fCMU*`w1V*^NVCi5`XShz?86OP(Q>L%~7rLq16nEv+B_GZ8(hI>uOLTQ)t> zlNw3ZTIx~8K3}aVB3>g{{hxx+;vO`V%g@d1lQ2Lo@ifEyzx2S7r`IX6OC$MrcWih=lcN4Y}_!FxW zQWM|PVkGPjjt>SWJ|^I(si}WeyD4%mk}C}>Z7eY_;Vc!@$Su+;r6`^*T2}2VnVjC7 ziY`I<+>YOiKaP)u@5XKopoSQ1DjmyBs5Ty}0^Mg}sQG-vuNy|%DQms#vO0rON zH?bnluIL0}S#WvOv)A+7v(7X6>igC5mD5$z)hezfE;AA>;t8G#VmhK5t}A{k=LCBg zJFmI(>W|MyR?U44eRuJp#qhIvJ*K^C1MEw+6V4Hga<>II6ZSuh{vQ2x{h`PFXlZAh zVeC8eg!0ZdoI9K{eBY(ykaTvsBCSfT%2ZQB=c3F~V_l=K+1lbj+V~3d0IcBfTSw zKb!QJ8BZ8tb$fNqbW=u_jmj_OKPqt4+`Pum!-s@#l6{hWqjP@NS&N|Jw zxkE60stnXuY*ufHZ}z+CcyNDIyW_u|z8$_ezRZ2Fy|KRVI zrmtdgAn7M5;ts(nBWM=5a}6<-l9RHaW@KlsWpwrp+zb*WpzMn1y6BYPDzW=J=k650 zRd6Sd!*ywIZX<{j1&@MYk6>W#&hi=e60HI)5zR@?YsY9uHVLWp8wZ9Jo)#ewmKmNp zA;)mN=?BwMF&)WdiP7GS>{dLPq^RYyyD!c&!E3A)6?2qwEg|bLUbN&UVsnNZR_O6(tdM|5su@hr3!;D zS6{-MR*sPumJ{jXo7mho_;ycIFYhiIJWRakZ`6FEUj%m^16qQ-qK}?`jt;h|XMIxA zuF~zNZ@vzEK`|35I|^UmQZiL>wh?j_vUuHtID|y%`P!4xg8?gmQlC5~b0NDzwBWsG zUaV|2ZM3mI)z!=zT|Gi3BYE>di!qwe;fOP0>yhdYw$y&%xxDapGrm2-x=9Sp7#4`G zfH7#9J)Goo7=B)eJXDyiyqUkzYc=xN?3BMu+qECJcUj{6v%F%zw0aYM&SVQo33==$ zcj}CsisXt^PSD71BjCMV(Y1Vdt9!cqUQ39T9iQ3LkKQK2Ez`yCLF6fL7G?51qrk#F z?j`qYXnXub;e?{Kulj3UqD5yD_X+dL>)+G)T=<>tq18A)os7Re3Lg5r6kOBXw#+_8 zy;kODJwZ6}Oc(}?!#mH6cV63cb)STujV>i$b9bi)9{pumvNw3##{SnPN3aP)G2F4H+ELmD`AXAG?*)vl}zYA%NL zM+bvkP|u|aX87kmp+G(l4?hhU^1l$c5gA-s8JL2FTaZ8yd=O`QFl)HzgK+V&&7VI! z+k$K??>>2}e@V#hz-KToE2AF;`-h8FllvQXm$lFLhsRzj+JaQZbuWEOJ4s(o8%}7E z6j~pWQ65nWRqM1AbRPu(6bSDirR4+yVN<-lA*5Bv&j5g!Zl$K_tSK+YYhrK9Xk=<{ zY{uwr>j2aSf%x5dfv>h^&PK%Uwl;Q7yzT;||J2|GzP~+YA|?K(inFxgt{06~ySJy`&gKG3rEY4!t zYxMDHoo9E+MX+*ocv0XskiR&7P_I#3E!g8ct0{eLw<76F*0(qQtq>2}{vja^*8T?*yB zKz5&E#zf8T=zh=8r|#cv9*;>&aTH{?TLU!W2q-e?v=kos(xUqlo+=N{D+w$uDEH=n zh2OtFXD86=*RZLD>b5URH*fx6XW-M#}A{gZ~2McJ$YS*YSijy%kjHgTx@3d#AIe8F&V6Rijsm>E!5=}_&0e;sY}c81VrbIL#yy# zVz*D>bG4Eme6JuIotVPxR$3%y?N_o(x$GuNKe3qiX_ZhbZ>iFL;`a|V5|K?)E>r%rye)g9&P-#&{+AtqH8e^ER-NYG)|41a2p}E@iT>d*>K68jttB z!o!CeeSPR`tQE!npvIskwNE}T8x+t?2BK-MADC;>MjMI@>cG?Gy80=JM)iRbbayyA z97ob_>U+qZ7e^^6SlhBtN{c~t18F|R5?_b_!yL}ZI&O>FAg->;ewti<95=t2DN~Zz zM=zNC1;_98@-@kJ?qey}F>_63G!deWO7tK$oiU)q2nnDBvIR|Lwc$3ew%IyLn?o!A zRI|Rz;IlHPRfAYn3SGD;C;BT2iQR@l_##*Nhu`>SRH*(SUWjU&2JeABR0B`&4KX3ARquf{wKNR;*?#%}cbs5YuYVIFbrw38-O+ZhgN=l0b-4=<&Ji#ESF`l3K z4G5V%EGFx$Y&tqsCw5&2iGL5wDm9y2xQ6wxjf2)NDP4*=3HU;`+yRg7V@ujVpyRa5 z6))xbF*gYN;%c@0ZFr^MS|$1;eE=H{(`4^vslq>?^T>8CvG>(AXMAwNao00FUXEydWIsJe!|Jq}`PC~%MZMK5WJ6JG>N99e(Qn3DmA8L$6H=pN_ zpR?6|I7yH4Cdq7aw$*O7GY|RuEyh|U%AGaTrdqxn{J~UptRvQiD>(?FmP~G5p{LC} z$Y#aLm@`9L&VjtqaNnx&^L*Tucz95#AP%y-5Cq)XBc2h;JE)|xWii=VTh94T3+LL; zN|Qjx-56_^d9PX+pT8KU%WN0fZt_yPP|qoVz?OWX`y=hUe@2YDxFay4T_>sqyGMV7 zGTd(y)YC#1Mvjh043pSJ7$Wpa*^G#SY$d2?;cq?&NN<{taRr$9qZmLO}F@13|Mej)~B(S4fFhv7>x0vE#=i26<%Xueu$0o$O%Vs z3muzhLF_MWK{Xw#8u*%j{D|@{t){xcRn*g!WR$&FoQO4wq#d#h8ILQnJdluvvAuBU z`XMKhnk=3jjM|>(7=J+BsyTktLnmkRQtTE}O&lvtfq+crkX|m%YWWv)W4#VB)X#b2 zLuO1IV4)w*t}28BI1mSqL+$?lKglkEeKjXlj`$0ubUvM=1H=@O zASh<5r97U`Q&VkonB|w9`mI}JIKt$!sBrotFqt({lR@1*(c#1@6M)~u_sWOmavsge z`Y~ux*ldSKMIX!t-hqXrD#)16ZU>zA4>-m_t-WyAI_TW!i2)!=gk*lc%O5T+!O;}0 zhJQ$WR(WE|hto!tx+}xsezrKL1ii3yZ5^~-pGtdoP~>%^`GY8Q0P3~IhE@pTgR@*cI*%O+^arfz4zy=bg=4O7gh`Z z18SrM=MoBaSe73?LdP&Za3MLom2gAp^_& z657i>0f*cLZO-KkPCoT9+EPuwKISRLo;RG8^%U6Uy@kk%Z`KUF?~@Hg2NRd0CA?>c z0WAjMB7U%^DP%NJYfq>57}0lau#i$j046p1nKys9OXG)bFxMaB>1ruX0f~SYcBhUP zfFbuJ!HULC-a18{Ng15L3{3Dh$2j9k)m^6Xv(TDv<@{yOYwr!hSXmFq&lV&8INx>S zjW_5U)SA-`VPTq?{wMI0Ehh=R=o(h5nN&s{p$vTRllt6-rcnLbAc6bbr%r8Pckrq% zS;wV=bsPvP=|rlq?*_u%{vw)*xF`_fa${FFmoq^*7k@*fYv!8TWpfgRu1^McK3m|J znbN-@iycxu+od{c-a1P$^}(c=s6Y**C_Y8p!w~Yn@oxf8JnJvRMCTO2qG0iPgp^v5 z!N%xRn>PN|QG~g9+UIKYVUl5?`5p{AeCI*z;cmEK>@64s>Xnp?vxSY$%wb^*{9ac_ zo0Q*9=^~DYXN!85%%F13q*FE+gDSWx-1)!+HO5O|RWFxX^TU;hm-dKgBuLr&Z;&dn zRd{=O({0gg6-&x=v%(HfYXvf#gT^+D%P_m@`B57*eksI6I? zHoD=r10~d^n)VH02vqWA#EJM^$r=4SIyx}X(T(TC1O)}zJuXa@XJmsaclv_6aVNf! z_)wcXI0upXz5);@;YyD7L58+A-N}_ED|f90a-@>fPerP zCu+QRTS~v}^gfU0KvO7Y=uQoh`tLFsz;OL-s}_8q#z-~T-~5j#3L$)IU!z|) zH$io&5zsMhv+ocPa!AGh&i2NLgFXoPNTmDWGA?PA>(U&|=^BXs{N~7MO6>eN6j$>*;#SpCid4=LB@qK z!3%$}4vx%}E@TR#3o@5E72OQ>uC&U%pVbqb`va(dj_^kgJm+^M)=20fdTw2h;N zE5LqiBFX+<(LXAyB*5w7?3N!TVIfBVvxJmxgTm3$d5+dGxnW-|u=Sell z^7@ugR`|6gGi%G^89nfVGdAgJID?x%rYs1IJM=MCcS&T7Ly%7XIBh1m(>DdmVIWmW zyU{oNj1ETh9VRIx1Sa*?z!_8E)4Obv>2j5f1@Vt<*ln}bV90?e-TSV@h{|lX;j*^hJqX8hNe=0EfYLsE&BqP*Jtkix_$3)65{}161M_cjU)te zsAc7{(R4Bbq(dTdXn4S!04CVq+jj~xXldcMItY1Dx#MP$_z1!fm6d!%&g2ePNN>y2 zOz7xKqeMO~B|9ujBaH{$5O4%k=(iQO-}N)Sd!G2+{bLgJt3BJU zv5+Jlth<`MEyH|G|RT*v~UV9YPoSIRzUaJO*fMOzWOHQ2X`R+{c;!W zf9iMZ@i(anlROlN(k)K{%g}=5e6d?>Eas|qucd?1>**utSVTE@_ilYQ)OmZMDP})~ zt)S2`ux+x40^Yu!9^9XKa<3|==q+IQ9^u`3IqxI zoyYOsgz8Sx8V`KdVB+I|(^M-5}-9ie64QP)}u;+dbVqM~x377-qjo@7h z%2!VE_lL24-eRl(L}9lel^-tW1A^ljOXtd{lTRz$0ly>y^NeY8DcXJ=h0h}jJ;Ch7R zdhl!|atd~j7nr`~^ekZ-(zo&+*0&|rq6FacU-4A!Ry%qFp_!OFO<_SwROvLRkM&1+ zYunc1n{5xxc!^B!i3j_C0PIrgMNG9RzXdy88ZuX^e7NWYWdO-$!8m~4a?aT#k#g9J zRYF-=3joav`19!HEeyW?u4d{CVsGe6P7rca5JhXlCqZ@G#J+wuYqqpKC(TqjWm*Vf zW!(WiVU78GvY9T03ccgcolyv9+A9;4e3 zygY1#-;<$A6F~VA@+FQKM4?7*k7s&dTK>1{^bE}ryfLg-95Xp$Hgk;9t^M3U4ZEl3 zky61c)}Z35&;6f9g7UZ-5s>-@90&VmXCfRvzj=wJOvRBe`$m%;peQf=f59mJ>~CwY z3#PMBYBG~_z~gucXnseeV9CKor=!=y)>+A9CeqUm_7{b>XKxnn-=Q70 zLnPjuPAI)iQCFokJdnYEg!gR zcUs4S#Ejb92Jau%OObOTW#T?uP86sI*s63-1}2HodzUrzOcqbBlr!sTst6^WkqAqRM%Hby4a zKOK*iL8vns4Duk2?W+^}^SYF^3_k$OLap!Pd&h;V{bnnv(UB{WpsO5YygpR-rz;vH zJg)SL)kZQ#rGVj){Xz46;(1^$EeV8*quz5GQ34zwqs>U#AsK#mjwF?v6NXFwTqek1 zGr98GT8gLISE{QOi4-6wk<{D z8~!)Z4YxigVG{LnAz}O~RS!(+!iZ7{+fQzu7E)9U;8aK`S(lhsSUHC5^XFyy?Cq3twNBp?3g|FrFXRIRi=hRT{ zcdqi(faV{ijfBFXlFC;#HW-4B{d!IPn0K5)oCd7&K(c}{Hkd#VfN z&LDkGnaVa40;GKWm2e|h%4u5&O*fl1H)=t3#vu;mV{FBe9X~;tvwR*aLeA$hc>}$@ z9JH!6jni@mN>xk%{pI5!<5fSV_h@yqF}L=U@LQADmxGBC_(Zz*#0<%|cq7Rle$*S% z;3;x!_0`&Gh99WkANd5EG(`eN9UqDV z@I`kJ;`fO^XLRP2T*X@7Q)h}lYeXaT0gl9*@oVZ6x7U8y#PYl72D{#D#CMge4H6WC zH`$f*oGofgjb52|?gIcB%MF$)q0YZ&oxZvEb|xW5n&rn zbE(3FFV<<|U9XXRx0$!%%o1bphl>spE%o_OLu=`H!YYn zq1p>499gEmS4&t9xb1DQ%tb>F;qqD{KBzzdgU zeJ|^G&1JtbwqV<2)pgV2yz85w{@yo*O&Or2i=_e-iOl$iJ)yA9B5S_kD5cu+gZQ22ZKt($Z2Jr*lu&FtbAp~Q$ zXcjT8P%vpU_!kJyaAStSC?Z2lWlfq|Uc|ZRSZ$sJc23!Y)2h|S;?NA@zg5ch!D?RO zdXC6E4aA}ttzSCd^GW@kb;0)N(}xA`X|{5Ep~EBM^2Hp$KF~OE6nc*2^}5@ev2&N&NTcGe zbf88vKqrrXgVqy&XMBn``KY9Qvw|x9W)GgHG8#Gt7e6601D{yo_La9?mon^fUXGY# z*&vPSE3nXj%(UA!ixyn(?5A!9ho1`%G?QHYcHl%@4Ledu|fP!%LgGMm@ zDGc}uRDXk5CtTKJ8neROkndZcCZTNeQlMo60*H+>vA5WckB97l2{a)R$KI`bi$alz z2kA0EjlzxIo|m^V%d-%`doKWaHNgP}Q>PD2TQN7b9bAR4=s-hEH3f4RW_sLm`42yr z7X&2bhH3+-WvUU@Wz5&v&t*+4G8On)w0SjUN{Q5>X#&t& zPx`}b{lC+4{5CC38{Gp(K<}1RG2HS`P-D-LnJD#*K>)bqSjumtZEREdqodmU5yY|0 zXv+zxXZs)@q#+72JF5=26}z47L2lnJ2ND2n@j#>-V*is$0qPCHC{o~b22<%7r+^L#lZufW$Mg5CJop_ z0nD&zHuju2ez;JL2QFgpvnr_DdjUvc6)sFLb=@P81%G2(lu0<-Vl*JDFTEor8DJXx z4q=Ttpmm8$q$`2z`XC3sfOP`$)%?Ov;HSg z&**()TSZosHRX4JKBSp)h){nsG@ukMaOk0yty;T84ov)!!2JR;M8fDUavkonLGVV; zz_HxgD+CDi`nq)NXAA<7Sic?gAE!fmWA@?n8Dv{J&_DsVD#8*z{_>;2MChSWs@3%0 z&|Z2c{?XAgTZy`7Sud;!W_Il*)6JRcw;OzmEaRW$^wlS!*OR|XgUzRlPjmC>9+%^M zv2gHE{K9KT`5^ogA%l!!=MH|g-=96SBw(N-B-Q}O8P_#lxuMst3!OQcqe8M=&7w3L zijhc)g@DKf@DTnm8Ks?K^tkH&$a65~yN&LP>~-JOv^jisJ!oLrV>J^(aOOM`K*Tu0 zM+39vNm!gpC3gEszAbI}GhEiZfMv{0?xQuTWEP$s&|Bm8cYLstpyk!IqO1`_z})6% zaUF{xCzTyU-*&!B0UQn~{?i&QunXu>e1DF3b2s+rA7ui2FR6cxEGwcwP)fm&&~CtV zA2PBW*^>hjka=`{vlY3W{iYxqPXUAwv4Dssz!_bVac{VQgPE*xe&d{*tVe57i|pbK zz~5lPp%W`mg>PrEWaj$%0TCo_q5>9!PAUV^0}KAV#WhyiBTGfV!M*VN(-Hv}Da*M0 z(lq{jT@C5r5e=XPPpDjNDv{ey41PNE+HhHkEd&bn*^dMYhK>txZ<&(A)=nF7W82Ox z3B9`_2pq!K!2r0#o9YB_$^IHLtM=vCGe@fASVk4lUC{T8uYEa>rCE~$^ zR(mg=snjF8wt#;2UhQJDlDD&BBOg`u-j)YEhO05q--ck-n|jmy_zHk}Z=-8h0_u5U zwRtc`om6^we@|)zj(+xd>GE%Z39-7>nQ@29GSfTc=^A^!CY1d-pb047dl5{c6L?Zd zviw!T!yk|i61ChH!P&3;#K`6Cpy1FenI0INLT+v#52#M*qASKhu)G>V8hPj*2vjGS zl6RJO_LJYDXP|hWdnFNo z^A-z;&K!%k7~Q)MPkuXN^SsO6lcchs>tgjn} z%@H<)o%?wBHbZYG_>g=j8`Fo*=LZ~(U!Gy0mm1``>{hdN+)jgwd+5JOV^HOpN~5dF ztdb}2erL*;P3e@z9e+l`FekJ@e{0QiFm*5M`~=*0@OZoL;Ew1x^NP3<%FV@UdxE%qohW^zCpW`ublr-vgF~^*Qxds0|S;{@kq4PNv$&#JjPLCs(k*aH@mh8FMb-l+uf&-fa_je+Q znOe}l)*AKcFVtEK=^-?{bd>tif1`JLU{7F?myt=Ph0d2gkqt%feq3WYdAYkAP;GQR zhS6&v6t-a0%bv`6d_EiBM9H93p#MOtM=q4epgl&}{b31D=&L_GkkfX}OViVqa-QbZ zExL}Yp0i`C$dCw1Z4D%aelZ&no@dQ3l*%E%AK(9axAx^~ON-ZegFT(wYdtWTNtqeN zN56zR9|s%>1vaMuK_F6%o@2}y9R8kICHRfzCLJi-8j7JD>&;WFbaIrS&A*LDv+Rc} z<@L&AcUW*KnG&NC+sso8FgyvIW*0H8A_8!@Nx*hYs9R&RZ2sUhOu2a1yry74@5e~1 zPW@qfFpi}m6X}zixO3v~BOc4c*2{*jHI;c|=;Gd8GaD16z(*n%VnZ>&M^HS?qVIB= z&Q9wv9WLu9wLCyyzQ>6ddxw5Z;1=;NTpdJvN5k5>0Vw#NQ93{>%V zEr!bnSTxo_wF+(7V5kTnyy8mOJIp%V#I@}YsP0y*<78qN9$*P#sg4^5ozwOTcwZ-_ z*Pr-07{rwNy+QP1!=>I_vq4}h4!Xd0zuZB(e{Gd(#(9^@keyEJH&Rw#VOU}+T}LZx z@4KoM*<`Z87KX$Vbx4zaF zFq{?n2waRneLX~X;_r--Kb+q{=lu|Xj~apt&@HcP{9hIb7yP!q*)hGJ?b}?6(WR<# zITcA|mwY`*$X#%@)Bj))qSqH9AOM7pJBX}~&=2oEyd#c#gnHre2mWx9K%6m&nD%YEGDJO7m{7YlCW#r!C_)|qI{?mZ~?t4dYrsl%Bx zRc^FizUQOD_(wMtLTGR{u=1V#d%JYq8^V1$<1+=2Mz==wT4h8jN25 z1?=>6KDt?kij3gLz|Hacy2~&I^*n9O!l>?$`nL=wE9rx{P6dVIccEKuH#r<(T|ZM4 z{H9R7Z#@e;_K|q~Xwl7#$B>9&bdxsolBv;+4aKh@Yz47Z=lC2HF>*w$k9E^Dm z#oerVYlN}4%%{)#;YjxeIKe3B4HV-078e0RxB&Ye6je>`_NPyR>fMa=Fsuue1pCR6E>xT9tLM z|hLU{y+6U3QI%iHo9Uw*L#;kX%c_p)Ul-03W%76e`3)1nbyQ^X(@M7mLfLx zElA%U2j7qZJP5y*+oxD$+qQmnu}!x>kiER13HO$QQfjXQ#nM?w})r7-J-sBIQ7k?;?AY6|~b z$PdbC`l3<8OT1xc%-2plvvk?V;=!T8c>C*BmuflHyFwg z8nEmpbhF#=uLu#sNou0{8bu^%hE2rpDx*JKDK0t~&k#=!fc9*PtO!uWQf;6))4k4@ zl9#v3b@^X`0d&EHGJgGec+~;WU(EBPhFcSXs7_o9m4Mb>A=4Fpwqlawc9?M7I*R5g}HCN+@za24g1=Z; zb50P2ji2hj4Sg1Q*JU+RC)9H1w#LTPKOBD;`&ZIGkldjPis4-53lE#cKc2Y=MbG3P zMKarlE^5%)IfnDw9+QmF;bKYrK*+AdM&^Fwd(pt`v>6^AszWl+tHZ|8_gdRkl7XJj zlPmfyp5n6=db$1pF86)r?TI2vi=$Gsd-Q8|KhIm%7;we~&gsGo;eT%Qg~|(|?3rUt z8V2LQY3hU84h3TX+S*(+jaEwqf1<7&huP~U?n%(*`e3@&^;o;ndbrTD!b)IwHz_{@iKl{ zsgYM5Ok&Zqr{Rp-z86Zmm$r z7eVab4lZ&Qo9{RaiZjR<_znCd`^A87ghhnG(A>vU3;532R=%Y^Z z-NAIJ^T8Ai0wUs+Yy9Fuowe%q!On{Vv+;oquftVdZRqphi#Qm<4PH|lMBsWLTB+Yw z&oYomLFV$<8r$TJ`0F)8z{~RQ50=JyF*Lt3j?YtBwCW{FTm7*vZI0{vlZEWoGxQ79 z6x4T+vzM(cp4T~YDS!ErUGE>t+3n|PIs1}4LmboRSt?Y!0?G-X=;?qv1h7h@u^1Ex z?;kov4gV(Tzk@iP$PYgrP_XuzDpIy;_Xm!$w*7)b41O6y52s*Ysz#5-QY(|<^SPE; zHFXw_807hy1O|1TdFlDKg+qZ)(5uQoc5}ay3!ZNZx5j}GF_L-^bAjfmXdY9e}fB-xPpfLsQD3a9-FecDhChxeUB7$!|z*<hpSG}1%?2-&A*F=>wzBVnQ?QvlD%MrZ; zX2S&Xk_Q`z45p~*!LjL+|0HBta9BIOF*9X-9{ndQeT(O0wy%IVkGc;XnxaDNJDhf|?G ztJ+sx_#BfOPc>o-PAv@vHk&zSUT11*QiV8jX-mM93W#9)Up9*!_$d@*w`DO4DCbFJtjZld8=9E^Fw^ z)D9`)HDm}`gtd}kKFgVnEUY!(3v1Eh_%x@nO1=^2rQ7wc;J1r5z)4`hQ|RuyOYY9S z@!TQa8guO%Tsa_toJ$=IT)G#9Lx*d4vs42B_qESv@dreDu)2YZ=c2%cA`0KvLW=kN z!F0H1NYG2#^9p}_p##-`U2+6~6(Tg(M+R1f4vU@Z+2HnTxY z!29AyrnKumk0%@W7MHR)bqMmZw{5I_BKoiN#w7mX&fqyMI74r@h991*J>fW$IpX2Y zoWOGKnjzx!q8IkcbuYp|@z{WZsHF;QE`_3}@t2*o%UMmTOhlBpK9T~G)dVv-3-=Y~ z(GT^Cgd9PTq}>sCldTI^_czZHW5-^%wyq9YI>_#CD-*RU4^%PN5V`Y&hsp13IqRCh zs)Y`W{AKm|@pf?o=HgL^!EvwD_xVBj>2AggY&UHU2V~qr^2}~Ca#M9?qQf@-ov&-Y zo0wO7Sqgt&q1vnnE7gH&EH)~IpIIcLL8zk-W9XHrv%l>PCWBfgj^L~oyDL8c7v?8! zoU-|O_JVs?ztz$mh!AVOO?*0R)Yx6hySxrx27ILqo0+={n#k%Q-DdZ3Y~pKRE3f7R zR?<|Bg`!NRU`ttzN>JvPLpQ|KQ@sKyh=&t`L+`a;ag`A^;S|tkMR0)}n%}x6RE9h` ziq*24wZ~N!3ApU$GA@p0U)LP&)A`&Ae)2eJ4{CUsoCqQ2&9np$mXvJEj&rFCCBG%- zSZ@NA&f3SV#yC#+mIleSxt(UnKb}~c%+kW5zgTZ;}^uEUnb-7=m%Rk(8 zIJUZZoxfC8xub;qJ1?yMJIk;Wn}w&Vq1%JB8sDtv`-vEXR&MVvckA~UZw|fB?pkNc zb<%kMw(yO;VjDc{F8J(!m@CH0mrYzsS2Z+1B_2XBtW=KQTgt!9-ts`b`mvJEux_VM z5w&~qp683$Lf6J@vxgI{o_2cTxO)ek{+*1hs^5XMAd89RzsnG-UD^p}d`1A4;@f_g zr>gV0+0@_APws#X36ED=bSxy|Ddmg2?=Kp8OL4eyX<@~;F%9TluWK}~5a6MfD1a?c zw^f8bqlMk_{7CRP4Wkmtc!%9~fqkLMC~)N4!}XzRzD%OC3oT~q-8GI0$Y4&6<1*)# z_HMAB6WEWVGk9eKsa|O3xr&riXpS-QDjNH3#C!#{Ogw z@Hd2%TUgt9A7Ooqk3zrpe44qdBM{*lWZEad+$Q6|ecD6D0b@%pG|Y}!T@f_yu%Q$- zi#()^zdzJL$GPp~vT;8op6&vvey!;upaGcUgvUGKEx}v1>YWEN-hDxxor^kxdMdAS z>~In*@+u@G2-$a8n-MWTwOEyIPrGhb=-Fesz92#=DV|ok=vclOl$x0Z7q}D~Rvi5! zh$tXPKQWBrPX$TE^msW+loOF(K4nAb0+c=;uYZA5igR zPM#0HuryHOh2;_)bq})4S}MhU)Ob@?gXB5zA%@-&L%v!~R61{MX$|Q2n6c)cQ;s-< zu)T*GruniZ#cnIb1Tb+Wp$s1MdcOE{Joz#i2|;&t0HlwQHQf0yWCf5U)d7UdX}R8H0m7Q_)MWmMpO+$_YYz>T zxJq1}D~kb+!pJOSvn#fJ8FqutH#4j9&fNzsstSw0P6gZ#!R|p^o-~#?A%*KUWWw!1 zUzpTd@r3tW*;xqWL#S{V5cyCs(vhj0$u~qijM?jYSz<;Fa_z&5Q)Xwl^A!MzH}UPo z_s2a+C^3e{TN<|iF1h&h$3UD;=bfXKT&04su9m4*Fp!4H{kY~kp7Yb>44Qr3zV-u{ z4ppcG3}Kkv27S0*XwL)JizN@__d?=bRHJcJPe6?NRi#e#hBx>{fNZcC_?OoYRbG`o zd!^kOfC^*PBSKgq8}pfiYQ%KV;{;8vkRzD#O93@aeZxQ5W{K0y$|lUSqBTha%iQ3D8Ne=tw8+pf8XE7=lOblc>rSXbHpt#AnLM~ zq1r^lZ)B&7uB0?pyr4)aI#z^P@Dw;=s2{BvCCLc# z8E}oR1ER4!s#vf|S@UqJnRor}X#R35(Q97`viU>+%EDLIocvK!HA4_Tr?zDEFZIjV%G+kPj5Yt_vz}*2!%eRdse&U+M_*ld{t};h=|hfS>J5N4w_l}- zims`D;XmrSwso#J{DNn;Md^>GGijj(GA)ZcEvfV>ZtrpHjk3*DPra5IgH}44rvqr% z)|iRx#WjNY8v^7JK=cb77>1oXfsOSNT#Rf=>JHg>9e3XW=P2VUGs)&`m25Vtj)^E0=44TmFM{WOSz#>AAG*{z-r5o`%am zuM;!8Y~rEQ-(rX*X=AoOH zpUzqylmwNg%n0O%{8XE1tIhU=pwR5>4h)rv{FfC=ZFX5qFd};GlRgc;)crYl)3v}y z%)nEwovey{nq^prBr%p1)wbWW-pDYg@};fSA&k9Mi{TZY1e}5fu-4w#n?sHsZRK*G(9oTa;VIo$SkhEr!X&I)!_vGfy=;EgI;Mc@Z1j_{K8t&n2pyBhAL z-X{bdLa-cz!OZYyYoCDpJ=4_YI{&#QCf8f3c)(zCyQn`a_i2gq_)=JWR`qDzvBVDb z5&7fJZ`4-CdH7dwT54;eXWl@EoRTL2yli8w!&J`Un?=de+N@6hTggyrp! ztfN6X@gOi1K+En-uV~vtY>ap~aIOK5qvQ@xUe$a*P8o6U`Sl<7AZnr2-M7R&U^jINTY2Ft_4Qa!#V&axk=rgbjny3`f_lJZdoQ( z^Wf8Q9fI&xmvj4bxe!?tMOj6wq18DuTmG`tE6W$(tR%^rWgWK8M9!Or1@=rWS+db2 zPcYS(hB;oX8%y+c@6ZU&4mW&YADFfaNZrVNg3pw6-Q!RDS(HVw>B~q--huVe2aFBV zt2#t$AF)Y$8wDon@ojW)TrJXq^qmBrD|`@z7#Y;{qbiNk8<8wWm!tdd4-0r{-*FiU z(5s7;+x6fzpkIZuFMIuAgWgTS2t3`h(}z?)Gu_jE`mAe;6~UG9we-5t1H_>Bi3~K| z023P)8^Z_T1m*eSzm%gEzNwAWQM+CcdWfnX-$Ia%#_Ug|I9}j<@?DvW^ zSXV#WWIfUSZm1oR?|gR($?ZxMbS4KXzD@H;@&=7dZV~K?jhO}`z#NmU(S{(wa(4f) zY>tAs0~^*|q7oxP7n%c^tpkal(S=x0P2ZH6g~}!X9cniYIYDLLf$B_)Jn684A;9vAUmam{>R_%`Xg1#mcY~|P;ky;w>=4C!?m4kuBW;`2}qaw!y6_W;iMT5KK z0At!$)OH>20>ZT}f7-~1<6>HYFqn;YS=|2;|65(;ZB+Cs2U@V|rewf#;uzs*6`pkK 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 0471/1057] 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 0472/1057] 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 0473/1057] 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 0474/1057] 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 0475/1057] 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 0476/1057] 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 0477/1057] 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 0478/1057] 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 0479/1057] 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 0480/1057] 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 0481/1057] 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 0482/1057] 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 0483/1057] 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 0484/1057] 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 0485/1057] 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 0486/1057] 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 0487/1057] 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 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 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 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 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 0488/1057] 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 0489/1057] 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 0490/1057] 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 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 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 0491/1057] 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 0492/1057] 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 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 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 0493/1057] 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 0494/1057] 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 0495/1057] 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 0496/1057] 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 0497/1057] 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 zcmYj$2{=@5)c9DFrD#Efu}k)uF(?^h?8Y{BS;q{sVi7$slohThJ_*v@10k1w^TmS%=wm7nfcc32~HMOD-%1U%H2u{c76RLFizi5yu_!1px`}hzswitI~ z9DQ{?2nebGQl*n+j18=iCXy;TbexDIVCX;}gC=0cdpO(MQVEo-Y|2bj|ao0wpY?QoAbpj2nRj?pa8^eDN1YjtBIB)VlHf4wc z^sg6xh5dtlF#o6?m;fA_zNU&KNS7YV|AIzm!TlE|qu>w&YoxuIjwRF}1mPa&U~C8d zr-bZAH}-$Rtxs|D@%pDD#Ky)H4e<-qHCIwLFhyDho8rxoXg4z?#7xxdM_N-(6*Lt$ec9Ae=C2KiGh)leuel!LdSA=J-A9cSf*Q+CinS`)0b$#6Y1m23pJ zaexyoP0e(SiN3}TUIYxn$`*t~1%d;?)_x{rsJ5D|udgLuIRxw`sRBp%d!lWP0z7;S z98mTIQ&R%UlAs5-HVmW$7{G%J4Q)^$6xB}~qeI0gyIDg$=(YqHyA$b>_FlTd>JT)- z3ll)U3N%(GE34@c5lAA!1mcgjr4WK`9n_3Wl%R03FVWVNXstt5vh|_(852-GR2_R= zbqdwS)F&_mW$g>G^o3vuB;x=Rq^CXJ&f7Kwqeq|`fhdpwDh6(5WCbT#sd*UT(8{*% z-d-3VI2LKV-#Q*U}Wa2OG4SG>bw6n z3uiX|4ohm$rJkZe~%rI?tZu*BLKi>Y>3dd3UXd? z;;^&suQ?u=m1K|0%Ua`;7QsXZ7#nkq6&6UihJYYzfn8`}aD1pr?{a3&sEJB%VsHuC z0XGw6#r*3|8BD%Q&SiqhD(o_QEO43Hao_2y2~hJ8HVNbFe^64*_^T}%qQcgGEf44qg@?gqio#gfPB2^iB%I?KKJm)& zLsG63k_23z5n*u6JPCL&TtZ#?K5jPEp1{M;AL~$!Z|&_p%fiCa@$qBp*3v+7a&lyE zk(sfUjQ~T%DcU05+-sxxoZxN67GSJ6Lc2=VWh|opIS)5LGPaXW8LPAPPOjML%XLSTMYNiy%3jDfiTB;~F!2a$| zOf+D!l#w}nI=`K-(RoRg&1;mg`k`v1OWTP8zOhj~R}Yuw+rxYcK#)8a)HEjrAP(i3 z#KU%%2O-KO9Rq`~@$b^?G{7Fi+qZ9(!ghUbM@PRM9v&X0Uiw{sco_EX-MjIFwU!S< z)r9l`Zw95YDyr=3oJEdhm&n`eJ=gRYEV$P?Yqc8!yn33M7Pb0#Sx@T+)E6WX(Y4kh743*Ff_O5BveAh4Ow7#8uHW(v`L)8YW|ea7h>b$C|<); zFVd&CamR;ynIO-^Mp9lRl4~pZb^CMt5%FZ`1l5AO*iEzU2=~iB5WFc;aL21JYsti*J57+h}-%R*f_?Mkd(F|SFJaHL7NtT|M3 z_uT{tdyPF^7KAiUeyVt8fc$am@M8TVpHaX)`LY#rVc&Hwlv2k|+Gp__HjD{?|jQip| zB|O{xFb3CK`0<%dly=3j5qH&UzhHNRW5h|PLRj~b9u1NSP2pK zkP~g#yjpTnZl<)4lQp+YlhxlIHqLX&kc=GZmXcYDFD$=cu)Jt_KFKCN(I6ou>@U^0 zxw6~!-1~Ueug{F_^-D1f6Z-ongEXq>=2o@`G_+{#{Pf$voxxpT8d+tKRh!sd=L^rz zi73($ifOTH9o-B(NM376HBH@Mzvmd;PL#23E?|fhT=3dIX=!Qce*@v*%(L#5KCP9S zGa&@<`!xKZVZ?KTU%%IEefQ6y^?-iH*wod@&&p}%w&2nHon;($c;Qtzg1omFl`l*HI6Mb6%W*Io7m{i5No zTTA?3F^$;|k2>amkZfiM9Bicqx#FbB(z1)&NVTO4;3dzlOl1`z@l!NlH*3IGnD2y+ zZ8A)M2+=Sn$*NmG{s1N4pXbjC4)zsSZMRP^g8&VR5E4C)HK;~>KSiqx5M;}Tsw9uR zQ3F(N(okD{{>{C#SmydyXQdZzUCG~u-+!2PxZr;GdEn;IRx;}B&i$2Bo^;GJctrwM4y$%hC(xO{& zLZ5i=vZ#wOP^pqAJ#|vydfoUL+3Hee9rnOfDdcoew9$eW+9M0F>~U4Qw#6*qWcrZx zhUA?q3#my3LD8CXp!Uy(*UX7uyiYQJR0ZA%-X^vWTD??7w{zY#Iu#MV?}Oq^FnY~a zNup&kT9%YLh*KX{aN4f^98?bRgDdaJM#ARoS^1NDPPO+u)lv590rq_dvd2w*v+){jd~+DyV9tA`sL{-G~Yr7oK|isF2E_!RfYpI$qO!(r*m0{6K1(T&({0c&Y2 zSfGMDqH!r`_TAmH1&O-m>z6f&Ka}`6S*_>Ze{O4Qo8h0A1k5`seF!hPRu{+A5zf@k zuXXjFh|bDz`#UFoD4MmBvRcQ?c5yR_O33G**LpQ#x1l#lejSz$`_Yzm8Gpc)S%O*k zRuFWsQk$Hfj(Gq+JUWtOha{muzvYnOpMV6HGK>?_33=03R)^a z=d|H|eiG1?I59UTEm9E80IZd8>DRViy*|qOtD{Q4PwP=O>Ftx^u|}$3 zuht&3%PU8hNy^Je+A@FW?4KO}G!4SoartySpXA;r7(a_^!O$ZysTKEt_?gZEfQ+A@ zIz=KV?BnaOnz5UIoHRaNZ)x6rn;>+>=95(`!WFN|a^kK+a61On)k|`O+s(^7i%5Sp ze$L`7LO!;A=;fK#{u$Ufv&X4#$M=l=MvpGpr<8FrAAc$B0{ohN=v^Y^GsKh+>QTyY zEOTxur_2~F%v%nAex%OC=<(+`@40x5f>XWg)?z;!yBHIqX?r3@#3)M*Kx9@rODkJU zC=CDN_}0Zv79LiO%xU)8_ORVLAs2T>XRT&*&5MfbgA3UrUSGJ7d9bEf9)3{c9$f*EsbgfT{hZVG z^t_8`QSSJc@=Rn(*xvT9m^WuN>!`jGT+g26WK2(cEDu$4d`J>`K*=sFD2VjjQEb{w z>3_wRk_9^X;{eG4?0JJ73QvyxfVL9ovXtd~4AwYwUsnI>ZnG#q@iZk2C!&@TU2*kG z$OchBuL<(M}EJ_b@y28VgPNR<3+jp-H8cgGlfVoQDx>M-Eu9_4y zB^F(E9?|A2HGP9JNhtZ!C&10RH6Qs$XotOdwCZF|8RqlsLHBvs`22yElbEEi^TyJ| zS3%U5WohorB5XEj^X7W%!unhdKhj2-wluk*&iPd*UwUkKfaaOFis@r0uc$JEKi$4TV>*6_kAMC z5k9-a-afyVFTBf97pz`?;1YO-?Xdn(-z<%=FTiixMM|xdw=0KzJCm_}8^m&Hryv*m zg$Wk2O@_1=!*Wu7p4&lPP6HsWBj)Y2-`%XryIxdSG!>=zK>US^%Vt<3N7#+9{7bX5 zGYjl&Dv$$OLFaGmDl$%-TOz5_**yhEOr|Kiy}j*z3c7!~`FNjDMf}KkWf7`t0@Cc# z%CsxqamrgXYkk7w@iMouh9BsWR9T8n*Svn+7=+o z+>;H-SV)-lE#V!C@J_!Kq0e~kODIl`ufYAgStuvXT(CD8P;ofO;C%Y~#^Y6d-s8~- z;MsN4pIwLU8{6;FnHddt*XlKnX}oMQ9vTzZcE_1^_xJJJ?6Q+*!GfrS$iv1)vi!nu z>E~3Y6ZPO@m^bYH)LBb!tU^wertcdCFr#76Sondwl<6b8TQ}d0@i5~M4FD z7^v+>_PX35+noP%9uE?2Wrz>ZERoRuZTLmCNUKwX>x91A{FyHloPPeMgx2AD+xcB{ zjX4{RFBA`UwBT_6!6InMtIbNu+d8CZ>j!|eH-g$xgs=-BBZgfp&=J zh8z80Y*w_AI^sMI&(vzvwLt|8YIx)fHQjraXg`bCVr0Io+?f&v>2%j-^52;LcqXA< zj9x0*c~tB+;9hlsbBltQV;=PM+skb-GRMpDV)yVF1F<|f|ND|sQW|oI87{h7u`(X} zBBIIDS4C`)n1P=D;Do=-je6L-bN^sD()+HiD)IZ5beC|= z;Iz)e#qQ}+7fX&j$Egqwe0RirkkoS+E=kyC~WsO%+7dWk(+&|BvJV)*P=gS|(w#vCUMoO5( z2o)AZ9835{IBZVoJ)!}4tD3Tc-HZ2kOd zTP`-dF9{=RQ~^DIEaX_=S=--hfSOy|zg@2H}I?O!1+C4Kf8 zudQXi=Vpd=##LZ+lb!LNAHOdyxvD4LLLp@3A{A?mJO%9>ryx44YwN$a7iZ$+1|2%C z&z>9U>K=xwsJ^n=%V4=}Q|KSVwVAThVbAeA*07m9f>~zp4g8i+R$+Q&Ng?HEc4v98 z#OX-mpovqM>-u9lA0_=D8J)6rfuroR;eIfD<9&R=r&>8+`4|tt&V!p?!>6lQHH4yh zoBmcYNl&jzPOix&jM0SEbz?U9zdjAml^FZp6!I*%wrKeca$q1|`sjA=mH1E3>>r&O zOe@objd!Os(QYas57I7eLf?3zuY#)|7AyBWrWVY!m$k30?s?4QZ0U$3_zVQl>nd}>a-q7Q;L)xdh5;W3oPj|PE5!}G?>FFCIgqrCxKDju!2mmb+RIKv z`frx)#MOSZa|{jkw+_0HmOb9lPl(S8SgCew-e!zkLJg#yS4{acMOKY^D>c3;uT2}X zUPOsq0aykegGM~5M01yvvW7vnI!w10tD-r@E{Tg;U|moEPhe~h8`XzIf3*(JvpxJiti z8Yha`r5#xGU!1Fj-sN1~bZ@cg9-G9SIpWklIx!x(E#$xBnFwoLY~ zvfO|_DRbJ8Kh5o-)RULZ4lCI)(qQF?f)WbJ2@0Y4t#ypp9p?)7J7MZa%wOZgEn|2; zK2g3r2tn4X;y0(KKPMqyE-i_FeBgi2=F4pwy(#fPOLmGqvtjca&nlK-|Kv5(J&1!Z zVzE4|lY{xxJJK0~nl4~haDo3tZ`a$17Y4;xc~!?0V0w1C_FPw%_<$jntLkRfqM+TV zO_Px9QF_L712Eqc5wpK_tf#@c1O_#Qy?!-fRrVfB!guNWE2y8u9c&v>Q|y^m=Bow& zgoyjrUc?nPc8l)W&_CnTSiywyYF4GsRzas37#J*N16RANd${`mRn~S<>Y(1PWbw#E z95;r1x6$CLkXX`UVW$>pKPN(BO#7u{mGEHmNF8f)vxijMYdtRT!iJi_iNNm&9doAt zdM+80C-ZNR$*bGe9};gCkDszOXg<%vcw+ABqE6LIJNCiphy%r78#gz%lp}5d0d{Y1 z=fy|u#IwrE%9g&Z)r0}rD+RVe)d?@oZk|iy7v4ehpyp6+{r%TTOEZaLIy!{T|LkK~^` z6u36uvwe5?$#UldpMygdkHVsf_65|pZGH0J!Z7)fFD^=~(qwP`d`1~4l6JQupDX^6 zrfarjH8WqSbZMIddx9isuWf38MuQcfV(g`XP^yG$E-m3sB_Fy}$_g#ZGMw&9b-#0D zj_i`GXpCmo_%2Yo`BRh&W?|CoBnV-@=XLO4w3~3SwYjscAnKA)_45B3l14P3>+Y@J z?-l>A7im=BEbnL&ew@5HJlJqk?bqC?%hBZ*#6RCJdmRZhOAIv**Iv9NoR~Y$Ic|}f zJQB@X!}NA)F7hgH(NLJLhl98@<5_!8+I4#o??{W(t@-`!%!Z`Q6HKFr!* zHj`#Ma}xlu6BUL%E%p)d`|}%9Bp&hRPcdUBz7Js1VZ9*M`6K;(Vp*#D*Vyk^nW&<;ii;mapH-edS^ij&$M5-A(B`h4d0YCSx lS`LR=4r}!MjrWeV(CCprQ60kD^gn+9LtRtEE4b^e{|CN}CO!ZF 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 0498/1057] 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 0499/1057] 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 0500/1057] 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 0501/1057] 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 0502/1057] 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 0503/1057] 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 0504/1057] 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 0505/1057] 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 0506/1057] 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 0507/1057] 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 0508/1057] 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 0509/1057] 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 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

      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 0510/1057] 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 0511/1057] 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 0512/1057] 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 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 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 0513/1057] 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 0514/1057] 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 0515/1057] 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 0516/1057] 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 0517/1057] 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 0518/1057] 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 0519/1057] 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 0520/1057] 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 0521/1057] 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 0522/1057] 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 0523/1057] 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 0524/1057] 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 0525/1057] 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 0526/1057] 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 0527/1057] 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 0528/1057] 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 0529/1057] 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 0530/1057] 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 0531/1057] 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 0532/1057] 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 0533/1057] 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 0534/1057] 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 0535/1057] 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 0536/1057] 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 0537/1057] 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 0538/1057] 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 0539/1057] 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 0540/1057] 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 0541/1057] 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 0542/1057] 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 0543/1057] 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 0544/1057] 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 0545/1057] 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 0546/1057] 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 0547/1057] 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 0548/1057] 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 0549/1057] 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 0550/1057] 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 0551/1057] 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 0552/1057] 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 0553/1057] 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 0554/1057] 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= z3Htj27qq|ytLcylUSMDX^A{=sRIq^utcRRzNghsQRsTCEr_;YC4YTJ+iffe@RO)>M zg#S##uKu~O=57yiRxyHgtxCw12r^Y!kOT)32~m1{V4}zD0alPPT&ebestJXdOz}{a z4*2{a~6jD#qydmt>RFSLC7?@ zImt5-{%!*YdX0@Zd2uzf=>Qz7K{+VQGM;bH!6wNdGu5fr}YSTQ4Q^=t)Y<=|0KMyPWEfo?`fQUKSUeL893MW`u zT0PG->JNJNPIIb6;sYnpHg(Bzf)MRs=~czn69&Nn5H!9OPxvCMPlshtVcNVf{$@8z zAaHTgQpAx8g-@xFk}(iv{$iLhYB~YIgDjisbvM4qNw*EVCtv$Dco>|s+b!UeINZA_ z-kAcEGa#ej6J}bz66&@;NEw{DnV}=5++YGG03~B+g5z)k;4p!NLqV810rQCuPuVwo z$h_j2K?iv+Fl!5xNR?{Xlw!cTGXHD9O-MS`(KVLzFzl}qyFfp3ta_`#OZ%PKItY`9 zm%kwhY?1_jW0NQ33ek%{*AlJ;nJc)nH7xW!&!7)BTbF#mC=uX5+$aGNAPq=#jwT2J z+W7!W%#G)mM869G$;%BA$iy$Ajx9sQR7}N{Sj8=4#ol{GV%m$>Yr|5=K&kMZ+rq##til|fVl{#%GB1Pn9Kwc7hFY1F-S!IAcJ#E-G5e^HAWY9;kz$89)8 zRV2xhG)cZe#aKi|!<$DNak^Bx$1nRwJM>4I{2L==2SHp5Ktx8Hn1VU_1Tg{!Xe&OS z3^{uutfzpDZ%~qq#7J_QnoaTwft#UEI7c7Zs~a306nYz1YQL=5O5AD5TBtdOs6%%8 z8*RM2Uerb4*~h_19x@}y5d3PfniFiXjIj74!g%-`&U$RsZYB29cmCj(;1v2;Uc zG)=j>t2v~?IJC-|lo-!?FN!oLE})Ls>&Y{V1iYNWW!b`fI#1#gO!*VQzFMGQWQ#+v zsgQ&*mI%oU%d%?W1nQ_x)oRP-q^&PAcE|;e=4au#eP-`Ua0 zOzSKx%OVEFsIqA=6)#h*$)uuB&{11hy|sWW!5aqXYZhcM1X_Ux?Q@^4;;OIH1m3gK zcflmejLNSln%LQdrQ@b0G1dJm(LLY*Tv0+u*t#mgJqo-~Gho7rgU1+aB?aNjXtYgQ z-O%pj&Scv?KjqV0lund`53uVHA0?R)NP0+aEI-T=}cJptk1B$N>X6HEfLB?OeQ zRwWPt0Aa@JR7PXvSoRc1m14kxd{gL5*6T!8VBpVfAcP$|JV3&?|H0NG*npt3l2Rpx zng6v#8H5Cb`X6x%9>>K3Eo~|+SPej6w~b)6M*M~;*{9dTxb{4zaoD%}xHvk)KdaIY zi-aOR5IDBz9VgniSL8SODmG4WCPI`!jg6H=fVO9|LgXz-(kTh zW@wWoDUIODsJ2VdgOyKtoDZ0{C+07e0M7!m%3C-IwcwoK-S#WUP(j49| zGtOhHUd@oVZ!H^%<45p4NO5I@@x=n_YJ>5$s=XPcARC7E#R8+f1O&?pKnSn!eGARF zkwKs|Ea*X71fe=%`%JmSj3RdIiam2@pEOTuG8yiq@^||*o1RG!`oTLQ3IZT~+LU1&SSsmFaG+kKw#%~_AdlGqyl>ZRdWFa%C7}m!xx~i%4yb2c!cb28;c>;Dkx#|5-}52 z;5cR^r`odftp?}w0F9F*#CbHX>Vd~=i-qek#~Byp?G|DZs!dLc5FxWDX3_loUzkqT$oqIW@j*&`Zf&+LUGzfI~AlX{(Y>gTq;(7oAQH zNEwm=jwkQ}sqR3Mp*&-mY9pmQ{4kSy7vAzYe~c)XQPzdza=rMeyb)JoyZTIBSD75_LQ7s??O*n|~m zAsn&+7OH_1An6aVY#>@898v)%Qh^z;p(C0B6?ixM5>?>~K%==;_?gBl!DOBgwy|E! z48{X`@dtvHX|-YoOv32!NjOnjXmBmdW^iMkfa3sL=+Oz5XmVFy8v`+sH7-Cf`EuF; zq?s25F)G=?17zwt0P8%cX_pqq?UdWJIHRm{N|ZFE?CvInZ4|^y9cO|cL7=McCXLTi zQSY5CLoH|Yg2GbSXBZhW?}4I3WqB+*ITKKHNOLdGGB7J z*^RN#CQiAG3ge+iCSt!08Lw@Ed<7>Fm}=w*j^TKjk^i|3<&X|NNxrvzfx-%NBClQP$88!s{;R%8pQz08h4Vl0FeWc z9xlHoe8>Y148cii<7&MPB)cB3 zZ$dmv0=wKTPnYfm0RuG#V}bW&gA#Z(0^`35F@Y9!t#? zbF2!#dH%LMr{s#F$>uMhoWpvO}1NRmEJF*f`=w?dQfE;l>>>x zE(bUEu}i^v9kNCyvNNG>vG`F)v4zA^ayL3nPDYKy)JeYv*QkroJL z?WY9c)}#TXyf4+CKrJ; zX6hJDQ!+xul9_Ck%oWN)rz8TzSaDa9CovOooGDC~NSfh@ne@oWRU2_`uz7lT#Av5C zsm?il3NHkDAPJ1TrOTN5}4Bm$e9Is$Kt(+=+N?A8%y7Yw+ zx9*BJOzV*vH7g+)8N1Hs@U5k-T)DC$YVI&?H#VX-ZCsd&#*?L>Hsgir# z;0djmb?C=OPUx(0*?!?11}szdS+|8}iIKa;q3RmCtSBagQ-f#khU3Q&Q1;-G5jBKk zBf5hi=MY~PZBf`}LpZqxC$q5^NWLsqAzs2%3Kr6no+u01b;#XO(puXjso@!vI;IyK zCEM1RKk$VmtRyT5a{n2(m~>+B2e|O?O$%Ld^QK8%*al)10$QU)YEj&!Xl;Dvxg;(0;~0Nkmb(gC zXz5n($Zz>81g}o7ZjMNA%ycz4@m_~D7;-0)mks=)ju@L3mw86Pf|MpQ)O&K8orM^IGc0%Hs~7DVNYAij=A&|%9oU9o)tHf#sl(hGMx)Cx1C>W zlqkIqjw(iL(f=ByN<5>RIFw5rq|3u?PQkhaKE-|In_8`^28P(>Z!TKH2-j$Vot1!z zWLAPn^vs4gQjN`DSz3khCP%ij-3?JlFrKpV7QwHTOb-*`9z+Imv_KRABDRBN0(T-q7s1Oj5~M|oD!7Jy0myogjAM(KXU^?trV_={DWcZdrABu1mGHA4XVAGq zZ1^!Ez}jI4EULz(zCaf``OpVy;yA0mU_p%7feU;SPQV$&X5jE@8^{_}wb%?mSzSU! z>;I>SuLiA6Ju5_Yx*@k*_Q3;OJ<1spQ6Q?CWoafYY?L6=Mm4fgnY6UU?Rp?haAZ(L z$yCEbDU?nYW_DQIe9%(I*DALa6>h>iryhxV+T>Ms8>pO{AeK0}HdKUWuQg{%hme;x zl%+#h_z+^-L=caa#Sozb3-z9$QQ`1G9O-yaCti9>UDS)DhCL=Y-O@~KbfRjliCyEg zA%;kNqXb5iDJ@RGs=8?586Tk4PJ@%jX|zvD?q%p7G@^@J-4-z{@k0paB&Ru%U$iz&SG)HE4@7rTYiCE+UH_n4=;V5yzHrj1E#zfejo5 zDNL=PXdX~Os33KN8mOQeOHe_SBc|M+Hlhk3D0HXK_+_Ji}vW=h|pKSe*eK8ft}eG zgw{9(jhoP$Hl`nE(i&11l?Jgm0s3;04rwq0y;S&ss?}IXcTo{^dd@XF?0iST>2_Rl z2Blo~s&Inqmbi5B!$HhxPhCVoh8(2nb|0!;%n^YLfb;?&9bEw6oZFGzCp}|NYQcR{MC^*#SspiX z&jSU6w-<%SR0+pz)mMFtCkc*M30F}ZXwg5sHZ*CM90){yI2JXa!zmb1G{fhDb=MBr z2Q zL{1_GAe4YQh17u@xPkZ;6pHs4Dt8Tl)qFv>g680Nj*)(RlLaFJhkG!57-D+HCV=+G zB>o35Zx({V5o-!Jg;s!PTw*-{cp{D#dudjGoU&#O@o?FvGQJ}-%ZCNgMmJ{?V)rp( zD8WwH_FKh8YvRHbjR988CJHAsV_?V_9jIw)xQ6GjREa_zbpZy2V_a|GA-EwpxCnz9 z=xcC?GWIkl0Cp!FvJL!Hj1~q^x*_Ms*^;T4!jXhWbpQWA(Bg8w*f2yB?QkN@Kb3Kbf;A~~$6 z7-r}V!W4_LVSWcu26NS0GzNOY*MCu%hwPVkEr=q?q98B;5@}ThAdoBQAO}|!ZeEpx zY(QkCNOu-TE}TS)$EShlQfLoXi6r+2F{6py6mlfTJ4^B~?BE-xb1oAX5V)r_6+(w} zRRc5dC}!4U1gU5$cPgIpWSEkW5W+xV7i{w9H}`;wcfmQsmlXh$Jn85G^))Or@lcO+ z1Zb%%n`IH+I0w`;e1p{mJk%gQ_%#h7R&XeTQn-jaxf*RqZ8!Nr6R0`!IFsdLI5}h* zC_{f!pcQlmA_k~zBU6s7AR|GUcuTzy@LH|`(85L%tmq|HNPB4v?xqJ0zKmink zt=5{Z)+%Z#UdN*sgHaY{AduZ5TdLy-{zHIZS3N}{Bt(WIIij2~LYFu~BhT3*xV0lO zawM|!fOSz4eCJwgfQcCKj=6wRVv=TckYq*pi>oP?4JdJbiGI{;pJ zP)0n^FH*oY`bJZ)pdAZ#RYx`(-c&1?)n}TORNnANFuHI}l6(YXr4-cx_Ze4uaSS`K zAb#PAUrB{CilZnbqiOkZ%Qt{epgh*`KmOPO<2H8kcSk!UI$A+x#N~@CadaoNk7NzCzZr($WP|{;F0cweG6{9hl_!0|7#t6+42%ktPdM{pc0@c~|DDv?41DNqSk24zi2 z155{qD{y7#ssiBk0qkmKj-n|kp#NwxLU&37J{qQW81aK$iFtEXX~uA>QgK~w&{E#O zOh%BfA6NokO@W7&m(I6q&M=^M@ps+`&H7(c%J)@8st4Nhawe`}l-ex<^7yntb;FF+4i4_{6A8V~L+bdL1w$q>ql86Rwz#iCCN{K|W zowcUchnp+AeS5Y|*Q!~4#!5!T6SK;No@i*C_+HcIVZJMJ%4?Ghf@nnSjq>l+5_VPQ%0aWk|niXNVcS8Ij`xpqp4p);Fh#S z2f}hoFwmKi1cMO>4jy~5z6rNTg+Jdgr)MF3&|ANP`%P-lok#$*bXy!3%(mA0rkte& zH^Y99;7q*H!B8-llX9wu_1jrbNVu63pa3Sw7Tnup= zKL>vRxSMy0yarj7-yZT!`*cN`8!6w88I%kU$pOCXQd$*tViv%4@Kwl&Aj z7t56qkc{gmt=mdtvA^cg#v$P$3p@-zhYE7r$eeX|qb6fj8^nPCQ%Zozv?|6nC3c8t zdm`JFir5uFdjFY(Xm_1ikHB(S!PAbW1!RuU`Vz9<(nNDS54~1z;Q)P)V8E_lM zw|@u7>XTE;{5Y=A$J|f^^<_C;(V@}+16RS(AJM&dY(I&|tKa+)3{woRy0Ahp$$;}% zmu$)LyMMgLeLpCUThI@h3I`3DHzpFtgS5dse89A9w@95t_`F(tumVtat~Y=JvGCNP zqA8xT0`}o#O=&7OpaR*q)sS*2HbAaG1w+65Jc&CDHu}40otWE*uQK={8tYmu)OOaB<~bD{9XtNNt{Eu*)v`+%h@KB2m#0-Sh!2E7Yo1cO%$ewz&Vx=}m3v9_s` zDSI&&Y6ub2s5<=3vxppD?2HZ%u6kEhh+>P8W*?|JRbW1c4p?PouTs2H;P)0j|0`C9|%lE>DX zGem3OhlDi7B#zeCBTAx0&EFMTIX*i}A0EtqX2@_xo7>9c@ok3Wb6eVp#fO_S?l?9y zYyZakmC@c~1y-zY_&upE&`TB}7E(Urig3t8fJ$C{{>8 zJY6WYo$2Eo=#zM-!C467h@`tb8yYdf5?Ap~1XU*|pkNsS!(9|82ZaargkU^}bw)sp z2nHxA>@O+(UL# zV%=Wpm%Ua%FgCz{aCtQ8&xg(6;WL)k3x#<@G?=76MY>*{s)xMp8!XBL&gy7sdXNZQ z7TDxf^q$CVYFzT2j`eh)fnpCFFiPSHH{0S&Gd(0fP9IEsqQk7cy8kK_40aSQE|#;XscaG3NhSY4(5qs1`E~)1Ybi@F#m3-eGpOU zkEsxFdmBQ*VfMpgW4DqA98fU3rK5BIYnEAqTsFWsv}Q)hwA?WI$y@VeD6Jj@_#JG= zKJUwcW@Bj!^nZys6CX4K4Khf-;+X`AKSB9~PXyZSxI8T!&hCeld4sAf>-AOzTD zyzWT8(ms{Cq>FbnFURg*hU#&MM&J9r&$81M2CZednKR8m(D4XgJ>${X8hSXMB9hnR zDLX>zvg&dzu|m(MBQll7CKJgd5`sCQG1*KGd8?w+n}j~8>FyF7ZjKIX$pz^UF;Q`m zvC%Pc>x!^y2#kq~i}KQo3ruowa;R$5WAo~?w50Tt>nRG!W$+0xvj0%AWzbOSFgEl` zmC)B0b&z<{*jU&Ym=#(1**O|Iw8VJ`CUMHDYW64!_lx_sl1OoDHPl0Em2z9i z5nP;D8u8a;h&`MXwMqf!Y@H-g|2nuj^rA~ttL(~pL*lX>OkSgU+Jf>BZ{CKrGLa>R zZWx%6sMsO&i&Y2*vZoeXBCHA&MY;FTsfC!)a<3&-A(})58UL`-WTKHK^#D4PX{D-J z3t@(d)GQwHl(6F*s~xt1NT#mh+yZerEyOUJQ%qK2yjoyf&2FiYQVX|7&Xw|IS#Ngj zygXYM5~4+T7vfu}01Tdm7WFMOU(&*!{dgB4R{cvMUOs#Jb$_w#GGsF9PRVR0bG%b$ zx0-}G&A-)tIw~m#nc=Us3RklRHB!(iA|@&3`Qn8RWm-%(T1F~GHrl$|CM=7_3elTa z(Bgm+0!dM;pu|d%?vNw!qI?o@Xcnd zU3t#ePRR(^mrJq46LOpKEG5F84Q8EZaOBH_7XK(-%Zd*+?a?1j0`$sTVt8~*Px)L( zPtQZudm%n8u)bPq{N&p@&-nh#8qo3Z1!dfV6R80cg%d$#kvcob6%j$5$rd(&Lx7`< zF+?a#gc45p!-P9Z_?r|F&@iL$!4Y3VamE=x92%xz7MK$+X!OL}V6bwLqyM^$Y-cOv z4wjW;0zR-J=p?%0sZLhE_{eLaz4pOqTfAHdG2V#d@OC(`V{*plV2Ak0PuOE3H-IOD z`O=X+WZZH6ve{SbfF$elnJKZvsd2-tzWNXL(e<*A$`!(Gw_N=wRz*5m*a$9#p!*QZ zb+Vb2nls`EZFKmYCd$<<0v@X|!f+Y+(Es!v_+U+LcXFV5vc*00R8${erfj=ZzNqQ4%m?*jjvmlNUblieX z0gV_9i=pCZ^@59aEc1dB8EsjY%0_jPvB1o=!Ek~r!$COVJm4))4P^A483t#DM2R{!3U@pTp^1rdlHrORv^$t_4vBfo8|he=vveKMW`Kp(>O_We(9Z{hY7sN`3 zIY&S-%;GLw)sFbRtqZbZ$`ZU-rT_OE8IP5chvmeTuE_@5u<*-;UStu#Af_U~s3yGK z?tsY1BQ6jSFy_@z>JISC}#ayI*FNzMT8mU#9$;cOBS|N zjjg;SCVd8_^ikqAQu-MaLXw$(9s`V|6GDj&p-p|&Dhb@;5F%VMuGvCC2~9i6CUuro zHX(&QR1}36{s4#)&Z+FDUByX_06|j z;R8ausCU*0;-*3vw*ONApD~D-4lXQ0TugxN5z^%_5chzhgs|yn?KD`TEJB3B?BbB` zTRDWD3ZMb?rz^>&!~rK0tjAa&`Rcd?FhF&VLU8deTo5}Lb!@Zt1KozDV$d&P^I<&z zhb5>w9V(aEHZ0s?CVlHVp zXEu1q=OELvvS1)lDdNUDY2qn834FMc#J!3R>AM zwu)DgO-Xd62QC>5y}()cfy@Rc{=~u?5n}U6$Hm$6o(mTUv{ufNyDf>3`JGq6TIGOA z^p#tqm;Yafx&FDZp)s8yDWp`%gg&hh zl&$KJ1-t@F{oGF+76vyQFIl2t&1Plo1f~XPpaxd325cY&@9hIr&;?mA1)E6)Rd5Ao z@I-_m)UGUTpzo_J%=W(Si6#L^#s@IUMO-dMrOJUy_RsK&X8l5NNA~C$D2%|CEm@u| z_5VDjV?4#@B4tZ@YbEyO{)&bDN-y{Zu(cYCC_-ZiVTU3j&?AZv`>^f~+2V3|X8(dn z9Tx2RJfI#t>(2yHA3)3?yzndzVy(&~89I#9+=0`uK#Jst(zY;`!spzQa0$967ywTq zcJPeo4&-cRfc{Xu#_3$7BMKnTOavw>e55eqNT=|LvqtB_k`46;P)yG5wcyO8RE72?-Dj@Glq@P+(k6)LiEa0+C%dKrEh*9gy&$!XYF6VF`nT;hJd(h--4t0J)sP zcLb>n)PN1bV0re6kwk#thQJRPDGcEztI1XQS-R1*xV`^ z#{mGBP81A~!8nq{+z9(R4C(46X;6jh2Ex1^Y~S|i`p_xDyaN2l1f#|xcEV@J&aK3j zDZpq>Bc$)L;3(gefd*XA2Cgy(U#A6UkOuw3E3vW#!%X3jF&aX`fBdRJScj8BBM&13 zwG1q6Ol$tCDkHzJ14odPNT%l25bPT7FKa>zeGbxqt{L)gUp8b|5EB!#!u{f}ARP_; z_N)r}3<}^PB#+>Hz+o7v;}qej4|#$col~H2Vo!q^>q6?9virhh~UcngPKkZ7hbbGd{xpw2&nG=)Vwc^W0;}((e}& zBm_T@w!jVQR#Nnot_w@DR<#M)9 z0nP6=Q>iGg^RRr(p?r{>2mv*X3KOJ+2T4+Ncn2K+?F(pRdz7j9;_g4mQWPwvnbgx# zD$Okl@%((Rw!R=lVPBS$f(9BWeW(#?0O{HUQ`}t^E1$>Bz}WjEblT} zlKQ*=CNXq_daE;Is}(A;^88XJ>&zN(&p-j_>$*&q(9V@=4{eT6n*Z?dB#poqQVoMJ z4nNQI)Z-EcCTO_E-!7CO<&umTkwiDgh~_}8a7aM~W_u7gR1Sg=`OhgB2&Q`{$T{-0Itk{kXFHvisyKw>v!DokxIc1CKY-fX@A7ZJF3k) zV6rg2L^1zQPzB68%@Yf}EyO5cNR!m3EHDcgE|w&SQ5=O3ZmriIg@ee(ZjfYazQzSY z?mDXS3M$nD&`$~|@mW2~BfraF0&zh%Z|yuFNgnSNn1lhjb-ThV3Tmba6oCg$Abdc8 zZejwzUPgm50Z3H91#vJ3&4VsdfCgJ|1yf)URDcC>&;?fj6aQ2I2WjA7BaV|E>k|lW z+(wf`BbF{oi22rl4blisV-P ze{j`Qk90k|Eit{I+8Xs1sdQygwhUReV^6OgT$Yo1X8B$odWLii{=KX0nsj+Jd(YR#0`_M?_P)*SCw!>7TYp`<GV3W_q26zGlgI93=!6(15h9iBs`?PB*7)pfKXg8xDeV&WB>a2uNbrrqmUm!VP(8DfY&yK@IGGx>0N; zk0>5dXO3uff=q{8wJws6dr*l9_pos9V)WiKdoRy#mo6o_bYyp<=(O$VYPDrqaz00c zr#y>~LNq373p#Sv2o!JRhUOcchFLi_tO5q`>Qft=_jmt6?K#om2;B=|uE1$~plG4P z$V3D+JV1hN<+O4XBm*oqbt{!(De&^;FmaVZPx(k+gkNkmi3cW|ngEp5v#FfH#iAg9u1<4| z>XeO8BhpezK?&V{b~|sgy{xEhCQ*w;giq$?)kbE7SI?>XQALpenc-5F?Q(8N9SfJI6DXM{Fzni*{yba6J}Cw|J7vc_vlL(BRVk zMxs#L%vK|;Mb&p-!qsWePlWssBaA4H8AxFGi!A>&BnoyQ9;9k2twVuJ%^ehY7h0F3 zG{nC2XG{2p^~eQF0lL5X>KMw1N=xS!8EOw7^uP95to-@=`Z@mUf*rQaIpkBFzs>D# zYd3IX4c@6Xma&da^@Yt@4W}bVoR>Q$Y~soq)B)vWBq)~w z1d@`Dk59{f&`KjqEss!@IT07Tv#(~@`7%Jx_|m|;&3 z18n>pRi7fOc65lPQ(B^08K9pM)+V7?`KK(DBz!|JdP%|bB&-Z?HG>g5lQJipE0cb{ zqL9Ban}>mMZAj&a(0j6QG`pvp$jMut&#(UidPRoK8hZjO@ROqExRsq~W;*A#mG+Zg)VrYU~eLnih~d8lM0B!!y&OF zBds~g3XEIRw79wJ>(#NzASCa1rE7AwUujK+aA^QV+SxlK9~#cfM9`WiJF zPMO6ml}Ig^`bF|ACuevETEJUIY#{%D14I71RQooj1<*YW*8@=XnA#cqN{LR9*Bw4{ z2w%#w>JYKFry?9&nT+s)BbGM9fw$%Sln#Q};+2^ex>Zynt&^4xkXCLcI(btZ4iUmK zSb+DS+#SkS*#h%9!f4B^M>a`S?)s_r0+{ppWeofLbVSTyH@hE%n zqO>GRfIYD0SceHo90)&3sucfBAmH`{t)s@*Jdb3)?CQiBtwvnID}kCxm1583pJj@J zyH}>SH#ch?%w3k9b=7Q75xxG-$2j()O?sAabn;SpBGGARcp%z><`%A}^Sq!?!#7R+ zOQht_Y2PQsp)4cl%L=f>jIC@cyTWMvu56lo;kEgAmDu zF7IYE2;~egGRo${xa@Xx>QEPe^N%qWucty^5 z6ybEvTYV5X$3@EShZ1s)*qH8`Ena>U>4);OK2UP$08@Z~*X!|G9nUd|T$Yx}=g~Es zPF=^Plt}HlJjhNbyXAh7S)rDzTr<7ww=)i($K`f9y#)0x&0Dk;U&l+@kWd%L63m#8 zk>DcQRMFL(OP5j^*asmMV8_Q&i{aMg7bnjS58BJo2bkDskI|>AT@$5Kk_n7Ui>2?2 zNv6q*OL4IajGq6KiKVk;Fj!Iv^0BcAB^-99TVGi>_!pSqRc;4IV)wYXbi1_popAY8 z`iE3xReGX}s^noU5>aDheW*2PV2>AW<}_KT&I>FmtolUMG7AgBKub7{QHW>TI6QYo ziVR8e+$U(uxhb3EY3)igUW7qCHJ5-Z+1%nh# zBU}+zdB}ROXu>iah{g((2NT#ZFNbK1l960R%9#dJ7P;+VNtB{Rhi0?48_P`td0awg zPYAvuPC);_*fH5f*1|4q$I^kD8zxJ+>PQ~w0xrbK2?Zl&or`IjF7QmBiG{=|QTcaJaOUq^b^0=u<11@t}}66DIgm z98@h~kYtE;8cI@{S*qM6UcnN{wXq(74P_mew|TtYK3D+X&|{MXKZ6rzo`B(1S_s0RB6XemGdl07C#Z}xl@Fi+(12F@$6Yp%OwBD zURpV1WWDNaXk;eWU5(dCv;NuL9o%Lmo<1fYI`JLV^|2^jBMIy z5Nv2TLVDBsq8>}7jWb9bF5`Lg_!4G0c;7daxWW}Zz*W4*)?0fwT<`iKiZ|Dg;x|&^ zV@v%sLexIlsx(RVw6EyO58mPT8cx?};COrpVv({B`c*-Z3&ptekxiYlqirilj_vJF z&Bq4veWlK#kU+5-xxp&DT0_+c^$8f6hy*5D#*t*CBNL$jGAUBg2_D!4;F148Mk-p7 zctl02tF2F0ZuyQNey2Q{c@0>FVOczS2M>_>gJ(D4i6L@A3mO(hI^uajKWgF;n?)~t z94en^J|j3IYNa&is~qhXM;2w(&OJ2qpYWf!uli zHjhnF;UY})7(1*5g^Vo+9pd926YUpDevM|7SuB+k(`OE?DH4DC${F4gsjKsxl5q2D z$+}vg%U|eHkPLbO3|jC4U-W`hEIENOevwRUu#G{)^hFC`@B%`r3nc%CazzPnNCg}0 zDw~}^1Kc=(kRFVX12#a29zfXvxgqBq1)5hC*D){P6>x>%@rpj^z@Tb|mt+fh(b-hxn{b18TX~ zg`N2B{Y2g%E}Abe|&q)fO1e(u@@S!r$V+k39;ZXMEs@QWJtWq7_hDIMa|CC0bD= ze$rMDJ>Q3f(j)U{3-%IsZV zn^#u7N~{8fFooD@NBivKJxU~P2m~#T$ME*LAUYx|oHQ%+1V`6WZr4$Tq@_ij*dZvo zO=02U0@`p&g@!qyV3;D)ZklF0(gNolOzFuN_VF`#KuKuhpd_qT_R|sJ52&4}!A9TM z4}5?vr&LHMv1kAxRhWQgQ(*%8@?yNeRJ%0nbNeqU(NC#C8nLZA^k-BbUU;{>U>0cw|PgW;U;A`_j6 z%0haf2SOkt7zJq_H=?qY*AN0AQMt>4)7Fu`LIT(JV723D?Nc|@fz|Xt9#T1Hm4whB z=oOMLDM-_oXmEoW#Dp(yg4365K&RZ5NziAC6P>a$u|vNJOgB)|7jf)1S4=rZCnCWK zKu}K+WH5sgY>^B%acD+vj_KNxN$YxL@BTx?C8w<)+NHULL9Sv-VtBtqO!mB~3BOio;{ zGoqJ-N)qU16uZG{DLYe&sH`bh9fN4kzh?KgJ>>suX0Y8F&h|3E-Ry0UJVs!3K!o zV=X62#U_&r7o4mNbp7jx(ydBMN*wqoY1Lzy1$@Uxl&HUv{#9B9JK*s?RrZn$EsQ1E zX)L)%bRUX@!eL@!`Z+`#Hih5r%$Vq6T}`^UmnE`z;Ivu@B7zsv+O!H`4dRsfxs{Oa zSnwdXQnla0qr2o*xx_d=&xrZLy6=+pyOq86v3McMu7CgddqM_HaK72Mf;L5k6T&VJ z{mVVWGab74a1yI_HW9n2ZZmrfFiEUAwz~hXh6ZP8ITgTykiuuewh$80iN8QiTFToe z^mgvs^>+2A7F{cQmO2xa4mo!VJjhVjt`WOi^~kZqOlX=@owj9uFvY1$Yq~<4!t`h` z@u?esZom8^EjWwG0Tcj6yU(PR4Gm38^~HVdhvp2J*p14B^#Fpc!o{bMCM4cR5*M;=lJFr#bb;Q)Q8}My^)hym=i*5UfV346g8hokYMb^)b#aG>-E9) zO&(p*irAdeMR_06p&%fNA4U~j+eq41*vlCq4}F}_8UWO2{oCBZga7o!_I;crCSbwI zlM*~m9!Q%wkieV3iTuF;C!!+zy@?dofZ}`rp0FSOWr+vCz!##)43NsD`Uaq`{K>+in3IAYvYe(3~^eGF#N&^d_yxh z!!sGpU=b59v0e!P155%|R%OdvSq%%)g+hXo+&l;5l>xKZ#1oueOK_chsgsBhPYP0= z6A98oIgjwTOswn=)ivFyz!I?O8Yt>huYDdZ(H3{CL>nQ@{UA(k$cLbW*tVqE@u-l^ z{Ny_Hmn0ZLUl0v)pcQ@{Npqe|Wu?KswgJ#Ckd(_v;92PU`7FU{&u8m(Pe!vRIADC2Hp$X9XoynJsNg1pk z6z&Of{aKytz%qM*g%RSC#Rx+ii zl%{hMru=w_FGSSWHHRboR}E=~!&yjM9VkK88e&~eut0|=bOV4v-xFMyNmQsT1f~=G z=0dI~=Xs!t&DSR+)Y$Ze|Hu@4P)tasNBii`K}HXBo{S)t*0x!tdbW)gF%Gb0O)Sk( zTSBC>S>up)WvOITD zbegA`h>(WS$&T*T%8W)Q)s&+N9c4bA$0aIDRas^7HPmF?B#5FCX?#FR zW(PgOCx1fX@|+Ys#?0GLQzWj^e@0@TohJFXBNo)4q4edq905%25tY7Mvj}Ak>69bM z$}MSvT583W{7cGwLpxdC1>Q&Ujmp%?X`u3%mh=HAn8o5GkDYSVB!ZWUs*gPSXPla5 zXe3MpG^+(PE3`%{v{FE{QmeFHE4EgEwPq`~cI&lTfS4ZANxclCI1-=~9Jx~BjfR1+ z*}(y#9l`|N-6(-)flBm6*NDyOI?@)|_>NSv2jaYqRjG$dt&BM$q>(;np!y_ly+f=n z(!g#NZ(0AP<(#Um(P^@>r)YoxwOT6$cx=ZuYsY%5wt}q4hHS}7tI2+B%CfA>j%>@q zEVc5;eHcq;Vy0#ai-2_|XAa4A=+()A!PzYb0p6WWSW0uS0#|4jf}WCx+LzXGqqW?t z>iGwaffE1S%EI2NB+Wyu4XGThl*)v~Bax)_;o#O@o~?X<$+qmtiY(k}Yuu9T+{!H7 z-tFAxt=#Ty2%v-CZh+qguHX(X;TEpp9xmb@?h4ePqSOLs91OTnUmP4D&qN;|hA2NJ z=u2E&KvmC%u$43jBd*aL2WqU^DlD%0VWK2z#*U^+l`iHu<%inU5`aL;POIMH?cVAx z@8?e%zzV4N514T1#D+q<@@~^TA(DT0Sw!$p)!fo+FFa;B@1yAq=lkCTKzytqo1p_bi;w=UP zZv>Zc$Vx9Qk<=9BV5=5Tyjqw@jcD@J0$dW|aizl*o?oQBgPC}t`;BP)c?tQ}-#FY~ z7J9EE+QMZ9PX7w(3wEF@v2ITaB7TC6p)zWU!3TX>@vcs6H-LZzXfOyD@9j?O18@K9 z@|JNLlkpm(G4Xmp$ci!U%CQ8iEC^TY9nUfH*0HvpK(P_ozLKAz?5M12WX-_6MGE7Sk8^UCqZ zO0P1a5hos1Igd}GWCL81;nmdYqYQ^DoWNgM0t@&;#u3AJ>e4jf(mMGSG5}V6P{T;Jo-l4>T~d@jFvEFFUsh zL-@&R04wLVaC>W|KeVP}`lZ)0wDNOPw|A8P_ibZ3aTmAoYV|_X@o$&$ln=L5<94UZ zEC(yE+j2F78}y>nIHW83hC7Yd>}=2CtQM)~&5HA}!vhImQ5F}w6(5g`b=YMZl`HAz zPP_A33%IMt`lE+=j2F13>-KwZHMv{0xkt59qq}=sHE)+YQ->_2!?u8nxgC$SsF(FZ z-+NrEIv@MJ33yDzy2 zn=A;Rhi?_|?lF?e3`(;rYR#0ENaeDnulzh8w3bJ@#!EB>RJo@oJh%F@8ppG(%lDQ` zHK;Rrm^*i`wg&{K{|nf-^L8|8tJi{JbB1 z)(5;pV?9=bJ+*ecwBH3>R5#tthlVv$;>?gou>(fVQXPE2)f4^BN4=Nd`hzzx$@06* zS1@$Twl6a|*+V_3OF>ctieV?rVT!_rC4der3;o?dv}A?>_Ax ze`X)Q@AJOx(>|C-xUcJb#i#XH+xs1}dK@Qx^{Z^RZ;5_{FJN|btI*-* zSN@{b<>huy&g|S{Paqmq>EO+qG;j_=c?kPaSm#8a!fTU;!Fx!NQiqHDEYi#9ks%{W z0x1|lnNsCSmMvYrglPh1$_+DZ-o%;Hy%rc8M*Z5lOb z2dPz$1_1ye{|iZNVP|DcVP|P$YYt~&ZEayaFfKGTG&M9e03rDV05Smo04x9i001%q zF#-Sw|A0M$gM@{Khlq)ai;RtqkC2g)la!T~mzbHFo1B9!E-f!Eqokjtpr@&$rlqN@ zs;jW4EuFQtx45~wyS%-=zresdARQha#m33X%E-&k&&kcu($OJ2gV({@+uYsW-{9fm znjIX+#U1JD>gVak>*(p{{RCD?AGDK2XxSuQA?O`p~7be_3ax- zv7*I`7&CfnM~|I7kMTmf`#3V>IgaWys$9vkrOTIxj(IRxQ0BXv(m>*jwli8uoXwhH zgGscg(W6Ln9XmKuW<93}Pa>SUv#C_4Slbnvn6#_cuV9T9J2;bS)2HsRnxzW0s#>8# z|HI0iOSkU7vu@3*-K)1RU$s5B+8s=|u;E%&{VM*uxbeBekRwZ;%*bY1$Cw#wHcPp) z=g))JZXTUEGw9Q(QxnB!nY8QDe?6$4O}n;0(XeyBer&t9@87{Lqus5$H1OldlW$5) zym{^pft5?2PCXG`=h%%`-_Bh+^Wxb@cOOr_x8>pB)4zo-xV-!Kka34s&lWoT`}hsB zMnAtly8HkJD3^Tn`S*^12qq|2J^U3&pMnrZsM2=^I%uDS7-k62bq-c&jD{eF7!HLU z(s!YVD5luUd3kwQoQg2Ucng6pVs}h*GUliwCHu8lB5~>9xZ{vSDnjFr;1#Ll|B{6W z=VOhT$;RZAMUn`mb0<=%WsH19)z@X`d|=aC9+-1gS&D6`W{i53xgR=amYLQu=5WAN zTRgR;Se9${nIUO4A#+fiWAZc=NOQKvS$lpqDqx$%#QBstgL1?{L1S6MMe7ZE7b7gX}=a4xoMj zg0X_^qr;dVY$XV?S9$sCwfXTy)`x=eaH*To4s{I=QAv3Sn4Dp&u6ugfSthaAWV6Ff zGsQJ6GUkN9th|A3#^<^KPX`o7^&YZAN#PoDuuTbzyQjGUM=V{NVd{eo|FqKfFz-n4 z8p4BSH%csWa-}ki$iWD8T*$)isH{)5fQ>BkZ_LTm@XPqPT&!g}HyclvGY4(kW)1JN zu+1k=rSrIo#w_&HsELO3As-`j^Un439N5o#LG3kYT?(3X$|s-Xf!5?Q79^uzw`~{2 z?jTZiGB;p3CG}Wxv!*r6$DmzuJc(CMSC3H% zt}#5CqkK-@YVU3N=tV7Fki|YL1$nJaTWTIm` zPo1}3IIq_Ju6#>95`X+VofA&=o}w>r{cYZzwm{`}YVXbC z#W=e)D{VeHpa#dW7P1&*UpVqsSw0jUqY>jI@!CfRHV_;3Z19BysgInjVKM*RsRJNr z&&HBLLyIAcch!TT5S6kQLY1&sJE&C!g%p?#Fy(YdY?htA6{;ax(HDP{*1YVL4r1*i z8#>t5*)ldSLpkk=Xv9VM@KuvqnN3m1Tgst?^QAP}@fHI^(ry@Y$3AjGkLmG?9|wsE z0s>NRd?BPFd32@X)NzrJd_*H{)R#zFk`ae=r1^q)$w*F8|2JXlq$mxMNi1!0l&BQM zC!52^RF1Ng&jA|STWea=tOH1;yG>|H$CG#juNaa$Q zi#+CQ9tllFGE;bFii)I+;l^^j zs!)v)k$ACGM2AYox1wdid(p`lO%;R=0)<1=UE_&B|8oS_e!^9GbVMp!tyWmM#(|@9 zNiCA98%LovE}CvEP7S0f4-TT!XIADib+yVHS;LG?dg)9IdWyMLYF1$N6(=3@-_Gb% zRhkYCO(NKr(e6>jMi7;;e>G&&0{NDV6&6D#U5dxJM>iqKi&HX@>mWwBQ%PDasSOHV zf6Vt%!hSYedP+<5;!!uJezR~s;;AaZ(@YZHHbiiPqGNAY+KS>0eDZ4qXOAh|;{ph_ zCab7S9>*Zbtx=M%8%=SmYhC=*jB(S;S=rK}wH{FK5!1b;3(Je4Yl_xhWt^J#)SF(9 zRyUZA87~v*tDwad%wtX2Z8F-6t}`wozNP#q|A8Tt$B`(w81UPiQ+7AG|LVy##Xa1F z69hNoZe>mvZfp%31K;dOGe{#Ql{1IejNWSax&0+5CS4pJ;>0*Y6gu$A5Vqd!f=_J& zMudG02Vs9D`N!sE(0OcEJHX-CW8wXeR?UbR_4pXdB$lm-U)H^qnT^Wfm9Qefy2mDe z7tDs`kaCAyW*i+Ya=^_CjHNp!WcIkrB8KyQf?PCgybsaFU~rcI%hgBoxXYrxE?Z85X8r2pXz1O_ z$2QYq8Fq85J0Vnk{z{ry<93b%?d|{4|3TM`RSg{>SZ=@K2)iw_W~unVDx=-lysVh5 zQ-U=1eOUBF6@QUj3XGyupVGe6Wl*bU!Bn}VK}7(%rC_H+gy_(1=s~e3|mn6!{u*I^B@VT5&{T z@O6-T;v-O0%yvPzh$(J*WLu)q_B9WLJEE#Q7jHN0PbJa|`|t2h6bUi)0g$HJI%F$`S)KKb;>0kC)h9pKi&n=w?b zGuA#g+Pifr(6}ert9K75a#lt&(c>?Ivy0_4lQ;RZv1RX@zx|}T7WjG2wVAU9-MV96 z`I_v$znuSI=ogvx2K%10?pDW8pFcHD;ym}6KgaL)CHS^>ED6>)ymo)yv3yLnf5}sJ zucu%{MMlQcU&&;E%5fd;VpBO0DT<D(-ewhQScyb;Z{NmSBO!*1 zVp+KbdM74)gTr3X1&OR!8{dHp5mZJkbBtN>h?WmeAW{YS3;9TYwhtYUzb?wb8=+&k*HyX2)Q}Fcw_cBeP6PIhQMY) z5iUm4FWKf;KEnNWbvB8AAvtF_6M*u}=!o}Ne<|q`n&+}X#PszAqnlB%O6x;@KjV>{H1iy2BS zN^C1Qfb%D;9DxR~UM%nV8IZr5%Q>mqV@Zuqv<; z|E{OvDz_3Vu)-O)vrpZ zQH*LWwuO^wN}<`wtJfK%*O#v=VPNPYc6ZW--{x>{@`h*ms~0<^3X7?iYHC;tv0%|{ z^=6BG#zq?mCr<^bW9O7`s)+TyLTSqw+EYLwHCI&n5p#{sgkP_)b(esrxzFYu_Al7ZySoA3lj_4A&JXs z+J|P^<6I%zQ;4{_XbMYSrnrAmx|sI33rDNCyAltfM}F&h|3|i_d!L+ZYWmr5Ufh51#BqkB$Ei{3G z<5G@KF{IlHy$<{h;Jdr?(VetuCZTErHz2AtFataR0yVIzt9k=AU;`|i|1zuk!lFt8 zG!R@k`oS9l!QsKRP*I3wLUYU}wLb?vODBkhB8x;TqCT7vA^c}9wu-=s6&2foT6;rv zHBOZW5Bk==QCvTtw7c@_v$V(}xY%)Qae~;>T*iPB0LV|3kU1+sNVR$=|R7%3vnlWR`vF%HL=VEP#~o%YSeS%iYj;C1IJS zxq47hvF<<%Of2Np z&w}MlC1T2p;Q}#{ThTC3kcoDPiit%RC>O`T1ews>K+UuXz;?WTm;uqGWGI*6Mq=2X zO=&as2ACBV#~%F)AkE6=>}Tq?82PNFt+s}4vcykBbt8DhgSah_da8vx)4%}IIRTyl zjLosJ)3!U5^x#2oBGh8H4799MN_2=>i*!m&(`p&g72?opBh{+J(iVlkVDxh>Cs)@H zM))}`gMie%0?lDP3G{5!na4^{-6m-5UWS5I2&|DjP)1Aa|3yrcL>np_3U@G$3f6he z3pE{E)N9N-Jz%rgmQ1wDaG`K#CT$;si{CuixWLrk*w?UeC4t?k##n+qIE}Tdt)6Sz zogmH?m)rhfye7@RLzlh7=e4mn*R|!Gw%rSRy=nGb)~$`wN2zH>rd>9BF&*}>$4v>; zoVuxFjRR$Qbpr`?50Fdg31l&K8%qU0FPCu|L8G3g~ZlI$c`{WZ4!AhCu@r@Eh6c) zsF)LxUj+d#0+h9-)+LH(c)AtVNo~EYXFc7Yp7b0I%c!h$+tcIqk7) zk!H5~Zq`5P=p9W6xJ{eJ5CXVjt|c(gH6a4I5-X`90#ZTrx^gQ)pY*zN0#FYtBH(CI z!Ru+wPd_tx=0tc*%@m+8c`v|tf>jEVHwr6C;5oav+`dUpt-6Dd-gs&!?Cdcwz!4^$ zKa@8XFA!CC{&gSV0+KZ?Es$4l@!h03|0(@Bf-0GT**p^;7^2YVv{tg(Q0=RQfak(7 z_f5qDmNEB^RnwQ^`4*JjG64fdB?zPs*r^W3{R+o!T+s9|nY3&YM@;w)Ecu7E_Bd~Q zT#?G2$Uxi?A$*bj}?Yb^=QEk$XqJ|Pp26A#P5o%9|7qP zv-?82*X@1`#ZL&se-ffk2&vxz#lH{2j1J}h_H=9(3BPSW<;B3qZ8YcUa|#F@9)cZ( zJ%@;iii?bmj*pO$l9QB`mY0~Bnwy-Ro{=7dgM@{lqN9SLq^7E>rLL*3qo|^UqKq!B zwY4vcJUuO~9lf}&9>j;ghc2ap|GmnI!OgpZEsV3%w%WVY-P_;P;D(>%<>u$;>FVq3 z=-(e7gB*pa#;^4F^|PkU)BN7JV#R8OOi>GgFnj?!)gfWAQw5`WJLQ6rEnyS2iOa}w z;J0=lLy82kR6oQY>Ba!{@C-KyKP1B03n$A+$pWXX#ufaA=QQ9&2^5 zwy0%CoKH7?12^cT)vH*uYTeoh<0^alR_5Dg4;4LD8H-I7Wi%MXMo3K=W%iblv}~uC zDq0y;XZK{ zf4!y_N7ZuT*RW&D7D@G=|2|P4&eHm)OBDxf^YFsF8QEDQw}d`lzE=<$-Bg>Unnnaz zYW3Bs3HA6nySw-A;2|xBysFu6d5rG~gm*Ds(#qSH8>3dyt~Q^SjVVvW%+~&$*pwFE zX=bH{U3D9Ur{IDNc4r+3B%Dx!2_{T<0tpO3SmA~gP65I+Byd>5ge2saT~&)bmzi<) z)ddNvQ*63{A{?r_3^)9mqOkT*WWBc3+S)_qaSJ6X1n)xdK+n9$ku}_v zdfln3Ijr)^TDeLJq@%3q3d~cbdS!1@DkP0uaP`{rrxMY4FrW%=X_J*KC#`fkxAl09 zwDKCei_EOS{|VE1!|X1vopWHi0uK^-Ha-=mniSZ0h&w4Eq9su;6$^{ zH%{G^n^5ydRy?91$%8U?1{*FSNYNv#;=EF83kNQEz1;^Ku$N=oQGp;i(sOt2`QB1d zE$OV%T4}N>R>PFazbs%wOxelg0(jO)?xYVggCh=DiG{dV%5MozggJsM#q$9RpC_;U zUdYA^ddw8xGVOb)XuHqW6?tvvJ^xb5!FeIq-U9Hsg`W%$!EEh~39!^N&$GG~{ZuHy zp;GMf_%A)=^j}8X|I@;=8D?Z+3$^v2b@c1gc9c=JT=B~w_u*BjOn{>f%)>pvGnM>^ z=N{Y`|1f_bRGG_Arx1+LY+bYJh_!AOncv_J5j#N2_dxI@uf2d2A9w-M#?~jv0mVe( zprBbg5RVH|k2S;N6FqW6IZ=i1iAvia+-}r2MZ~Fgi3pw`tX7NPsLy?0IR*JTumM7x z2W$AKoCQsUM)p*0AK(xoD@?StFV1g+Pf=q6Kkz{)`f*t!93Aswu|g_VZ*R}iR%LYY zJ~-;@Y%A*BK!CU}j}T&OR4GA$h`2`htp$%XvZEmS_{UNnYAvUzfema>gI21t2K(@U zD_Qx<8q`q`wRB}GJ&7?TB@vVy(WDm9^~==U&y>h)m0!9DJXuukH^6)2?*u`~LEQ2~ z{~q{285fqXeH9a!Qjy~Z!D%2;Ci9#>s+lQ3a2|Qcql4LO=j=A%yLgtzg1&4NuDJBg zer}@#!1QNSoQTeXl4(5I#OL=IiAhNI<9!1;5n3+R&E}EwqP1WjC^336a~kxc-tmep zj8}+xuyY{oq-H9h$)i|Mk~IRvkw7^r3QZ<)rcXI0NO$TWzkG3#zL`lj9;q9em;$19 ztLQLkxW6#g3_tubS*aq%h}qtLp5>Y z$Lv7MH?gE=c3SMEY{_ZUe5#AGQ=zSGm+OvYnh}$j^ddgnr;3-(C!s~H32Tju+_qV^ zZQUh{a+yosPpDHB6`Bx*Mq~oeo`6E>4N-eh!GR4;NWCYJB7asiT+I13t>N8;X3I-p zb0GAc>)HV{c5qa9C^%{|fm_*lP|s{BmAm~#RdHh*;8cvaz#z87Cqqj$3q~zguXtO% zIw%-L{5hjLrl;Kf)IK(&x#WK%WEe6IXv?Lr**=FK_%~3H@G4&>l|BLqBqAfWT zH_ow?EuupIrQ(DZ>xLkgftpb;k$%lUtsRZ16cafV$h-OE>CQT0)3W3pjvH+_;0)K1 zP5I897~vKVm$#QGq^MZ@6B6~>yRPbR5jzMC5%<%;&=T>`KS7`IDyJLv z9Lv^3@{zVtPgugDPNkT?t;m#e2JF>9xgkp9CL zxBEd&1x{FZ)$Llif*p(OVG)6*c=+K|G!KI=o43oXxM<_(z-8$#o=%_vH)+8T^O)GdQyujHe+0J|7$+;k|E+L80a;R`0y9I zP;sCu+zl>f%z%n+NT6>vijR?kT$#*_W^^VeCJCiy0fRXF2K@Uen<=h?AwH?lW_pP= zvdBoAu2{PXR84UoXnGHraR0@Vb~`d>Edm`n!w?;Ve?Spc<(GM?p+>jj3u+=b)WJ!6 z=6K4WL@VS#@9{16w_StqF$6Iq31e9qxF@xMZnpD%EJt)2m|O{{c8_r$@z8#=rfNtc zffIN*+y#2Q_8t!uG^$X5xkrB+*e@sYU;M>;0;qeT04yHBe>5RpEtqyARtS+6fgm6~ zf#z(AAb9H+Ko5~y5(g#MS8hi^fIpLj^cO^GMtjlF|9zl>cxSkTdvZiI5``!?9xMe9 zuS5g7L<6RkO?>!DtV9ET=n}JJ12iy*u=f%B1QkJ8dj<$Fk0>r5I44JRR*q#1D`!hP?-Ec1T#@05~2%PfMf<>@*7;@FCQ)io(Z$yCH7D<9yUWE*(gM)dzlP2r7|c zbYaAXCzu@5S2#_`X8;2(;&*wXIErm`ex-14G4UAuU{^#WUHmkE26rw!c!Hm(JNoB+ zfwPRP(PVysgmP$!o!Bkkcz_bsjLtY!W>riww_g@DN)i-?kXQ=M5j$?!hBRV$*@2G2 z$YuWFiCi;>8v&2;xKnzjM88xu7v>e00t`NL|AE{iLG5^J?Z!_VIX2RFf!n7@o1$+G ziD&Z|P-4}H^;eJX=ES_K)$=f4LYn5tophY1fP?GB?gih&;R6&$QiB2yTKQ~n~)tkXaYG1+lbC;289ZM3mC2-Xca)T?rBs`Sjx>oYFcOC@85dIt6R1&<$gz_w zIhQ*qhgK37;*ghmX-X+MmH^>>1Q(YhnTE&6MXqO&;RJ>n13@J?BWekl(QzV{d6|DC zDBmQJGe>0I$a<-%golZf26-YPxJZJT|9biunOkX(k@A{^^>kyWoXpvr&e?R(shni@ zoYLu>UPpBfBN@VgT6_Z*d{G(7#v^Z%FaAIauj6Bx0(gCQZr1V(4Tpw(*PVo5cK4K( zU~&*Z6axx@dxMZA6t@!HgC#BaamI!-yg{G@dT^65Q7@r6EC)!l=SC8uUg>oL^^3Mpkk3fB|412>f7Xtj2qM-`G&q;84X4eIl4 zNYXm55IN@qAnqh|xx;g%z-!5%aG}_OPne{gIYcz4I*N%`HRBqbb0}WXP#=&8T(}+o z@Bu-JrDcXR6egcr#zLk*TC1~jhoEct1pjIIK}~#wjBa5fuBUkP_6-yylxOjx62T8Z z2xZ_0I6@a|bcmd8g`kF7pof~M4Ek~U5QBNgEbwwvjsQ_6W_s2*eLe7Z+69;d6aw%S zq9)*q2{i>FIwBDw0Yba9K(SEElg*13A`ygam;%c_`b~TY?7x#zqc6iN7KxbB- zS~j8=VT8|$PpjZN@B~k|(N(j6XYeCkn?xn1f{?4IO& zGr7hx5GPc>WeB|LOS6MwDl!(jvNgH`d%LIGTBrhR?(!@;2qudWF%NhRIf#)*8NJ=B zzz8COWjmXv(z`qrz?UeSWZ5tbDl2h$RGG>G=^cENg=dm}r z3;*R0NYxwGc(8cuuPyPf*l57(CbOtC2oZ8$99jY>01u;}s;-L5CUC2S5CSJKp%hvI z<2uCG`o$JRM2W~stE5VWcnW+-OEz!=H9!MaI!oECh!^a<1Qf04H%Z%~uE94Jv@lo9 zYNvHvu#N$Fc?_+rfJOkoc~CR&~TsS%5(K@ZryGAYz zN$py5szo1EtPNQ60XEPGQMVMPho6kY2sTh?C(JPCS42&O$3?U)(#48a`aVFE8&~MG zK~}CA(@vDy(Yh5&60IA|hO#ABnkOv?EU-#}_)02(4Jr`L+?)c!CkQH#OVE7Qwx9xm zNQit$11SJM_zY655gat2wmkrhKKBzh)JT!T9Xt@!ahsi|du&phRcLgw9{r@GJZH|= zL2Lv@>H`n&qgdPIKI2ATUbaVKk<=S;%5=q}Q*;nsRGf(L0&L{k+jABjgUNnM%X8LM zHP8rhWdE#(qiZ(S2(T1fUQD>c!5)}hRJV~qe^^H(=Y{*!Sc4#LmA4%(0A0Vv16c~( zl|!Vjw?x@(X&v#;UFO=oX+fjee|RTh{~L7uoIbX)*B|9+zp>ka_Rsi;3uuF*$}rrE z3_af~$noU3rBxnvWQ}wr5Hsz+1Ed~+6F&cmT|>bG@0s5)gqt6^(Ep@;2$zpO>9cMD zN&RS$Kbm5>BsVIP)Jk=QNE&wK;Cc4S~AH9!)?9+9>s$qw?cKBFG-A|X_&YO z4pdpaO-bmxIp_*G#c;lHxKv1HmsPo@3pE4{HBjWUpyf-PVMNQ!o2ZM1GewHG58pD! z*QMyEj^vuWmEzJ2t1hrREWaIK-;03E1@x%NNal)Q0~T1^qOM;`9MQoEeyiE$b6A8= zx(dfGlBa2pa5$O4qqv$EDxtvbieLiWdVBkD*z!_{FvaKRdhR6JYfS>=n8KTOZvX0w zXWq9Kf~E=Waw(&2+U^XW?EUg=PX2;1kj-#C1q_ka)!a%na04pP)*X=6y7Wphknae+ zDs{8vL+fH_u91cAH&CgOKnc#<@S8i&lNaf{RMLwvEIgB5PzulG%kr(=D#bb80acg_ zsf?2kKZY2*i<~a*J{UxL#+YV^F%l2)y;>7Zk4`x6x$N>2tNiriNtXuv>Z&R6VDs)Z z%2=kJ@np~F%I-iE-{5ba;%y%l%ff{}0bGaw4p+a%7+?0}`GcxH>+1uu_PM9@V1l^W z=~}sh*j|2(U+${H12Ir_(Mh;+uMNuyofg_WAF1YF_&}6+mqqw#eSbTu3IF!#PVskF z_=`LG2hS=i&@zkYsQ9$@l$9Qm;@tUO2g)|1|+(^upX=m9A0g#YN;FX{{2@J||$(mgM_KzZ_!T@xJfJXRe7Pi0YHC{jx8HOkdOB4+tF|f`mPWhlq)a zi;RtqkC2Q!E`lDGl^h&|gPfb5ouHqhp`@dmoP#DEf**sY9WRPJJuR23v5U2~Fo?5; zl&hAwinXhw9wo2Agu{s~p1eK2hc31r&4`q!*oVcY9WIgLh$&IFUy1+tsJiL@Bsg{+ZT*e30sv23F2nxnI&P2fN^5jqna&>+W*)c1cgdaxLl_w z7Q2Ko;WcT*9v=H>ucgbEFk|)*=R~$Abk$ahv7PRkW1;N-7kI^V3F!9M3v4HfU@`m9S7I%J?Dg zG+)*Fw!12`u;Igp;eB{fqlS&fjc0)6l!As0%Z+K&P@&R;iW!h0(|{rP*t|$P1osvE zu(j*gs9?*6T}gHa5PyFq?8?q7Z{HnMaWpA1q@iiL6UxnY)5G#^%Sa&;rH=#QLo8}{ zc%Ixtzv8A;}G%^np~By*l!{u8=AhIj{oG{-%f?b1ei})0sbf8 zfdC@7N-w`OchhfhLFijN)3qiRBf2mXku}Xsqm6xwR5M;D!O=xxB`buc*<~wOvw~)h z*>G76DGbue2QNNWgJqA^c+-n3W;R0#tWh^#dPpXTnJzOlC1cI27avRoGQYUQn_7*5#{!|br z`H5Mdm&<%PNG5}t7@vu#e4yxvl^m($rI^Mf4=U}s=Swo3P?-o1&lFT14>i8mHg^~5KJ(SgSacmEX`mrGl7c2rw_V_Kp~D+cZq zs6t;t>gBD=#OEEHBwCv3xa6YKn;U?}rcxk#jl-s+!; zTkVF>y*vSIiF?!t%qzjaHY^CJwZg?#C(%GDB1z)i)Mu|H;>!xRo_IU(qMdD0T0bJ! zW+7hdiCgZ=Fgqeozcwtw1G}|drKN7Rh?+*{Z5?(2&;m;BMOWJ9euDGP{Y(F~=>pX|8mth;YHo_kw>c zA!mb_y$-^vYGL8p6}}T9ewgD&@i?4kM-iM#Q2_%%yamUth#j)~G z!(F>QEy%EgH2>4r{t#grLg)?=8+l0Iu(F94Kxq~=5Sl2$h2{imi?!7v4PaevI4RDS&)M*8z5q=AcPmn z`B;PyE}&Pv%qI_4Jr0J;+Z@lp1)�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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

      ucM^vs#_VTfNf_FTnP5AKy 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 Se|psa7vsW`newRQk^cpzn96Jb literal 0 HcmV?d00001 From cb26c275d9d46b5218e0ec43984aa3e6d9e80b3c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 18 Sep 2023 22:43:11 +0800 Subject: [PATCH 0398/1057] Add solution and test-cases for problem 539 --- .../0539.Minimum-Time-Difference/README.md | 23 ++++------ .../0539.Minimum-Time-Difference/Solution.go | 44 ++++++++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 57 insertions(+), 24 deletions(-) diff --git a/leetcode/501-600/0539.Minimum-Time-Difference/README.md b/leetcode/501-600/0539.Minimum-Time-Difference/README.md index 405876a3b..e357f899b 100644 --- a/leetcode/501-600/0539.Minimum-Time-Difference/README.md +++ b/leetcode/501-600/0539.Minimum-Time-Difference/README.md @@ -1,28 +1,21 @@ # [539.Minimum Time 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 - +Given a list of 24-hour clock time points in **"HH:MM"** format, return the minimum **minutes** difference between any two time-points in the list. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: timePoints = ["23:59","00:00"] +Output: 1 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Time Difference -```go ``` - +Input: timePoints = ["00:00","23:59","00:00"] +Output: 0 +``` ## 结语 diff --git a/leetcode/501-600/0539.Minimum-Time-Difference/Solution.go b/leetcode/501-600/0539.Minimum-Time-Difference/Solution.go index d115ccf5e..df30fc047 100644 --- a/leetcode/501-600/0539.Minimum-Time-Difference/Solution.go +++ b/leetcode/501-600/0539.Minimum-Time-Difference/Solution.go @@ -1,5 +1,45 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "fmt" + "sort" +) + +func Solution(timePoints []string) int { + hm := make([][]int, len(timePoints)) + var a, b int + for idx, tp := range timePoints { + fmt.Sscanf(tp, "%d:%d", &a, &b) + if a == 0 { + a = 24 + } + hm[idx] = []int{a, b} + } + // "12:12","00:13" + sort.Slice(hm, func(i, j int) bool { + if hm[i][0] == hm[j][0] { + return hm[i][1] > hm[j][1] + } + return hm[i][0] > hm[j][0] + }) + ans := -1 + l := len(hm) + + for idx := 0; idx < l; idx++ { + next := (idx + 1) % l + diffh := hm[idx][0] - hm[next][0] + diffm := hm[idx][1] - hm[next][1] + r := diffh*60 + diffm + if r < 0 { + r = -r + } + if x := 1440 - r; x < r { + r = x + } + if ans == -1 || r < ans { + ans = r + } + } + + return ans } diff --git a/leetcode/501-600/0539.Minimum-Time-Difference/Solution_test.go b/leetcode/501-600/0539.Minimum-Time-Difference/Solution_test.go index 14ff50eb4..764d20a26 100644 --- a/leetcode/501-600/0539.Minimum-Time-Difference/Solution_test.go +++ b/leetcode/501-600/0539.Minimum-Time-Difference/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{"23:59", "00:00"}, 1}, + {"TestCase2", []string{"01:39", "10:26", "21:43"}, 236}, + {"TestCase3", []string{"00:00", "23:59", "00:00"}, 0}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From d8033b59213ca01d346acd4015e85a42df4d6e7e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 19 Sep 2023 22:03:37 +0800 Subject: [PATCH 0399/1057] Add solution and test-cases for problem 720 --- .../0720.Longest-Word-in-Dictionary/README.md | 27 +++++++++---------- .../Solution.go | 27 +++++++++++++++++-- .../Solution_test.go | 13 +++++---- 3 files changed, 44 insertions(+), 23 deletions(-) diff --git a/leetcode/701-800/0720.Longest-Word-in-Dictionary/README.md b/leetcode/701-800/0720.Longest-Word-in-Dictionary/README.md index f6d80ebda..60ed54e1d 100644 --- a/leetcode/701-800/0720.Longest-Word-in-Dictionary/README.md +++ b/leetcode/701-800/0720.Longest-Word-in-Dictionary/README.md @@ -1,28 +1,27 @@ # [720.Longest Word in Dictionary][title] -> [!WARNING|style:flat] -> 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` representing an English Dictionary, return the longest word in `words` that can be built one character at a time by other `words` in words. + +If there is more than one possible answer, return the longest word with the smallest lexicographical order. If there is no answer, return the empty string. + +Note that the word should be built from left to right with each additional character being added to the end of a previous word. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["w","wo","wor","worl","world"] +Output: "world" +Explanation: The word "world" can be built one character at a time by "w", "wo", "wor", and "worl". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest Word in Dictionary -```go ``` - +Input: words = ["a","banana","app","appl","ap","apply","apple"] +Output: "apple" +Explanation: Both "apply" and "apple" can be built from other words in the dictionary. However, "apple" is lexicographically smaller than "apply". +``` ## 结语 diff --git a/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution.go b/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution.go index d115ccf5e..ab2f80b59 100644 --- a/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution.go +++ b/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(words []string) string { + sort.Slice(words, func(i, j int) bool { + li, lj := len(words[i]), len(words[j]) + if li == lj { + return words[i] < words[j] + } + return li < lj + }) + ok := make(map[string]struct{}) + ans := "" + ok[ans] = struct{}{} + for _, w := range words { + lp := len(w) + pre := w[:lp-1] + if _, nice := ok[pre]; nice { + ok[w] = struct{}{} + if lp > len(ans) || (lp == len(ans) && w < ans) { + ans = w + } + } + } + + return ans } diff --git a/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution_test.go b/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution_test.go index 14ff50eb4..45a098d91 100644 --- a/leetcode/701-800/0720.Longest-Word-in-Dictionary/Solution_test.go +++ b/leetcode/701-800/0720.Longest-Word-in-Dictionary/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{"a", "banana", "app", "appl", "ap", "apply", "apple"}, "apple"}, + {"TestCase2", []string{"w", "wo", "wor", "worl", "world"}, "world"}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 88a6421e3d533bc6decfb8184a9b5fa26b7e028f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 21 Sep 2023 22:52:15 +0800 Subject: [PATCH 0400/1057] Add solution for problem 4 --- .../Solution.go | 34 +++++++++++++++++++ .../Solution_test.go | 5 +++ 2 files changed, 39 insertions(+) diff --git a/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution.go b/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution.go index d4edc6911..97314cbf1 100644 --- a/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution.go +++ b/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution.go @@ -79,3 +79,37 @@ func findMedianSortedArrays(nums1 []int, nums2 []int) float64 { return -1.0 } + +func findMedianSortedArrays1(nums1 []int, nums2 []int) float64 { + l1 := len(nums1) + l2 := len(nums2) + targetIndex := (l1 + l2) / 2 + index := 0 + i, j := 0, 0 + a, b := 0, 0 + for i < l1 && j < l2 && index <= targetIndex { + index++ + b = a + if nums1[i] < nums2[j] { + a = nums1[i] + i++ + continue + } + a = nums2[j] + j++ + } + for ; i < l1 && index <= targetIndex; i++ { + b = a + a = nums1[i] + index++ + } + for ; j < l2 && index <= targetIndex; j++ { + b = a + a = nums2[j] + index++ + } + if (l1+l2)&1 == 1 { + return float64(a) + } + return float64(a+b) / 2 +} diff --git a/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution_test.go b/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution_test.go index 24174dced..4c36918ec 100644 --- a/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution_test.go +++ b/leetcode/1-100/0004.Median-of-Two-Sorted-Arrays/Solution_test.go @@ -24,6 +24,11 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, ret, c.inputs) } + ret = findMedianSortedArrays1(c.inputs[0], c.inputs[1]) + if !reflect.DeepEqual(ret, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, ret, c.inputs) + } }) } } From 22e0d26e58916ecce36ecb600c19d3d701951739 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 23 Sep 2023 22:33:19 +0800 Subject: [PATCH 0401/1057] Add solution, readme and test-cases for problem 1387 --- .../README.md | 45 +++++++++++++++++++ .../Solution.go | 32 ++++++++++++- .../Solution_test.go | 21 +++++---- 3 files changed, 85 insertions(+), 13 deletions(-) create mode 100644 leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/README.md diff --git a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/README.md b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/README.md new file mode 100644 index 000000000..6d182d583 --- /dev/null +++ b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/README.md @@ -0,0 +1,45 @@ +# [1387.Sort Integers by The Power Value][title] + +## Description +The power of an integer `x` is defined as the number of steps needed to transform `x` into `1` using the following steps: + +- if `x` is even then `x = x / 2` +- if `x` is odd then `x = 3 * x + 1` + +For example, the power of `x = 3` is `7` because `3` needs `7` steps to become `1` `(3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1)`. + +Given three integers `lo`, `hi` and `k`. The task is to sort all integers in the interval `[lo, hi]` by the power value in **ascending order**, if two or more integers have **the same** power value sort them by **ascending order**. + +Return the kth integer in the range `[lo, hi]` sorted by the power value. + +Notice that for any integer `x` `(lo <= x <= hi)` it is **guaranteed** that `x` will transform into `1` using these steps and that the power of `x` is will **fit** in a 32-bit signed integer. + +**Example 1:** + +``` +Input: lo = 12, hi = 15, k = 2 +Output: 13 +Explanation: The power of 12 is 9 (12 --> 6 --> 3 --> 10 --> 5 --> 16 --> 8 --> 4 --> 2 --> 1) +The power of 13 is 9 +The power of 14 is 17 +The power of 15 is 17 +The interval sorted by the power value [12,13,14,15]. For k = 2 answer is the second element which is 13. +Notice that 12 and 13 have the same power value and we sorted them in ascending order. Same for 14 and 15. +``` + +**Example 2:** + +``` +Input: lo = 7, hi = 11, k = 4 +Output: 7 +Explanation: The power array corresponding to the interval [7, 8, 9, 10, 11] is [16, 3, 19, 6, 14]. +The interval sorted by power is [8, 10, 11, 7, 9]. +The fourth number in the sorted array is 7. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/sort-integers-by-the-power-value +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go index d115ccf5e..98ef93e8c 100755 --- a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go +++ b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "sort" +) + +func power(x int, cache map[int]int) int { + if x == 1 { + return 1 + } + if v, ok := cache[x]; ok { + return v + } + var ans int + if x&1 == 0 { + ans = power(x/2, cache) + 1 + } else { + ans = power(x*3+1, cache) + 1 + } + cache[x] = ans + return ans +} +func Solution(lo, hi, k int) int { + cache := make(map[int]int) + x := make([][2]int, hi-lo+1) + for i := lo; i <= hi; i++ { + x[i-lo] = [2]int{power(i, cache), i} + } + sort.SliceStable(x, func(i, j int) bool { + return x[i][0] < x[j][0] + }) + return x[k-1][1] } diff --git a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go index 14ff50eb4..8430bca2b 100755 --- a/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go +++ b/leetcode/1301-1400/1387.Sort-Integers-by-The-Power-Value/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + lo, hi, k int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 12, 15, 2, 13}, + {"TestCase2", 7, 11, 4, 7}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.lo, c.hi, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.lo, c.hi, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 0f9e7967435209a53ef19ba0ff91e3a4e9cd0945 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 24 Sep 2023 19:12:35 +0800 Subject: [PATCH 0402/1057] Add solution and test-cases for problem 799 --- .../701-800/0799.Champagne-Tower/README.md | 36 +++++++++++------- .../701-800/0799.Champagne-Tower/Solution.go | 21 +++++++++- .../0799.Champagne-Tower/Solution_test.go | 23 +++++------ .../701-800/0799.Champagne-Tower/tower.png | Bin 0 -> 43637 bytes 4 files changed, 54 insertions(+), 26 deletions(-) create mode 100644 leetcode/701-800/0799.Champagne-Tower/tower.png diff --git a/leetcode/701-800/0799.Champagne-Tower/README.md b/leetcode/701-800/0799.Champagne-Tower/README.md index 5153df13b..03552ffab 100644 --- a/leetcode/701-800/0799.Champagne-Tower/README.md +++ b/leetcode/701-800/0799.Champagne-Tower/README.md @@ -1,28 +1,38 @@ # [799.Champagne Tower][title] -> [!WARNING|style:flat] -> 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 stack glasses in a pyramid, where the **first** row has 1 glass, the **second** row has `2` glasses, and so on until the 100th row. Each glass holds one cup of champagne. + +Then, some champagne is poured into the first glass at the top. When the topmost glass is full, any excess liquid poured will fall equally to the glass immediately to the left and right of it. When those glasses become full, any excess champagne will fall equally to the left and right of those glasses, and so on. (A glass at the bottom row has its excess champagne fall on the floor.) + +For example, after one cup of champagne is poured, the top most glass is full. After two cups of champagne are poured, the two glasses on the second row are half full. After three cups of champagne are poured, those two cups become full - there are 3 full glasses total now. After four cups of champagne are poured, the third row has the middle glass half full, and the two outside glasses are a quarter full, as pictured below. + +![x](./tower.png) + +Now after pouring some non-negative integer cups of champagne, return how full the jth glass in the ith row is (both `i` and `j` are 0-indexed.) **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: poured = 1, query_row = 1, query_glass = 1 +Output: 0.00000 +Explanation: We poured 1 cup of champange to the top glass of the tower (which is indexed as (0, 0)). There will be no excess liquid so all the glasses under the top glass will remain empty. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Champagne Tower -```go ``` +Input: poured = 2, query_row = 1, query_glass = 1 +Output: 0.50000 +Explanation: We poured 2 cups of champange to the top glass of the tower (which is indexed as (0, 0)). There is one cup of excess liquid. The glass indexed as (1, 0) and the glass indexed as (1, 1) will share the excess liquid equally, and each will get half cup of champange. +``` + +**Example 3:** +``` +Input: poured = 100000009, query_row = 33, query_glass = 17 +Output: 1.00000 +``` ## 结语 diff --git a/leetcode/701-800/0799.Champagne-Tower/Solution.go b/leetcode/701-800/0799.Champagne-Tower/Solution.go index d115ccf5e..54b808695 100644 --- a/leetcode/701-800/0799.Champagne-Tower/Solution.go +++ b/leetcode/701-800/0799.Champagne-Tower/Solution.go @@ -1,5 +1,22 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(poured int, query_row int, query_glass int) float64 { + tower := make([][]float64, 101) + for i := 0; i < 101; i++ { + tower[i] = make([]float64, 101) + } + tower[0][0] = float64(poured) + for row := 1; row <= query_row; row++ { + for col := 0; col < row; col++ { + if tower[row-1][col] > 1.0 { + left := (tower[row-1][col] - 1.0) / 2.0 + tower[row][col] += left + tower[row][col+1] += left + } + } + } + if tower[query_row][query_glass] > 1.0 { + return 1.0 + } + return tower[query_row][query_glass] } diff --git a/leetcode/701-800/0799.Champagne-Tower/Solution_test.go b/leetcode/701-800/0799.Champagne-Tower/Solution_test.go index 14ff50eb4..0d15ed417 100644 --- a/leetcode/701-800/0799.Champagne-Tower/Solution_test.go +++ b/leetcode/701-800/0799.Champagne-Tower/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + q, qr, qg int + expect float64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 1, 1, 0}, + {"TestCase2", 2, 1, 1, 0.5}, + {"TestCase3", 4, 2, 2, 0.25}, + {"TestCase4", 100000009, 33, 17, 1.0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.q, c.qr, c.qg) 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.q, c.qr, c.qg) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0799.Champagne-Tower/tower.png b/leetcode/701-800/0799.Champagne-Tower/tower.png new file mode 100644 index 0000000000000000000000000000000000000000..aa11d2304d6b6f45c2a9f84249c2709f44192d45 GIT binary patch literal 43637 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

      _CH@y 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 literal 0 HcmV?d00001 diff --git a/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/statement.jpg b/leetcode/1501-1600/1547.Minimum-Cost-to-Cut-a-Stick/statement.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70e9b58c7221bb848e0fa7311b73815c43493fab GIT binary patch literal 7206 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 k3VSr2hsY=iu?Lq4twGv%FnH{?+(jK Date: Mon, 29 May 2023 21:36:04 +0800 Subject: [PATCH 0285/1057] Add solution and test-cases for problem 1603 --- .../1603.Design-Parking-System/README.md | 35 ++++++++++--------- .../1603.Design-Parking-System/Solution.go | 25 +++++++++++-- .../Solution_test.go | 21 ++++++----- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/leetcode/1601-1700/1603.Design-Parking-System/README.md b/leetcode/1601-1700/1603.Design-Parking-System/README.md index 8ac8c5bd9..9512d30d6 100755 --- a/leetcode/1601-1700/1603.Design-Parking-System/README.md +++ b/leetcode/1601-1700/1603.Design-Parking-System/README.md @@ -1,28 +1,29 @@ # [1603.Design Parking 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 parking system for a parking lot. The parking lot has three kinds of parking spaces: big, medium, and small, with a fixed number of slots for each size. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement the `ParkingSystem` class: -## 题意 -> ... +- `ParkingSystem(int big, int medium, int small`) Initializes object of the `ParkingSystem` class. The number of slots for each parking space are given as part of the constructor. +- `bool addCar(int carType)` Checks whether there is a parking space of `carType` for the car that wants to get into the parking lot. `carType` can be of three kinds: big, medium, or small, which are represented by `1`, `2`, and `3` respectively. **A car can only park in a parking space of its** `carType`. If there is no space available, return `false`, else park the car in that size space and return `true`. -## 题解 +**Example 1:** -### 思路1 -> ... -Design Parking System -```go ``` - +Input +["ParkingSystem", "addCar", "addCar", "addCar", "addCar"] +[[1, 1, 0], [1], [2], [3], [1]] +Output +[null, true, true, false, false] + +Explanation +ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0); +parkingSystem.addCar(1); // return true because there is 1 available slot for a big car +parkingSystem.addCar(2); // return true because there is 1 available slot for a medium car +parkingSystem.addCar(3); // return false because there is no available slot for a small car +parkingSystem.addCar(1); // return false because there is no available slot for a big car. It is already occupied. +``` ## 结语 diff --git a/leetcode/1601-1700/1603.Design-Parking-System/Solution.go b/leetcode/1601-1700/1603.Design-Parking-System/Solution.go index d115ccf5e..e8bc553ef 100644 --- a/leetcode/1601-1700/1603.Design-Parking-System/Solution.go +++ b/leetcode/1601-1700/1603.Design-Parking-System/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +type ParkingSystem struct { + solt [3]int +} + +func Constructor(big int, medium int, small int) ParkingSystem { + return ParkingSystem{solt: [3]int{big, medium, small}} +} + +func (this *ParkingSystem) AddCar(carType int) bool { + if this.solt[carType-1] > 0 { + this.solt[carType-1]-- + return true + } + return false +} + +func Solution(big, medium, small int, ops []int) []bool { + c := Constructor(big, medium, small) + ans := make([]bool, len(ops)) + for i, op := range ops { + ans[i] = c.AddCar(op) + } + return ans } diff --git a/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go b/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go index 14ff50eb4..af8c9f86f 100644 --- a/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go +++ b/leetcode/1601-1700/1603.Design-Parking-System/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + big, medium, small int + ops []int + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 1, 0, []int{1, 2, 3, 1}, []bool{true, true, false, false}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.big, c.medium, c.small, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.big, c.medium, c.small, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 2e4c113e63342adaaf6b63c464d9418684d5a16b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 30 May 2023 22:02:39 +0800 Subject: [PATCH 0286/1057] Add solution and test-cases for problem 705 --- .../701-800/0705.Design-HashSet/README.md | 41 ++++++++++-------- .../701-800/0705.Design-HashSet/Solution.go | 43 ++++++++++++++++++- .../0705.Design-HashSet/Solution_test.go | 12 +++--- 3 files changed, 70 insertions(+), 26 deletions(-) diff --git a/leetcode/701-800/0705.Design-HashSet/README.md b/leetcode/701-800/0705.Design-HashSet/README.md index baac161d9..f419ad94c 100644 --- a/leetcode/701-800/0705.Design-HashSet/README.md +++ b/leetcode/701-800/0705.Design-HashSet/README.md @@ -1,28 +1,35 @@ # [705.Design HashSet][title] -> [!WARNING|style:flat] -> 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 HashSet without using any built-in hash table libraries. -**Example 1:** - -``` -Input: a = "11", b = "1" -Output: "100" -``` +Implement `MyHashSet` class: -## 题意 -> ... +- `void add(key)` Inserts the value `key` into the HashSet. +- `bool contains(key)` Returns whether the value `key` exists in the HashSet or not. +- `void remove(key)` Removes the value `key` in the HashSet. If `key` does not exist in the HashSet, do nothing. + -## 题解 +**Example 1:** -### 思路1 -> ... -Design HashSet -```go ``` - +Input +["MyHashSet", "add", "add", "contains", "contains", "add", "contains", "remove", "contains"] +[[], [1], [2], [1], [3], [2], [2], [2], [2]] +Output +[null, null, null, true, false, null, true, null, false] + +Explanation +MyHashSet myHashSet = new MyHashSet(); +myHashSet.add(1); // set = [1] +myHashSet.add(2); // set = [1, 2] +myHashSet.contains(1); // return True +myHashSet.contains(3); // return False, (not found) +myHashSet.add(2); // set = [1, 2] +myHashSet.contains(2); // return True +myHashSet.remove(2); // set = [1] +myHashSet.contains(2); // return False, (already removed) +``` ## 结语 diff --git a/leetcode/701-800/0705.Design-HashSet/Solution.go b/leetcode/701-800/0705.Design-HashSet/Solution.go index d115ccf5e..a9876742b 100644 --- a/leetcode/701-800/0705.Design-HashSet/Solution.go +++ b/leetcode/701-800/0705.Design-HashSet/Solution.go @@ -1,5 +1,44 @@ package Solution -func Solution(x bool) bool { - return x +type op struct { + name string + v int +} +type MyHashSet struct { + //m [1000][1001]uint8 + m [1000001]byte +} + +func Constructor705() MyHashSet { + return MyHashSet{} +} + +func (this *MyHashSet) Add(key int) { + this.m[key] = 1 +} + +func (this *MyHashSet) Remove(key int) { + this.m[key] = 0 +} + +func (this *MyHashSet) Contains(key int) bool { + return this.m[key] == 1 +} + +func Solution(ops []op) []bool { + c := Constructor705() + ans := make([]bool, 0) + for _, o := range ops { + if o.name == "add" { + c.Add(o.v) + continue + } + if o.name == "del" { + c.Remove(o.v) + continue + } + + ans = append(ans, c.Contains(o.v)) + } + return ans } diff --git a/leetcode/701-800/0705.Design-HashSet/Solution_test.go b/leetcode/701-800/0705.Design-HashSet/Solution_test.go index 14ff50eb4..d3efba39f 100644 --- a/leetcode/701-800/0705.Design-HashSet/Solution_test.go +++ b/leetcode/701-800/0705.Design-HashSet/Solution_test.go @@ -10,12 +10,10 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []op + expect []bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []op{{"add", 1}, {"add", 2}, {"", 1}, {"", 3}, {"add", 2}, {"", 2}, {"del", 2}, {"", 2}}, []bool{true, false, true, false}}, } // 开始测试 @@ -30,10 +28,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 5fa061e50f3f646f926dae76aee041587d4d524a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 31 May 2023 23:20:05 +0800 Subject: [PATCH 0287/1057] Add solution and test-cases for proble 1396 --- .../1396.Design-Underground-System/README.md | 82 +++++++++++++++++++ .../Solution.go | 74 +++++++++++++++++ .../Solution_test.go | 50 +++++++++++ 3 files changed, 206 insertions(+) create mode 100644 leetcode/1301-1400/1396.Design-Underground-System/README.md create mode 100644 leetcode/1301-1400/1396.Design-Underground-System/Solution.go create mode 100644 leetcode/1301-1400/1396.Design-Underground-System/Solution_test.go diff --git a/leetcode/1301-1400/1396.Design-Underground-System/README.md b/leetcode/1301-1400/1396.Design-Underground-System/README.md new file mode 100644 index 000000000..32d814952 --- /dev/null +++ b/leetcode/1301-1400/1396.Design-Underground-System/README.md @@ -0,0 +1,82 @@ +# [1396. Design Underground System][title] + +## Description + +An underground railway system is keeping track of customer travel times between different stations. They are using this data to calculate the average time it takes to travel from one station to another. + +Implement the `UndergroundSystem` class: + +- `void checkIn(int id, string stationName, int t)` + + - A customer with a card ID equal to id, checks in at the station `stationName` at time `t`. + - A customer can only be checked into one place at a time. + + +- `void checkOut(int id, string stationName, int t)` + + - A customer with a card ID equal to id, checks out from the station `stationName` at time `t`. + +- `double getAverageTime(string startStation, string endStation)` + + - Returns the average time it takes to travel from `startStation` to `endStation`. + - The average time is computed from all the previous traveling times from `startStation` to `endStation` that happened directly, meaning a check in at startStation followed by a check out from endStation. + - The time it takes to travel from `startStation` to `endStation` **may be different** from the time it takes to travel from `endStation` to `startStation`. + - There will be at least one customer that has traveled from `startStation` to `endStation` before `getAverageTime` is called. + +You may assume all calls to the `checkIn` and `checkOut` methods are consistent. If a customer checks in at time t1 then checks out at time t2, then `t1 < t2`. All events happen in chronological order. + +**Example 1:** + +``` +Input +["UndergroundSystem","checkIn","checkIn","checkIn","checkOut","checkOut","checkOut","getAverageTime","getAverageTime","checkIn","getAverageTime","checkOut","getAverageTime"] +[[],[45,"Leyton",3],[32,"Paradise",8],[27,"Leyton",10],[45,"Waterloo",15],[27,"Waterloo",20],[32,"Cambridge",22],["Paradise","Cambridge"],["Leyton","Waterloo"],[10,"Leyton",24],["Leyton","Waterloo"],[10,"Waterloo",38],["Leyton","Waterloo"]] + +Output +[null,null,null,null,null,null,null,14.00000,11.00000,null,11.00000,null,12.00000] + +Explanation +UndergroundSystem undergroundSystem = new UndergroundSystem(); +undergroundSystem.checkIn(45, "Leyton", 3); +undergroundSystem.checkIn(32, "Paradise", 8); +undergroundSystem.checkIn(27, "Leyton", 10); +undergroundSystem.checkOut(45, "Waterloo", 15); // Customer 45 "Leyton" -> "Waterloo" in 15-3 = 12 +undergroundSystem.checkOut(27, "Waterloo", 20); // Customer 27 "Leyton" -> "Waterloo" in 20-10 = 10 +undergroundSystem.checkOut(32, "Cambridge", 22); // Customer 32 "Paradise" -> "Cambridge" in 22-8 = 14 +undergroundSystem.getAverageTime("Paradise", "Cambridge"); // return 14.00000. One trip "Paradise" -> "Cambridge", (14) / 1 = 14 +undergroundSystem.getAverageTime("Leyton", "Waterloo"); // return 11.00000. Two trips "Leyton" -> "Waterloo", (10 + 12) / 2 = 11 +undergroundSystem.checkIn(10, "Leyton", 24); +undergroundSystem.getAverageTime("Leyton", "Waterloo"); // return 11.00000 +undergroundSystem.checkOut(10, "Waterloo", 38); // Customer 10 "Leyton" -> "Waterloo" in 38-24 = 14 +undergroundSystem.getAverageTime("Leyton", "Waterloo"); // return 12.00000. Three trips "Leyton" -> "Waterloo", (10 + 12 + 14) / 3 = 12 +``` + +**Example 2:** + +``` +Input +["UndergroundSystem","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime","checkIn","checkOut","getAverageTime"] +[[],[10,"Leyton",3],[10,"Paradise",8],["Leyton","Paradise"],[5,"Leyton",10],[5,"Paradise",16],["Leyton","Paradise"],[2,"Leyton",21],[2,"Paradise",30],["Leyton","Paradise"]] + +Output +[null,null,null,5.00000,null,null,5.50000,null,null,6.66667] + +Explanation +UndergroundSystem undergroundSystem = new UndergroundSystem(); +undergroundSystem.checkIn(10, "Leyton", 3); +undergroundSystem.checkOut(10, "Paradise", 8); // Customer 10 "Leyton" -> "Paradise" in 8-3 = 5 +undergroundSystem.getAverageTime("Leyton", "Paradise"); // return 5.00000, (5) / 1 = 5 +undergroundSystem.checkIn(5, "Leyton", 10); +undergroundSystem.checkOut(5, "Paradise", 16); // Customer 5 "Leyton" -> "Paradise" in 16-10 = 6 +undergroundSystem.getAverageTime("Leyton", "Paradise"); // return 5.50000, (5 + 6) / 2 = 5.5 +undergroundSystem.checkIn(2, "Leyton", 21); +undergroundSystem.checkOut(2, "Paradise", 30); // Customer 2 "Leyton" -> "Paradise" in 30-21 = 9 +undergroundSystem.getAverageTime("Leyton", "Paradise"); // return 6.66667, (5 + 6 + 9) / 3 = 6.66667 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/design-underground-system +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1396.Design-Underground-System/Solution.go b/leetcode/1301-1400/1396.Design-Underground-System/Solution.go new file mode 100644 index 000000000..dfba25994 --- /dev/null +++ b/leetcode/1301-1400/1396.Design-Underground-System/Solution.go @@ -0,0 +1,74 @@ +package Solution + +type to struct { + distance, count int +} + +type inStation struct { + station string + start int +} +type UndergroundSystem struct { + in map[int]inStation + out map[string]map[string]to +} + +func Constructor1396() UndergroundSystem { + return UndergroundSystem{ + in: make(map[int]inStation), + out: make(map[string]map[string]to), + } +} + +func (this *UndergroundSystem) CheckIn(id int, stationName string, t int) { + this.in[id] = inStation{stationName, t} +} + +func (this *UndergroundSystem) CheckOut(id int, stationName string, t int) { + from := this.in[id] + cost := t - from.start + + v, ok := this.out[from.station] + if !ok { + v = map[string]to{ + stationName: {cost, 1}, + } + } else { + if vv, ok := v[stationName]; !ok { + v[stationName] = to{cost, 1} + } else { + v[stationName] = to{cost + vv.distance, vv.count + 1} + } + } + this.out[from.station] = v +} + +func (this *UndergroundSystem) GetAverageTime(startStation string, endStation string) float64 { + v := this.out[startStation][endStation] + return float64(v.distance) / float64(v.count) +} + +type op struct { + action string + station string + end string + id int + t int +} + +func Solution(ops []op) []float64 { + c := Constructor1396() + ans := make([]float64, 0) + for _, o := range ops { + if o.action == "in" { + c.CheckIn(o.id, o.station, o.t) + continue + } + if o.action == "out" { + c.CheckOut(o.id, o.station, o.t) + continue + } + ans = append(ans, c.GetAverageTime(o.station, o.end)) + } + return ans +} diff --git a/leetcode/1301-1400/1396.Design-Underground-System/Solution_test.go b/leetcode/1301-1400/1396.Design-Underground-System/Solution_test.go new file mode 100644 index 000000000..0ddd06ba7 --- /dev/null +++ b/leetcode/1301-1400/1396.Design-Underground-System/Solution_test.go @@ -0,0 +1,50 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs []op + expect []float64 + }{ + {"TestCase1", []op{ + {action: "in", station: "Leyton", id: 45, t: 3}, + {action: "in", station: "Paradise", id: 32, t: 8}, + {action: "in", station: "Leyton", id: 27, t: 10}, + {action: "out", station: "Waterloo", id: 45, t: 15}, + {action: "out", station: "Waterloo", id: 27, t: 20}, + {action: "out", station: "Cambridge", id: 32, t: 22}, + {action: "avg", station: "Paradise", end: "Cambridge"}, + {action: "avg", station: "Leyton", end: "Waterloo"}, + {action: "in", station: "Leyton", id: 10, t: 24}, + {action: "avg", station: "Leyton", end: "Waterloo"}, + {action: "out", station: "Waterloo", id: 10, t: 38}, + {action: "avg", station: "Leyton", end: "Waterloo"}, + }, []float64{14.0, 11.0, 11.0, 12.0}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 406b0a0d9f047dc35201af818ac44191e1e0f068 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 1 Jun 2023 22:58:37 +0800 Subject: [PATCH 0288/1057] Add solution and test-cases for problem 1091 --- .../README.md | 37 ++++++++++++------ .../Solution.go | 36 ++++++++++++++++- .../Solution_test.go | 22 +++++++---- .../example1_1.png | Bin 0 -> 19349 bytes .../example2_1.png | Bin 0 -> 28393 bytes 5 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/example1_1.png create mode 100644 leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/example2_1.png diff --git a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/README.md b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/README.md index e6bbe7ef3..07622f84a 100644 --- a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/README.md +++ b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/README.md @@ -1,28 +1,39 @@ # [1091.Shortest Path in Binary Matrix][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given an `n x n` binary matrix `grid`, return the length of the shortest **clear path** in the matrix. If there is no clear path, return `-1`. + +A **clear path** in a binary matrix is a path from the **top-left** cell (i.e., `(0, 0)`) to the **bottom-right** cell (i.e., `(n - 1, n - 1)`) such that: + +- All the visited cells of the path are `0`. +- All the adjacent cells of the path are **8-directionally** connected (i.e., they are different and they share an edge or a corner). + +The **length of a clear path** is the number of visited cells of this path. + +**Example 1:** -**Example 1:** +![example1](./example1_1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[0,1],[1,0]] +Output: 2 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./example2_1.png) -### 思路1 -> ... -Shortest Path in Binary Matrix -```go ``` +Input: grid = [[0,0,0],[1,1,0],[1,1,0]] +Output: 4 +``` + +**Example 3:** +``` +Input: grid = [[1,0,0],[1,1,0],[1,1,0]] +Output: -1 +``` ## 结语 diff --git a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution.go b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution.go index d115ccf5e..44bf7afe3 100644 --- a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution.go +++ b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +type point1091 struct { + x, y, dis int +} + +func Solution(grid [][]int) int { + tx, ty := len(grid)-1, len(grid[0])-1 + if grid[tx][ty] == 1 || grid[0][0] == 1 { + return -1 + } + dirs := [][]int{ + {-1, -1}, {-1, 0}, {-1, 1}, + {0, -1}, {0, 1}, + {1, -1}, {1, 0}, {1, 1}, + } + queue := []point1091{{0, 0, 0}} + for len(queue) > 0 { + next := make([]point1091, 0) + for _, item := range queue { + if item.x == tx && item.y == ty { + return item.dis + 1 + } + for _, dir := range dirs { + nx, ny := item.x+dir[0], item.y+dir[1] + if nx < 0 || nx > tx || ny < 0 || ny > ty || grid[nx][ny] == 1 { + continue + } + grid[nx][ny] = 1 + next = append(next, point1091{nx, ny, item.dis + 1}) + } + grid[item.x][item.y] = 1 + } + queue = next + } + return -1 } diff --git a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution_test.go b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution_test.go index 14ff50eb4..0c7cf3efe 100644 --- a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution_test.go +++ b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/Solution_test.go @@ -10,12 +10,20 @@ 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, 0}, + {1, 1, 0}, + {1, 1, 0}, + }, 4}, + {"TestCase2", [][]int{ + {0, 1}, {1, 0}, + }, 2}, + {"TestCase3", [][]int{ + {0, 0, 1, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 1}, {0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 1, 1, 1, 0, 1}, {0, 0, 1, 0, 0, 0, 0}, + }, 10}, } // 开始测试 @@ -30,10 +38,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/example1_1.png b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/example1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd89c9ebf20f9c8fee2b4ae4bc7baa59f387514 GIT binary patch literal 19349 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 literal 0 HcmV?d00001 diff --git a/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/example2_1.png b/leetcode/1001-1100/1091.Shortest-Path-in-Binary-Matrix/example2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..19565d000bf052c37b65f714d659f2d50c7ccec2 GIT binary patch literal 28393 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 literal 0 HcmV?d00001 From 82e4c23c2624899784c00f1752da13f6240f48ba Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 Jun 2023 22:07:37 +0800 Subject: [PATCH 0289/1057] Add solution and test-cases for problem 2101 --- .../2101.Detonate-the-Maximum-Bombs/README.md | 52 +++++++++---- .../Solution.go | 70 +++++++++++++++++- .../Solution_test.go | 20 +++-- .../desmos-eg-2.png | Bin 0 -> 80125 bytes .../desmos-eg-3.png | Bin 0 -> 76884 bytes .../desmos-eg1.png | Bin 0 -> 114201 bytes 6 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg-2.png create mode 100644 leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg-3.png create mode 100644 leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg1.png diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md index 0647c8d65..59641d3e6 100755 --- a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md +++ b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/README.md @@ -1,28 +1,54 @@ # [2101.Detonate the Maximum Bombs][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a list of bombs. The **range** of a bomb is defined as the area where its effect can be felt. This area is in the shape of a **circle** with the center as the location of the bomb. + +The bombs are represented by a **0-indexed** 2D integer array `bombs` where `bombs[i] = [xi, yi, ri]`. `xi` and `yi` denote the X-coordinate and Y-coordinate of the location of the ith bomb, whereas ri denotes the **radius** of its range. + +You may choose to detonate a **single** bomb. When a bomb is detonated, it will detonate **all bombs** that lie in its range. These bombs will further detonate the bombs that lie in their ranges. + +Given the list of bombs, return the **maximum** number of bombs that can be detonated if you are allowed to detonate **only one** bomb. + + +**Example 1:** -**Example 1:** +![example1](./desmos-eg-3.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: bombs = [[2,1,3],[6,1,4]] +Output: 2 +Explanation: +The above figure shows the positions and ranges of the 2 bombs. +If we detonate the left bomb, the right bomb will not be affected. +But if we detonate the right bomb, both bombs will be detonated. +So the maximum bombs that can be detonated is max(1, 2) = 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./desmos-eg-2.png) -### 思路1 -> ... -Detonate the Maximum Bombs -```go ``` +Input: bombs = [[1,1,5],[10,10,5]] +Output: 1 +Explanation: +Detonating either bomb will not detonate the other bomb, so the maximum number of bombs that can be detonated is 1. +``` + +**Example 3:** + +![example3](./desmos-eg1.png) +``` +Input: bombs = [[1,2,3],[2,3,1],[3,4,2],[4,5,3],[5,6,4]] +Output: 5 +Explanation: +The best bomb to detonate is bomb 0 because: +- Bomb 0 detonates bombs 1 and 2. The red circle denotes the range of bomb 0. +- Bomb 2 detonates bomb 3. The blue circle denotes the range of bomb 2. +- Bomb 3 detonates bomb 4. The green circle denotes the range of bomb 3. +Thus all 5 bombs are detonated. +``` ## 结语 diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go index d115ccf5e..57efd5a2e 100644 --- a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go +++ b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution.go @@ -1,5 +1,71 @@ package Solution -func Solution(x bool) bool { - return x +type union2101 struct { + father []int +} + +func (u *union2101) findFather(x int) int { + if u.father[x] != x { + u.father[x] = u.findFather(u.father[x]) + } + return u.father[x] +} + +func (u *union2101) union(x, y int) { + x = u.father[x] + y = u.father[y] + if x < y { + u.father[y] = x + } else { + u.father[x] = y + } +} + +func distance(x1, y1, x2, y2 int) int64 { + diffX := int64(x2 - x1) + diffY := int64(y2 - y1) + return diffX*diffX + diffY*diffY +} + +// 如果擦边就算,并查集可解决 +func Solution(bombs [][]int) int { + length := len(bombs) + points := make(map[int]map[int]struct{}, length) + for i := 0; i < length; i++ { + points[i] = make(map[int]struct{}) + } + for i := 0; i < len(bombs); i++ { + ii := bombs[i] + for j := 0; j < len(bombs); j++ { + if i == j { + continue + } + jj := bombs[j] + dis := distance(ii[0], ii[1], jj[0], jj[1]) + actual := int64(ii[2] * ii[2]) + if actual >= dis { + points[i][j] = struct{}{} + } + } + } + + var dfs func(int, map[int]struct{}) int + dfs = func(start int, visited map[int]struct{}) int { + visited[start] = struct{}{} + total := 1 // 自己 + for next := range points[start] { + if _, ok := visited[next]; !ok { + visited[next] = struct{}{} + total += dfs(next, visited) + } + } + return total + } + ans := 0 + for i := 0; i < length; i++ { + if a := dfs(i, map[int]struct{}{}); a > ans { + ans = a + } + } + return ans } diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go index 14ff50eb4..c9247df97 100644 --- a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go +++ b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/Solution_test.go @@ -10,12 +10,18 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {2, 1, 3}, {6, 1, 4}, + }, 2}, + {"TestCase2", [][]int{ + {1, 1, 5}, {10, 10, 5}, + }, 1}, + {"TestCase3", [][]int{ + {1, 2, 3}, {2, 3, 1}, {3, 4, 2}, {4, 5, 3}, {5, 6, 4}, + }, 5}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg-2.png b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg-2.png new file mode 100644 index 0000000000000000000000000000000000000000..72085c819086c989db77a4429ca867a898340b39 GIT binary patch literal 80125 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�+I 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�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 Mr7T(S_?g%L0l;@+LI3~& literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg-3.png b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e0c6f45771422ea1f9fb6161a6c0704f715c73f2 GIT binary patch literal 76884 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 Q0swzB)wEShlr4k)KlTp-&;S4c literal 0 HcmV?d00001 diff --git a/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg1.png b/leetcode/2101-2200/2101.Detonate-the-Maximum-Bombs/desmos-eg1.png new file mode 100644 index 0000000000000000000000000000000000000000..08a25d75dc8bd959e1e526f459334175a5b974bb GIT binary patch literal 114201 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

      Bv3(dpUx7d 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

      ^P{J&?k?CYwtNs>Rr9DSYb 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 Udjr(5M{q61_Ynw(>|*qP0WlZ>4FCWD literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/trim2.jpg b/leetcode/601-700/0669.Trim-a-Binary-Search-Tree/trim2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..491ee9a022f2bcec59cd114ebf66033e9d41129c GIT binary patch literal 24980 zcmeFZcT`hdw>KIDq&E>%suV@3(mRNVfHV<83q_@u&_XYwpfn*MNDECmgeEl*iXupr z8X&aLdv6I{viDkhuQk`4zd7e`?#r>uSpe1fF*uhCzlrN@7#{oM$`?<)z3NbwiaQjk&LfBl==|KCZ;60O7i=B zLL%a;B&2lLIOv7Ru5*eg>Arl+z$NseRNOTo{U;nr#0(_Tr*XTKf z@m&qNz5SR)d|gDeVvga_^On8c%LxD_{=_SEgmeH!09K2RmX40#pLUO6YYpK00}auF z92No{_xiTqP?$4EqnI|DKxt$zg(VL)<^21(V#(~hSp=9}ncoca7d(TG;L6tRYp&RV zB(&l+`>%yjWd*UP@+1f9y*;mMI0;r-sg6MWDz~qlUgd?C=;}}JPxdd*>`%6ZW^Z_< z9r@=bOeKD4sEaPh^;#+1pQqE;pN=hsC?Lcq=_W@dbz34ccx|kt$)YX+X+rZb5l}}% z>xBBEJEMjdiE7}5TTyBrI;yhh*P`YAitgaS*{9tvS7{1#4Jv4X%ByQbNQ<8xH6b7; z1};od?TROVLcub{#9aTlYY!rD(f*A%?0!Sn{ul>K?T@0wd_z@fHl-s{K%q;|xZO&| zYx1#d@}ig1BON*})jkS))wNaX&NY=j*Ny3I8R~l5wWV=Rae=D?^|sOoTL=qWbwR!kuEZdbl-gmUP>*O=b;p9)3aE=A{L05pqH0;_bw>utTt3tO(q6ANFKqO% z>#KsuloaYmmWnGB$N5o-d)vFXIA50cyjzz5#|bb3Ne(Z*4wP)HJvc#}*Y0r?A~6N> z(`$FU@018`bJ?%4*00Oe{Uqg0{kOtlQ80+g^Z1$)<9M}pj90Zm58StI%%}77MonvG zWsO~MfyRGBI4EGPO~ufR8N1!U1$(ef9LCXV_g>}QK0de9s5Ho?0iv3kD`b!dDZe6a zQZu|{lp&h7fE~-XeEGS_xJ>t^!>Z$Fr-7fXyAV^-(~xBvB5$R!p%FbpJ!O!JE`y5v zV{qcFY#)Da%P;|msVuD$5#4eAtG?3XRyqi1gvH)dyGxY1V) zpY;pNNpMM7Ia^NoOD3PHZw=G1Oy?4}8mp?i zGuXPAmDJ2}@uobWJ5OuX;GONOIL${S{g5ZyyW`?a=J@$q@PL2pjKY;vF_d)8x>x#w zOtkfua{R=7!2!wQxON?SD@sKJtn2H~pT~9oMKS-Ap8o4YqWcYCkGfU!Pt9LxKi|;Y zxmOy-+zNh~wO!mWoRJ*ylB+0c`zU}$&7P}}zo{I25#r+K)WZPuUXTWFdz*_)o;MF4 zIhGW_jad%17{%g72^RXMoM;ovqsE!JCZxYig*A~R{ zV5qxJwB&VB>C&FgqX2c#WU$F9(dTNmMalj*!JXMd52!4@LpJG|`-+4{*X=}PRahtP z-6?(%pjr4nE>!9o>21Z3&I8gA@5hgc9zXogJ7Rs@)tL@EY=a)JJhG(9puFEItbce7 z!y>kK3Ap-Z@5rD6sH3WmHRBtm^wS=ZpnBf5RU>d*YcO21$Xaf!8Tm6zL5joeXiu* z$%RmV+Ht6D?vS_PXx_Qt@?wopo$HNUJuWhlr$vME+Ec3lw;HJLfg54)>y1t!HSOsy zm?#U6OMnrs3exZbL4I1lx}1}b9M-1DcC@-iqIuL-3^JdTcGu?E`P76i2`84{C~p|M<9i(GchX8S{yt>0lpLNBExM6vD}CK;t^CAG z**)L8Wl*Ns;EF=pm(MkJ|Dyl?Nge+6VQ|qV)mP}?hF8A6zo)THsYON?O=b}aDP_NK zK}E2zUHS^10gYcr8W!F>Ooux$<;71rfcBh9iyS)@&AG`(K67%CuepwwVcep@b=wnX z8t$)Ep709RRF01L^)jsE=+B!zL=@quOP+c#Tc3~y9CEk zBr35YpBgA;yB`3BKqfdA-2DaS2>#7{T4&QNXBQh|ZOP!Nl=jmI>R)Bci44cKQU)n?i}36>{)qK-e^G;(k7iLb}; zt~1q{_1q185+>fd84%;@&$dzf(A?R%YH+6XI&$$>@8-&#{93C7@w;<|PJw#%HqeUJ zurBQrl3<*A*9P>_=#h6L>$k&bT3>aWF+m){tT0itD!{l}UqY6L(v#VtaK?~Z{vq-n z=V!L^8x{Z=ZNJ6_ska?PIDaiBeWtReIB8<_$qOCo&CTA5uVDlUHMM@gO z^(TZ8S`UZq;UG#}1FP~qb#GQ+m1Il4%d|ZgMU1_ltpaqbT-#&4mXO#J-m1NR9KO(6 zl6-5O83!{a8CRB>G3p(34x^ux|MrcQ;;${$zh0rg)zB^0>dW*iJK>%3RgeI6z7b64s?WO7?K(M{JPo7i=>P^Np#Jno z=ve`Rh0AA5zSd!~EN-}SDl#%N=GsEkFcdcGy=g|Pz~{R;ZN4*NU`XFxalUe^W?3q4 zh#~=oRcG*|G8J5kSLRZN&EXVO>*QlRSSvYiA3!`apug<$&^+5Nw$cLPRoq2IlH?7R z>!})Io=_Hrr{0}%H!8JtOx+m~4NbG#S7ZLpWEIhER|C zy`+){Mymq>0RFbe#Mhmx^oy!3ondbaQTnyFw!CCQpT%v<6x+CjXwEbaJ-J?1ghPyq zdVsRpaQ#-U#jVxt@Jxwe^)cn_Kt1VmnbCQ1#*xiyXDvpaWdEygAjk_haagx6EViF7EGUc~)S@h*v5In? z>xJmNBITwHK=YQSMot+R>m=%JA;8rh=q6B8%e?+@r_8FG%ni2@3zKb9YJzVabc=O~ zaWn!>Z;2L|X2LgVT+v!}(;|gseo8*BO&|=7De471P@@ArN=pjnj+2spmyv%Q?Z!3; zX(G%i$*mhwaz%_N12urmHo-pT>?{>^?&zAIQmJ23x6t)jBYy$S8|V*ansJ z7uO;hGLM0ft~HnL`_gQI87uBr<~d8ps4oFtN1x0TN?sXHnL4WRXIK?$A*dWPr6ej2pNs{+&RhX_idai8UtB|l#~*~v!kD5Y%pT4 zVD>f4M#9CWyTMu%e9U?#+ln?YwxXEv!aJV&-t|pAY*U+%mp4^Z?({z|^VkY_&{UQP zYtcLs&kRQ&k}y6V!X;Ki&DFMsklnp580ytzr&L?i1V*?O-ePqck*a&_sS^&RC>`DQ z%kXDQ;g;uSAC_Yfw96m%$Wf{I@B;?J2t`Wc!qYx?y`<fB})c#%eF>D3h@3# zyr1m8%YO6`*l=QIrV#$kAwLK+1e!hy)FAs+jxuckj*bV`J~uBxko%nl2Jjc5#NOPQri>Js=gwpto|2m{hz_oKVhdoKUDew)X*~15@!I*0k31}koU6^-fn(` zvPhTNZz>T5)4&dPZjPR-zVHu4g4_2JR3JkXt?$>TSN)b#0Wi3^yup_@%J$qJTYhq5 zCEFasaUarUo%!61trd)QYB9BgD08gy5lMue-tCR7wpFtZV4!2&Z7C8$7S*_U6E(S- zO0bM@4Xfx-x_HA2Z-=`!;`KqM;|cRew1tJ84pu8|fvOe?9fIDE17ZhW3ktfC#X&3M z7SxHq&j6`_0{UPW*_=;+d;46EIhwlfAA_>2zjGG8&1W})GR0LH^gcrIsM(}y?qHV^ zyhe{8mjLoIUwMHO6&|kss;TWKD{pp=TzpkfCtMlke1}yJ!t!d2EpU=4TEDJ+V74LNF56YMFG~&+5;@89cAZw|2pMM!>=G22_*b3A$va+G`osFu ziM7I{*QBbJ|473W+Z`>N6QK_i#h-8gFkcteGiGP6(v=R#*<2F% zZ6?}~6QxO$)@F%Vmx6Kx`unK^+$8zkM;-bW$7EbX>~gHyZQO0R{ja-+-itF!%-a*? zHDAB#0^f{iUIH3&5l!2tiS%a{`N*DY8xFM=-~=zwNOMN>j0MFSyvX6zH5EA>;xfyL zZDp9!?U1qHw+_fjq1tYZk;FM23zzcu31T(+LlK-AJa3kppe`J}w}VMHm5d!eT>{jb zSWhHRo}ASdZ@KIY17C>iDQ>R`?D#k5y}LlKm6^deoSG-^3mJgk%Lg_$GwS05El;^4 zeKH7PIO)bPv0zfJ3gW9K|7UTszbRf*2J@BO0hO8H25?S((>i9G=30Kf5?VQ8paBX$ zMY}$9rM@Z^bEmC3*4NQ$8n=Nk)p3zZSE(E~*7NTYf?ROKTcHWjW`1SfclNvY)v1X4 zR&BY(=$GeLq?rGncyZnq_-pB^%qDMgKXlll&aTx+2qQqg!n$Wz2!wH#=a3vf&@@u$ zrMP}7hU+&zF{ZDY{3U!;RA!vuKks@%+r{K_R%{T?sUKvczF_ep;!2wgID-wTW24sx>i_=f^SSiA@280*o27&dNKScR(M88Iu3@^&TXyGky zyeP*iZ7S)bPPJBdy1sTxVrncLgI;GB6Tnk00p98^{unGj5ALg$XX2gF5xgk#ZX${U ze~a=B6!7_Q+iy{(Fzu+B!i)0n;MJ88PyFiolvFJ6{g2hfYwu8$_j`2_^!l?*<5$;j z{8Tye|GE+Xd$arT@2KytrY(GoBxBl5=7V)*W&Tl|`O3NS-L5i{G9=b?TVp9p0j|pONSEOFgPcn%=2EX%m4b zs--7yg+l#p=pJ4IJfouw&>oo+g6Flk6TqW-TSBixduJ%*qOSiF-_#EfLPmBa8?18W ztLAzcdrHu7RQCeMfjv^@Uh_}8*&ve>CJo1T*ny=K@b!>xH6ao4*3%P%AZSi>zsm$o zTJgC&YW|)Gvw4|iP->KeW)wZIddj;gQl(Xt8%J~cmzu9ljXhigv~w7dct6U3P0pYSJuZ$RW9XZ zT!!-7ZBnkEyfc4mYLuM*=aio`!VEd@@7uO6kl5XwI<4-Xxks6Lw~h_DF#@R@npPJd%pp?r8=QTT7{%2*%cSdYi9!8EVP z^D~EBR9|ad=r(V`&p>Bb1|ur{{xhV8|MX7LOU0T~$C3)c+G1$UBgEX$WI{v$|vkFmJ4^2{l>$=LZi7I%7Vtfv9gx)*nU-iO+8Y2fHEyWMEjF4)ut3QWsMINgnDO!W4`)%gcxYhc zDDG{Ws~`7~YU6UT7GBQGw5Y%gkAJ&OwMI4(bHClDnqF7D+eE7hqXvQ`8R|+ZGx-Z9 zohR+q%KZ@jA#FuPv7Q6-9)b(-=9(#57Q(kst}ZtLZZ?zg|3TAB_;;{%-n&1+5xNF> z4#2sikOC&x)tT4+gk?8Ks0+c*GDj5&@3U}pix1oY=GM;_71!{ z-~^4^$vg717kt+0p0Ka~qK3vtD3~PnafKR-Y3G!${bI&>3Rt_uR%A9gXML-J{6p_| zg8>u!f5oW&G zI@j_1k}W_Ehpotbn&(XJCVFhz#E6Gxp&P0K%}eSGT4Gykarcc_&@_d79M^aRzKF>% zC+sLYOzNqf7Uz@jeJjd=M8%s(E9Qo0Y=8Lbb*>l#k)15NF6qGJpI!-C*^w-C$${C+skahJYlk2=gvZt%r(zgkuQ0_dPDqm%BbeT%O)~D;iE=eu3L18xeYYk z4}8t>P%vd$7ep-?I?<|(G4w8y7rypgRqqyN`2mG&v~&*rLy77nZqXyC4jNjHKXsLA0zN?ZbJwj?Go#6VyqZ|XG2_k8jKGxeIcI>+>&cNSl0 zB@`dMk#C;U_#M4*4)wYF;&=3>HF-G$AHDev3rJlYWQ6mPdikHwPBfgi0-axtn(y5D zG~_cPP4zgZe3YGs`_NxCD{Xf`C-p;`O`i6lD!Mkht_YthD@vHKF4Tg5T}wl;+e{h^ zS(w>wxNQ%P%(p9OvpM_D&;Kcn<6WgpNU~!MGYkQ`+K;wtp|*Z0tA*QW5Ku6Oq&!WKLdT11zP>Wyri;fGr`il*^{$8*^^=tXbA6 z+m$tp47EO&8AGYf>5x###n_I!vR{!t0F~!cP}G=Mqnh-phbo~*ceGTH4s|9sPnelO z{3>nUcfyK8c9))~BJSQ@)b330(RGfRkBF}NvF0Zr`b4B&w3Mq=^nUI&4c`h~gU;Pq zzl>uOQ(x8??u7c{kJ9Z9RkySsp*+nefw~c0{xxhL^5yvi51$iY%HLt70*(dNxAry> zcRF;5fcpDGeba@@mN`Br)lkysx(4rc^FB^fZWLy2TY4z!C$Oo5KgeR zoI-ufBBO9ChWw{m4!P-==b(Iew%aA3UiLI-{C41{?TbZ->i2^85g*<1qJc&jMR(--R& zYw`*%x}a2+ufH)glxM@!P4%3m9;*fgj19^_#QSeu0y4gH3Ytfzn*QSUDMm;tBhr)s z=YG)qJ*qg<2t?L(r$PwQdiBl29l8>4=YS_z+JMG>-!-DCsZ;iRr|+)tu&?rc%B8r% z&pYB`g7Vk&0kT+srKpp}i#2ms`;3o^eq2pp(H4>Qd@Wz-j%`_~Bf)u!E#;>+b%j9} zL*kihjh=PIpGC~iC$P$QC8-T-dxv5+mY40k!d4Ly768eF8bqlf+u5jFM^je81zWw zcG(8DX@()+H}!21GWE7YjzI41^*D?;kUr*D*9_{Si*Pgd$NO+ZQ4_FkPL#?~d_w?b zA@!E-`u#r-E8`t_;^#%#GAnE3<*@R|C>Ix_MPa=*Ref8Ih6jy3XWW$uO$w$pTO_f- z8lcV#@VQqEs754b65b>3aE?<8_@$jb*s8<6Ye&QG!B~M$+N)r^a|@n$HGNcngB*1K zDRRu^lpwJY5EV+Ukktc{+g{0A%B3BxSP7P1h%Fr|fCaA3w>{VzG<0^p1Qd!(n^{|1 zgMZW(r{{}wI;_Z5K6%Q13HVMF8vH#VMh^Py36gIuaY*1{_q~c}O;l>e6+wClQfGmB zktJ37DIfck>FYYt&E^A^Z;p3m%O7PY@`k6#U6W8-wDV^}^_UJx6S0Sz>z+Dp!+eds zQH>609aRONR$X!9f)}0|c5F;zIq|uWEj2Provtb0@+Y{BSDh8<#HcBML72LW!KMR7 z$8?Q^dM}lb@GbilnpXakCfe>eJFe1@SQ=&gr_aRjL#UU~s>#%8y>xVpT2~Bl( z%HBMsP})`wI3{;OX)dFSCcLB8#gl5Nb?kB*9!{5O+>+CZeeer3(sCNyP~21&dE!u7 zIhA#7$n^eVUSZUUf;5xK+z}BRwK`I7Fbt+){4$jpGdU5vPOJJPAO|g0)2xDh= zWcMu_YuU_a?T2J@{w+~Sl5cS8tvZmd#rNzl8@Mp-^PUDBg`lCX+o9-}5XEGsNNERN zPRrAGbRCc7&F{*^fX}gXyF7JSV(9By$njH= zC05N@d~b)}8pE*;$2Px;l;X5{P*DPv2(2h(x%zet(44Rum2*cuZAF;Q;}-TLx$l;D zlk{9!aKb!SKTG%AP|GDC`8`Ig*HcCK$IrefTftWFx38MxCi2~r=^lHTshZpDJND1x zMm(xmUf(J3xlk09xto_2)i*6ap1IYjcu?QtU{r^kUpn20Mv0!-&#l1(^fdS1(lK~^ z{}Ts|ltx`C6djlqWPh)cFX|di{JXSEz!9h$wdHyVxQm5|w%@^7B4t>Dqu4OuSdX8t zho}{LTrJeyJqom?+H^{U?W1oFE`2d&z&arY^wFK)mr;*S(gv56O>_uPlVna3@BM+P zte{WutQ3|o!m(hQWL>0Bd5H6lmb<{1DMFyG_^y^$pdG+pLFJn=@@5As&nePQ% z^z^cN?ZP!nz>99IFM+_m?-Ou*-s?K?HovpM*7=LeB(=PEN{-J%Q>7;aL_KsFiPbG7LXft)h$o?0) z!=?96Q%gp8!8a%KKRbwx2!#5ZL9;$_<1-B7sk11_9kGw^JF1&RGgZCN1u~u>f?(vx z%L31U$8K|@nv__oGcEp*&0x@*i+YhB9&YjI3>bQFP@GE**|uu2}t#{JOo&b1;c6mS_Qg7HMjd3L^FgpJfxM z%tNO!>d(BE+txFfc12= z^w?P&Y34kEsx3$3sT_Ephy^W%kM(>cnZGgg<;@?rZ346wI#L_{;7q42r=cy&?d`bG z;e}K>C5K>n>e+<~jr=m;LaVR;1QQC= z_MU&OmQb~zZUY>ZHfqXiC2q*OLgNh2!%Q9QEzFX93smPzMO#w1Xq;(p|3V(i)VNrf zn{ov?Zsp5ygxqVzriw$UF zb-Vh3Y3V_&pF{E_|8xA)4M`KLU;Du_*nBI;=_8&2SJ4_f>rbn6Ku%cyY-AO@HJl(2 zP{%s-841n3vh)3}?_w*@ua7+A-mS+6eeG8_&2#h=^_@3Z8ZAR)8C(nvY9+NV(n0e= z$%|0CaWN6`y{0TY$%EtD3GHi+Kt9qxz!7nt!ShRiN3>e)-1UXF>V-;GuVy)K$6WT$ z1&Yu8KklEt?@wC74v!4HtON5oOKY{c5fL`rHwsuuJ`w-yy|bJPmiT6Oc*F{>h==vO z*9?U(na*vE=r=TEyp{_99Mcrtf%xroPYzw68ooL=QHuB>xSn@W94}eLr04NT-Rfc3ixi?8ml|leZJonoSXM zv8MW`|2E^8u`UZ$QA8F-2r7D8MD%lA^*-sE-1tuj*Ow(6^K0D?m?G!I52doatHt(K z_-u?2OU)KO*hZ}D$kuFUzIL?pMk~*kTiP@61HsqHvQ5|sQ0K;SePcTg__(jOz98fq z*H>b%SS`OpHwOy44R&MKNdrr_`CBpi{VippvKa3atTfB(whJ`p!^YLRd&PF!`mUzn z5!aFDz{lgW8DxYDiIM;lT%FfHV!?(o|0(tjPo4NOGD%_nsH?X( zZ|Vm7h%)K>^&y+&hl_k_59Sm;QuY_*paIXZ3_Mvzs<&MDhhVH}2^y|eT<9?8%@4c9 zgb#yM?8~=o`j?ISZbdo1=K3PvY9_JZ)16(vMm+Z&>*65~(R!l=6k;njddN{7r#8EM z%`bIcyv<*w?~wX0xf9e@e}Fv|Q-oxFLm7={_CPvWtxAHUHjrJbc4C^HIFW?LVZnTR z{$4W8GslLyy~&sdL)hku)NBkjPpv=Kdvn%&as89pZ0+x?^y?}8bE62lWz%gdf4L8@ zD`LyYBP4neXXeu$o0g%gXUkeX@VLECi}W%5jb?Y{pZ}cqKMeLW8uAzO-Zs^&{byeN zA8ua7Hsd-)4JEE8okd(ffnT_nvV_`lBA|t&*NPK&_Z1}AQa%1rPmjK)1+`!;DW@nUS2A^f) zXw?GCk#Ua>R*H{Z^8Jd!N6d|$nI*Qb1s1RSzx=d@dTwxKzwKQ~e)o1ibGChd=hqEA z4dWuFkLNR_l^W0qtIe~e3BeQ=)Lt-+Bzt^}%dCDn)ZQk2UdL(df*qWflCinWehu&H zlCk%MVM~itEZXknY@*T*GBC?#s1SI0y@Kw{VYoYM@#=+bJ|bGQx8&-XM$ik-?{fy* zaP%;>AMY)pG?$m$h=MOW{kI#EUDU+=6(-q&oF;IqLUE>Bl9H#j>FalNsu-p@zF9Zd zuT*?V_11?>XBQZO1xX1l7u2jMr=p%y8FFIJ;oMvcpd^ZTK3M z-}D4R`t3GuQkbwToTR_yPOLv7b6x#&BS9SFig;#LXj^N#ItR}!dI`0&egR=aEt4uZ za@?p8rB9>3wfTw19mRsywu!6KT)I(AChyX*ad+N`Bn4}qzWWOuRQon;R? zhWZP&2U=R4>}K`@nRb1_HPRk)r}hu@^+q1^=~b<|%J zBGh&ybq)J(oXMMUZQdZA^h#;m1F3E`_M~3 ze$kt?TG@hX_sX#@2WN&f8RU}wHWF5FKDDqYy>GXvP!LyJt&-xtWat3fNLw~6%!YA2 z`6IL|gEvP&v&>7t&ZI}suZJNQRPYhr;;Ku)uQTTuyrWJV)KWtX|6emnJhF7NSsu24 zVA0^O8p1fC9lVDO27yo5@u@`DmqQTkqi%lAP_0u}*P~{%tXMS}{ z_+o;Nh(-jkQ=M_W;}WpHcreJZDR+)+b-Dihhnyzt7BjcIm~@Q&Qknf9DOkq_)~Aim z%)Icii+9gJE;m3SH#d)Nm*iTTeZBE{ov1qO3L01!W8Dmvb8D^l@JiA+JRQlC@rJI| zKx>g@A_J|Ye)=mI`RN~!#xX;A@pGgRjfO431QS$dupjr~I zY#U2Z61F$RT*!?)GAcA*J3w{V^I+3`#Y44=ie!F%(UB(iJA<7Wo*pmG>`8z5Rjvk+KPiE9$PfpCGI% z{Jn{iF*z_bzPvsUlr~ldeJq&sVw5H09Rx)@F~gvDQ|CwalZ<#Q3tP)WZ=ok;1M7TN z^+vAD`9g;Gm-ffpc~2h%g%JG+*&GNSD9q7E7$dZ9=EJ~GMkyW8a<}6jb+-?XHpGnQ zhrumz4w3yiI!@TkgpacFUs3FSu%#5kW*(Z4lphOXke|f*?fo4G$LC8?r8jpW+EXO{h2 zspc4}eU0?|}m zTG0WioEmS11*X_9u^j49oG&E2+sCJ2@mjHM>IMAkgt)^;Vtkz$ zxyvaYhuWde?|)q{{*_};^yg=4pwb;Ny&oXSqwkzKF}XB3U3(kv*E0$zpeyt3_GzP` zO(QMH1)+=i6klEG#pWUPXxEDRs(qD>ZEh# zk9TuF6U*S)%Eo?8z%yV{v+Mm>t|J82{e~$(9w@BG8{(px8nMQ@&Leo$7@#s3$ z8sO{GHKr~B;a20~->_)&;`FY7%EmZlB?$6X7ZuS-U438TUp?8M56IO&bkjyY;a}*c zGMT?O{s#ZecBy(D{oWScWc;)Myamm*9&L2*)%q4!IrnTV*)$+|+P`UKb~Jclm-so% ztkZFH&_x8SC)MWc*OEB;JZ#N+I?{lwTt9CqI&zf)ndJevw$>0PA?dEl#__4T)uu*T zP({6z`TJMpB3RfEcV6w&KDToZ`eBZoJcXVf9hUB0_1kPRVaAkFM+HSPbpi7E;MBXl z;7YdS{l+-m7nOBEY43i@nIxWg*;zK6c;q?pw#Kc|2jhae;_xf&G7@9{!KL!#c&r!(** zm{okoV8_)bL0p6y$)f#!%F}SPA(-%ut8kmI;GNu%9uPNu>2dp9ElK!{5VPA?nZ4W_ zQs*~7J6efz5(Hu~fKilN&r+@(BqF*6Be=#bJ0VzgraKrdK9nw&-|)hhwr2yvSb600 zGe5q)sMFyN>+3Hk(mXj6@{}uokdxAoDbsVbm|KtE9bjWfM}vU#+=WJl|v!_?Ff z$GfA*`~%_LtuJacx05H#q!wM3GiX|__EZNFb?#NTPf65=8E&v;wNIqxthjKtKHhO) z20mCkc8YG|IQOk{)j%pqXyL7m9aB{~QZ&nh&eYRIce8HT69DspuPkS~(hzkJ5+puU zxKk<@@XTd3OY81*BHHu&?oV$`EVLieps5xboGrb|Ys>Xhl|kPPseEWB-%wOa;BcCn z?_>UD77-{l%*=17!LXf%8hLop769U6UG8GqW^bo2FnB_~dDapwTEtlyfR&u26UN^F4;u z@CJq2UcOX@_KzJnR(fR2>t4&_Z6NH6g+PjYv7Gu zUjw$;{}xKTmjst3u~G~rq35q(SxaAH__E*wE)kO-@%D>H(eZP83a3x+yj`Q>_9RZK z+4?#F-qA{V1ur|d6=>?)Xa@x)O=N6&e!^;SWdvro$C-Q!fJq-fA|n5r3Gm-+cOx`& zG;wxt{)R_MXdD#EqoXU=PYJy@Aq`1e7y}S+!$WFa)G%R?)X?VDe4+gQ>}r$M4adSt z9`gV_v+MM#%x3G;gaHrsc%Gf3T>%FxUraq7EB*C*8uVG|uv(*W=4)hM? zr?z4pvisjB^X616QH@n~Hd;sp@P#Tu56YTj(!o>ISi#eT`bnuwt#!CVUICVG)4DxT z(FPiy2ffxdG);j7%!c`!X6O{ag{HLUt7n`hybTLYq9MEUw!+VzJyt5J8{X@A`M%(1 z=7$&?=;G&n)R1=#E8|23>U>72h)>w$EZS+WIZ`%VMOEW7<;Mi!X7A=FQc`bxyjeQ{ zLI$|Ac&n6*&==CqFDbH{Fnbf^-M9v5fcH1FT!sR7#_Nrq^t*$-9)}qlpO}tHJu1h= zDp9(Fs+vl48k!wgzi4J1;$M$nJ1x5EC|F%ZjFI!ofIL|kPno=wv^3~nhTiL-ijD?| ze+~cuh*&zqLvs4uo>K0RcRu(~%(TuQiZ*m8atyouLryz-DrR>7bEc}cu0{Ojh7QQf z4SU8QZ=m>W$afXXTV%iBGI4LgKpm*_q~jWRe!=j@ag71^W3Q&_$8fY9wL)5O@W{Vk zUvPgymxXFSOi=`22y`lBc8wvQw&OAOQ5DlpmK51&k}5}~D;XKR;!YWbhM@cv++ z96^wi%?6sn;@P){Y7@*cJC0mmDj~Aqx~2Kpr=THouHt+bL)POJsE_%u*6A(9?aU*g zTfZ2Cu&2G3fZY#A=K-Yhsd(y2gm=xLg#fS?^oi3%@oE^&|0$~Wf7=r}};^{qEK z8Xkd6v6@_-^_cOY73+w8+P`@9vwTSC4<~pM99r?~*O&w8x*O51(cp40Ci^(js30P~ zg$tj#53AU`U4u_B{-$|bz%1~#CT8Tb%-_$q0A~8&6iJ^ z8RF_X?V?#k_S&MOH{JF${4(%_%3u<%H(#?nl;(jssQdMN#AR_^mMAKY&xnEV6MiNp zj^f{?vLbRqE20^u!~jwNAyeE@p<$`QuZW4`W-9OS6->1005f+b|RMW zfBW(aUN6iN)62%_*Mm>LbA$*ahUxKZ@r1~E^3$5KkqqUPxVR{g*Yd($99jcWcp71& z6WgRX7_IJL<*cHj(-Gm;?x3pWD2o#eXJ=@{xd?f$7xP6d8C^i4CJtDhuMv0m`sGF< zL(6Ws;kPbz-&!K?k)kOEOtSNY7&lQ8$Fy zY<}6fd2mi!oI_o1xQ}b!35kGZ%$?8Fvb%=)zn_Tw9>%6f&#oOKPNZ z&Y2Rc+bOk4`H-W|z=m%r<2Ch%N!&}xKxh?@i$yLr2jXpKhF;>Aw{?`JB27Akhyo%= z5hc_F~xGWiiF>*<#;Se|H8s2XKc;aNne$GgS=G)7?p>WcA(nq^4q%GVqG(_`xGE+x*6@&ySd$6{B12Ms68(w7pBW zfZ7C_-W1ub3?{&$)px7E^ zrS9d-J69AZ6yz1C8>n7;4NX<)hy@QosAE=Ax&Z0>m#&XV-NW{TIR$jMGQl1 ziJQ+sdoS0(a=}1+$_Q}`u*y5!>uGvg(Y@Bh?&MU}`K=r*F+LO!LmsY$rPSSj7~c`g z957^#+V^VpGS?*ub4FPGu`a33P4)@xk9A3kC_8PCs~K+-yojH@@}$aUf66dDKw<&@BQtdjA6v? zuv{&XpXlvsb3=x%#Ht#LMuDCYPbnlQ7~4+`hZiKxyEHJn_hf)w7RJ|I5@$azq@L-! zX&~T{v7)wAC_pkT8E;FpUHs*oo6Y@k?1=Ba>c>r!$N}>T*Lp^5fQg!E%@Q4%MH_ak zj?f<{InXM8Z^%Yj35J?MlTA`VsXWV|Gh8HpRCeR^wyomnkJ-*P_iE=YHmF_|w68Xf zK3kPw2IFFU^d@^#Q?dkMeWLDri@C<$`>v#x=JA!g8dtnU!E5c|kL8+8Jd`ry5Be6; zCp(z)+C0vo+tP$S<~#p?v!?I)mLNJ&H~)tI7C~0s*uwsruidk-dDe{oHz+LAqoY+K zRwku3#o+?*#HioQ3HJGV#bmE_(C@{?wPferDKqtw2O+s9mT^t@KuiQsc=8gxdx{AP znY`Q;b-A^38bx~c1jRP{(r*zDduU5#Wp2xbT_r@Q+6oGVQTZ)pF^K`$hBOepioG!dG3UgN~)RPy~fE(WS_`E zF67hH-Ep;`N20f+bi>j+rX|e3jjV6dY~Sm`xMRE<7k7p2cP-3GdBg*CQ^gtU~v@z=EBYvc{8VVT?jS z@UyjjFn?yR&frhu|1<^sGr#x;Crq$n!y}Y;)+QGeT2?4K_${#rP6 zJ-KlqV6P&?R^n@TKUzQS{2f|`AlFA@qzpj&z_4NdV*lF$%#w^i~GiM+4 z*P`eLgYPMv%yql9wpgsBKTt{uKbzr!WKGXJgL&URJNIFIa`gs#t?>D1`TDLFsL^l- zjeh;nn3|_o%0?G+diW_@ddI=sC8rs3eP4~9#HYS`pSrlRY+q%gyEX?4tL0cQ8hl7K zMZAXDO^WPrXq80Uug})&7;pUl8YNq~f#pjI*S@>MqDK<-4fHnNV9yhiJtdt`rp7}N zfJOIQCmi16o7jTLN$GD#{64&saVho375UWDBsfccx4d7a7N z>42o!yi^XyMRnx&3ST8PZhNPn%|4hXc=>ZzQJ{K>cy+_UDFaOW6j`mzspspMc$nVK zy3cfG09vn%#Dyi#H3(j+^*(dRUF328c524h70s@-k7nkWq_llyX20;2HtFb)WeHc3 zq4-6_gZM;*2#YNx3Bb|~c>9c5co8tJ+_xX1cTfvmLz8yY8zm(?yXncBaD3g(P|xX7 zw`CwNk8$IR?rp2uxXT!ehJn^E7);H{k$%4>tIy?Pa<%*50zOi9u4UXKE8(AJNvwr= zh01;l_%13`-$eTdY`mLo89?Nu0EJeI#U8sPEInu;VZ%z!k0w8LMl_E}*>_;qCMyBS zG7f6F*$cLaTn9A=oOMEW?h4;4VTe3)Tj0$|-Nej*uAW2pCE|Q@Xv(KJCtuEcf0E^Y z=Sg0t?56tZmVV`1W#Y56Juni9N@+)RT83ur1dU2_q?mXq<@jk_AaYDsw3lgv9DCQj zIz44>E|>Ozwd%Ug7B{4#hxsLoR==GzjMh0b@`nS)``C|o9Rn=EcUKEWm45FG>VITf z5)twCN(3Cv8$(a}SvLG{!W%7gP#+PpwTLdOTi?#F6ckGj99J9Om|C^LYKhDeJ|P@Y zr4O)IXB=6^;@AoPkV-f2NDhc5?7Y6BMEhj(%KTe~ooDGA6b@`aT+zAWQTli{II_wO zbPNyxjTT%y`TYuHsXfR)!Te#!J>6gI?~hnGt2H*kjO{epfqwxF@QM_<2uCDtlhE15&^8`%NI#6DZL*I6K$?2nJyo?OT`Z+ zK3=fZ_^{k)yjM(g2}Bh)4jkcF5D3>Vn>PrRGx0%Vbm+AcvteTtP!W%j3<-4i7|jxng#L_^w_{Bg2ke$lV3IMOshB9m&50sbaMuLC-t z*}})Q)ZcZ(TD5G3_F7eW$k*7K|Hn(%EYx55X4}@_Se$nT^ztvc*b5otXbA@wd?O{2pe06fAQLun8=x)W%eJI1i0{ngfW?tp?5y(0xD$hMXE4kK26KeGqo& z);3nvk6oswoEH-=VGPB^#3-uV06-9c2R-*!#IqlXfd7s%3kJdMRt`h>bS66)rB^2R z3%UqXoqHtcQdjzR-az#?e_-P7Hme`-l(gJwUQ1g=_Yr!|^CU(PDUj?1E(&#dXNgOz z%&W%aaJR4Bnfm$Em$UT6Jnfw%*{9HAv8tlR7AIHJBF)ZxnYw0f*ZN^KOVJzUQigc( zCR7#RP>8aCrz7a3Nr^^dV7-XHn!!0W!Jul&Fm}Qmu(2)-&1<}AZIyPD8EE^Rl=0H5DtP*Pv_HRJ$ubqp^6J3#vwB( z`x+2_2N!y@`zE0uekJ(e#bBQ|Ysyk<_kFVz$x^|T|0q)Av3d7!(hYltF zMr*=!D2_iNn3|9e4FmOaUHig&rl`iismzn(VXpcd{_{kRm@zwul-XA=)z=+Qml#rR zU5ZyxX+gbemYqbPFmJ0?4wKjR=s2hGA~9aB`^f&;3HJHwEdLhU3|Yh5JEI20qA?Te kre04v#%4<%tDG2|+da3a)AKLuz<)g-_+Jc(=XmVD0CW@ Date: Mon, 27 Feb 2023 23:49:29 +0800 Subject: [PATCH 0220/1057] Add solution and test-cases for problem 427 --- .../0427.Construct-Quad-Tree/README.md | 72 ++++++++++++++---- .../0427.Construct-Quad-Tree/Solution.go | 42 +++++++++- .../0427.Construct-Quad-Tree/Solution_test.go | 45 +++++++++-- .../0427.Construct-Quad-Tree/e1tree.png | Bin 0 -> 117992 bytes .../0427.Construct-Quad-Tree/e2mat.png | Bin 0 -> 41135 bytes .../0427.Construct-Quad-Tree/e2tree.png | Bin 0 -> 233699 bytes .../0427.Construct-Quad-Tree/grid1.png | Bin 0 -> 11892 bytes .../0427.Construct-Quad-Tree/new_top.png | Bin 0 -> 32742 bytes 8 files changed, 137 insertions(+), 22 deletions(-) create mode 100644 leetcode/401-500/0427.Construct-Quad-Tree/e1tree.png create mode 100644 leetcode/401-500/0427.Construct-Quad-Tree/e2mat.png create mode 100644 leetcode/401-500/0427.Construct-Quad-Tree/e2tree.png create mode 100644 leetcode/401-500/0427.Construct-Quad-Tree/grid1.png create mode 100644 leetcode/401-500/0427.Construct-Quad-Tree/new_top.png diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/README.md b/leetcode/401-500/0427.Construct-Quad-Tree/README.md index 33fd70109..db32ede74 100644 --- a/leetcode/401-500/0427.Construct-Quad-Tree/README.md +++ b/leetcode/401-500/0427.Construct-Quad-Tree/README.md @@ -1,28 +1,74 @@ # [427.Construct Quad 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 a `n * n` matrix grid of `0's` and `1's` only. We want to represent the `grid` with a Quad-Tree. + +Return the root of the Quad-Tree representing the `grid`. + +Notice that you can assign the value of a node to **True** or **False** when `isLeaf` is **False**, and both are **accepted** in the answer. -**Example 1:** +A Quad-Tree is a tree data structure in which each internal node has exactly four children. Besides, each node has two attributes: +- `val`: True if the node represents a grid of 1's or False if the node represents a grid of 0's. +- `isLeaf`: True if the node is leaf node on the tree or False if the node has the four children. + +```cpp +class Node { + public boolean val; + public boolean isLeaf; + public Node topLeft; + public Node topRight; + public Node bottomLeft; + public Node bottomRight; +} ``` -Input: a = "11", b = "1" -Output: "100" + +We can construct a Quad-Tree from a two-dimensional area using the following steps: + +If the current grid has the same value (i.e all `1's` or all `0's`) set `isLeaf` True and set `val` to the value of the grid and set the four children to Null and stop. + +If the current grid has different values, set `isLeaf` to False and set `val` to any value and divide the current grid into four sub-grids as shown in the photo. + +Recurse for each of the children with the proper sub-grid. + +![1](./new_top.png) + +If you want to know more about the Quad-Tree, you can refer to the [wiki](https://en.wikipedia.org/wiki/Quadtree). + +**Quad-Tree format**: + +The output represents the serialized format of a Quad-Tree using level order traversal, where `null` signifies a path terminator where no node exists below. + +It is very similar to the serialization of the binary tree. The only difference is that the node is represented as a list [`isLeaf`, `val`]. + +If the value of `isLeaf` or `val` is True we represent it as **1** in the list [`isLeaf`, `val`] and if the value of `isLeaf` or `val` is False we represent it as **0**. + +**Example 1:** + +![example1](./grid1.png) + ``` +Input: grid = [[0,1],[1,0]] +Output: [[0,1],[1,0],[1,1],[1,1],[1,0]] +Explanation: The explanation of this example is shown below: +Notice that 0 represnts False and 1 represents True in the photo representing the Quad-Tree. +``` +![result1](./e1tree.png) -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./e2mat.png) -### 思路1 -> ... -Construct Quad Tree -```go +``` +Input: grid = [[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,1,1,1,1],[1,1,1,1,1,1,1,1],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0],[1,1,1,1,0,0,0,0]] +Output: [[0,1],[1,1],[0,1],[1,1],[1,0],null,null,null,null,[1,0],[1,0],[1,1],[1,1]] +Explanation: All values in the grid are not the same. We divide the grid into four sub-grids. +The topLeft, bottomLeft and bottomRight each has the same value. +The topRight have different values so we divide it into 4 sub-grids where each has the same value. +Explanation is shown in the photo below: ``` +![result2](./e2tree.png) ## 结语 diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/Solution.go b/leetcode/401-500/0427.Construct-Quad-Tree/Solution.go index d115ccf5e..39c0a625e 100644 --- a/leetcode/401-500/0427.Construct-Quad-Tree/Solution.go +++ b/leetcode/401-500/0427.Construct-Quad-Tree/Solution.go @@ -1,5 +1,43 @@ package Solution -func Solution(x bool) bool { - return x +type QuadNode struct { + Val bool + IsLeaf bool + TopLeft *QuadNode + TopRight *QuadNode + BottomLeft *QuadNode + BottomRight *QuadNode +} + +func Solution(grid [][]int) *QuadNode { + return construct427(grid, 0, 0, len(grid)) +} + +func construct427(grid [][]int, topX, topY, length int) *QuadNode { + node := &QuadNode{} + if length == 1 { + node.IsLeaf = true + node.Val = grid[topX][topY] == 1 + return node + } + + midLen := length / 2 + tl := construct427(grid, topX, topY, midLen) + tr := construct427(grid, topX, topY+midLen, midLen) + bl := construct427(grid, topX+midLen, topY, midLen) + br := construct427(grid, topX+midLen, topY+midLen, midLen) + equal := tl.Val == tr.Val && tr.Val == bl.Val && bl.Val == br.Val + node.Val = true + if equal { + node.Val = tl.Val + } + + node.IsLeaf = tl.IsLeaf && tr.IsLeaf && bl.IsLeaf && br.IsLeaf && equal + if !node.IsLeaf { + node.BottomRight = br + node.BottomLeft = bl + node.TopLeft = tl + node.TopRight = tr + } + return node } diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/Solution_test.go b/leetcode/401-500/0427.Construct-Quad-Tree/Solution_test.go index 14ff50eb4..42bee5fb8 100644 --- a/leetcode/401-500/0427.Construct-Quad-Tree/Solution_test.go +++ b/leetcode/401-500/0427.Construct-Quad-Tree/Solution_test.go @@ -10,12 +10,43 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect *QuadNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {0, 1}, {1, 0}, + }, &QuadNode{ + IsLeaf: false, + Val: true, + TopLeft: &QuadNode{IsLeaf: true, Val: false}, + TopRight: &QuadNode{IsLeaf: true, Val: true}, + BottomLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomRight: &QuadNode{IsLeaf: true, Val: false}, + }}, + {"TestCase2", [][]int{ + {1, 1, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 1, 1, 1, 1}, + {1, 1, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 0, 0, 0, 0}, + {1, 1, 1, 1, 0, 0, 0, 0}, + }, &QuadNode{ + IsLeaf: false, + Val: true, + TopLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomRight: &QuadNode{IsLeaf: true, Val: false}, + TopRight: &QuadNode{ + IsLeaf: false, + Val: true, + TopLeft: &QuadNode{IsLeaf: true, Val: false}, + TopRight: &QuadNode{IsLeaf: true, Val: false}, + BottomLeft: &QuadNode{IsLeaf: true, Val: true}, + BottomRight: &QuadNode{IsLeaf: true, Val: true}, + }, + }}, } // 开始测试 @@ -30,10 +61,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/e1tree.png b/leetcode/401-500/0427.Construct-Quad-Tree/e1tree.png new file mode 100644 index 0000000000000000000000000000000000000000..e31919ad56d6be1d3d2b341c78b2bc18c4e8d2d0 GIT binary patch literal 117992 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�({KR0 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 z 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 literal 0 HcmV?d00001 diff --git a/leetcode/401-500/0427.Construct-Quad-Tree/e2mat.png b/leetcode/401-500/0427.Construct-Quad-Tree/e2mat.png new file mode 100644 index 0000000000000000000000000000000000000000..fb80e3c0c4ffba50bf16cd5742e514e22dc17a12 GIT binary patch literal 41135 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�C^BIzy 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

      p+HLA^$RQY;t|r9Jw0~Bt&j)RPBNd|` z0!dSc|2YpW{cK4=&CX*-n+k0%_7jIfwOTBC_qrXqoV z>c3a2#`jXZSYo_Yc5=5EG^X{%hJ(bg+i%s4^X04<>&1x`yqy!oFpE%0e#;kgwg;sRq#D_N-DPyVeZL5$r^@miGL@Zgc7rBa@vm6R zM@m{0Ga%ZVjuthsB&$WDe>g{*7QH%Edvi~}_AGwKO#U_OA;)nMgjcNel^ChMkS%)# zRXE>-1>l#Ac*=&H|7nQrI=m)Bwq2}>Sa=?T%c(N1!V@^-V9IXAbeX+!h^{=2n1p5M zYX;{xoz5V>Z82K?mwzjtk>Pf`$8;5h_HE#H0QAgV8a0M`EM>M)LTDwNPVEUH*bzS0 zJ-i!CAlGLzH}c}ZdAjZ{`%N|R@^t8>7MqC67i?dQ<<=wvK71h*G^wf0D%@#ajU7|V z*7`;?U(IEiYQ@9tDDbXd!}H#3SlE!8nr}yi;(Ly_RPm<7lgRYMnI&tYmhL-$A7#tJ zcxRlO*AeRW6(L@h4EO?6J4~1p*c-wJvp%&z_e{v|%uLjO@t2;TH^c~^_tAAwp;92Q zUL^O~LY=-&-KErbGYA#6Unym0wnw&{I4xmfA1jovmmCOWmX1m>IL)lh+D_hVKV>C677c&I|v|S`xz^Yk1U)D!!O}^z|RC@y;{tfxv zEBr-5aTn{lu-F;9`d0YErWg>#8ZWj1DmoR2q0MeAIm|MEbLZDCK@`aivX5o|hlxf) z;Moz4`J{@L!Seg=*4_CIa+|J;2QXH3fM%YqMhDLZ^CGz_#Q|Qgn)lj35s(IHE_I%l zs3&L6uK`@ueXH8Qy%kL@Ev+>4)W_f;&G)PQSrxkSr%?t52J5fhek=z1j0S5uXg~y0 z{}MbDQ!9dsOk*rw+gtGSqLnRV>cjX|xV{7#qnK*igTiPI1bU2kgq{7?e>#V;0-(U7 zO-)S8Zp@YLW3*B(z$;5Hbvd{%>R7|oL%#|zIh|PWSl?&{uexU{=}P5!3lr5m zE5wD0z*RH%$fu4S!M=Uuju@{I^rM-wguQ2JX zssG0VP>=L~cznsJr0Usnfd_>fV-g$>%`Xl79}`V(U(_;)BN^?bMkb!XIVh^v*Az z^Mc8%ss~MC00(sVwweD6YUB!ef^MT{Uv*Tx@=E9pK#TIGJE1>o*jZ3 zQ>8dK1{8I{Tl|?neWm4kq!{mOU)*|!9v(fTgrg*4I0rPu|Mqou(MuQ{yij!Z&;B`- ze~YQ`&3y#&ecI%y&4Kt_`yFa9kByYa`V!;@SQ?-aLe%{;o#@$ixQ-&JUmkfzz350e zJN&Kww)M#3tL*|eP{m8t1?)S#wE7^)4zZ4=W?uvIu7?w2Xp1xkfpRi$yq22+UuqX_ z6!k&_-0$5r@JTTnG*>-3)74-Cyhw57IXJ+%e1F3-_*|h) zQB<0xCtg~ECRR=wFCv_4e{T=eaLeSab!&UjB&FJg5XDnZysk_$BE?*fg~Un{!%s;N z;}qH>36z-yDngmNw7;76j{KuW1yNAu0s~Q9^k4xfY9DI))>;S1nfCfAc;~}!N&`*T z!kcW5Qr>*nl5P5@rS>HW;3ua51-wI03~-?PJh{5C@1}0z`#(djCN_c$ z$?CkLE9wkh(R9ntz$uDBut?wKDkFxih6%)EQ`8 zzx}Ej6y{?ADW-$W1CEl-|g@j9=-#w2Xoo9<^ zpHNfI{+iz4HkFns@=*BUTZ6L4T*?~!Sek@?a8F@hVVX z;VniIl5inE0ofDhzQyg^@!_*MU(;36lVpf*eC15O&*6>cK&B6xgC_H(>Zl#6QDT89 zJN%1Q9sNeUn{di;^Ui_S_5ea)1)7YP668i$g?TjrVYMA(77n~5LC5FK0(@H_1+acA z(S%tN02!$!09qmfdTX*k#BZm&W*FKsG=YIpHa7rnkxAiz50oGwOaOS-2KO22#d|&K w`u5j~IlpayA2PkB6+K3+Ag@Q!fi4v0vhpK#C;guT@7v;Osv%Y1DBDE*FFe-H!~g&Q literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-3drawio.png b/leetcode/701-800/0787.Cheapest-Flights-Within-K-Stops/cheapest-flights-within-k-stops-3drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd965e73abdffd9fc550cbb4698d1f695ccab18 GIT binary patch literal 23339 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 Date: Fri, 27 Jan 2023 16:19:51 +0800 Subject: [PATCH 0187/1057] Add solution and test-cases for problem 472 --- .../401-500/0472.Concatenated-Words/README.md | 27 ++++---- .../0472.Concatenated-Words/Solution.go | 65 ++++++++++++++++++- .../0472.Concatenated-Words/Solution_test.go | 13 ++-- 3 files changed, 82 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0472.Concatenated-Words/README.md b/leetcode/401-500/0472.Concatenated-Words/README.md index 429102d85..06d050883 100644 --- a/leetcode/401-500/0472.Concatenated-Words/README.md +++ b/leetcode/401-500/0472.Concatenated-Words/README.md @@ -1,28 +1,27 @@ # [472.Concatenated 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 +Given an array of strings `words` (**without duplicates**), return all the **concatenated words** in the given list of `words`. + +A **concatenated word** is defined as a string that is comprised entirely of at least two shorter words in the given array. + **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"] +Output: ["catsdogcats","dogcatsdog","ratcatdogcat"] +Explanation: "catsdogcats" can be concatenated by "cats", "dog" and "cats"; +"dogcatsdog" can be concatenated by "dog", "cats" and "dog"; +"ratcatdogcat" can be concatenated by "rat", "cat", "dog" and "cat". ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Concatenated Words -```go ``` - +Input: words = ["cat","dog","catdog"] +Output: ["catdog"] +``` ## 结语 diff --git a/leetcode/401-500/0472.Concatenated-Words/Solution.go b/leetcode/401-500/0472.Concatenated-Words/Solution.go index d115ccf5e..f59b96fe0 100644 --- a/leetcode/401-500/0472.Concatenated-Words/Solution.go +++ b/leetcode/401-500/0472.Concatenated-Words/Solution.go @@ -1,5 +1,66 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(words []string) []string { + ans := make([]string, 0) + for _, w := range words { + cache := make(map[int]bool) + if findAllConcatenatedWordsInADictAux(w, 0, words, cache) { + ans = append(ans, w) + } + /* + try(w, 0, 0, words, c) + if c[w] >= 2 { + ans = append(ans, w) + } + */ + } + return ans +} + +/* +// g,e,ge + + func try(word string, start, length int, words []string, cache map[string]int) { + if start == len(word) { + cache[word] = length + return + } + if v, ok := cache[word[start:]]; ok { + if length+v > cache[word] { + cache[word] = length+v + } + return + } + for _, w := range words { + if word == w { + continue + } + if strings.HasPrefix(word[start:], w) { + cache[word[:start+1]] = length + try(word, start+len(w), length+1, words, cache) + } + } + } +*/ +func findAllConcatenatedWordsInADictAux(s string, idx int, words []string, check map[int]bool) bool { + if idx == len(s) { + check[idx] = true + return true + } + if val, ok := check[idx]; ok { + return val + } + for _, word := range words { + if word == s { + continue + } + if strings.HasPrefix(s[idx:], word) && findAllConcatenatedWordsInADictAux(s, idx+len(word), words, check) { + check[idx] = true + return true + } + } + check[idx] = false + return false } diff --git a/leetcode/401-500/0472.Concatenated-Words/Solution_test.go b/leetcode/401-500/0472.Concatenated-Words/Solution_test.go index 14ff50eb4..d005bd13e 100644 --- a/leetcode/401-500/0472.Concatenated-Words/Solution_test.go +++ b/leetcode/401-500/0472.Concatenated-Words/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{"cat", "cats", "catsdogcats", "dog", "dogcatsdog", "hippopotamuses", "rat", "ratcatdogcat"}, []string{"catsdogcats", "dogcatsdog", "ratcatdogcat"}}, + {"TestCase2", []string{"cat", "dog", "catdog"}, []string{"catdog"}}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cf9ae14c0c0329a51c0aa25b4ee542777f98a3d2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 28 Jan 2023 21:24:09 +0800 Subject: [PATCH 0188/1057] Add solution and test-cases for problem 352 --- .../README.md | 41 +++++++------ .../Solution.go | 57 ++++++++++++++++++- .../Solution_test.go | 21 +++---- 3 files changed, 91 insertions(+), 28 deletions(-) diff --git a/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/README.md b/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/README.md index 60a04c406..baa59f2a6 100644 --- a/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/README.md +++ b/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/README.md @@ -1,28 +1,37 @@ # [352.Data Stream as Disjoint Intervals][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given a data stream input of non-negative integers a1, a2, ..., an, summarize the numbers seen so far as a list of disjoint intervals. -**Example 1:** +Implement the `SummaryRanges` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `SummaryRanges()` Initializes the object with an empty stream. +- `void addNum(int value)` Adds the integer `value` to the stream. +- `int[][] getIntervals()` Returns a summary of the integers in the stream currently as a list of disjoint intervals [starti, endi]. The answer should be sorted by starti. -## 题意 -> ... -## 题解 +**Example 1:** -### 思路1 -> ... -Data Stream as Disjoint Intervals -```go ``` - +Input +["SummaryRanges", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"] +[[], [1], [], [3], [], [7], [], [2], [], [6], []] +Output +[null, null, [[1, 1]], null, [[1, 1], [3, 3]], null, [[1, 1], [3, 3], [7, 7]], null, [[1, 3], [7, 7]], null, [[1, 3], [6, 7]]] + +Explanation +SummaryRanges summaryRanges = new SummaryRanges(); +summaryRanges.addNum(1); // arr = [1] +summaryRanges.getIntervals(); // return [[1, 1]] +summaryRanges.addNum(3); // arr = [1, 3] +summaryRanges.getIntervals(); // return [[1, 1], [3, 3]] +summaryRanges.addNum(7); // arr = [1, 3, 7] +summaryRanges.getIntervals(); // return [[1, 1], [3, 3], [7, 7]] +summaryRanges.addNum(2); // arr = [1, 2, 3, 7] +summaryRanges.getIntervals(); // return [[1, 3], [7, 7]] +summaryRanges.addNum(6); // arr = [1, 2, 3, 6, 7] +summaryRanges.getIntervals(); // return [[1, 3], [6, 7]] +``` ## 结语 diff --git a/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution.go b/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution.go index d115ccf5e..40b8cb6c3 100644 --- a/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution.go +++ b/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution.go @@ -1,5 +1,58 @@ package Solution -func Solution(x bool) bool { - return x +type SummaryRanges struct { + // stack? + next []int + max int +} + +func Constructor352() SummaryRanges { + sr := SummaryRanges{ + next: make([]int, 10001), + } + return sr +} + +// 1,3,7 +func (this *SummaryRanges) AddNum(value int) { + this.next[value] = 1 + if value > this.max { + this.max = value + } +} + +// 3,_4_ 5, 7 +// 3, 5 +func (this *SummaryRanges) GetIntervals() [][]int { + ans := make([][]int, 0) + i := 0 + for i <= this.max { + if this.next[i] == 0 { + i++ + continue + } + start := i + n := i + for ; n <= this.max && this.next[n] == 1; n++ { + + } + ans = append(ans, []int{start, n - 1}) + i = n + } + return ans +} + +func Solution(ops []string, nums []int) [][][]int { + sr := Constructor352() + ans := make([][][]int, 0) + for i, op := range ops { + if op == "addNum" { + sr.AddNum(nums[i]) + continue + } + + tmp := sr.GetIntervals() + ans = append(ans, tmp) + } + return ans } diff --git a/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution_test.go b/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution_test.go index 14ff50eb4..620ed5b3e 100644 --- a/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution_test.go +++ b/leetcode/301-400/0352.Data-Stream-as-Disjoint-Intervals/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + ops []string + nums []int + expect [][][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"}, []int{1, 0, 3, 0, 7, 0, 2, 0, 6, 0}, [][][]int{ + {{1, 1}}, {{1, 1}, {3, 3}}, {{1, 1}, {3, 3}, {7, 7}}, {{1, 3}, {7, 7}}, {{1, 3}, {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.ops, c.nums) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.ops, c.name) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c231e80d3511ba899b17c4d091f6f0f98890dd37 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 29 Jan 2023 21:30:54 +0800 Subject: [PATCH 0189/1057] Add solution and test-cases for problem 460 --- leetcode/401-500/0460.LFU-Cache/README.md | 54 +++++--- leetcode/401-500/0460.LFU-Cache/Solution.go | 119 +++++++++++++++++- .../401-500/0460.LFU-Cache/Solution_test.go | 23 ++-- 3 files changed, 169 insertions(+), 27 deletions(-) diff --git a/leetcode/401-500/0460.LFU-Cache/README.md b/leetcode/401-500/0460.LFU-Cache/README.md index ab1656097..26f2455ac 100644 --- a/leetcode/401-500/0460.LFU-Cache/README.md +++ b/leetcode/401-500/0460.LFU-Cache/README.md @@ -1,28 +1,50 @@ # [460.LFU Cache][title] -> [!WARNING|style:flat] -> 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 and implement a data structure for a [Least Frequently Used (LFU)](https://en.wikipedia.org/wiki/Least\_frequently\_used) cache. -**Example 1:** +Implement the `LFUCache` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `LFUCache(int capacity)` Initializes the object with the `capacity` of the data structure. +- `int get(int key)` Gets the value of the `key` if the `key` exists in the cache. Otherwise, returns `-1`. +- `void put(int key, int value)` Update the value of the `key` if present, or inserts the `key` if not already present. When the cache reaches its `capacity`, it should invalidate and remove the **least frequently used** key before inserting a new item. For this problem, when there is a **tie** (i.e., two or more keys with the same frequency), the **least recently used** `key` would be invalidated. -## 题意 -> ... +To determine the least frequently used key, a **use counter** is maintained for each key in the cache. The key with the smallest **use counter** is the least frequently used key. -## 题解 +When a key is first inserted into the cache, its **use counter** is set to `1` (due to the `put` operation). The **use counter** for a key in the cache is incremented either a `get` or `put` operation is called on it. -### 思路1 -> ... -LFU Cache -```go -``` +The functions `get` and `put` must each run in `O(1)` average time complexity. +**Example 1:** + +``` +Input +["LFUCache", "put", "put", "get", "put", "get", "get", "put", "get", "get", "get"] +[[2], [1, 1], [2, 2], [1], [3, 3], [2], [3], [4, 4], [1], [3], [4]] +Output +[null, null, null, 1, null, -1, 3, null, -1, 3, 4] + +Explanation +// cnt(x) = the use counter for key x +// cache=[] will show the last used order for tiebreakers (leftmost element is most recent) +LFUCache lfu = new LFUCache(2); +lfu.put(1, 1); // cache=[1,_], cnt(1)=1 +lfu.put(2, 2); // cache=[2,1], cnt(2)=1, cnt(1)=1 +lfu.get(1); // return 1 + // cache=[1,2], cnt(2)=1, cnt(1)=2 +lfu.put(3, 3); // 2 is the LFU key because cnt(2)=1 is the smallest, invalidate 2. + // cache=[3,1], cnt(3)=1, cnt(1)=2 +lfu.get(2); // return -1 (not found) +lfu.get(3); // return 3 + // cache=[3,1], cnt(3)=2, cnt(1)=2 +lfu.put(4, 4); // Both 1 and 3 have the same cnt, but 1 is LRU, invalidate 1. + // cache=[4,3], cnt(4)=1, cnt(3)=2 +lfu.get(1); // return -1 (not found) +lfu.get(3); // return 3 + // cache=[3,4], cnt(4)=1, cnt(3)=3 +lfu.get(4); // return 4 + // cache=[4,3], cnt(4)=2, cnt(3)=3 +``` ## 结语 diff --git a/leetcode/401-500/0460.LFU-Cache/Solution.go b/leetcode/401-500/0460.LFU-Cache/Solution.go index d115ccf5e..4c446c5d1 100644 --- a/leetcode/401-500/0460.LFU-Cache/Solution.go +++ b/leetcode/401-500/0460.LFU-Cache/Solution.go @@ -1,5 +1,122 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "fmt" +) + +// 不是最优解法 +type lfuItem struct { + k int + v int + c int + p int // 优先级 + i int // 堆中位置 +} + +type lfuItems []*lfuItem + +func (li *lfuItems) String() { + fmt.Println() + for i := 0; i < len(*li); i++ { + fmt.Printf("%+v\n", (*li)[i]) + } +} +func (li *lfuItems) Len() int { + return len(*li) +} + +func (li *lfuItems) Swap(i, j int) { + (*li)[i], (*li)[j] = (*li)[j], (*li)[i] + (*li)[i].i, (*li)[j].i = i, j +} + +func (li *lfuItems) Less(i, j int) bool { + if (*li)[i].c == (*li)[j].c { + return (*li)[i].p < (*li)[j].p + } + return (*li)[i].c < (*li)[j].c +} + +func (li *lfuItems) Push(x interface{}) { + *li = append(*li, x.(*lfuItem)) +} + +func (li *lfuItems) Pop() interface{} { + old := *li + l := len(old) + x := old[l-1] + *li = old[:l-1] return x } + +type LFUCache struct { + capSize int + store map[int]*lfuItem + h lfuItems + next int +} + +func Constructor460(capacity int) LFUCache { + return LFUCache{ + capSize: capacity, + store: make(map[int]*lfuItem), + h: lfuItems{}, + next: 0, + } +} + +func (this *LFUCache) Get(key int) int { + v, ok := this.store[key] + if !ok { + return -1 + } + + v.c++ + v.p = this.next + this.next++ + heap.Fix(&this.h, v.i) + return v.v +} + +func (this *LFUCache) Put(key int, value int) { + if this.capSize == 0 { + return + } + v, ok := this.store[key] + if ok { + v.v = value + v.c++ + v.p = this.next + this.next++ + heap.Fix(&this.h, v.i) + return + } + + var top *lfuItem + if len(this.store) == this.capSize { + top = heap.Pop(&this.h).(*lfuItem) + delete(this.store, top.k) + } + targetIndex := len(this.store) + if top != nil { + targetIndex = top.i + } + n := &lfuItem{k: key, v: value, c: 1, i: targetIndex, p: this.next} + this.next++ + heap.Push(&this.h, n) + this.store[key] = n +} + +func Solution(size int, ops []string, values [][]int) []int { + ans := make([]int, 0) + cr := Constructor460(size) + for i, op := range ops { + if op == "put" { + cr.Put(values[i][0], values[i][1]) + continue + } + ans = append(ans, cr.Get(values[i][0])) + } + return ans +} diff --git a/leetcode/401-500/0460.LFU-Cache/Solution_test.go b/leetcode/401-500/0460.LFU-Cache/Solution_test.go index 14ff50eb4..fdb43140e 100644 --- a/leetcode/401-500/0460.LFU-Cache/Solution_test.go +++ b/leetcode/401-500/0460.LFU-Cache/Solution_test.go @@ -10,30 +10,33 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + size int + ops []string + values [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, []string{"put", "put", "get", "put", "get", "get", "put", "get", "get", "get"}, + [][]int{ + {1, 1}, {2, 2}, {1}, {3, 3}, {2}, {3}, {4, 4}, {1}, {3}, {4}, + }, []int{1, -1, 3, -1, 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.size, c.ops, c.values) 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.size, c.ops, c.values) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8657734085c076c46799afbff8db1e278c3879da Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 30 Jan 2023 15:10:59 +0800 Subject: [PATCH 0190/1057] Add solution and test-cases for problem 1137 --- .../1137.N-th-Tribonacci-Number/README.md | 27 ++++++++++--------- .../1137.N-th-Tribonacci-Number/Solution.go | 19 +++++++++++-- .../Solution_test.go | 13 +++++---- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/leetcode/1101-1200/1137.N-th-Tribonacci-Number/README.md b/leetcode/1101-1200/1137.N-th-Tribonacci-Number/README.md index 202915c10..177921d03 100644 --- a/leetcode/1101-1200/1137.N-th-Tribonacci-Number/README.md +++ b/leetcode/1101-1200/1137.N-th-Tribonacci-Number/README.md @@ -1,28 +1,29 @@ # [1137.N-th Tribonacci 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 +The Tribonacci sequence Tn is defined as follows: + +T0 = 0, T1 = 1, T2 = 1, and Tn+3 = Tn + Tn+1 + Tn+2 for n >= 0. + +Given `n`, return the value of Tn. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4 +Output: 4 +Explanation: +T_3 = 0 + 1 + 1 = 2 +T_4 = 1 + 1 + 2 = 4 ``` -## 题意 -> ... -## 题解 +**Example 2:** -### 思路1 -> ... -N-th Tribonacci Number -```go ``` - +Input: n = 25 +Output: 1389537 +``` ## 结语 diff --git a/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution.go b/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution.go index d115ccf5e..6903fed18 100644 --- a/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution.go +++ b/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + if n == 0 { + return 0 + } + if n == 1 { + return 1 + } + if n == 2 { + return 1 + } + // t0, t1, t2 + a, b, c := 0, 1, 1 + for i := 3; i <= n; i++ { + x := a + b + c + a, b, c = b, c, x + } + return c } diff --git a/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution_test.go b/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution_test.go index 14ff50eb4..8ea661708 100644 --- a/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution_test.go +++ b/leetcode/1101-1200/1137.N-th-Tribonacci-Number/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, 4}, + {"TestCase2", 25, 1389537}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 40f0c4076fa6ad572407499168b7edf8eb0f3dcc Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 31 Jan 2023 19:12:10 +0800 Subject: [PATCH 0191/1057] Add solution and test-cases for problem 1626 --- .../README.md | 33 ++++++++++------- .../Solution.go | 37 ++++++++++++++++++- .../Solution_test.go | 22 +++++------ 3 files changed, 66 insertions(+), 26 deletions(-) diff --git a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md index 7eaa4fa6f..265fd2d5f 100755 --- a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md +++ b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/README.md @@ -1,28 +1,35 @@ # [1626.Best Team With No Conflicts][title] -> [!WARNING|style:flat] -> 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 the manager of a basketball team. For the upcoming tournament, you want to choose the team with the highest overall score. The score of the team is the **sum** of scores of all the players in the team. + +However, the basketball team is not allowed to have **conflicts**. A **conflict** exists if a younger player has a **strictly higher** score than an older player. A conflict does **not** occur between players of the same age. + +Given two lists, `scores` and `ages`, where each `scores[i]` and `ages[i]` represents the score and age of the ith player, respectively, return the highest overall score of all possible basketball teams. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: scores = [1,3,5,10,15], ages = [1,2,3,4,5] +Output: 34 +Explanation: You can choose all the players. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Best Team With No Conflicts -```go ``` +Input: scores = [4,5,6,5], ages = [2,1,2,1] +Output: 16 +Explanation: It is best to choose the last 3 players. Notice that you are allowed to choose multiple people of the same age. +``` + +**Example 3:** +``` +Input: scores = [1,2,3,5], ages = [8,9,10,1] +Output: 6 +Explanation: It is best to choose the first 3 players. +``` ## 结语 diff --git a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go index d115ccf5e..ab2525739 100644 --- a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go +++ b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution.go @@ -1,5 +1,38 @@ package Solution -func Solution(x bool) bool { - return x +func sort1626(scores, ages []int) { + l := len(scores) + for i := 0; i < l-1; i++ { + for j := 0; j < l-1-i; j++ { + if (ages[j] > ages[j+1]) || (ages[j] == ages[j+1] && scores[j] > scores[j+1]) { + ages[j], ages[j+1] = ages[j+1], ages[j] + scores[j], scores[j+1] = scores[j+1], scores[j] + } + } + } +} +func Solution(scores []int, ages []int) int { + sort1626(scores, ages) + l := len(scores) + dp := make([]int, l) + ans := 0 + for i := 0; i < l; i++ { + dp[i] = scores[i] + if dp[i] > ans { + ans = dp[i] + } + } + for i := 1; i < l; i++ { + for pre := i - 1; pre >= 0; pre-- { + if scores[i] >= scores[pre] { + if r := dp[pre] + scores[i]; r > dp[i] { + dp[i] = r + } + } + } + if dp[i] > ans { + ans = dp[i] + } + } + return ans } diff --git a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go index 14ff50eb4..87777316d 100644 --- a/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go +++ b/leetcode/1601-1700/1626.Best-Team-With-No-Conflicts/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + scores, ages []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 3, 5, 10, 15}, []int{1, 2, 3, 4, 5}, 34}, + {"TestCase2", []int{4, 5, 6, 5}, []int{2, 1, 2, 1}, 16}, + {"TestCase3", []int{1, 2, 3, 5}, []int{8, 9, 10, 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.scores, c.ages) 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.scores, c.ages) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 4845e3759aea194e0597d918675c6c3b066f7615 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 1 Feb 2023 22:04:53 +0800 Subject: [PATCH 0192/1057] Add solution and test-cases for problem 1071 --- .../README.md | 28 +++++++------ .../Solution.go | 40 ++++++++++++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 63 insertions(+), 25 deletions(-) diff --git a/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/README.md b/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/README.md index 655e7e7fe..3a1a33cb7 100644 --- a/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/README.md +++ b/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/README.md @@ -1,28 +1,30 @@ # [1071.Greatest Common Divisor of Strings][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +For two strings `s` and `t`, we say "`t` divides `s`" if and only if `s = t + ... + t` (i.e., `t` is concatenated with itself one or more times). + +Given two strings `str1` and `str2`, return the largest string `x` such that `x` divides both `str1` and `str2`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: str1 = "ABCABC", str2 = "ABC" +Output: "ABC" ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Greatest Common Divisor of Strings -```go +``` +Input: str1 = "ABABAB", str2 = "ABAB" +Output: "AB" ``` +**Example 3:** + +``` +Input: str1 = "LEET", str2 = "CODE" +Output: "" +``` ## 结语 diff --git a/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution.go b/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution.go index d115ccf5e..f71d0e909 100644 --- a/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution.go +++ b/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution.go @@ -1,5 +1,41 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(str1 string, str2 string) string { + ls1, ls2 := len(str1), len(str2) + common := make([]int, 0) + for i := 1; i <= ls1 && i <= ls2; i++ { + if ls1%i == 0 && ls2%i == 0 { + common = append(common, i) + } + } + var check func(int) bool + check = func(windowSize int) bool { + target := str1[:windowSize] + start := windowSize + for ; start <= ls1-windowSize; start += windowSize { + end := start + windowSize + if str1[start:end] != target { + return false + } + } + target1 := str2[:windowSize] + if target1 != target { + return false + } + start = windowSize + for ; start <= ls2-windowSize; start += windowSize { + end := start + windowSize + if str2[start:end] != target1 { + return false + } + } + return true + } + for i := len(common) - 1; i >= 0; i-- { + windowSize := common[i] + if check(windowSize) { + return str1[:windowSize] + } + } + return "" } diff --git a/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution_test.go b/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution_test.go index 14ff50eb4..3ff95d21e 100644 --- a/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution_test.go +++ b/leetcode/1001-1100/1071.Greatest-Common-Divisor-of-Strings/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s1, s2 string + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ABCABC", "ABC", "ABC"}, + {"TestCase2", "ABABAB", "ABAB", "AB"}, + {"TestCase3", "LEET", "CODE", ""}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 6238dc77e0ebe6d66442e023a6d97d4b2f10b761 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 2 Feb 2023 21:30:09 +0800 Subject: [PATCH 0193/1057] Add solution and test-cases for problem 953 --- .../README.md | 31 +++++++++++-------- .../Solution.go | 25 +++++++++++++-- .../Solution_test.go | 19 ++++++------ 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/README.md b/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/README.md index 3f724e7f9..e1d6bdabb 100644 --- a/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/README.md +++ b/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/README.md @@ -1,28 +1,33 @@ # [953.Verifying an Alien Dictionary][title] -> [!WARNING|style:flat] -> 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 an alien language, surprisingly, they also use English lowercase letters, but possibly in a different `order`. The `order` of the alphabet is some permutation of lowercase letters. + +Given a sequence of `words` written in the alien language, and the `order` of the alphabet, return `true` if and only if the given `words` are sorted lexicographically in this alien language. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: words = ["hello","leetcode"], order = "hlabcdefgijkmnopqrstuvwxyz" +Output: true +Explanation: As 'h' comes before 'l' in this language, then the sequence is sorted. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Verifying an Alien Dictionary -```go +``` +Input: words = ["word","world","row"], order = "worldabcefghijkmnpqstuvxyz" +Output: false +Explanation: As 'd' comes after 'l' in this language, then words[0] > words[1], hence the sequence is unsorted. ``` +**Example 3:** + +``` +Input: words = ["apple","app"], order = "abcdefghijklmnopqrstuvwxyz" +Output: false +Explanation: The first three characters "app" match, and the second string is shorter (in size.) According to lexicographical rules "apple" > "app", because 'l' > '∅', where '∅' is defined as the blank character which is less than any other character ([More info](https://en.wikipedia.org/wiki/Lexicographical_order)). +``` ## 结语 diff --git a/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution.go b/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution.go index d115ccf5e..dd93983f2 100644 --- a/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution.go +++ b/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution.go @@ -1,5 +1,26 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(words []string, order string) bool { + newOrder := make([]uint8, 26) + for i := 0; i < 26; i++ { + newOrder[order[i]-'a'] = uint8(i) + } + + var less func(string, string) bool + less = func(a, b string) bool { + la, lb := len(a), len(b) + for i := 0; i < la && i < lb; i++ { + if newOrder[a[i]-'a'] == newOrder[b[i]-'a'] { + continue + } + return newOrder[a[i]-'a'] < newOrder[b[i]-'a'] + } + return la <= lb + } + for i := 1; i < len(words); i++ { + if !less(words[i-1], words[i]) { + return false + } + } + return true } diff --git a/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution_test.go b/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution_test.go index 14ff50eb4..24e98fd19 100644 --- a/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution_test.go +++ b/leetcode/901-1000/0953.Verifying-an-Alien-Dictionary/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + words []string + order string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"hello", "leetcode"}, "hlabcdefgijkmnopqrstuvwxyz", true}, + {"TestCase2", []string{"word", "world", "row"}, "worldabcefghijkmnpqstuvxyz", false}, + {"TestCase3", []string{"apple", "app"}, "abcdefghijklmnopqrstuvwxyz", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.words, c.order) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.words, c.order) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 90fb80669884cedc08a5da7476fa833b0517ab1c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 4 Feb 2023 12:42:07 +0800 Subject: [PATCH 0194/1057] Add solution and test-cases for problem 567 --- .../0567.Permutation-in-String/README.md | 24 +++++------- .../0567.Permutation-in-String/Solution.go | 38 ++++++++++++++++++- .../Solution_test.go | 17 ++++----- 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/leetcode/501-600/0567.Permutation-in-String/README.md b/leetcode/501-600/0567.Permutation-in-String/README.md index 438e76555..319c73c80 100644 --- a/leetcode/501-600/0567.Permutation-in-String/README.md +++ b/leetcode/501-600/0567.Permutation-in-String/README.md @@ -1,28 +1,24 @@ # [567.Permutation 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 +Given two strings `s1` and `s2`, return `true` if `s2` contains a permutation of `s1`, or `false` otherwise. + +In other words, return `true` if one of `s1`'s permutations is the substring of `s2`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s1 = "ab", s2 = "eidbaooo" +Output: true +Explanation: s2 contains one permutation of s1 ("ba"). ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Permutation in String -```go ``` - +Input: s1 = "ab", s2 = "eidboaoo" +Output: false +``` ## 结语 diff --git a/leetcode/501-600/0567.Permutation-in-String/Solution.go b/leetcode/501-600/0567.Permutation-in-String/Solution.go index d115ccf5e..5916b05d9 100644 --- a/leetcode/501-600/0567.Permutation-in-String/Solution.go +++ b/leetcode/501-600/0567.Permutation-in-String/Solution.go @@ -1,5 +1,39 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s1 string, s2 string) bool { + l2 := len(s2) + l1 := len(s1) + if l2 < l1 { + return false + } + byteCount := make([]int, 26) + for _, b := range s1 { + byteCount[b-'a']++ + } + cmp := make([]int, 26) + for i := 0; i < l1; i++ { + cmp[s2[i]-'a']++ + } + var equal func([]int, []int) bool + equal = func(a, b []int) bool { + for i := 0; i < 26; i++ { + if a[i] != b[i] { + return false + } + } + return true + } + if equal(byteCount, cmp) { + return true + } + + for next := l1; next < l2; next++ { + del := next - l1 + cmp[s2[next]-'a']++ + cmp[s2[del]-'a']-- + if equal(cmp, byteCount) { + return true + } + } + return false } diff --git a/leetcode/501-600/0567.Permutation-in-String/Solution_test.go b/leetcode/501-600/0567.Permutation-in-String/Solution_test.go index 14ff50eb4..e26277411 100644 --- a/leetcode/501-600/0567.Permutation-in-String/Solution_test.go +++ b/leetcode/501-600/0567.Permutation-in-String/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + s1, s2 string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "ab", "eidbaooo", true}, + {"TestCase2", "ab", "eidboaoo", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s1, c.s2) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s1, c.s2) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 22c9b1c7c87089e5c6332cc0e432a32b36638616 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 4 Feb 2023 23:45:43 +0800 Subject: [PATCH 0195/1057] Add solution and test-cases for problem 2295 --- .../README.md | 38 ++++++++++++------- .../Solution.go | 13 ++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md index 71052a59c..72198e8be 100755 --- a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md +++ b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/README.md @@ -1,28 +1,38 @@ # [2295.Replace Elements in an Array][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** array `nums` that consists of `n` **distinct** positive integers. +Apply `m` operations to this array, where in the ith operation you replace the number `operations[i][0]` with `operations[i][1]`. + +It is guaranteed that in the ith operation: + +- `operations[i][0]` **exists** in `nums`. +- `operations[i][1]` does **not** exist in `nums`. +Return the array obtained after applying all the operations. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,4,6], operations = [[1,3],[4,7],[6,1]] +Output: [3,2,7,1] +Explanation: We perform the following operations on nums: +- Replace the number 1 with 3. nums becomes [3,2,4,6]. +- Replace the number 4 with 7. nums becomes [3,2,7,6]. +- Replace the number 6 with 1. nums becomes [3,2,7,1]. +We return the final array [3,2,7,1]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Replace Elements in an Array -```go ``` - +Input: nums = [1,2], operations = [[1,3],[2,1],[3,2]] +Output: [2,1] +Explanation: We perform the following operations to nums: +- Replace the number 1 with 3. nums becomes [3,2]. +- Replace the number 2 with 1. nums becomes [3,1]. +- Replace the number 3 with 2. nums becomes [2,1]. +We return the array [2,1]. +``` ## 结语 diff --git a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go index d115ccf5e..fc3da623f 100644 --- a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go +++ b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution.go @@ -1,5 +1,14 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, operations [][]int) []int { + indies := make(map[int]int) + for i, n := range nums { + indies[n] = i + } + for _, op := range operations { + i := indies[op[0]] + nums[i] = op[1] + indies[nums[i]] = i + } + return nums } diff --git a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go index 14ff50eb4..c65956a53 100644 --- a/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go +++ b/leetcode/2201-2300/2295.Replace-Elements-in-an-Array/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + ops [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 4, 6}, [][]int{{1, 3}, {4, 7}, {6, 1}}, []int{3, 2, 7, 1}}, + {"TestCase2", []int{1, 2}, [][]int{{1, 3}, {2, 1}, {3, 2}}, []int{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.nums, c.ops) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.ops) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 8ffc5981b59725b2a61ba136777cb3e37a785af2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Feb 2023 11:00:16 +0800 Subject: [PATCH 0196/1057] Add solution and test-cases for problem 438 --- .../README.md | 30 ++++++++-------- .../Solution.go | 35 +++++++++++++++++-- .../Solution_test.go | 19 +++++----- 3 files changed, 58 insertions(+), 26 deletions(-) diff --git a/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/README.md b/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/README.md index 4348e3319..58195dad9 100644 --- a/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/README.md +++ b/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/README.md @@ -1,28 +1,30 @@ # [438.Find All Anagrams in a String][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two strings `s` and `p`, return an array of all the start indices of `p`'s anagrams in `s`. You may return the answer in **any order**. + +An **Anagram** is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "cbaebabacd", p = "abc" +Output: [0,6] +Explanation: +The substring with start index = 0 is "cba", which is an anagram of "abc". +The substring with start index = 6 is "bac", which is an anagram of "abc". ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find All Anagrams in a String -```go ``` - +Input: s = "abab", p = "ab" +Output: [0,1,2] +Explanation: +The substring with start index = 0 is "ab", which is an anagram of "ab". +The substring with start index = 1 is "ba", which is an anagram of "ab". +The substring with start index = 2 is "ab", which is an anagram of "ab". +``` ## 结语 diff --git a/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution.go b/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution.go index d115ccf5e..4e92bdb55 100644 --- a/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution.go +++ b/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, p string) []int { + ls, lp := len(s), len(p) + ans := make([]int, 0) + pattern := make([]int, 26) + for _, b := range p { + pattern[b-'a']++ + } + var equal func([]int, []int) bool + equal = func(a, b []int) bool { + for i := 0; i < 26; i++ { + if a[i] != b[i] { + return false + } + } + return true + } + + try := make([]int, 26) + for i := 0; i < lp; i++ { + try[s[i]-'a']++ + } + if equal(try, pattern) { + ans = append(ans, 0) + } + for next := lp; next < ls; next++ { + del := next - lp + try[s[del]-'a']-- + try[s[next]-'a']++ + if equal(try, pattern) { + ans = append(ans, del+1) + } + } + return ans } diff --git a/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution_test.go b/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution_test.go index 14ff50eb4..a47cd3408 100644 --- a/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution_test.go +++ b/leetcode/401-500/0438.Find-All-Anagrams-in-a-String/Solution_test.go @@ -10,30 +10,29 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + s, p string + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "cbaebabacd", "abc", []int{0, 6}}, + {"TestCase2", "abab", "ab", []int{0, 1, 2}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.s, c.p) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.s, c.p) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b5e97bc64192ade1a6f2e0ba5351a24f567f3c36 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Feb 2023 23:59:48 +0800 Subject: [PATCH 0197/1057] Add solution and test-cases for problem 1361 --- .../1503_ex1.png | Bin 0 -> 7270 bytes .../1503_ex2.png | Bin 0 -> 8523 bytes .../1503_ex3.png | Bin 0 -> 3466 bytes .../1361.Validate-Binary-Tree-Nodes/README.md | 37 +++++++----- .../Solution.go | 53 +++++++++++++++++- .../Solution_test.go | 23 ++++---- 6 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/1503_ex1.png create mode 100644 leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/1503_ex2.png create mode 100644 leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/1503_ex3.png diff --git a/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/1503_ex1.png b/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/1503_ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..84a2a587202522def51cf61d0693d636208e2aaa GIT binary patch literal 7270 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 s7?M@LikMsULTGP(Y8swnVe [!WARNING|style:flat] -> 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` binary tree nodes numbered from `0` to `n - 1` where node `i` has two children `leftChild[i]` and `rightChild[i]`, return `true` if and only if **all** the given nodes form **exactly one** valid binary tree. + +If node `i` has no left child then `leftChild[i]` will equal `-1`, similarly for the right child. + +Note that the nodes have no values and that we only use the node numbers in this problem. -**Example 1:** +**Example 1:** + +![example1](./1503_ex1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 4, leftChild = [1,-1,3,-1], rightChild = [2,-1,-1,-1] +Output: true ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./1503_ex2.png) -### 思路1 -> ... -Validate Binary Tree Nodes -```go +``` +Input: n = 4, leftChild = [1,-1,3,-1], rightChild = [2,3,-1,-1] +Output: false ``` +**Example 3:** + +![example3](./1503_ex3.png) + + +``` +Input: n = 2, leftChild = [1,0], rightChild = [-1,-1] +Output: false +``` ## 结语 diff --git a/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution.go b/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution.go index d115ccf5e..42fdb4773 100644 --- a/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution.go +++ b/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int, leftChild []int, rightChild []int) bool { + + father := make([]int, n) + for i := 0; i < n; i++ { + // 孤立的节点 + father[i] = i + } + + for node := 0; node < n; node++ { + left := leftChild[node] + if left != -1 { + lf := father[left] + if lf != left && lf != node || left == father[node] { + return false + } + father[left] = node + } + right := rightChild[node] + if right != -1 { + rf := father[right] + if rf != right && rf != node || right == father[node] { + return false + } + father[right] = node + } + } + /* + 0 + 1 2 + 0 1 2 + */ + sameFather := -1 + for node := 0; node < n; node++ { + steps := 0 + walkerNode := node + nodeFather := father[walkerNode] + for nodeFather != walkerNode && steps <= n { + walkerNode = nodeFather + nodeFather = father[walkerNode] + steps++ + } + if steps > n { + return false + } + if sameFather != -1 && nodeFather != sameFather { + return false + } + sameFather = nodeFather + } + + return true } diff --git a/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution_test.go b/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution_test.go index 14ff50eb4..ac3fc418a 100644 --- a/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/Solution_test.go +++ b/leetcode/1301-1400/1361.Validate-Binary-Tree-Nodes/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 bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, []int{1, -1, 3, -1}, []int{2, -1, -1, -1}, true}, + {"TestCase2", 4, []int{1, -1, 3, -1}, []int{2, 3, -1, -1}, false}, + {"TestCase3", 2, []int{1, 0}, []int{-1, -1}, false}, } // 开始测试 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() { } From 77e9e4abe998c481be29f328ca8de26f2a161f15 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 6 Feb 2023 22:05:34 +0800 Subject: [PATCH 0198/1057] Add solution and test-cases for problem 1470 --- .../1470.Shuffle-the-Array/README.md | 35 ++++++++++++++++ .../1470.Shuffle-the-Array/Solution.go | 11 +++++ .../1470.Shuffle-the-Array/Solution_test.go | 40 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 leetcode/1401-1500/1470.Shuffle-the-Array/README.md create mode 100644 leetcode/1401-1500/1470.Shuffle-the-Array/Solution.go create mode 100644 leetcode/1401-1500/1470.Shuffle-the-Array/Solution_test.go diff --git a/leetcode/1401-1500/1470.Shuffle-the-Array/README.md b/leetcode/1401-1500/1470.Shuffle-the-Array/README.md new file mode 100644 index 000000000..5e64c07c7 --- /dev/null +++ b/leetcode/1401-1500/1470.Shuffle-the-Array/README.md @@ -0,0 +1,35 @@ +# [1470. Shuffle the Array][title] + +## Description +Given the array `nums` consisting of `2n` elements in the form `[x1,x2,...,xn,y1,y2,...,yn]`. + +Return the array in the form `[x1,y1,x2,y2,...,xn,yn]`. + +**Example 1:** + +``` +Input: nums = [2,5,1,3,4,7], n = 3 +Output: [2,3,5,4,1,7] +Explanation: Since x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 then the answer is [2,3,5,4,1,7]. +``` + +**Example 2:** + +``` +Input: nums = [1,2,3,4,4,3,2,1], n = 4 +Output: [1,4,2,3,3,2,4,1] +``` + +**Example 3:** + +``` +Input: nums = [1,1,2,2], n = 2 +Output: [1,2,1,2] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/shuffle-the-array +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1470.Shuffle-the-Array/Solution.go b/leetcode/1401-1500/1470.Shuffle-the-Array/Solution.go new file mode 100644 index 000000000..b0cd8ff33 --- /dev/null +++ b/leetcode/1401-1500/1470.Shuffle-the-Array/Solution.go @@ -0,0 +1,11 @@ +package Solution + +func Solution(nums []int, n int) []int { + ans := make([]int, 2*n) + // 1,3,5,2,4,6 + for i := 0; i < n; i++ { + ans[i*2] = nums[i] + ans[i*2+1] = nums[i+n] + } + return ans +} diff --git a/leetcode/1401-1500/1470.Shuffle-the-Array/Solution_test.go b/leetcode/1401-1500/1470.Shuffle-the-Array/Solution_test.go new file mode 100644 index 000000000..833afc2dd --- /dev/null +++ b/leetcode/1401-1500/1470.Shuffle-the-Array/Solution_test.go @@ -0,0 +1,40 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + queries []int + m int + expect []int + }{ + {"TestCase1", []int{2, 5, 1, 3, 4, 7}, 3, []int{2, 3, 5, 4, 1, 7}}, + {"TestCase2", []int{1, 2, 3, 4, 4, 3, 2, 1}, 4, []int{1, 4, 2, 3, 3, 2, 4, 1}}, + {"TestCase3", []int{1, 1, 2, 2}, 2, []int{1, 2, 1, 2}}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.queries, c.m) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.queries, c.m) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} From 8638bad7ced4676cd90710bcd5e8786092e6f4a8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 9 Feb 2023 21:51:40 +0800 Subject: [PATCH 0199/1057] Add solution and test-cases for problem 2306 --- .../2301-2400/2306.Naming-a-Company/README.md | 44 +++++++++++++------ .../2306.Naming-a-Company/Solution.go | 30 ++++++++++++- .../2306.Naming-a-Company/Solution_test.go | 13 +++--- 3 files changed, 64 insertions(+), 23 deletions(-) diff --git a/leetcode/2301-2400/2306.Naming-a-Company/README.md b/leetcode/2301-2400/2306.Naming-a-Company/README.md index 23240a3df..b684b1b23 100755 --- a/leetcode/2301-2400/2306.Naming-a-Company/README.md +++ b/leetcode/2301-2400/2306.Naming-a-Company/README.md @@ -1,28 +1,44 @@ # [2306.Naming a Company][title] -> [!WARNING|style:flat] -> 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 `ideas` that represents a list of names to be used in the process of naming a company. The process of naming a company is as follows: + +Choose 2 **distinct** names from `ideas`, call them ideaA and ideaB. + +Swap the first letters of ideaA and ideaB with each other. + +If **both** of the new names are not found in the original `ideas`, then the name ideaA ideaB (the **concatenation** of ideaA and ideaB, separated by a space) is a valid company name. +Otherwise, it is not a valid name. +Return the number of **distinct** valid names for the company. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" -``` +Input: ideas = ["coffee","donuts","time","toffee"] +Output: 6 +Explanation: The following selections are valid: +- ("coffee", "donuts"): The company name created is "doffee conuts". +- ("donuts", "coffee"): The company name created is "conuts doffee". +- ("donuts", "time"): The company name created is "tonuts dime". +- ("donuts", "toffee"): The company name created is "tonuts doffee". +- ("time", "donuts"): The company name created is "dime tonuts". +- ("toffee", "donuts"): The company name created is "doffee tonuts". +Therefore, there are a total of 6 distinct company names. + +The following are some examples of invalid selections: +- ("coffee", "time"): The name "toffee" formed after swapping already exists in the original array. +- ("time", "toffee"): Both names are still the same after swapping and exist in the original array. +- ("coffee", "toffee"): Both names formed after swapping already exist in the original array. -## 题意 -> ... +``` -## 题解 +**Example 2** -### 思路1 -> ... -Naming a Company -```go ``` - +Input: ideas = ["lack","back"] +Output: 0 +Explanation: There are no valid selections. Therefore, 0 is returned. +``` ## 结语 diff --git a/leetcode/2301-2400/2306.Naming-a-Company/Solution.go b/leetcode/2301-2400/2306.Naming-a-Company/Solution.go index d115ccf5e..d9184d2c5 100644 --- a/leetcode/2301-2400/2306.Naming-a-Company/Solution.go +++ b/leetcode/2301-2400/2306.Naming-a-Company/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func intersection2306(a, b map[string]struct{}) int64 { + i := int64(0) + for k := range a { + if _, ok := b[k]; ok { + i++ + } + } + return i +} +func Solution(ideas []string) int64 { + byteWithSuffix := make([]map[string]struct{}, 26) + for _, w := range ideas { + if byteWithSuffix[w[0]-'a'] == nil { + byteWithSuffix[w[0]-'a'] = make(map[string]struct{}) + } + byteWithSuffix[w[0]-'a'][w[1:]] = struct{}{} + } + + ans := int64(0) + for b := 'b'; b <= 'z'; b++ { + x := int64(len(byteWithSuffix[b-'a'])) + for pre := 'a'; pre < b; pre++ { + y := int64(len(byteWithSuffix[pre-'a'])) + diff := intersection2306(byteWithSuffix[pre-'a'], byteWithSuffix[b-'a']) + ans += (x - diff) * (y - diff) + } + } + return ans * 2 } diff --git a/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go b/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go index 14ff50eb4..81d833566 100644 --- a/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go +++ b/leetcode/2301-2400/2306.Naming-a-Company/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []string + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []string{"coffee", "donuts", "time", "toffee"}, int64(6)}, + {"TestCase2", []string{"lack", "back"}, int64(0)}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bec6272af15be0ad430773b15dde6c2155d34cdd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 10 Feb 2023 22:05:02 +0800 Subject: [PATCH 0200/1057] Add solution and test-cases for problem 1162 --- .../1336_ex1.jpeg | Bin 0 -> 11002 bytes .../1336_ex2.jpeg | Bin 0 -> 11050 bytes .../README.md | 29 +++++++------ .../Solution.go | 41 +++++++++++++++++- .../Solution_test.go | 19 +++++--- 5 files changed, 66 insertions(+), 23 deletions(-) create mode 100644 leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/1336_ex1.jpeg create mode 100644 leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/1336_ex2.jpeg diff --git a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/1336_ex1.jpeg b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/1336_ex1.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..072ff73fb3b301b977c52d93ac1ff472c8dd8712 GIT binary patch literal 11002 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 K7BbhMNB;*0gQevF literal 0 HcmV?d00001 diff --git a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/1336_ex2.jpeg b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/1336_ex2.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..337d4c4afd485374c4754bfb72664d802290a6c1 GIT binary patch literal 11050 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 MKhE2U%7AYF4F{`-Bme*a literal 0 HcmV?d00001 diff --git a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/README.md b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/README.md index 5a731fa8d..da1718a9c 100644 --- a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/README.md +++ b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/README.md @@ -1,28 +1,29 @@ # [1162.As Far from Land as Possible][title] -> [!WARNING|style:flat] -> 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 `n x n` grid containing only values `0` and `1`, where `0` represents water and `1` represents land, find a water cell such that its distance to the nearest land cell is maximized, and return the distance. If no land or water exists in the grid, return `-1`. + +The distance used in this problem is the Manhattan distance: the distance between two cells (`x0, y0`) and (`x1, y1`) is `|x0 - x1| + |y0 - y1|`. + +**Example 1:** -**Example 1:** +![example1](./1336_ex1.jpeg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: grid = [[1,0,1],[0,0,0],[1,0,1]] +Output: 2 +Explanation: The cell (1, 1) is as far as possible from all the land with distance 2. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./1336_ex2.jpeg) -### 思路1 -> ... -As Far from Land as Possible -```go ``` - +Input: grid = [[1,0,0],[0,0,0],[0,0,0]] +Output: 4 +Explanation: The cell (2, 2) is as far as possible from all the land with distance 4. +``` ## 结语 diff --git a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution.go b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution.go index d115ccf5e..e6037d720 100644 --- a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution.go +++ b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +type loc struct { + x, y int +} + +func Solution(grid [][]int) int { + waterCell := make([]loc, 0) + landCell := make([]loc, 0) + for row := 0; row < len(grid); row++ { + for col := 0; col < len(grid[row]); col++ { + if grid[row][col] == 1 { + landCell = append(landCell, loc{row, col}) + continue + } + waterCell = append(waterCell, loc{row, col}) + } + } + ans := -1 + for _, water := range waterCell { + x, y := water.x, water.y + minDis := -1 + for _, land := range landCell { + x1, y1 := land.x, land.y + diff1 := x - x1 + if diff1 < 0 { + diff1 = -diff1 + } + diff2 := y - y1 + if diff2 < 0 { + diff2 = -diff2 + } + if minDis == -1 || minDis > diff1+diff2 { + minDis = diff1 + diff2 + } + } + if minDis > ans { + ans = minDis + } + } + return ans } diff --git a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution_test.go b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution_test.go index 14ff50eb4..e69563b0f 100644 --- a/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/Solution_test.go +++ b/leetcode/1101-1200/1162.As-Far-from-Land-as-Possible/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", [][]int{ + {1, 0, 1}, {0, 0, 0}, {1, 0, 1}, + }, 2}, + {"TestCase2", [][]int{ + {1, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + }, 4}, } // 开始测试 @@ -30,10 +35,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e7f43060b9cee8b3b39e0d8299bdb7031d627afd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Feb 2023 16:23:31 +0800 Subject: [PATCH 0201/1057] Add solution and test-cases for problem 1129 --- .../README.md | 28 +++++----- .../Solution.go | 53 ++++++++++++++++++- .../Solution_test.go | 24 +++++---- 3 files changed, 78 insertions(+), 27 deletions(-) diff --git a/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/README.md b/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/README.md index da2fc50c2..0512e5fa9 100644 --- a/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/README.md +++ b/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/README.md @@ -1,28 +1,28 @@ # [1129.Shortest Path with Alternating Colors][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer `n`, the number of nodes in a directed graph where the nodes are labeled from `n` to `n - 1`. Each edge is red or blue in this graph, and there could be self-edges and parallel edges. + +You are given two arrays `redEdges` and `blueEdges` where: + +- `redEdges[i] = [ai, bi]` indicates that there is a directed red edge from node ai to node bi in the graph, and +- `blueEdges[j] = [uj, vj]` indicates that there is a directed blue edge from node uj to node vj in the graph. + +Return an array `answer` of length n, where each `answer[x]` is the length of the shortest path from node 0 to node x such that the edge colors alternate along the path, or `-1` if such a path does not exist. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 3, redEdges = [[0,1],[1,2]], blueEdges = [] +Output: [0,1,-1] ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Shortest Path with Alternating Colors -```go ``` - +Input: n = 3, redEdges = [[0,1]], blueEdges = [[2,1]] +Output: [0,1,-1] +``` ## 结语 diff --git a/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution.go b/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution.go index d115ccf5e..d75705253 100644 --- a/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution.go +++ b/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +type pathColor struct { + to, color int +} + +type queueItem struct { + node, steps, color int +} + +func Solution(n int, redEdges [][]int, blueEdges [][]int) []int { + ans := make([]int, n) + for i := 1; i < n; i++ { + ans[i] = -1 + } + + // bfs + edges := make(map[int][]pathColor) + for _, e := range redEdges { + if _, ok := edges[e[0]]; !ok { + edges[e[0]] = make([]pathColor, 0) + } + edges[e[0]] = append(edges[e[0]], pathColor{e[1], 0}) + } + for _, e := range blueEdges { + if _, ok := edges[e[0]]; !ok { + edges[e[0]] = make([]pathColor, 0) + } + edges[e[0]] = append(edges[e[0]], pathColor{e[1], 1}) + } + visited := make([][]bool, n) + for i := 0; i < n; i++ { + visited[i] = make([]bool, 2) + } + + queue := []queueItem{{0, 0, -1}} + visited[0][0], visited[0][1] = true, true + for len(queue) > 0 { + nextQ := make([]queueItem, 0) + for _, item := range queue { + for _, neigh := range edges[item.node] { + if !visited[neigh.to][neigh.color] && neigh.color != item.color { + visited[neigh.to][neigh.color] = true + nextQ = append(nextQ, queueItem{neigh.to, item.steps + 1, neigh.color}) + if ans[neigh.to] == -1 { + ans[neigh.to] = item.steps + 1 + } + } + } + } + queue = nextQ + } + return ans } diff --git a/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution_test.go b/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution_test.go index 14ff50eb4..c33cf3876 100644 --- a/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution_test.go +++ b/leetcode/1101-1200/1129.Shortest-Path-with-Alternating-Colors/Solution_test.go @@ -9,31 +9,33 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n int + red, blue [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 3, [][]int{{0, 1}, {1, 2}}, [][]int{}, []int{0, 1, -1}}, + {"TestCase2", 3, [][]int{{0, 1}}, [][]int{{2, 1}}, []int{0, 1, -1}}, + {"TestCase3", 1, [][]int{{0, 0}}, [][]int{{0, 0}}, []int{0}}, + {"TestCase4", 5, [][]int{{0, 1}, {1, 2}, {2, 3}, {3, 4}}, [][]int{{1, 2}, {2, 3}, {3, 1}}, []int{0, 1, 2, 3, 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.red, c.blue) 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.red, c.blue) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From baf2275e78dc2ab67cda8b608dbfda92a82153a2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 11 Feb 2023 21:59:54 +0800 Subject: [PATCH 0202/1057] Add solution and test-cases for problem 863 --- .../README.md | 28 ++++----- .../Solution.go | 59 +++++++++++++++++- .../Solution_test.go | 44 +++++++++---- .../sketch0.png | Bin 0 -> 41647 bytes 4 files changed, 103 insertions(+), 28 deletions(-) create mode 100644 leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/sketch0.png diff --git a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/README.md b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/README.md index cb2f80d81..f9753b229 100644 --- a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/README.md +++ b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/README.md @@ -1,28 +1,26 @@ # [863.All Nodes Distance K in Binary Tree][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the `root` of a binary tree, the value of a target node `target`, and an integer `k`, return an array of the values of all nodes that have a distance `k` from the target node. + +You can return the answer in **any order**. + +**Example 1:** -**Example 1:** +![example1](./sketch0.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2 +Output: [7,4,1] +Explanation: The nodes that are a distance 2 from the target node (with value 5) have values 7, 4, and 1. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -All Nodes Distance K in Binary Tree -```go ``` - +Input: root = [1], target = 1, k = 3 +Output: [] +``` ## 结语 diff --git a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution.go b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution.go index d115ccf5e..ab1ca483b 100644 --- a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution.go +++ b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func findFather(root *TreeNode, father map[int]*TreeNode) { + if root == nil { + return + } + if root.Left != nil { + father[root.Left.Val] = root + findFather(root.Left, father) + } + if root.Right != nil { + father[root.Right.Val] = root + findFather(root.Right, father) + } +} + +func Solution(root *TreeNode, target *TreeNode, k int) []int { + ans := make([]int, 0) + father := make(map[int]*TreeNode) + findFather(root, father) + visited := make(map[int]struct{}) + visited[target.Val] = struct{}{} + queue := []*TreeNode{target} + for len(queue) > 0 && k > 0 { + nextQ := make([]*TreeNode, 0) + for _, item := range queue { + if item.Left != nil { + if _, ok := visited[item.Left.Val]; !ok { + visited[item.Left.Val] = struct{}{} + nextQ = append(nextQ, item.Left) + } + } + if item.Right != nil { + if _, ok := visited[item.Right.Val]; !ok { + visited[item.Right.Val] = struct{}{} + nextQ = append(nextQ, item.Right) + } + } + + // father + if fa, ok := father[item.Val]; ok { + if _, ok1 := visited[fa.Val]; !ok1 { + visited[fa.Val] = struct{}{} + nextQ = append(nextQ, fa) + } + } + } + queue = nextQ + k-- + } + for _, item := range queue { + ans = append(ans, item.Val) + } + return ans } diff --git a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution_test.go b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution_test.go index 14ff50eb4..22ee4e1ea 100644 --- a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution_test.go +++ b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/Solution_test.go @@ -2,38 +2,60 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) func TestSolution(t *testing.T) { // 测试用例 + trees := []*TreeNode{ + { + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 6}, + Right: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 7}, + Right: &TreeNode{Val: 4}, + }, + }, + Right: &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{Val: 8}, + }, + }, + {Val: 1}, + } cases := []struct { - name string - inputs bool - expect bool + name string + tree, node *TreeNode + k int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", trees[0], trees[0].Left, 2, []int{1, 4, 7}}, + {"TestCase2", trees[1], trees[1], 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.tree, c.node, c.k) + sort.Ints(got) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.tree, c.node, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/sketch0.png b/leetcode/801-900/0863.All-Nodes-Distance-K-in-Binary-Tree/sketch0.png new file mode 100644 index 0000000000000000000000000000000000000000..b516fb3d9d354e29ab54e9064db7f15129bebb01 GIT binary patch literal 41647 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 Date: Sun, 12 Feb 2023 15:08:49 +0800 Subject: [PATCH 0203/1057] Add solution and test-cases for problem 2477 --- .../2.png | Bin 0 -> 13444 bytes .../README.md | 58 ++++++++++++++---- .../Solution.go | 53 +++++++++++++++- .../Solution_test.go | 21 ++++--- .../a4c380025e3ff0c379525e96a7d63a3.png | Bin 0 -> 9893 bytes .../efcf7f7be6830b8763639cfd01b690a.png | Bin 0 -> 2146 bytes 6 files changed, 107 insertions(+), 25 deletions(-) create mode 100644 leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/2.png create mode 100644 leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/a4c380025e3ff0c379525e96a7d63a3.png create mode 100644 leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/efcf7f7be6830b8763639cfd01b690a.png diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/2.png b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/2.png new file mode 100644 index 0000000000000000000000000000000000000000..4110fd62508f4cf4ca5db87c815ad2d863bc0aaa GIT binary patch literal 13444 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 Cr_Z [!WARNING|style:flat] -> 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 tree (i.e., a connected, undirected graph with no cycles) structure country network consisting of `n` cities numbered from `0` to `n - 1` and exactly `n - 1` roads. The capital city is city `0`. You are given a 2D integer array `roads` where `roads[i] = [ai, bi]` denotes that there exists a **bidirectional road** connecting cities ai and bi. + +There is a meeting for the representatives of each city. The meeting is in the capital city. + +There is a car in each city. You are given an integer `seats` that indicates the number of seats in each car. + +A representative can use the car in their city to travel or change the car and ride with another representative. The cost of traveling between two cities is one liter of fuel. + +Return the minimum number of liters of fuel to reach the capital city. + -**Example 1:** +**Example 1:** + +![example1](./a4c380025e3ff0c379525e96a7d63a3.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: roads = [[0,1],[0,2],[0,3]], seats = 5 +Output: 3 +Explanation: +- Representative1 goes directly to the capital with 1 liter of fuel. +- Representative2 goes directly to the capital with 1 liter of fuel. +- Representative3 goes directly to the capital with 1 liter of fuel. +It costs 3 liters of fuel at minimum. +It can be proven that 3 is the minimum number of liters of fuel needed. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./2.png) -### 思路1 -> ... -Minimum Fuel Cost to Report to the Capital -```go ``` +Input: roads = [[3,1],[3,2],[1,0],[0,4],[0,5],[4,6]], seats = 2 +Output: 7 +Explanation: +- Representative2 goes directly to city 3 with 1 liter of fuel. +- Representative2 and representative3 go together to city 1 with 1 liter of fuel. +- Representative2 and representative3 go together to the capital with 1 liter of fuel. +- Representative1 goes directly to the capital with 1 liter of fuel. +- Representative5 goes directly to the capital with 1 liter of fuel. +- Representative6 goes directly to city 4 with 1 liter of fuel. +- Representative4 and representative6 go together to the capital with 1 liter of fuel. +It costs 7 liters of fuel at minimum. +It can be proven that 7 is the minimum number of liters of fuel needed. +``` + +**Example 3:** +![example3](./efcf7f7be6830b8763639cfd01b690a.png) + +``` +Input: roads = [], seats = 1 +Output: 0 +Explanation: No representatives need to travel to the capital city. +``` ## 结语 diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go index d115ccf5e..13bf0a88c 100644 --- a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go +++ b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(roads [][]int, seats int) int64 { + edges := make(map[int][]int) + for _, road := range roads { + from, to := road[0], road[1] + if _, ok := edges[from]; !ok { + edges[from] = make([]int, 0) + } + if _, ok := edges[to]; !ok { + edges[to] = make([]int, 0) + } + edges[from] = append(edges[from], to) + edges[to] = append(edges[to], from) + } + + var dfs func(int) (int, int, int) + visited := make(map[int]struct{}) + visited[0] = struct{}{} + dfs = func(node int) (int, int, int) { + cars, empty, steps := 0, 0, 0 + skipAll := true + for _, neigh := range edges[node] { + if _, ok := visited[neigh]; ok { + continue + } + skipAll = false + visited[neigh] = struct{}{} + c, m, s := dfs(neigh) + cars += c + empty += m + steps += s + } + + if node == 0 { + return cars, empty, steps + } + if skipAll { + return 1, seats - 1, 1 + } + + human := cars*seats - empty + 1 + cars = human / seats + x := 0 + if r := human % seats; r != 0 { + cars++ + x = seats - r + } + return cars, x, steps + cars + } + + _, _, ans := dfs(0) + return int64(ans) } diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go index 14ff50eb4..1558fdbda 100644 --- a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go +++ b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + roads [][]int + seats int + expect int64 }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{{0, 1}, {0, 2}, {0, 3}}, 5, 3}, + {"TestCase2", [][]int{{3, 1}, {3, 2}, {1, 0}, {0, 4}, {0, 5}, {4, 6}}, 2, 7}, + {"TestCase3", [][]int{}, 1, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.roads, c.seats) 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.roads, c.seats) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/a4c380025e3ff0c379525e96a7d63a3.png b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/a4c380025e3ff0c379525e96a7d63a3.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6334a9a5e1828121b87b2dc5ff567830b11412 GIT binary patch literal 9893 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 literal 0 HcmV?d00001 diff --git a/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/efcf7f7be6830b8763639cfd01b690a.png b/leetcode/2401-2500/2477.Minimum-Fuel-Cost-to-Report-to-the-Capital/efcf7f7be6830b8763639cfd01b690a.png new file mode 100644 index 0000000000000000000000000000000000000000..c8bdd387911bcd35281328c38320df4537768e76 GIT binary patch literal 2146 zcmbW3`9Bkk1INWS3^8WTa>W>Phdsz+&XHrzAvVdGW=ukkOh}lAjD_S;uH4EIp(Xbb zA|v#;`I17&RbS5^@crfc!{_sUeSZFYe)uHYTAT5JMZqjAEIb%*=bmoX8 z^1nDowlhPsR1b@eHv#wU&?;ke{`r8!b7S?AhS zmZV4{1@`a=&gc&E%3A9#J)%z=LnLM%UzqYsK+=7f6#vBkg?tgluNZyH^t<{F4xi1F z4~s*4Xhwe@*sWV!1G|%3T_Tgxp99Y<1^Z|{xvj^CV~on4Hr;++OJw!b#1veD1_ z%h|#Je`n;tS>`-`6)m%F=O8VxX?h)$&|Qipg=Plh$Lo$`R6XikOvagqS=r9fCyypf zbs60ybGD}bLv;_+hn1ecDA9^k)3dfzym>PG(Pi&&ZQ|#piH5Lx*nvH6X@2#RVAkkB z24_rZuAdC^=a1CU+?ga=O7`e>;61ITro#)r)7sjiBag-g-m4qvB9Q4Gsj0iVPj|-30(D3%1(}8zmcM+BTIw#7`eW$Uv>gutswX1V#ElcLtX-Qi*158tG z;c+DYt$_Wu)gWUrA_)GouQ0qhMRPinvH??u!s!!9cXg%1{J3>97clan!h%#M@QAzL(? z+^Sa$nA&}(mYKFpVU+6#Mdna=4lc00QGP2$@taFlAZElbQ&40}9D_Y^B2_6Wd6LYv z`ML)FoSY)AB*-mb2W=@_fi$gk#eY&>cYjt)ai?NR-s)PzV#Wk3L4}t1z36{nbvQZU zPtU(^M2(MjA|okp)%wq=ID@h|!zR{?zQ}BCE4ICUl0Ss@`>eYFAJ67UEL4u6(H|55 zr;iF=?r7dQAgAakLAX8PP*QM2g4++DpxCFwUs8Rl+x?z%H3mV?TkcVRL=jP9geTNf zjxQ;v5DTF|QYb}m)AO!&Q$EiTh&P`%5Wt@t${57WjBn~S{d_t*>%J4Nw-ow^f~4d< zG#Xv@>Qz>D_Iu<6!Je;QHj-x8LQr!_2%Y!g?$|NV)zw`JYkh2s!C)NlcpD%P2!%q8 zGcqzXwc*5xKa{SdRlk?pRa7$<+SKl(388cj_V?B6rayo75Bj!yeQ|9~{-!?)g}Ukh zk))(M$*J>6I@S(V-ExxT9+74;nUXmJT^>JwWB=K7aCWvQkyNd0Y{(U{MfW?(Xh}ZhS(%sHj+k{a)Cn*6-XlkXVBKmT^@5_7kc&B4F5BI8x8b#^xUqlIcc$ z+1zXnfj|a1eaHx z#>O_YfFHBu-CvB|NY1U1a<5%WWo;qpX5$ZY8X7Lc4D^t>p4R!00)9dJHwAR-*zS|A zn)j0Kwe@DmO=o#&(eLXY;Q>UVPj$474R5QKnvp#Z4-dLqMdRTjqIwB-Rv$N;I{4Gb z=m7Fp*Xk}dAONv(WDSb->^YVW*U}v9pO6lpaA_gvoW^PNsy$AaS%@9EP*j|dkf1g{ z!qeE;2!?x6W1HRUguzIo?`T4U7@6%aX`6j zU{qOl?=ALh+t;X8KIJ0Athg_oK4WQBNFpT3n{qjHzaH;x?<>)?mOSMKoxB{9f>RRU zR@QdKjm(B0$xBwlxo$Ay2m=)%-ChF#Hl0A~yKFt3Xa@H7pa*&-5oZZxBYngADOs%n zSf>m`7hyZNzV{)Fx$k5rsbB@P7wMNALjS3L)24%2HW%pPfu2`_&7jI6tf6o5aRdUX zBUX5y@b;=mmb0wSdMBQ)`z$jB(QKmJ&jGRv2LMpKj?eco@Vo83uk@z%>sPUI7M!5W zR3e0y>G-$P5j&Z7?$OfTkQI@Z9zux=EueE5Kn_K*d# z3G&$BWKa1onz>&L&U0-CY2B9wA`6UYn|l3V5Gh934Q%TvyyTnqI-T1os=X87ZE!86 z5Z0OE2rLG&wexOdx%@(T2YO5xd5X+QLc0-wkZt$g1)tkmuOG>)&^gtI=~&21^- Date: Sun, 12 Feb 2023 22:24:53 +0800 Subject: [PATCH 0204/1057] Add solution and test-cases for problem 494 --- leetcode/401-500/0494.Target-Sum/README.md | 33 +++++++++++-------- leetcode/401-500/0494.Target-Sum/Solution.go | 17 ++++++++-- .../401-500/0494.Target-Sum/Solution_test.go | 20 +++++------ 3 files changed, 44 insertions(+), 26 deletions(-) diff --git a/leetcode/401-500/0494.Target-Sum/README.md b/leetcode/401-500/0494.Target-Sum/README.md index 124d68760..73645c272 100644 --- a/leetcode/401-500/0494.Target-Sum/README.md +++ b/leetcode/401-500/0494.Target-Sum/README.md @@ -1,28 +1,33 @@ # [494.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 are given an integer array `nums` and an integer `target`. + +You want to build an **expression** out of nums by adding one of the symbols `'+'` and `'-'` before each integer in nums and then concatenate all the integers. + +- For example, if `nums = [2, 1]`, you can add a `'+'` before `2` and a `'-'` before `1` and concatenate them to build the expression `"+2-1"`. + +Return the number of different **expressions** that you can build, which evaluates to `target`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,1,1,1,1], target = 3 +Output: 5 +Explanation: There are 5 ways to assign symbols to make the sum of nums be target 3. +-1 + 1 + 1 + 1 + 1 = 3 ++1 - 1 + 1 + 1 + 1 = 3 ++1 + 1 - 1 + 1 + 1 = 3 ++1 + 1 + 1 - 1 + 1 = 3 ++1 + 1 + 1 + 1 - 1 = 3 ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Target Sum -```go ``` - +Input: nums = [1], target = 1 +Output: 1 +``` ## 结语 diff --git a/leetcode/401-500/0494.Target-Sum/Solution.go b/leetcode/401-500/0494.Target-Sum/Solution.go index d115ccf5e..1fb21ae1e 100644 --- a/leetcode/401-500/0494.Target-Sum/Solution.go +++ b/leetcode/401-500/0494.Target-Sum/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int, target int) int { + ans := 0 + var dfs func(int, int) + dfs = func(index, sum int) { + if index == len(nums) { + if sum == target { + ans++ + } + return + } + dfs(index+1, sum-nums[index]) + dfs(index+1, sum+nums[index]) + } + dfs(0, 0) + return ans } diff --git a/leetcode/401-500/0494.Target-Sum/Solution_test.go b/leetcode/401-500/0494.Target-Sum/Solution_test.go index 14ff50eb4..f57e46bc8 100644 --- a/leetcode/401-500/0494.Target-Sum/Solution_test.go +++ b/leetcode/401-500/0494.Target-Sum/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + target int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 1, 1, 1, 1}, 3, 5}, + {"TestCase2", []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.inputs, c.target) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.target) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c47aa4abc2410f4ac738064f7da08bc58c968a8a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 13 Feb 2023 21:43:30 +0800 Subject: [PATCH 0205/1057] Add solution and test-cases for problem 1523 --- .../README.md | 23 ++++++++----------- .../Solution.go | 10 +++++++- .../Solution_test.go | 21 ++++++++--------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md index 98a4b13d0..890698e28 100755 --- a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md +++ b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/README.md @@ -1,28 +1,23 @@ # [1523.Count Odd Numbers in an Interval Range][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two non-negative integers `low` and `high`. Return the count of odd numbers between `low` and `high` (inclusive). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: low = 3, high = 7 +Output: 3 +Explanation: The odd numbers between 3 and 7 are [3,5,7]. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Count Odd Numbers in an Interval Range -```go ``` - +Input: low = 8, high = 10 +Output: 1 +Explanation: The odd numbers between 8 and 10 are [9]. +``` ## 结语 diff --git a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go index d115ccf5e..c303b069b 100644 --- a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go +++ b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution.go @@ -1,5 +1,13 @@ package Solution -func Solution(x bool) bool { +func Solution(low int, high int) int { + numCount := high - low + 1 + x := numCount / 2 + if numCount&1 == 0 { + return x + } + if low&1 == 1 { + x++ + } return x } diff --git a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go index 14ff50eb4..6a3784fd9 100644 --- a/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/Solution_test.go +++ b/leetcode/1501-1600/1523.Count-Odd-Numbers-in-an-Interval-Range/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", 3, 7, 3}, + {"TestCase2", 8, 10, 1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.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 2876ba1c378c619da1f2a85a13a8f8fd47290f1d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 13 Feb 2023 22:37:26 +0800 Subject: [PATCH 0206/1057] Add solution and test-cases for problem 397 --- .../0397.Integer-Replacement/README.md | 35 ++++++++++++------- .../0397.Integer-Replacement/Solution.go | 23 ++++++++++-- .../0397.Integer-Replacement/Solution_test.go | 14 ++++---- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/leetcode/301-400/0397.Integer-Replacement/README.md b/leetcode/301-400/0397.Integer-Replacement/README.md index dd49f95c8..27d8d84f2 100644 --- a/leetcode/301-400/0397.Integer-Replacement/README.md +++ b/leetcode/301-400/0397.Integer-Replacement/README.md @@ -1,28 +1,37 @@ # [397.Integer Replacement][title] -> [!WARNING|style:flat] -> 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`, you can apply one of the following operations: + +If `n` is even, replace `n` with `n / 2`. + +If `n` is odd, replace `n` with either `n + 1` or `n - 1`. + +Return the minimum number of operations needed for `n` to become `1`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 8 +Output: 3 +Explanation: 8 -> 4 -> 2 -> 1 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Integer Replacement -```go ``` +Input: n = 7 +Output: 4 +Explanation: 7 -> 8 -> 4 -> 2 -> 1 +or 7 -> 6 -> 3 -> 2 -> 1 +``` + +**Example 3:** +``` +Input: n = 4 +Output: 2 +``` ## 结语 diff --git a/leetcode/301-400/0397.Integer-Replacement/Solution.go b/leetcode/301-400/0397.Integer-Replacement/Solution.go index d115ccf5e..5288ef735 100644 --- a/leetcode/301-400/0397.Integer-Replacement/Solution.go +++ b/leetcode/301-400/0397.Integer-Replacement/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + var dfs func(int) int + dfs = func(x int) int { + if x == 1 { + return 0 + } + if x == 2 { + return 1 + } + odd := x&1 == 1 + if !odd { + return dfs(x/2) + 1 + } + x1 := dfs(x - 1) + x2 := dfs(x + 1) + if x1 < x2 { + return x1 + 1 + } + return x2 + 1 + } + return dfs(n) } diff --git a/leetcode/301-400/0397.Integer-Replacement/Solution_test.go b/leetcode/301-400/0397.Integer-Replacement/Solution_test.go index 14ff50eb4..3834dcf98 100644 --- a/leetcode/301-400/0397.Integer-Replacement/Solution_test.go +++ b/leetcode/301-400/0397.Integer-Replacement/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 8, 3}, + {"TestCase2", 7, 4}, + {"TestCase3", 4, 2}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 3e7eaed6c841df5f8b11bf8a2bb064bcb23073f3 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 14 Feb 2023 22:06:59 +0800 Subject: [PATCH 0207/1057] Add solution and test-cases for problem 343 --- leetcode/301-400/0343.Integer-Break/README.md | 25 ++++++++--------- .../301-400/0343.Integer-Break/Solution.go | 27 +++++++++++++++++-- .../0343.Integer-Break/Solution_test.go | 13 +++++---- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/leetcode/301-400/0343.Integer-Break/README.md b/leetcode/301-400/0343.Integer-Break/README.md index 04a517b57..c10b36644 100644 --- a/leetcode/301-400/0343.Integer-Break/README.md +++ b/leetcode/301-400/0343.Integer-Break/README.md @@ -1,28 +1,25 @@ # [343.Integer Break][title] -> [!WARNING|style:flat] -> 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`, break it into the sum of `k` **positive integers**, where `k >= 2`, and maximize the product of those integers. + +Return the maximum product you can get. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: n = 2 +Output: 1 +Explanation: 2 = 1 + 1, 1 × 1 = 1. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Integer Break -```go ``` - +Input: n = 10 +Output: 36 +Explanation: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36. +``` ## 结语 diff --git a/leetcode/301-400/0343.Integer-Break/Solution.go b/leetcode/301-400/0343.Integer-Break/Solution.go index d115ccf5e..8e2cfdda9 100644 --- a/leetcode/301-400/0343.Integer-Break/Solution.go +++ b/leetcode/301-400/0343.Integer-Break/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(n int) int { + dp := make([]int, 58) + dp[1], dp[2], dp[3], dp[4] = 1, 1, 2, 4 + for target := 5; target <= n; target++ { + // 1,4, 2,3, 3,2, 4,1 + for walker := 1; walker <= target/2; walker++ { + max := -1 + if x1 := walker * (target - walker); x1 > max { + max = x1 + } + if x2 := walker * dp[target-walker]; x2 > max { + max = x2 + } + if x3 := dp[walker] * (target - walker); x3 > max { + max = x3 + } + if x4 := dp[walker] * dp[target-walker]; x4 > max { + max = x4 + } + if dp[target] < max { + dp[target] = max + } + } + } + return dp[n] } diff --git a/leetcode/301-400/0343.Integer-Break/Solution_test.go b/leetcode/301-400/0343.Integer-Break/Solution_test.go index 14ff50eb4..d6a7f2b8a 100644 --- a/leetcode/301-400/0343.Integer-Break/Solution_test.go +++ b/leetcode/301-400/0343.Integer-Break/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", 2, 1}, + {"TestCase2", 10, 36}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c6e98bd4dac645cc30936ad74261034a1183b48b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 15 Feb 2023 22:16:37 +0800 Subject: [PATCH 0208/1057] Add solution and test-cases for problem 413 --- .../401-500/0413.Arithmetic-Slices/README.md | 28 ++++++++--------- .../0413.Arithmetic-Slices/Solution.go | 30 +++++++++++++++++-- .../0413.Arithmetic-Slices/Solution_test.go | 13 ++++---- 3 files changed, 48 insertions(+), 23 deletions(-) diff --git a/leetcode/401-500/0413.Arithmetic-Slices/README.md b/leetcode/401-500/0413.Arithmetic-Slices/README.md index 11c50ed1e..a65d5643c 100644 --- a/leetcode/401-500/0413.Arithmetic-Slices/README.md +++ b/leetcode/401-500/0413.Arithmetic-Slices/README.md @@ -1,28 +1,28 @@ # [413.Arithmetic Slices][title] -> [!WARNING|style:flat] -> 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 array is called arithmetic if it consists of **at least three elements** and if the difference between any two consecutive elements is the same. + +- For example, `[1,3,5,7,9]`, `[7,7,7,7]`, and `[3,-1,-5,-9]` are arithmetic sequences. + +Given an integer array `nums`, return the number of arithmetic **subarrays** of `nums`. + +A **subarray** is a contiguous subsequence of the array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,4] +Output: 3 +Explanation: We have 3 arithmetic slices in nums: [1, 2, 3], [2, 3, 4] and [1,2,3,4] itself. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Arithmetic Slices -```go ``` - +Input: nums = [1] +Output: 0 +``` ## 结语 diff --git a/leetcode/401-500/0413.Arithmetic-Slices/Solution.go b/leetcode/401-500/0413.Arithmetic-Slices/Solution.go index d115ccf5e..b8fcb1b7b 100644 --- a/leetcode/401-500/0413.Arithmetic-Slices/Solution.go +++ b/leetcode/401-500/0413.Arithmetic-Slices/Solution.go @@ -1,5 +1,31 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(nums []int) int { + length := len(nums) + if length < 3 { + return 0 + } + diff := make([]int, length-1) + for i := 0; i < length-1; i++ { + diff[i] = nums[i+1] - nums[i] + } + a := 0 + same := 0 + ans := 0 + for i := 1; i < length-1; i++ { + if diff[i] == diff[a] { + same++ + continue + } + if same >= 1 { + ans += (same * (same + 1)) / 2 + } + same = 0 + a = i + } + if same >= 1 { + ans += (same * (same + 1)) / 2 + } + + return ans } diff --git a/leetcode/401-500/0413.Arithmetic-Slices/Solution_test.go b/leetcode/401-500/0413.Arithmetic-Slices/Solution_test.go index 14ff50eb4..cea2c62bd 100644 --- a/leetcode/401-500/0413.Arithmetic-Slices/Solution_test.go +++ b/leetcode/401-500/0413.Arithmetic-Slices/Solution_test.go @@ -10,12 +10,11 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4}, 3}, + {"TestCase2", []int{1}, 0}, } // 开始测试 @@ -30,10 +29,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From f9c488ca88364fc5360ea320b65ba4e2056357c6 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 16 Feb 2023 21:34:17 +0800 Subject: [PATCH 0209/1057] Add solution and test-cases for problem 513 --- .../README.md | 25 ++++++------- .../Solution.go | 28 +++++++++++++-- .../Solution_test.go | 33 ++++++++++++++---- .../tree1.jpg | Bin 0 -> 6825 bytes .../tree2.jpg | Bin 0 -> 16158 bytes 5 files changed, 63 insertions(+), 23 deletions(-) create mode 100644 leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/tree1.jpg create mode 100644 leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/tree2.jpg diff --git a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/README.md b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/README.md index 129ae7917..bd9048c46 100644 --- a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/README.md +++ b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/README.md @@ -1,28 +1,25 @@ # [513.Find Bottom Left Tree 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 +Given the `root` of a binary tree, return the leftmost value in the last row of the tree. + +**Example 1:** -**Example 1:** +![example1](./tree1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [2,1,3] +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./tree2.jpg) -### 思路1 -> ... -Find Bottom Left Tree Value -```go ``` - +Input: root = [1,2,3,4,null,5,6,null,null,7] +Output: 7 +``` ## 结语 diff --git a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution.go b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution.go index d115ccf5e..703ad1418 100644 --- a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution.go +++ b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution.go @@ -1,5 +1,29 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func Solution(root *TreeNode) int { + if root == nil { + return 0 + } + queue := []*TreeNode{root} + var ans *TreeNode + for len(queue) > 0 { + nextQ := make([]*TreeNode, 0) + ans = queue[0] + for _, n := range queue { + if n.Left != nil { + nextQ = append(nextQ, n.Left) + } + if n.Right != nil { + nextQ = append(nextQ, n.Right) + } + } + queue = nextQ + } + return ans.Val } diff --git a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution_test.go b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution_test.go index 14ff50eb4..e131e14e0 100644 --- a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution_test.go +++ b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/Solution_test.go @@ -10,12 +10,31 @@ 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: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, 1}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 4}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{ + Val: 5, + Left: &TreeNode{ + Val: 7, + }, + }, + Right: &TreeNode{Val: 6}, + }, + }, 7}, } // 开始测试 @@ -30,10 +49,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/tree1.jpg b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/tree1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..88728f2412ab819534f9891b81432199945eae87 GIT binary patch literal 6825 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 Cz2Oo7 literal 0 HcmV?d00001 diff --git a/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/tree2.jpg b/leetcode/501-600/0513.Find-Bottom-Left-Tree-Value/tree2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fb75fe834a1b1501e2ce4e2fe569d0214f0531e GIT binary patch literal 16158 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 Date: Thu, 16 Feb 2023 21:56:46 +0800 Subject: [PATCH 0210/1057] Add solution and test-cases for problem 515 --- .../README.md | 25 ++++++------- .../Solution.go | 33 ++++++++++++++++-- .../Solution_test.go | 28 +++++++++++---- .../largest_e1.jpg | Bin 0 -> 18493 bytes 4 files changed, 62 insertions(+), 24 deletions(-) create mode 100644 leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/largest_e1.jpg diff --git a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/README.md b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/README.md index 268534e59..de4efce2c 100644 --- a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/README.md +++ b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/README.md @@ -1,28 +1,23 @@ # [515.Find Largest Value in Each Tree Row][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given the `root` of a binary tree, return an array of the largest value in each row of the tree (**0-indexed**). + +**Example 1:** -**Example 1:** +![example2](./largest_e1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,3,2,5,3,null,9] +Output: [1,3,9] ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Find Largest Value in Each Tree Row -```go ``` - +Input: root = [1,2,3] +Output: [1,3] +``` ## 结语 diff --git a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution.go b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution.go index d115ccf5e..58d2127e2 100644 --- a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution.go +++ b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution.go @@ -1,5 +1,34 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) []int { + ans := make([]int, 0) + if root == nil { + return ans + } + queue := []*TreeNode{root} + for len(queue) > 0 { + nextQ := make([]*TreeNode, 0) + max := 0 + for i := 0; i < len(queue); i++ { + if queue[i].Left != nil { + nextQ = append(nextQ, queue[i].Left) + } + if queue[i].Right != nil { + nextQ = append(nextQ, queue[i].Right) + } + if i == 0 { + max = queue[i].Val + } else if queue[i].Val > max { + max = queue[i].Val + } + } + ans = append(ans, max) + queue = nextQ + } + return ans } diff --git a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution_test.go b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution_test.go index 14ff50eb4..e5c67acf5 100644 --- a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution_test.go +++ b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/Solution_test.go @@ -10,12 +10,26 @@ 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, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 5}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 9}, + }, + }, []int{1, 3, 9}}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{Val: 2}, + Right: &TreeNode{Val: 3}, + }, []int{1, 3}}, } // 开始测试 @@ -30,10 +44,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/largest_e1.jpg b/leetcode/501-600/0515.Find-Largest-Value-in-Each-Tree-Row/largest_e1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f69168051d97729222dab7bc595c810acfc5b48 GIT binary patch literal 18493 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 PyMcifTCK7&R}=pWeW;=R literal 0 HcmV?d00001 From 1eae9830008611e137f815d245c319213aec3c82 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 16 Feb 2023 22:57:19 +0800 Subject: [PATCH 0211/1057] dd solution and test-cases for problem 508 --- .../0508.Most-Frequent-Subtree-Sum/README.md | 27 +++++++------- .../Solution.go | 29 ++++++++++++++- .../Solution_test.go | 34 ++++++++++++++---- .../freq1-tree.jpg | Bin 0 -> 6049 bytes .../freq2-tree.jpg | Bin 0 -> 6096 bytes 5 files changed, 68 insertions(+), 22 deletions(-) create mode 100644 leetcode/501-600/0508.Most-Frequent-Subtree-Sum/freq1-tree.jpg create mode 100644 leetcode/501-600/0508.Most-Frequent-Subtree-Sum/freq2-tree.jpg diff --git a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/README.md b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/README.md index f864d998a..e77bfb95c 100644 --- a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/README.md +++ b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/README.md @@ -1,28 +1,27 @@ # [508.Most Frequent Subtree 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 the `root` of a binary tree, return the most frequent **subtree sum**. If there is a tie, return all the values with the highest frequency in any order. + +The **subtree sum** of a node is defined as the sum of all the node values formed by the subtree rooted at that node (including the node itself). + +**Example 1:** -**Example 1:** +![example](./freq1-tree.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [5,2,-3] +Output: [2,-3,4] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./freq2-tree.jpg) -### 思路1 -> ... -Most Frequent Subtree Sum -```go ``` - +Input: root = [5,2,-5] +Output: [2] +``` ## 结语 diff --git a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution.go b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution.go index d115ccf5e..3a21d78f6 100644 --- a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution.go +++ b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) []int { + sum := make(map[int]int) + t(root, sum) + aggregate := make(map[int]int) + mostFreq, ans := -1, []int{} + for v, count := range sum { + aggregate[count]++ + if count > mostFreq { + ans = []int{v} + mostFreq = count + } else if count == mostFreq { + ans = append(ans, v) + } + } + return ans +} + +func t(root *TreeNode, sum map[int]int) int { + if root == nil { + return 0 + } + x := t(root.Left, sum) + t(root.Right, sum) + root.Val + sum[x]++ return x } diff --git a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution_test.go b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution_test.go index 14ff50eb4..e718cc861 100644 --- a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution_test.go +++ b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/Solution_test.go @@ -2,6 +2,7 @@ package Solution import ( "reflect" + "sort" "strconv" "testing" ) @@ -10,18 +11,37 @@ 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: 1, + Left: &TreeNode{Val: 0}, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 3}, + }, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 4}, + Right: &TreeNode{Val: 6}, + }, + }, []int{6}}, + {"TestCase2", &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 2}, + Right: &TreeNode{Val: -3}, + }, []int{-3, 2, 4}}, } // 开始测试 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 +50,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/freq1-tree.jpg b/leetcode/501-600/0508.Most-Frequent-Subtree-Sum/freq1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b220ebab9e9393a18082539a429952b07c60bca4 GIT binary patch literal 6049 zcmb7IXHZjXw+;|W=s`f~U5bE+6zNTcPz;3LK?J3QDqV{7A|Zs(l!K@Qf>bF99qCO4 zBfU!%G$^4rxp?Qh_nvR&J3sETpV_l#y?d2ed%f>kv(G2b7Xi%rcOiEHWMlvU*~JAo zp8@CqD9Hcd&z<4|Kq}xL&`?oPQh{h_X+bm~5G_3uJuMw09SFn#W?*DuW(G6U(z9G* zVZL2g)*&j^`AkBp$GaZQTLi+#2`FjAE27m_)Q;-P)$iZY3V6yXW0MDOL$tlSG z1pF`1P*GC=DM93amerU6e;kwl@k~Wdaq$KjIRy|vNkvTqW)Zj~cteZT#2LgUBzxti zw$6P&|EKK2B62X7%U8u>P#5Z~e>3|p>wl!+|8w>~(rExa#YG@s3NSzea9pAfd-`|U zq&gm`lyHT`lS|(@i2o_xE>`c<(&Fnm=FCv_+EG}JZ;H&6faO5#=mHfaqY#d#2Kr^AHn7&#+sHL+Ec;DQ z%RKj2xXrXNX{Ip!ZmyRv%CygsZyN--K{I*p=zyMbLT&Vs4Mobp&O5{sQSfV&t!@L$ z!^RcoPfTS(Gcm}}$|d!We*qc+TT!UZpg@@ee>a`yMuF>WTM&06L{z;wx)7azq9m6v zs4iq6f6bz9%R}{}Uf+(mCS`b_0BI2x=}zol39twGD}Ka1e(`L;7taxMmj}lDL2gF2 z0nQXOg0RUWfQTJ_PZ*WM$3pcPf?snU6|2N|BOHq@e?D_lDV95gaY=r}_4DN=OJ4gh z-ABE~#9f39u1JPuuk2ou>LB5R;q~9rx<(Cj?tI98zaW;JH)FCEnD_$flMDjl7I|(* ztCSU{5noTYCV95yPRd(S=PcV)ebyP!PLjU+IMm+xy&C&;C$h@hw10*9(akUzn)V;a zawp~1EaO?#!3^>+-_*wf2M@|NpUaU|iH#Ia=H~4&l2z5X2dj>!*s0hwJyAtThp3mX z`y3UoHdUc!U-};Z;?;SiyIZ6<8Sd{IEKH;Rk-w+8bR8 z(jvQ4O(Iy3!9s-!l=zf~%2s}#Re=L3p7`Dv+KP64-jnWpt0c~^C2E<|@5smhD{MXm zwfqQbdm9})3(#7N-M}%GaaxylT7R+E@A2=TC|UZw+|v8<*O}e!VFB&f=V59@$a<`` z`JHw*;yJ)m@r8ojc-#ihkYNory}H*LVYiieRnOJ^8iSaGL5iB{Ve&eL8mXPRVUa~% zl*WdTqYgbzF3d>mT2jt|bEZG*<9VK{(M>=521o5YTFC0p@n7Q`o{l6eOoH4K9h=LgX;r|Ok=hL@#(gx_0!t(UbS5&!o{1Q{NuL+M7u@o@&Ua-xbJm1fj_21h4U=pxZzcnV}a2gT^zz z%ki;<+e9&a^781vNter8UOlQg>Ix>A_CS7*nSRJ)SpXmHtls35bQ|3nZmCX~h6`nh z>#L!VWWojSX)|#t$u=A1Vd*X3(Ym&^3*<5_K-HKmE_y{sm>zYz0ZGf4r$Nl>fR(LP zT%YnENKa?~OGn;EW>}ykv>@4P&3sO=9aW{ z=@WUns!!=2Kbw`reaLv7rus?xLx{=GYU6r^8B^ZxFwQIj8fpGzJf1&uFeZPRYq@nU zki~+jHecDZ+`iuX>sS=BZympEqUY~fbS&IR;DQQM`qrI{{~mZ8Wq6ZE)dxb#=N)_8 zZJqStDqPlz&NbUwQ%8&YKpTlvHbb!%kO4XATP5@ftXbqJB_MCN<$h7fiS2A;tZ!Pe z=Lzgaan#J>amr8**OSMHuMIm~=Kz^5mj)W1W|A2+Y)jN0zlvar8wk?y=pQfWja0!J z=ea&Sv_{4(Qg1$z82mompjoe#5zu6GpZiut>H3PEpH$r!ckWV8SQ1E&0tHz#t7~;V z(IkET)lfWqLsi`1NAi(dQ1_bYo+&emXYonnS_9`44)a~ESNg@!giqScubR+FR{pmdes-X7q=%Jr_|b&vHQSm839?#&U8sZp!Hs(&=Ar*RkwZiugn zr9M$aYaRxML`bUYX)Z+n`ByA}+yH5fbhK@GfQrnQaZ(vg4& z&wE=@KI0KO({0cFwII1)|`wmU$Bq zxW<&eRw8?b>6=k3a8~TVyyp(Y+cfJwoi0RKA}cKKEE&> zR^9A0o@P;kp`lIyAj=mU&kZt8x07Z(mLPu=iLKS!gJ)>I_JW1#cm=7RLe{ zq%S8~$(;khwN8_D!duOzV#qqKo_?ssQysLAYs^@AM8fyr&^%Uwv>Q z#(lx^al`~$*LHyImhN)%A+azLbaS?SAL^qH2;(JC-(+hwoeQ#l(rm->Q0^U5UY-l-?e3 z{oilJRuv4w$kcb;u2mDu2cHApO*^FWc%D}1Q&g%X9`ovWo&&zy(xN#PU6m^oE%#@V z9$Y5Wtyo|;`+gEtj>juy%&fw@kHjNDzUe2_q>5FTMN0aqP-}(dXG=i3^VpR%4+mw$ zEzRf9rvYAmlNI+wr2Qu2_`{CJJpWUIBqHXwDi(IX+~w|jd|LY99AHv%Gx5HcLM8X% z)WcU$1erL4;&@x-Em|7t@mR_cont-kTIJd9LdWj9Zz?5+974b5BSc^1?}i18VyIB> z`eCfPZ#`Pd>9plix(bhVQr)E$(7Cy*t>ElmdXP+h5`Mv$uWtFR&G49c!N}iR2IOQf zT?oqgMQvi*%6EXk{VHpoPF%#>N)+9bkC+=?^FeeonuWZrl*`?5k(cEnwsd_ns8F7c zLDh-*v(o&~0`hwDjkeH!d}|Yma&OZvfH%rl8dYk6R$ehFn2f(%f(mG!Ff+ItJ$;yy zU*aPp)6((4^|`ZeR*d6wSTc+cU)AMR5ME&Q>q+0}o-yoi+sb1uY&JUwKHkN<^mu5ksu?l-(H>qM^%RFf#+@dL zrqI@8iC=e;k)&9vs|sjZO*GOC>XfZFN`Rha%tIKNN{p+Nz2R*PwGG`1WQbYD0JTn&DivH4|T&DS2JGnpU*&C9c< z8=zVhS1-)YAPftwO((X7Js)cIqP;tDb+a;d<=F$pA9?$JPaH0(Tf4Unk>t9bVdDkH zk4!PN%g6<9Eg&(X_FEl8+qdlNn9qM1CTC9;NR2zK{f^Hfbrjz$Iqr;sH(wVlNQ@Uj>z+qc zQ4xNq*yXlp#iBQ|UA$YTu7vL5_C8Da%1h8`9ylfujz=>VFqy=Ul)?H)XSbQf+5Str zOMUPWZd&6t`DKxq7YKtJS!7)m9iklw8qvXx&0TR5wr_8oWUenS)tg>qH}|7sFgdAS zJAvuUZ%U6Ly~L!j%pLZ;ZP-qope_VG09EG3jRwOfIm#*(pxd}jGxnFc7sD`zAO0sk zYL5p0LSd=;@N6OB$8Bqp8|R9@HB8A3qPO{@(#{$HP%5k}wZUrzi(qC_s{5Oqf)ytl zZ7mlaBrhwpac;OjVWES$WDY|45w8XzKyp2PxCDc3qf}Tmal)W@Jx32=R|##JtLb>? zf;yZ2b|9!~@g9hJ4H72ThP@`^r>MdW;cVM(24^&=b$oOY8_$1LxYFn?EUm7_ql2C) z6ee+Mlc$)~9hhuxX^B{MKYCeo_iRhHl6pzztZC+o2NyN!%aMEsk4Fe1#Kbjj_i2Zi zAAgL}+s&u?78-dTyksRZ;J{JIb-rE!<+eCT%j{$vA&W#82mzic750nUbBP@HW!g-( zF6ZPb+CDDYdnZdDr`}b1gn1+)!Ph?#79&2FFzT`tI#wIT$&{#-nfLXkX+*n=IvDJ) zz@^=lE&%$GhlP8K(*d%0PsN=A%{h(UT1D2okENQ)s6^+vw)e2OVE1i3Rxt2e8m`@v z;z!dqxYa^sixPDd=w z{=G-u;ISE#)VT9_^W-hZ>U*7R+Wk#f0l$7e059Xu(GAh{iYj>p;MSXu62_)X*$c8NI+Y;HpLOCQ1CK>FsGD0AXTsNeyM3*6 zVg83_r%FBo!&Gx@pH9I`s3l}5t#+$QfcY3X8bh9yTwi8m_S>$UEX}ZodyqNAJmYe1 zZ-|Bv_x0|5jaqA0;8bHp%^brVaY0M zf+ZJH+Hd>Na&d&9)1Q$;qPTHDoDv>_iPFJsDZ<0Zdn& zZ8s+=Z8b#bJPKq`SlBJ%|E1O_Z()Y1W=jP!xDy&3APqrfj>cT-#oSo}-?q*HA~7`@ zS>|=Lsr5|GK}3()O7jZaS8X#jQfl|db0>)zW##=*LAYoXrmZN%S^US+fKIf3m5i$S z8%I&alhzL|k`tG4b0~XKnFHDdrOMqJ(rno1-v-g6HM^Z-52tY!jl=Ho>X~e)l4;dP z4uyMpx)phLt6gijm-Xg`PnvG8*~weKEcGm<@nUqPeq!R+qsA>|&`N>lw?N1X);WtA zdBnm^y`YT}YiSX$E-519#+L8>Y67x;*PnGX(QG+hCrdnHxKw!Tp=K#GVB^YfA`YK_ zo1{+MJVWRS9h4hHE5oXC^-*T(#cv1Ecj@4k{uZl5eonHn!P?&=ox}yd52edWnRgStDOxSi~*8OYu<*xCI;* z+^X?A#mzJQoQ&jv?=ii$2SIn_Ek>^OeUQY{XR-&CzQJq}X4N?CRa5#+`uhoc)1#RdqLS7|IX}p2Bxn2j?o7r*?ok&GxlI=ze5`-|_{i`g5 zI3#Wqji6=#2CY{ij3UHmiWxFCisKeTsO%M&sx0W}^=|&f$QDE5BGbWU4pR>e6Jqa= z-rVn);a0K7x%%?ic_LJ@x*}B*hV@5stdN}qrv5}~4T8iP)`b|9;oAZ~;rt>QBwOq# zJ6oE;DWM@dnaZxSg^hwRoCA&v2Ls&Sc+D*0HdXg%8ra*l)6yJ-3s^p=W^?MrET^nT z^FAznHM0|lEugd)^Z9+pM_fFcENkH*-XuUUV_~l<%x2v{|>_^3t;m7Rz%6)voA&2 zx+iUzl|K4;#ESw!e(36VR9!ON(-4{8H&FC$4s256GhA*G+T?xJ#}|FVhxf!)eO~A0 zHE$?@u|yD_>}~NSE$1>yd33&`GhiQ*LJ9d6cDt$y6dM;q|KO%$PZEWq;ngd;Mq zdjnU6LEpVd+Ndwwa+M1&3S+b?dmFv4NsgTsTTI~MeLcRS2O#O$Zsq=~c;*u ztNzYB5N(!F{l+cU%+H#SiZ6hYgKG#|H!$4hB=IC_an=~n5sS;|@_`-NbXyh&ixPD19I2b?t zekKxU8&H1d<^Ewp5vI=}X+iYYvYqv*Hh^D%5fB%b?yxuB?4#&s6ZVSQLcv8ASd>07 z9Z>e5*x|P@=8lA>hR^^;ObKpVGv`pOP%M}Dkp4|U?>chbm@A!c#bQY9o@4||Xr*q@ zt16q*V_~05w$tI<5{%aY?@`1i!p|y{83ue+UnN~&IR>d+s!y8=?%MXE=8jErwmRh! z$(|f>6TV`IDYntv2l1{Ph>oHl!Udj_|K6uBW^lIU)yYVymoAy_=qLDM!)s=zC5K|= z(M>~G^&Zh#-o@h>G9dV)xR!K%Jww>YdUp$g0KR>*Eu&2SaYyOA+@ zM6H^|Vr~~~KjmFzIAg%sTAN_m=N!;ii)GZ!*b#Hx%3)SdQ6-?cE&f{Dx@L@a+ED-C z21UO*KEVZgr3`6w7ZsHnP^{dNpUNpzX`ba<^wzPJYLFH@IC-XHgj$9g_+%XVdtZ;_ z2a>ZVbZEzfhjje3i%D#j#2BAaXna&iUj0JfG{ip6mWT_x-)E=ee)%{kcyjP8I-M2xGW0fQ}9T zp!21XWUFqnmzg$2yU$p&WSU}a%p=Vs^Na(1> z<{+WOCveHY(9zdVQcBtBA^&M307#Pss@LCu1fuBpvPvQ%G(04neW1G5`xHO*%IHQR>a@nyE@v|4(HjYl zGUnTY*lb(XxMo+Fg4rr)e}UY}1kql5UCh`#$R0WjdAkHVKP-Rn;Syw6Fciw3d3)NK z^LtU4HA^%$EbFaupNjzEGPj`zNlvqQRI@;utKtx~e z(3Y+TWi0x1SE{#%P;|&(i9B^tbbmSJ*Uu_$e_*K3#eUiYmz>U22ep!D-`5cZ5K*PLgg1+e~2tlfy_QgarU95Q{+16>AR` z*^un(pNyTy!`tRPIns`erS*Wt_LksaQG?+8awx*`KM{dpwCTP^JTg7sdzo_-GlZMm zyC8i^m+ymiQ+IsC(#t8_p0vrd;%-G#ziem&LnYT|M|I`GWq0;p7tYQ~jRvroCj0fs zR4;b&XkHK2E5+CyL=i(^Gf#(5HA`8q(+xK-aFw&=vKL2EphhwTwY5b0u~YmSsHM$g=sgbkJ$!fZB~!M4)DS^ zt1mFI?rDX&Si_XXiExG{V=sQpZIeOcygR3FYsnr=$f9$xWvTvU?1)u_iQMYC0S>;b zZ;oZ(nxi!($TLlTfT)ZqPLX`p+IpOJrngFq)K!MUcx+eMOYrn$bl7@?bCd3iGbwqO ziw?~>-J2ZGb=>Av%|6Fa+kY-!JU=C*z{CV12M1dKBH0;lWk|V!5f9LkhgMryPK)cxmmQ{ z*~7v~7cwGiR{QF>qDS8cc%aPZ;=eK@hR*M4oRzNO5JrvcY)h(TPPx^kSl5>sfr{vQ zCBMm`Z`B^_Z4YjfUwpi%1vUMeaCkeQgKBkP#f66~gsD@>f|Cu!>&jhT|YfNc+otcH@W%zx=KGYqL)B znX6}4q06#Kp_d7IhyFofirPc4$AMq8)ORJ$bXBN%X=6LKJgh@p@;>sBEgiZoOg%45 z8CXWA<^#gk&1n(dV_}9zWRHi@zxBVWDAw14&i#3o;QQ|G)N+~0=jpiIyQ$_gmRP~x)%tI_n5C%DDlxnQ zch_y}b(e{s@^8#G~Z6&V=UG_v0ufrCaQpu18tXx*m z3tTl7&flkHRHZCMbx%Hm-XAVS$Fz9H$|ra$;VV2CvAaH{NIP|Il+kd$!bqDkHh3wE*p}*gI4evH#!!kRI7Gc*hlG>mw!K#;TS6kSm0@5 zu6^it)fGkN5znht-h<=xywEyM%UI{=e2$+ZRfj}(#GJ0imGUEnrY{}!;5Q*^w^4Qb z@K?6S3I6X+0EL|2YUX#;v|Z)V|MoK=38EQ9g(9Lm3j!vY-VR(xN{?zBuvclsy~f0! zclt^Ul76}u2>U{=6wS?<_tS;^x^Jx}#>5kXy58Di)Z>|B?>*R}5mBN&W}4{pLliE4 zZ8C`SX=V_OYnZ{dlnZHV&{FR2=JnKR3RYr6%U*gEgsSkG8EDm&h&d;&1?>#8uJ>1f z%_5|upv6$V|0Xend=(l~DJYe_YP67goHDd)vu?laZVB<7(Vf^9vOfW!C#>@ao1vp_ zO>GS`hGMN5C1>klDBTFR`Kfx}$mj3oWCl&Ym_|pCb&I{_@O9P^laLMf) z1GzQg`xZ15%9`tx(&_FCy_?b@4jdmVNB_HKXhl2l_c{T*$hkn(ELk?cbCj(9M3dK{ z-e=`Qzcx73hsDILwSLdH-BM4dPCzkIbj;8{dyFbY|4XVwe^$4>S2T8KRcmIYa5%46 zRyiZZ0QX$m>iY6uXzn5uglR|^1NW^f>gZPZ@`w~^V3y64(R%dY=L!Tl7QR-o|Iaci z(qg_MSTJZTo7Ot?F4i2k%vSmBCS2a{jn<2ElmJ@9rO*H|zrxPzzD3=+XUcH%SgNRj zo!i*Rsf+?cTt3W^S!~DVSMdT0iyVHRes%lQ4z`!*hxKE&kYWz5O{qHpCW^`G{4uL`tp8NEp?EOZq(}dPDkE}I9Wa7BsAQAc3&*CaY14J*D3Pq2bwYvWxe?1-@n`Sx` za)UBkeDVwW-BXeHeIR|ijtAmEv(o0?NT8>Ly!C|h37`=|!7cpo2k*R~PA^PfxU?tI zjUE3AmZe_(EEt&^V9HL28d=Bbe{%)^w(IV_49i9MaQJeFueEKoztC*mzFbgzqU!3 zsrAJpA>J7pmX+%4`xGwo@oAkTy=hv4sx~MXuRfbZCGP|rPQXI<*!;h%3kUWlterUMw=*OSwaH<~gSO4ihc z$Bk{VKQ`u%-zrcC$Q3%efs4)D{Gr*gjl!AMDL3&*jb`~Qemww(tNcq8@snMzTfkC< zlHy~?z`i1C^!w=~hJmWgCbT^$a^x{(JH1Du)DN!@z%vUWqEIx`TNRrAL#vI;LlRl? z=`@mO_00)NTR@X`PbyzEon&bw9DpN~J}?2SZ`5vNZa$i&cyapNwdqqSk#$v9#3Zn$ zrot?jRll%k#o``3&rr}Fx!;U~qb>@{taG=8JSu;9_(<2Qp-V9K4W;haRUa5SPa^Ns zO$Ti;AB3=pSc-d7J~AVfijI5W_8w&C&#KnZuz~g;cRb06^jD8lWuj}Qi1ioS1 z8(u>hYd9aYOl2RNg=%}6MTv7(uZ5SPSrBo%Ds%aXfe!To-}C%E=VGH4KRHu_%tq$D zCq70S*(S$+s{Y(#5F+g^gh@1Lmx8r{Z6Mc;)7>*giD-YvQ8tbR>6_kLMvvFDGp8D% z7<0~9UskX|TrJ*1vFx;-V|Z0=^GGtOI#d{@5v?M_l{)_}etYJd*G0@`yNE1@6z~B- zX1Gn6Z}eY_j}3;ZH{~3((`a3b4ff&s+Q9t6EQVv<*EYJ~Mfav!J)uBi7Qv^nF>dJh z)V}|$*TKCDyfRSo<&}v551$ld(5~g8=+p3oqc^n8tNU|@ zTQ$P`+#^p~bt5=1J$K)buH0<{1r?EtL=13M<};)If9nGtLa|>02Hl=XkNVFTXB*_Q zEO)018ryke$LtIeQ85MPkr`5Yk<1h>ePWz@)6{0e1SwalPvPyndQls{?G60;`MQEW zR7??}Oj1N26s508^YA2v=4^`kgoNgFohPa_U+KY5n;3=0YQW@37A6ZCG11Y*?zHsb z82~tdW7>c19hs;YlZReX$2KahXZHVm`pa-Xw@{0P+ZIF*hJ$$Mph!3X&p1?iL?h=q z&s%#;;Nk^T7tU=b56DSgJT1|1dFlAg=36ZrO4I~jMJYZge=l65?6jvYN`)Sl=Vkx$ zQ24-Br=U(FHrM+Hk}F7LCZ}8uIRWmBWUO1Yt&*J4yk1qx{>+L4f!hs?c>d<5=+Mh4 zhAUHX)y)C*UN_{%h@a-Mll*x#9%h~aJ)>jJx`V`g$ujRU5dlPqTCL@RaQS;qKG*Ty zfnS?<1^QJwH%QJ|p)bda1t_UZ=Wi(vE814!k@OkdQsWo{0r;YvHVl92z6HP%Yai3n zpz;c-vLuo*BZC-xOzJB9EEhJa*7pqYWZepJL(1^ox8s=u2x!|vWmltUAknKFo73%` zU8H$$xFU&gh;{Z+noN#pLLh=6I#hqJ+= z0ej)ylHA8AsdfnT#)uSLPW0||7X&87rtcuP!INI}X+W7eBgO~#o$Vr<>f6*w^9-4z zL~z5uP6VKm2GFCZfa#(SQit>Idk)BrJ%^|av@pP&e^uJ50SzBZkga~q$~-$@I+ zsrC!w&Gh}NE?dJ<+@xZ3$x%+ZE8oJ(q`cZ~PMpifox$4;@F#l0>5Fy60JQ^2UpokD zI7Fn{t@TRrp>pFO@uo5pc4#hgiCdh#!pGDdjlxwGKqWS;bh1J{i(uX=fjG_bYtyp}>O#_N*pcAaG44PoBtxhN_%t$$G77;*xzr+GMQL}eSkzO`)H zypn9ISS{9RT6u_ZV?U*|3YJ?b>yS_HzW>9&D0KmO?;T%+DQc>QVaiEJ96L%*<9sK= zwRTfpOXeX}a$7UcgL=!mb@tjwODjbaF_H}apom_Na9J1HsCRWM{UGJ_O)|(;+zo0W z3?hBHZ_xC8)80_E>c!=!g410LFM@e{{ni~{)ppFq_)Bq?XAoI*7NxFe{VY`_8tMvY zI>mW3ysreVC;N8$k-fWdldEW+bshn<{t?&0%8x6yqimseMYiXK!n^AFA&<(k-jn2< zjT2MfH=OOn{dg%lWf<|RRO!i->$K{3g{D+(14V|aPlZl55@e!ZaZ1JF#mGyI3ryK- zt^voh?lKRr@BKA3UO3_PdbN1d^i`?Lw99hJgEhd`bDg{m6F1m4d8*w~*NamOcaJfa zCVy^-?SO&yCWRT(q7F#el|7b zsBv8mt@#U96p0Ms9;)`}82M?@8`y#$n68}lN`(!p(c+KdN`1Q*bhm0+Z0y6$V3{wf)ZVGqM-YSTMU0WTI0WH+p3nCDVJQqbB~Lxc&%b z{j;=|@m;1{b>l&4Q#Rda464ul#Fp%%vb|!iWVW6F(y}G_L@0Y=U}9m9BZj>%amQO} z8<#8aSyA{Mg#86`2CHJd#WWHIhH z^hF96Mvk+b)z2w3(d54DCSSs>rk3QyiG>5%!j~&4ZN|2q!In#8xXHfBHbXh$bE$EhgGYp`!yBN7@&a|OdKlhX zcmnD`q1_< z3~3pihpY^Vk=(Tug#NCUD7WHt(`uWTa+mCs$hG#Z;?_!9kH6uL+EVW|-EbxV0H{_0 zv#!fEuP^7!dbk!V!*~L4$)3GNDcV!5`SRHm&g%B2chObcFnzuSs;}Ph2{OB}^G$W0 zm^rh~edni+cp21p{Q2eHW3_Sq2(Aar%!Uud#U;jD{41viW>9&h`lHE@-#>&(?C(EW zn}lYyWkataaGamE-4GlY)K}7tvgER4@yU0xD>aQ2^%2I;-A8=2AFYx^o%1}>W=lQB z+H?|xI>z?%y1`LN?H44Qz3Q6RDH%{BI6mcbPtZaU*GpvN^A4Y53|+U_k^oAVvDc+R z`Ah;MFVrm)ryU7v)b8Dr#KUEB_W!k~{~2zA4g*A!?o3d=8me?J%zY)PCMhipxG2`H zan`^On8-T$5A;EI5tgPztl_OXhP|H2Ia1vRwNtjnba}o{Je<6SiAl*MMo1FvOXV;ttN*ROMnOzLMbP#1Sb04U1Q2(wAk! z=Qf^V&ene1fkNew?MEE!0WM!SXa`K+g>Ym2UaavgzY4jAoyo&P)0A-G+@$$J%ZrP?-d;TfgG-{jo^al8-09P1vxAl7&^0PNhaY56M=G166As1o?roLs&+f GO#T-oi7ILU literal 0 HcmV?d00001 From 33628cfb206b51b47dfff475b71f5226de9194f4 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 17 Feb 2023 21:15:26 +0800 Subject: [PATCH 0212/1057] Add solution and test-cases for problem 783 --- .../README.md | 25 +++++++------- .../Solution.go | 31 ++++++++++++++++-- .../Solution_test.go | 31 ++++++++++++++---- .../bst1.jpg | Bin 0 -> 11023 bytes .../bst2.jpg | Bin 0 -> 11531 bytes 5 files changed, 64 insertions(+), 23 deletions(-) create mode 100644 leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/bst1.jpg create mode 100644 leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/bst2.jpg diff --git a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/README.md b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/README.md index e4ab782f5..e002be788 100644 --- a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/README.md +++ b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/README.md @@ -1,28 +1,25 @@ # [783.Minimum Distance Between BST 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 +Given the `root` of a Binary Search Tree (BST), return the minimum difference between the values of any two different nodes in the tree. + +**Example 1:** -**Example 1:** +![example1](./bst1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [4,2,6,1,3] +Output: 1 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./bst2.jpg) -### 思路1 -> ... -Minimum Distance Between BST Nodes -```go ``` - +Input: root = [1,0,48,null,null,12,49] +Output: 1 +``` ## 结语 diff --git a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution.go b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution.go index d115ccf5e..33b215cba 100644 --- a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution.go +++ b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution.go @@ -1,5 +1,32 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) int { + ans, a := -1, -1 + inOrder783(root, &ans, &a) + return ans +} + +func inOrder783(root *TreeNode, ans, a *int) { + if root == nil { + return + } + if root.Left != nil { + inOrder783(root.Left, ans, a) + } + if *a != -1 { + diff := root.Val - *a + if *ans == -1 || *ans > diff { + *ans = diff + } + } + *a = root.Val + + if root.Right != nil { + inOrder783(root.Right, ans, a) + } } diff --git a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution_test.go b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution_test.go index 14ff50eb4..c123fcdb0 100644 --- a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution_test.go +++ b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/Solution_test.go @@ -10,12 +10,29 @@ 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: 4, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, + Right: &TreeNode{Val: 6}, + }, 1}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 0, + }, + Right: &TreeNode{ + Val: 48, + Left: &TreeNode{Val: 12}, + Right: &TreeNode{Val: 49}, + }, + }, 1}, } // 开始测试 @@ -30,10 +47,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/bst1.jpg b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/bst1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..172130eb2cc9ecb3674361878f8e4597c9d64ecd GIT binary patch literal 11023 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 literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/bst2.jpg b/leetcode/701-800/0783.Minimum-Distance-Between-BST-Nodes/bst2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..34c3ae7138a51610ece1baf266ea33a9d5e080e2 GIT binary patch literal 11531 zcmb7p1yoesyZ6u{4HD7{f=Ebrh=9aMm$XXA&@glg2q-c1C^aB4G)fNLDLq3D14xH- zHy`i)?)QJ+|6O<8yT0d~^{l=2+2=fG$FqOW^V_#mx4!}8YOhpZ0kE(D0Ia(Ua61D~ z0N`N%C4Xt0JHf@r{Y&oQ#sL)aPQr{NKQmZbXWWTDYvZvihEeRSoAnpj{(>eSU40|x19jyzkU@P z2kTA%|0(zI32^ZUaj>!O-#u3*2mECj8wVc;7nhjeKe~mDgNuhxaF2rW5tV>E;e*G5 z+V9w222<<2ccm3d_)bIjkeyRp*Uck7yPV^x71%SRvf}PT5B@gr{|xBry!@G!1_-`lY`+{uPSz|F*a^oT+lV~Ymip3?%o#g8=TnY@=|di z$0lPudG2a2|J%*f7Eh|-l^ zCK@1jjX!Q%+S5vluIbj2v>GZW|FJP>lWAWNr&M?!*0GS4?cC4s1~sxKHXJem%lyWF z0aUJ{b&C;Wn9u~xKo|_jLLCq&(LV|5ga`ZZARyQ5l#8W6Q)Aq!=k8GAbRj$i$4I-d zexcN7(A$=*pwWg>JcvW21h4dhRP#`OlQpiTuPfS8OXfnp_S&hnXc(_~DY@C$kYZ)= zmQJXk+0@)l? zq`y@3_yhDJ30FwpFxMoR_<|8EN{=Ni3JH{I(A1fx5_0S-3 z#e<;>UCrtEkKPkrh@cIejMfW+c;lU#uzYD4;wUr5SQ{{(PP%fkFozpb#G!+W%ie!yt84$ z7iw=OjN{16cHFUtf~czLTwVUs_((ZiQ0l0e4kLbCkrc5t7GH;-vZ(9K4xw2E=U-lD@SXtGSoW0<I-(?2RFTjX^QZVI&wZfZEa>tI76 zL*x#^&NobzLCL7EtahMmX)U}tIo>6(NxCuiyQ{qU|2Cj^!yVU@E{iV`Wp@%MYi_s4 ztJ6H<9^dA{JvXWFoJBdFlcmqFNU)z7*jwBd46!0YrRtlTe67*Z2B4 zx6L5}*#~+_rT)0ru(M@bIj!Q9wGb%bvm!Wz?%lftRdyHqHzN{!>?Z)y<$^yTl%5l( z8+}S6XfbYaY%fL@b=o^0o;|Pm+|0}b>#9Nn%QAvRxO#ExlIUO=$y&d{cew(}~N=uTS*m1hy>I5YKt_ zBd^_aH#-iBtN8MA`)!RLMT(upZlPf&ZOb>DtcPPeOyyp~apvHTu&qOaGAPmNkI6Hy zqHnT(o?@>RlTolv>=Q(XtrylUfWiOQ?8DVLcYB?q=EPTrrlhm3o!etSbxhXNk&{{# zH1`%gq)Q*|HI-m}A8?U&BV&zIuzVZ?5~lJ^a|Y$lz$%Tag-GDIs72$b$=#~**r$bM z6fWl8GM~c5(EzOc$qbGigkh9Ol5g17&7k@l+s&^JTXbd@f-v6dGAuh^Daj3^)};4z z+Mej^jdl?82&%F}NbKneo^--mu`tPOK{2oP51(4#r)+UtD?NX=o8k!sI!5vZynasN zAG$T^Rtt8Na+8WIu)6G?q_=Z;)2MPShg#reYX08z*;?P^EY;vbBBH=^B|-R9z67D) zP^8|vJmFZm-YsvakYD#oT`6MKH&zuZfG(l9ILeWIo-Kpz&EAH@2HVe-Pl^6-zlrj~ zy&W?F?T+N=EdzR$^#ag)rkt2ii0UEu%gT`J-3|W2o=^o}K0!szi^jy;&Lvqs@T7W= zh=M%_I!3kc@d-OolS3&meQZ<4YcSI#?z`p&K{eZ^xs#6f+pEo?DzhB&ph&y!O31fA zMgtz&5E%xkC(aw|q1OMa1DzR6AWdx7YBA5=!}IdKpfrWcNUU6|DA&YctpGyKt>#UW zd2^$HULLyU@v4iuk(Ja*7g3+psD{!Ly4HYSg{?khM0;m!5d?ibo>`kU)(S?YzF`Fn zQ+-_Q4n8po<&894QwoKyMG{1cF}T<$ZK2l?76TX=ss68xy)Ctl;P;;XoV4GqnX)?+ zNb1A!A)_5sICQdWA0=e-6B<6@D!x!u#CziSAV}fjPifkl0$CpfsHdk$jabivtWE34`yU-yQ8TujH#J4x zAO9!D{*AVOmjXFb>20kF3X49tICo!MM1Sm=(908MGbP90 zl1p!1upTL6vBuBu6EXt>H+G018xWFrr~!>QU8DUOe;Ty-C3vB;b!3gjPzsVSHBg)2 zm-O)de*B&K{YDQ$TF&Xhv=VbgfI;_Yv;qm%X z+nI2NuXD_|fSIu|o8bV+3&nCw0p@LH3G>2`dmtx^D)y|M+6efXaQC@k6^(Oig&nbg zU7!#PlfaieS-c_93y+7XJ>ighmJ&;l&FZ_^_>U?1?-bq@yD+WzM*=s^?3==d0Q&fN z%Zqo;quUah(RUbA#@osBC_h5C>nV24&x>#+oQ(cpys~)6k^JZFk5aB_;lqd^i-EK8 zJmgznH>O$0_k5pI^oiH+Gn5$oOvvCKLE94! z>NdpBLtv&j0X%lMfWlPQNDYu%%!}@=L$Pv5^B+8^i1pJD_^*KC9UL?9CZ`q`u_zA` z1Id^hLsE zMB{;$Q;DB+Tg4j9VoFBj(Tn9Mk8b(|g2_FMp)dR@aeBHkJ?8uNsGkS4OlTa>8d3(I z6(&0Z6H^Mi$^MS5=qx%?_Dpm6a@y2rkLOuz>He|VluFA^u{t(7P>uT=)}S{*c!dTX zfbrOe^@m;r;udh#=aeWmOJcFK_=Yy-Bj^?&vy}RZ*~t*!2RyOn{W{2HRbue)eb;eN z0JKSQln8>AJ8@YWVIo*uLdWPGgQnHRY$5J9o3I~{k}W9H#Sf;F!h8ugq=OCCVM$9D zOnG$8iAyBR3o#~3Ih037sb2y?`7SJ}s;1{;vn%*c{{-0kz>b!Ypeh{h_KY*Slg2k} zzjz&3*qotzmL)Nvr-oQIExqMlqMmc} zc7u5oM6x}GNq&`_Zi>PZwH?YLi}(Y>Mr*_JZAFyl0v8n-ja5u@2cgQS$8{HlXGL0&E){mt{T5rAD501QiG%CuX3z){7%f0$K5W{l1&=wqQMOn z_*5Nq;*6v!%cb`4q`^tvlTGG)Ohn_GBef7lP6o>e9!F#zjJNxHiz+?YM@<>@!VJQ0 z8jHei+ZJ;Yvb|CjgrdovDW7%%)I(GD2eoy%v3@toEcwfE0^$^T#MyxqRgQt2ZiGaP!B3%xH^?#spwJ{u(n`V$yW3D2FLcW^mHiwCs zXk~ad^o3tY&tV%YC34b5V!@%B{r7{xk(kSs3$Itw#3m+N77KaJ_z<@6Yn597X?=R&23#uv>3b`{d3sWej8)j+d0 z5YBHug3g{kl)=imQa(ZFu2J5NVVA>ClOm_&AC^Agw;`OWk8sAqs|vqP_eYp6k6xDj z20u-`>Nnoim(U+_lIl_0Fh{F-UO%>%gte`6EcF7g!;phKZNe7#HK3uiDb~uVZ2@nW zHu9BWuT`kBPaj*XmkcIBt)If9jzjrUH8eS)-w;254&eRC82bL=}b*Hc?&F=N04N0BU0ey>aOCzv=>b_ z+o%SohNXkK<#e5HIqSw7uZH5rL^5sxD(yvMIps$9T=Didk@~Pm3{ba>R^_owlp{h^ zG&{aCpuTBY{UH`?8; z!kYR5{X_XqEGFfiOGf6!W@!ffTtRwO!VX|ecds1xm&D$^9eSdVoWYh^T)G}v#;0=C z4)C;v;wY|0v}8m|c-j0Y>y0V@vr;w54b~yAX+)EBjx1|O>EzYoRvV^===+1D*h?}- zakr4Nf1)W8N>l)z(;e=*k}E-KDetnkot8ws#h-Fs*I&*nx4cqujfcglShxo z9<+T{3WxH~^FehKM{fbvu{)ClU$syA3eOyQd8$P`&YJuR7CyV3+hu=2wzkUnKt;*M zU2DJ@$jw(1?hU+oDHSQ@sn66Rgb!p^Qw21|ub+g!2z4zW^PBbr);WBAj9yJKgXebh z`^mggE|^UHfK7jv?VdEzo%#4w;`6< z-}^XqSf9wrtx;x?5Z4gE0S?|f=V3oQxM1BnG5Ty)xod59Nm6c+RWUhRSV8a2y~#=5 zg(W0?a8B0Sjz#K~#a;j@mYoTAMo1evc*En2wo-d%285IA22G*swx+8?yOfsh`@ngI zv{n+ih#n@qc`^|W)QL$g1FXNAin+;V+A(|~?JlIMDWPS}DMGZ_!=7c5|6&kM7uE|u zN_h0)!-47Vaw&{o+fdE4?bNra!R~1zN5>~b6~981YVTR&juCuQB#FnkZ7^sp`nZxv z?}d(Im{CUW+P6fd!uk;Rivud4P`jE0C534!;|(m?cb!xhW!vvlH9uqcnfSZ-qe^?` z|2T-+0X>vd*uPjsa+D7-o-W0CuZ>#UvdeI#0y(QHO}5;f*7JJz((pD*V-7r&#I2U(N_E4xd)m1sH^gHHY+zq~Rlmq{@-V)_@DyAfHNQ7UviHzkX=_om!|c z1Q&WvArzvV3U2|S!8S*6ztLgOb(Nmpc<4NEOTh4a}VD@*sE^=DlrenBDqc(LzO!;)PHWskui5Wa-aM&?* z^)X2}hvyo^)US5G)pn)x1dznon8;rK?(Djs`xjr;NxxDyR1LlPE8?gJm!hg}*YyHG zs7u<*&2TB(msmjl5(pb)b0h zTQbU`=lR=1hX7L#flqkmky;}$OBhfEy*l>nY^sdJc&fMYBUtGG1eKt?j82vO=+BoQ zCm$^Z`MHXy6{z^}SGJpvxN{JVnIos&jKNXefC83E*M_%vNQ_fO2y0k0<5xhS7(n)w z)Z|B>i}N~lwi!=;H<{Ocmie%EDCa6&SCQ_ON7DGZtz^3AGEuR_&T>>C2~`|xX**PY zJx^xMsZ65G1fq?l^I!ig+DRnAV;m<9SL>VdtFO*0&-_dv&;x_geWQEOJSZ%>k|jxG z(|O?arQ%N&YFR>G^Nk<8VZ2t>DIeQ-vHSDFrt=4H`MF~6e^Q=&OmoAaUfyI;ljE|4 z6{phZ4qa749Gh_O;WXwR>`CG4dkbI++F?>{SvYB}rAG7-C7BH^=IYcJ_f&TD~ z%)O+~ol~=rWomqei;vcL{bnI?A8To+?hMxHN{@jgN@F~;tx{(bM;d`@ZpxzEN(|>~ zMMPE~+CKc?b@lT*cazXNV7*cx7T&9X!8nv2s1sY#jZ9Q$xd3o}0(_sN|DD$5!rswX zLv$#;wLOi-af-Gcs@)$Dsj~(K4Nk9gG@AfbEWN9@ytMB|T#RtwLo6<&TkBvKpfb9}*4gcuhXwSA)K`1o-|N z#l)|11Wz)F{V&e^FS3S2?3ILz&0HhiT~vq8xB-o1v?~h3Do`zm=ixRq{Y0?<+E=Ry z61aORy6I9Xn3E{w-`ifEBFL$Q4M$O~f~1!lKq49AU)^Lh95@H%@sOT|FN|p<$xjr7?H%EH=m47#>kIJd`@s^d0s4b|D+ewHDxwps3$Bb8zUzEVwMH+~U~JKr-zLa0CHO`8-6j4;CuQ#~;N|1E@wNDUwT z>~;~vYsb{lTp!Qm*(e5lO;7=%#t@=NB@xk{c3$zKC$`}w@szkYfpEyZWs1#~;ul*M zx@Eo@H3Qb?&rJmVHM=_9=yIj|sN3guv95!$Yb z6|zzgcw=me^Z(_&a24gBfP!y6dCeEpo3QS=URzgnWg1~^b_?Cd{y2Po2TqpJ2JaH zhOoER^APsmmZD>1?k$ zA2!=!tv-vYY`ac*d2_`a_qr>WeDy01<{690u_epMAjdC}51cN-;SyBA(8A+`Rf*TbATn!p!!Bwu+=PiP3VUCPg|g>M zgLtI>%F{!$hxY!6eqS)$B76K1Xy02}Em~jWLMEWjkmJR8@o`7~h?SRM>vG_SnEE|Q zqi-5!$r~h#mADNNZbV@W7oc3g>ALVLM}!x__fG29g?w1o_?Iu?p%>9$m)fb6OsGH{ z+N9&-5#CYR@;R-{Tpph7zbyYd86S0US|KW_%1A#EV!G%J2v8$K@<=uqRRvD#*p?ap zh|tl)X^ZsR=5Z$2K(2*UaEsh@#p_(2$oXc~p};*c$~t{1*KkU5@F)#uF?}**{UpsQ zH8Xi|0li=BUw!z|+dVAj_m`ILQ)qch=kE~b$mI1Vd;g(YedQ*#3Y-PA|jcTT|9l-l`)7d_r0_T{UTab|+S%X217&Wb!Rw%~c!{MBHixj=*Ih zb}Jn3Y%nf8?KiVd*i~iHCuxVN85giK*1X9D*-r&_<;IQ^5D@qCOs_t&8r(+*%lu$P zpfKxs+xu<8j`0zQAHa|uz2dFwdW=9cxA4p>WkdGUmZK;U&SzdL9(R#5situl81J1MUbt3%!3|(mH`_hyF8fszqljX6btE z9Fh^n&(Y|x1f8nmsV$8yu0`)HbSljE#UY7{tOlQLKxNF-nsH*PsXN%_O&ICBfNBlf z-Sgzp9UHOOUiq`v(Pu?)rn{V4)|>5c@3;8a41V62a?O7Iwd0V8&4L&ibo}xqP$`_& z2il>ewz`M4Jw74%k?~_e01tA2N@>sDCVitRgh&R0qKzP?AT>P=1X+2dCy1YdXZzSo z%JIXpraXtXtFj@P&UD}<9Ejc1f!!NS*wD>!^n6n~gGFJXSTue|5X$~ge$QFl@uFy6 zm+*+!*(96sj{kjJK!NLL7C47LdRAwBEaZd(>n4E#b z32%0&Fps^ihXUbzc)^BE*oN5&_esXRr7@nJBAQx(BliP$q=}7v1h0QG&X>ntqyUlm zWYbN~2~%8$ulgLb6A5T(9s;()kSKlE`e#mAy-bgY8<6EK+>8F7dfTRsYxg8!t6^mT zoR8vIL54Jw?g;bkB(Gv6D}8tBJ!O5MHdTF!@N-)*GisAah4uRW%D)|}-uq)D$iO#s zS{-HYqy!Eb{bbiHq91KFURf&$gDyEcH|ps93i27nA@aWznf-c_X5=N*Pzal?(pJv9 zuz0lL^nKZ2mwv_b!;>*er{=_olFk<^jW2#>OVRX3l zG_g9^I%DT*ERLY=BkAy_?7Ll(>W#v}g2L>aoP5ZAZ@Q`MNDll8QDK*f>YSfte*sZa@!z@3RkBYr`GkoPwg2Bm5CA;*2HTW?!~W>@2{6vwLkU zjBdXGleYi|^4(pNS#mXzo1tsbuC;(aPV`?g)(4lRIxS0RQ#KuuEw=z|C7n}I1K%S8 zVNaq^`MM0-8S9-`in+Y-koq^%BAH_z4(!;ekC$n>Lr(G<)d#trr=gQ{boRjTePl1z{N zR66{W&r3bw?=3U*N3U}Y#=Om~&soS@m?l-CxG49!_x(G+*$a`}!kp>-XbhjEnJ>n` zjNpcMqJQ?4w(;qyzc9A4vb-AErT7AqI&+AAnsel~t~HvbbOI?e7=Kpk_?&GRZsVK2d{BhE1(wBYTbP-kU@kpvxdwb%*ElrsQmGW6Sly9lU ziO*ZKrE1dH5~Pox$fN00($?STZOk6OTwaslXj{8aTc5DqRh=N&$ETS>-F>PG;~(b?%ZxC zl{;zNQtz<;a2VveU+_fM+_i2H2QnB_1lNJb2Y)yT`!idUxDb9F_5Rcs8p|duAd8>5 zhSWFsd!c-+BE1k1J%uwk_B|7zZM1$UwXtskh~7IivtSL*%O4%I%=MNtz-vh=YBC05>7@{)D;*GN$GI z=xS=qH~Cm&jzVijU0Il2M88n*qv%L{S!HG{&hR+E@*b__H#>O7#to$hi&+2mgtUVK zCo2vT_sS7q-cJ3)c6My&EtlCT9hFjB1hEb?iwMkc;ZYCXPP zzdUg%;V&U7M)ymgsJ5jHUaxg1%olwjvG5}*GdJ%&8r(8V+UtHw*Rp)h{q%>JlnAwT zcS z@GjJlC}laoBDnbcuXt3xR7~j8*rx292pfLZ=YAuft{uHG2b_e>OfR2LuD5_%y83|h zHTU}X>I}Yqkc|V}!6q`{`=E5J4?J3TNKW-#9B+5dY~!SuLmFhDCMUl4m-GkG(!#+i zq*ue|xxQF^k8)V>UL$RFdVCCYJ09G0Uu?uU6r7( zH>9Mf7_LOe=L(>j^1&{!l7GJNkT1v9u<{l_Q9te8^SE*Kgz?!dP(4NoRFHs}A9x)t zXza=VYov$ST+#?558Uy8y{vClSs4Y22#8CyN8;+{4#W?#-CQO+eA*e!9wf2&u-a8W=vmmsi(*E!nRg-#v1> z?MfA)j5#MueXiIq4&Q61fBHToa9uLl&}^>EEJ)ej-uP7vO+|}F8rt%Oz4_S~lBI8T z?38+(sDB)h8dYs_WgKyLp0UCHifMBS9bmBXk5f*a*eZJYFH7~nQXPL`U)RD3VBUo8 z3RBI8dYGGLz7HGY^|HN7aUgex4EG#`nI`L@i0Jxg1;wW0#O}aZa4T(#}Yz zATC9(43yvpy@hDC?TJwyxs~%zxu-RKPS?4=z*?Y=-jz8zKgmmM@jr~AtJR*p)xP^F zph1oJP2jY8AzGckTQHJSb?jV`4W3$^A3VvpFDx$Y2@V~OXB_R7{y580`PG%)@cV-? z@tOq@T0=+Ci%mP@*Yxx6%MxJsZumGL8Oh-4(%5ZUoZ^9J7D7nJ`SpoWfdM~t@Usll z=262)Oyo?0af+_4OSRfW?TF~Jo}r+75J;R4FK1rXN9vK!(kP_a(+QGc`q z9ZlDnXT^gb?ZY-4>(1$`faJBkLQ6<7oG6)wq9&y~Yl1B1S_d;{wl@k|W34a&zF z*-ooERU^BURW*j8Pc7eC(#f`!;vC5j{>vF(7^k`U1yt*Ix-WijPpJrO&vXN5JWfaqH1!!L- zb!z#A;GOLO&Jad#+qG}g+9e8l?osL@#k6U}HU_jY%iLTikRBEDf>ES2WOuVNGBn;}^87(9AR{Krf`DjVu4diL|uQDJrx#gA$v?Oc3e zz*;7=R6-^VBCYl2_|5PtyF88!gqW2h)bF)(tmd9rL#LAzZl;K}p%atoeosEn_7wR< zPx^ZI;8BpWGx9@)vgaTe9Y3gH0X0aA85}y^!`uSGDb{+zM|Q~YI(gUs0hNEHrXda( zNa%;%LEf~K8HXcx<9rCpFTw{Yp7+T(+sqh1*P-n=XYP?CU z=+@mi(l#bNM+m_0r{ewJ9GK>Bf$tahJ{YEWIN_H zr`o{hkL;h7Z!z~%mw{6Ee4JbARc-9OaVgqxsZDHa=G=pvYb1Dl4a0Se1D1~`CdKQ0 zH#cM~WE4O3J>pDklVMFn5+o4I* Date: Sun, 19 Feb 2023 17:53:51 +0800 Subject: [PATCH 0213/1057] Add solution and test-cases for problem 1382 --- .../README.md | 32 ++++++ .../Solution.go | 96 ++++++++++++++++++ .../Solution_test.go | 66 ++++++++++++ .../balance1-tree.jpg | Bin 0 -> 27105 bytes .../balanced2-tree.jpg | Bin 0 -> 6436 bytes 5 files changed, 194 insertions(+) create mode 100644 leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/README.md create mode 100644 leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution.go create mode 100644 leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution_test.go create mode 100644 leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/balance1-tree.jpg create mode 100644 leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/balanced2-tree.jpg diff --git a/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/README.md b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/README.md new file mode 100644 index 000000000..072bb1bff --- /dev/null +++ b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/README.md @@ -0,0 +1,32 @@ +# [1382. Balance a Binary Search Tree][title] + +## Description +Given the `root` of a binary search tree, return a **balanced** binary search tree with the same node values. If there is more than one answer, return **any of them**. + +A binary search tree is **balanced** if the depth of the two subtrees of every node never differs by more than `1`. + + +**Example 1:** + +![example1](./balance1-tree.jpg) +``` +Input: root = [1,null,2,null,3,null,4,null,null] +Output: [2,1,3,null,null,null,4] +Explanation: This is not the only correct answer, [3,1,4,null,2] is also correct. +``` + +**Example 2:** + +![example2](./balanced2-tree.jpg) + +``` +Input: root = [2,1,3] +Output: [2,1,3] +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/balance-a-binary-search-tree +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution.go b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution.go new file mode 100644 index 000000000..76e122cd6 --- /dev/null +++ b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution.go @@ -0,0 +1,96 @@ +package Solution + +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode) *TreeNode { + var targetRoot *TreeNode + depth := make(map[*TreeNode]int) + var inOrder func(node *TreeNode) + inOrder = func(root *TreeNode) { + if root.Left != nil { + inOrder(root.Left) + } + targetRoot = rebuildBST(targetRoot, root.Val, depth) + if root.Right != nil { + inOrder(root.Right) + } + } + inOrder(root) + return targetRoot +} + +func max1382(a, b int) int { + if a > b { + return a + } + return b +} + +func leftRotate(node *TreeNode, depth map[*TreeNode]int) *TreeNode { + right := node.Right + rightLeft := right.Left + right.Left = node + node.Right = rightLeft + + depth[node] = max1382(depth[node.Left], depth[node.Right]) + 1 + depth[right] = max1382(depth[right.Left], depth[right.Right]) + 1 + return right +} + +func rightRotate(node *TreeNode, depth map[*TreeNode]int) *TreeNode { + left := node.Left + leftRight := left.Right + node.Left = leftRight + left.Right = node + + depth[node] = max1382(depth[node.Left], depth[node.Right]) + 1 + depth[left] = max1382(depth[left.Left], depth[left.Right]) + 1 + return left +} + +// 树的高度都是left-right +func rebuildBST(root *TreeNode, val int, depth map[*TreeNode]int) *TreeNode { + newNode := &TreeNode{ + Val: val, + } + depth[newNode] = 1 + + if root == nil { + return newNode + } + if root.Val < val { + root.Right = rebuildBST(root.Right, val, depth) + } else if root.Val > val { + root.Left = rebuildBST(root.Left, val, depth) + } else { + return root + } + + hl := depth[root.Left] + hr := depth[root.Right] + rootHeight := hl + 1 + if hr+1 > rootHeight { + rootHeight = hr + 1 + } + depth[root] = rootHeight + + diff := hl - hr + if diff > 1 && val < root.Left.Val { + return rightRotate(root, depth) + } + if diff > 1 && val > root.Left.Val { + root.Left = leftRotate(root.Left, depth) + return rightRotate(root, depth) + } + if diff < -1 && val > root.Right.Val { + return leftRotate(root, depth) + } + if diff < -1 && val < root.Right.Val { + root.Right = rightRotate(root.Right, depth) + return leftRotate(root, depth) + } + return root +} diff --git a/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution_test.go b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution_test.go new file mode 100644 index 000000000..f11c29b29 --- /dev/null +++ b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/Solution_test.go @@ -0,0 +1,66 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + inputs *TreeNode + expect *TreeNode + }{ + {"TestCase1", &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 4, + }, + }, + }, + }, &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 4, + }, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }, &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 1}, + Right: &TreeNode{Val: 3}, + }}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, got, c.inputs) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/balance1-tree.jpg b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/balance1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfd860a43b03be5fd4e42387e143d84e689a1619 GIT binary patch literal 27105 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 D(03$7 literal 0 HcmV?d00001 diff --git a/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/balanced2-tree.jpg b/leetcode/1301-1400/1382.Balance-a-Binary-Search-Tree/balanced2-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08123137857c922e5fedf868519f4e03dfeab5a1 GIT binary patch literal 6436 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 literal 0 HcmV?d00001 From 267ce5655d88ee437a080f027febde5235a0b18e Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 20 Feb 2023 22:38:34 +0800 Subject: [PATCH 0214/1057] Add solution and test-cases for problem 654 --- .../0654.Maximum-Binary-Tree/README.md | 38 +++++++++++++++--- .../0654.Maximum-Binary-Tree/Solution.go | 27 ++++++++++++- .../0654.Maximum-Binary-Tree/Solution_test.go | 32 +++++++++++---- .../0654.Maximum-Binary-Tree/tree1.jpg | Bin 0 -> 13559 bytes .../0654.Maximum-Binary-Tree/tree2.jpg | Bin 0 -> 6276 bytes 5 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 leetcode/601-700/0654.Maximum-Binary-Tree/tree1.jpg create mode 100644 leetcode/601-700/0654.Maximum-Binary-Tree/tree2.jpg diff --git a/leetcode/601-700/0654.Maximum-Binary-Tree/README.md b/leetcode/601-700/0654.Maximum-Binary-Tree/README.md index 6e9c9eff6..51a03a6b5 100644 --- a/leetcode/601-700/0654.Maximum-Binary-Tree/README.md +++ b/leetcode/601-700/0654.Maximum-Binary-Tree/README.md @@ -1,17 +1,43 @@ # [654.Maximum 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 an integer array `nums` with no duplicates. A **maximum binary tree** can be built recursively from `nums` using the following algorithm: + +Create a root node whose value is the maximum value in `nums`. + +Recursively build the left subtree on the **subarray prefix** to the **left** of the maximum value. + +Recursively build the right subtree on the **subarray suffix** to the **right** of the maximum value. + +Return the **maximum binary tree** built from `nums`. -**Example 1:** +**Example 1:** + +![example1](./tree1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [3,2,1,6,0,5] +Output: [6,3,5,null,2,0,null,null,1] +Explanation: The recursive calls are as follow: +- The largest value in [3,2,1,6,0,5] is 6. Left prefix is [3,2,1] and right suffix is [0,5]. + - The largest value in [3,2,1] is 3. Left prefix is [] and right suffix is [2,1]. + - Empty array, so no child. + - The largest value in [2,1] is 2. Left prefix is [] and right suffix is [1]. + - Empty array, so no child. + - Only one element, so child is a node with value 1. + - The largest value in [0,5] is 5. Left prefix is [0] and right suffix is []. + - Only one element, so child is a node with value 0. + - Empty array, so no child. ``` +**Example 2:** + +![example2](./tree2.jpg) + +``` +Input: nums = [3,2,1] +Output: [3,null,2,null,1] +``` ## 题意 > ... diff --git a/leetcode/601-700/0654.Maximum-Binary-Tree/Solution.go b/leetcode/601-700/0654.Maximum-Binary-Tree/Solution.go index d115ccf5e..10196f3c3 100644 --- a/leetcode/601-700/0654.Maximum-Binary-Tree/Solution.go +++ b/leetcode/601-700/0654.Maximum-Binary-Tree/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(nums []int) *TreeNode { + return b(nums, 0, len(nums)-1) +} + +func b(nums []int, left, right int) *TreeNode { + if left > right { + return nil + } + targetIndex := left + for i := left + 1; i <= right; i++ { + if nums[i] > nums[targetIndex] { + targetIndex = i + } + } + node := &TreeNode{ + Val: nums[targetIndex], + } + node.Left = b(nums, left, targetIndex-1) + node.Right = b(nums, targetIndex+1, right) + return node } diff --git a/leetcode/601-700/0654.Maximum-Binary-Tree/Solution_test.go b/leetcode/601-700/0654.Maximum-Binary-Tree/Solution_test.go index 14ff50eb4..a5f34a2ee 100644 --- a/leetcode/601-700/0654.Maximum-Binary-Tree/Solution_test.go +++ b/leetcode/601-700/0654.Maximum-Binary-Tree/Solution_test.go @@ -10,12 +10,30 @@ 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{3, 2, 1, 6, 0, 5}, &TreeNode{ + Val: 6, + Left: &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 1}, + }, + }, + Right: &TreeNode{ + Val: 5, + Left: &TreeNode{Val: 0}, + }, + }}, + {"TestCase2", []int{3, 2, 1}, &TreeNode{ + Val: 3, + Right: &TreeNode{ + Val: 2, + Right: &TreeNode{Val: 1}, + }, + }}, } // 开始测试 @@ -30,10 +48,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/601-700/0654.Maximum-Binary-Tree/tree1.jpg b/leetcode/601-700/0654.Maximum-Binary-Tree/tree1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..661b9c112a70b2cfbb41cfb2ab4ec5a9ba95de06 GIT binary patch literal 13559 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 literal 0 HcmV?d00001 diff --git a/leetcode/601-700/0654.Maximum-Binary-Tree/tree2.jpg b/leetcode/601-700/0654.Maximum-Binary-Tree/tree2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..af00612473a17573b449dc58e1833faad3753a18 GIT binary patch literal 6276 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 A&;S4c literal 0 HcmV?d00001 From 4ed22b651b71261f593e482bbaa685aabb3b4d2f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 24 Feb 2023 00:21:24 +0800 Subject: [PATCH 0215/1057] Add solution and test-cases for problem 502 --- leetcode/501-600/0502.IPO/README.md | 34 +++++++----- leetcode/501-600/0502.IPO/Solution.go | 61 +++++++++++++++++++++- leetcode/501-600/0502.IPO/Solution_test.go | 20 +++---- 3 files changed, 90 insertions(+), 25 deletions(-) diff --git a/leetcode/501-600/0502.IPO/README.md b/leetcode/501-600/0502.IPO/README.md index c53c2ef2c..714c97218 100644 --- a/leetcode/501-600/0502.IPO/README.md +++ b/leetcode/501-600/0502.IPO/README.md @@ -1,28 +1,34 @@ # [502.IPO][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Suppose LeetCode will start its **IPO** soon. In order to sell a good price of its shares to Venture Capital, LeetCode would like to work on some projects to increase its capital before the **IPO**. Since it has limited resources, it can only finish at most `k` distinct projects before the **IPO**. Help LeetCode design the best way to maximize its total capital after finishing at most `k` distinct projects. + +You are given `n` projects where the ith project has a pure profit `profits[i]` and a minimum capital of `capital[i]` is needed to start it. + +Initially, you have `w` capital. When you finish a project, you will obtain its pure profit and the profit will be added to your total capital. + +Pick a list of **at most** `k` distinct projects from given projects to **maximize your final capital**, and return the final maximized capital. + +The answer is guaranteed to fit in a 32-bit signed integer. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: k = 2, w = 0, profits = [1,2,3], capital = [0,1,1] +Output: 4 +Explanation: Since your initial capital is 0, you can only start the project indexed 0. +After finishing it you will obtain profit 1 and your capital becomes 1. +With capital 1, you can either start the project indexed 1 or the project indexed 2. +Since you can choose at most 2 projects, you need to finish the project indexed 2 to get the maximum capital. +Therefore, output the final maximized capital, which is 0 + 1 + 3 = 4. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -IPO -```go ``` - +Input: k = 3, w = 0, profits = [1,2,3], capital = [0,1,2] +Output: 6 +``` ## 结语 diff --git a/leetcode/501-600/0502.IPO/Solution.go b/leetcode/501-600/0502.IPO/Solution.go index d115ccf5e..89777a2f2 100644 --- a/leetcode/501-600/0502.IPO/Solution.go +++ b/leetcode/501-600/0502.IPO/Solution.go @@ -1,5 +1,64 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "sort" +) + +type heap502Item struct { + cost, profit int +} + +type heap502ItemList []heap502Item + +func (h *heap502ItemList) Len() int { + return len(*h) +} + +func (h *heap502ItemList) Less(i, j int) bool { + a, b := (*h)[i], (*h)[j] + if a.profit == b.profit { + return a.cost < b.cost + } + return a.profit > b.profit +} + +func (h *heap502ItemList) Swap(i, j int) { + (*h)[i], (*h)[j] = (*h)[j], (*h)[i] +} + +func (h *heap502ItemList) Push(x interface{}) { + *h = append(*h, x.(heap502Item)) +} + +func (h *heap502ItemList) Pop() interface{} { + old := *h + l := len(old) + x := old[l-1] + *h = old[:l-1] return x } + +func Solution(k int, w int, profits []int, capital []int) int { + x := make([]heap502Item, len(profits)) + for i := 0; i < len(profits); i++ { + x[i] = heap502Item{cost: capital[i], profit: profits[i]} + } + + sort.Slice(x, func(i, j int) bool { + return x[i].cost < x[j].cost + }) + h := heap502ItemList{} + pick := 0 + for ; k > 0; k-- { + for ; pick < len(x) && x[pick].cost <= w; pick++ { + heap.Push(&h, x[pick]) + } + if len(h) == 0 { + break + } + x := heap.Pop(&h).(heap502Item) + w += x.profit + } + return w +} diff --git a/leetcode/501-600/0502.IPO/Solution_test.go b/leetcode/501-600/0502.IPO/Solution_test.go index 14ff50eb4..53472b76e 100644 --- a/leetcode/501-600/0502.IPO/Solution_test.go +++ b/leetcode/501-600/0502.IPO/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + k, w int + p, c []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 2, 0, []int{1, 2, 3}, []int{0, 1, 1}, 4}, + {"TestCase2", 3, 0, []int{1, 2, 3}, []int{0, 1, 2}, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.k, c.w, c.p, c.c) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v %v", + c.expect, got, c.k, c.w, c.p, c.c) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From b4bdcf32c9217cf2d24c4427ac50ed6e00865353 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 25 Feb 2023 18:52:48 +0800 Subject: [PATCH 0216/1057] Add solution and test-cases for problem 1325 --- .../README.md | 37 +++++++---- .../Solution.go | 17 ++++- .../Solution_test.go | 61 +++++++++++++++--- .../sample_1_1684.png | Bin 0 -> 24179 bytes .../sample_2_1684.png | Bin 0 -> 15342 bytes .../sample_3_1684.png | Bin 0 -> 14262 bytes 6 files changed, 92 insertions(+), 23 deletions(-) create mode 100644 leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_1_1684.png create mode 100644 leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_2_1684.png create mode 100644 leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_3_1684.png diff --git a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/README.md b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/README.md index a5f0738b8..6804d7d48 100644 --- a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/README.md +++ b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/README.md @@ -1,28 +1,39 @@ # [1325.Delete Leaves With a Given 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 +Given a binary tree `root` and an integer `target`, delete all the **leaf nodes** with value `target`. + +Note that once you delete a leaf node with value `target`, if its parent node becomes a leaf node and has the value target, it should also be deleted (you need to continue doing that until you cannot). -**Example 1:** +**Example 1:** + +![example1](./sample_1_1684.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: root = [1,2,3,2,null,2,4], target = 2 +Output: [1,null,3,null,4] +Explanation: Leaf nodes in green with value (target = 2) are removed (Picture in left). +After removing, new nodes become leaf nodes with value (target = 2) (Picture in center). ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./sample_2_1684.png) -### 思路1 -> ... -Delete Leaves With a Given Value -```go +``` +Input: root = [1,3,3,3,2], target = 3 +Output: [1,3,null,null,2] ``` +**Example 3:** + +![example3](./sample_3_1684.png) + +``` +Input: root = [1,2,null,2,null,2], target = 2 +Output: [1] +Explanation: Leaf nodes in green with value (target = 2) are removed at each step. +``` ## 结语 diff --git a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution.go b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution.go index d115ccf5e..f93c5d103 100644 --- a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution.go +++ b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +type TreeNode struct { + Val int + Left, Right *TreeNode +} + +func Solution(root *TreeNode, target int) *TreeNode { + if root == nil { + return nil + } + root.Left = Solution(root.Left, target) + root.Right = Solution(root.Right, target) + if root.Left == nil && root.Right == nil && root.Val == target { + return nil + } + return root } diff --git a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution_test.go b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution_test.go index 14ff50eb4..23e82fd55 100644 --- a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution_test.go +++ b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/Solution_test.go @@ -10,18 +10,63 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs *TreeNode + target int + expect *TreeNode }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{Val: 2}, + }, + Right: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 2}, + Right: &TreeNode{Val: 4}, + }, + }, 2, &TreeNode{ + Val: 1, + Right: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 4}, + }, + }}, + {"TestCase2", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Left: &TreeNode{Val: 3}, + Right: &TreeNode{Val: 2}, + }, + Right: &TreeNode{Val: 3}, + }, 3, &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 3, + Right: &TreeNode{Val: 2}, + }, + }}, + {"TestCase3", &TreeNode{ + Val: 1, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 2, + Left: &TreeNode{ + Val: 2, + }, + }, + }, + }, 2, &TreeNode{ + Val: 1, + }}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.target) if !reflect.DeepEqual(got, c.expect) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, got, c.inputs) @@ -30,10 +75,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_1_1684.png b/leetcode/1301-1400/1325.Delete-Leaves-With-a-Given-Value/sample_1_1684.png new file mode 100644 index 0000000000000000000000000000000000000000..65e81fa7c3864764771ded6db3e0b47e35f468f4 GIT binary patch literal 24179 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

    Na%lej0HW5|nFMof@<-Y>*z8jj*%)%?T(ZEW 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 literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0790.Domino-and-Tromino-Tiling/lc-domino1.jpg b/leetcode/701-800/0790.Domino-and-Tromino-Tiling/lc-domino1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc86faf3df43c67d9e8cef0968d9138f46e2e0e9 GIT binary patch literal 47917 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 z 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 literal 0 HcmV?d00001 From b96428751e6d2eacb2318556a4f2c51445e6ce77 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 25 Dec 2022 20:41:34 +0800 Subject: [PATCH 0155/1057] Add solution and test-cases for problem 2389 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 20 +++++++++++-- .../Solution_test.go | 17 +++++------ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md index 3a60382c7..401375d82 100755 --- a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md +++ b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/README.md @@ -1,28 +1,30 @@ # [2389.Longest Subsequence With Limited 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` of length `n`, and an integer array `queries` of length `m`. + +Return an array `answer` of length `m` where `answer[i]` is the **maximum** size of a **subsequence** that you can take from `nums` such that the **sum** of its elements is less than or equal to `queries[i]`. + +A **subsequence** is an array that can be derived from another array by deleting some or no elements without changing the order of the remaining elements. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [4,5,2,1], queries = [3,10,21] +Output: [2,3,4] +Explanation: We answer the queries as follows: +- The subsequence [2,1] has a sum less than or equal to 3. It can be proven that 2 is the maximum size of such a subsequence, so answer[0] = 2. +- The subsequence [4,5,1] has a sum less than or equal to 10. It can be proven that 3 is the maximum size of such a subsequence, so answer[1] = 3. +- The subsequence [4,5,2,1] has a sum less than or equal to 21. It can be proven that 4 is the maximum size of such a subsequence, so answer[2] = 4. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Longest Subsequence With Limited Sum -```go ``` - +Input: nums = [2,3,4,5], queries = [1] +Output: [0] +Explanation: The empty subsequence is the only subsequence that has a sum less than or equal to 1, so answer[0] = 0. +``` ## 结语 diff --git a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go index d115ccf5e..8cb3f5bde 100644 --- a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go +++ b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution.go @@ -1,5 +1,21 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(nums []int, queries []int) []int { + ans := make([]int, len(queries)) + sort.Ints(nums) + for i := 1; i < len(nums); i++ { + nums[i] += nums[i-1] + } + for idx, q := range queries { + sum := 0 + for ; sum < len(nums); sum++ { + if nums[sum] > q { + break + } + } + ans[idx] = sum + } + return ans } diff --git a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go index 14ff50eb4..f87312f78 100644 --- a/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go +++ b/leetcode/2301-2400/2389.Longest-Subsequence-With-Limited-Sum/Solution_test.go @@ -9,19 +9,18 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + inputs, queries []int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{4, 5, 2, 1}, []int{3, 10, 21}, []int{2, 3, 4}}, + {"TestCase2", []int{2, 3, 4, 5}, []int{1}, []int{0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.queries) 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 5ab8453573876caa746f4cc2c3b7b919cf8dc13f Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 26 Dec 2022 22:34:56 +0800 Subject: [PATCH 0156/1057] Add solution and test-cases for problem 1374 --- .../README.md | 37 ++++++++++++++++++ .../Solution.go | 19 +++++++++ .../Solution_test.go | 39 +++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/README.md create mode 100644 leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution.go create mode 100644 leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution_test.go diff --git a/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/README.md b/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/README.md new file mode 100644 index 000000000..a0653b7b3 --- /dev/null +++ b/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/README.md @@ -0,0 +1,37 @@ +# [1374.Generate a String With Characters That Have Odd Counts][title] + +## Description +Given an integer `n`, return a string with `n` characters such that each character in such string occurs **an odd number of times**. + +The returned string must contain only lowercase English letters. If there are multiples valid strings, return **any** of them. + +**Example 1:** + +``` +Input: n = 4 +Output: "pppz" +Explanation: "pppz" is a valid string since the character 'p' occurs three times and the character 'z' occurs once. Note that there are many other valid strings such as "ohhh" and "love". +``` + +**Example 2:** + +``` +Input: n = 2 +Output: "xy" +Explanation: "xy" is a valid string since the characters 'x' and 'y' occur once. Note that there are many other valid strings such as "ag" and "ur". +``` + + +**Example 3:** + +``` +Input: n = 7 +Output: "holasss" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/generate-a-string-with-characters-that-have-odd-counts +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution.go b/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution.go new file mode 100644 index 000000000..18385cd4b --- /dev/null +++ b/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution.go @@ -0,0 +1,19 @@ +package Solution + +import "strings" + +func Solution(n int) string { + sb := strings.Builder{} + even := n&1 == 0 + c := byte('a') + if even { + sb.WriteByte(c) + c++ + n-- + } + + for i := 0; i < n; i++ { + sb.WriteByte(c) + } + return sb.String() +} diff --git a/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution_test.go b/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/Solution_test.go new file mode 100644 index 000000000..20974402f --- /dev/null +++ b/leetcode/1301-1400/1374.Generate-a-String-With-Characters-That-Have-Odd-Counts/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 string + }{ + {"TestCase1", 1, "a"}, + {"TestCase2", 2, "ab"}, + {"TestCase3", 88, "abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.inputs) + if !reflect.DeepEqual(got, 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 05a389676e3603322faefcc20081e4dbf13962a8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 27 Dec 2022 21:16:57 +0800 Subject: [PATCH 0157/1057] Add solution and test-cases for problem 2279 --- .../README.md | 37 ++++++++++++------- .../Solution.go | 23 +++++++++++- .../Solution_test.go | 20 +++++----- 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md index 433be3a19..d07874d55 100755 --- a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md +++ b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/README.md @@ -1,28 +1,37 @@ # [2279.Maximum Bags With Full Capacity of Rocks][title] -> [!WARNING|style:flat] -> 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` bags numbered from `0` to `n - 1`. You are given two **0-indexed** integer arrays `capacity` and `rocks`. The ith bag can hold a maximum of `capacity[i]` rocks and currently contains `rocks[i]` rocks. You are also given an integer `additionalRocks`, the number of additional rocks you can place in **any** of the bags. + +Return the **maximum** number of bags that could have full capacity after placing the additional rocks in some bags. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: capacity = [2,3,4,5], rocks = [1,2,4,4], additionalRocks = 2 +Output: 3 +Explanation: +Place 1 rock in bag 0 and 1 rock in bag 1. +The number of rocks in each bag are now [2,3,4,4]. +Bags 0, 1, and 2 have full capacity. +There are 3 bags at full capacity, so we return 3. +It can be shown that it is not possible to have more than 3 bags at full capacity. +Note that there may be other ways of placing the rocks that result in an answer of 3. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Bags With Full Capacity of Rocks -```go ``` - +Input: capacity = [10,2,2], rocks = [2,2,0], additionalRocks = 100 +Output: 3 +Explanation: +Place 8 rocks in bag 0 and 2 rocks in bag 2. +The number of rocks in each bag are now [10,2,2]. +Bags 0, 1, and 2 have full capacity. +There are 3 bags at full capacity, so we return 3. +It can be shown that it is not possible to have more than 3 bags at full capacity. +Note that we did not use all of the additional rocks. +``` ## 结语 diff --git a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go index d115ccf5e..cffcd5155 100644 --- a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go +++ b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution.go @@ -1,5 +1,24 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(capacity []int, rocks []int, additionalRocks int) int { + diff := make([]int, len(capacity)) + for i := 0; i < len(capacity); i++ { + diff[i] = capacity[i] - rocks[i] + } + sort.Ints(diff) + i := 0 + ans := 0 + for ; i < len(capacity) && additionalRocks > 0; i++ { + if diff[i] <= 0 { + ans++ + continue + } + if diff[i] <= additionalRocks { + ans++ + additionalRocks -= diff[i] + } + } + return ans } diff --git a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go index 14ff50eb4..a5bc8e2a5 100644 --- a/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go +++ b/leetcode/2201-2300/2279.Maximum-Bags-With-Full-Capacity-of-Rocks/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + a, b []int + c int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 3, 4, 5}, []int{1, 2, 4, 4}, 2, 3}, + {"TestCase2", []int{10, 2, 2}, []int{2, 2, 0}, 100, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.a, c.b, c.c) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.a, c.b, c.c) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e90cd0fc4999687907b12875dcc7dc7fefc6de6d Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 28 Dec 2022 20:52:51 +0800 Subject: [PATCH 0158/1057] Add solution and test-cases for problem 1962 --- .../README.md | 38 ++++++++----- .../Solution.go | 57 ++++++++++++++++++- .../Solution_test.go | 21 +++---- 3 files changed, 91 insertions(+), 25 deletions(-) diff --git a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md index 1803eabb2..c25de197f 100755 --- a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md +++ b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/README.md @@ -1,28 +1,38 @@ # [1962.Remove Stones to Minimize the Total][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array `piles`, where `piles[i]` represents the number of stones in the ith pile, and an integer `k`. You should apply the following operation **exactly** `k` times: + +- Choose any `piles[i]` and **remove** `floor(piles[i] / 2)` stones from it. + +**Notice** that you can apply the operation on the **same** pile more than once. + +Return the **minimum** possible total number of stones remaining after applying the `k` operations. + +`floor(x)` is the **greatest** integer that is **smaller** than or **equal** to `x` (i.e., rounds `x` down). **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: piles = [5,4,9], k = 2 +Output: 12 +Explanation: Steps of a possible scenario are: +- Apply the operation on pile 2. The resulting piles are [5,4,5]. +- Apply the operation on pile 0. The resulting piles are [3,4,5]. +The total number of stones in [3,4,5] is 12. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Remove Stones to Minimize the Total -```go ``` - +Input: piles = [4,3,6,7], k = 3 +Output: 12 +Explanation: Steps of a possible scenario are: +- Apply the operation on pile 2. The resulting piles are [4,3,3,7]. +- Apply the operation on pile 3. The resulting piles are [4,3,3,4]. +- Apply the operation on pile 0. The resulting piles are [2,3,3,4]. +The total number of stones in [2,3,3,4] is 12. +``` ## 结语 diff --git a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go index d115ccf5e..edf953f35 100644 --- a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go +++ b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution.go @@ -1,5 +1,60 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" +) + +type Piles []int + +func (p *Piles) Len() int { + return len(*p) +} + +func (p *Piles) Less(i, j int) bool { + a := (*p)[i] + b := (*p)[j] + if a&1 == 1 { + a++ + } + if b&1 == 1 { + b++ + } + + return (*p)[i]-a/2 > (*p)[j]-b/2 +} + +func (p *Piles) Swap(i, j int) { + (*p)[i], (*p)[j] = (*p)[j], (*p)[i] +} + +func (p *Piles) Push(x interface{}) { + *p = append(*p, x.(int)) +} + +func (p *Piles) Pop() interface{} { + old := *p + l := len(old) + x := old[l-1] + *p = old[:l-1] return x } + +func Solution(piles []int, k int) int { + sum := 0 + for _, p := range piles { + sum += p + } + h := Piles(piles) + heap.Init(&h) + for ; k > 0 && h.Len() > 0; k-- { + x := heap.Pop(&h).(int) + y := x + if x&1 == 1 { + x-- + } + sum -= x / 2 + heap.Push(&h, y-x/2) + } + + return sum +} diff --git a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go index 14ff50eb4..784fa55fa 100644 --- a/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/Solution_test.go +++ b/leetcode/1901-2000/1962.Remove-Stones-to-Minimize-the-Total/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{5, 4, 9}, 2, 12}, + {"TestCase2", []int{4, 3, 6, 7}, 3, 12}, + {"TestCase3", []int{10, 88, 74, 63, 28, 99, 131, 74, 97, 201, 383, 274}, 6, 865}, } // 开始测试 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 c917412d108a1d5360e8949d82004ea8c6a49f62 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 29 Dec 2022 23:58:12 +0800 Subject: [PATCH 0159/1057] Add solution and test-cases for problem 1834 --- .../1834.Single-Threaded-CPU/README.md | 48 +++++++---- .../1834.Single-Threaded-CPU/Solution.go | 83 ++++++++++++++++++- .../1834.Single-Threaded-CPU/Solution_test.go | 20 +++-- 3 files changed, 129 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md b/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md index fa5b462f9..6235a8fd3 100755 --- a/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md +++ b/leetcode/1801-1900/1834.Single-Threaded-CPU/README.md @@ -1,28 +1,48 @@ # [1834.Single-Threaded CPU][title] -> [!WARNING|style:flat] -> 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` tasks labeled from `0` to `n - 1` represented by a 2D integer array `tasks`, where `tasks[i] = [enqueueTimei, processingTimei]` means that the ith task will be available to process at enqueueTimei and will take processingTimei to finish processing. + +You have a single-threaded CPU that can process **at most one** task at a time and will act in the following way: + +- If the CPU is idle and there are no available tasks to process, the CPU remains idle. +- If the CPU is idle and there are available tasks, the CPU will choose the one with the **shortest processing time**. If multiple tasks have the same shortest processing time, it will choose the task with the smallest index. +- Once a task is started, the CPU will **process the entire task** without stopping. +- The CPU can finish a task then start a new one instantly. + +Return the order in which the CPU will process the tasks. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: tasks = [[1,2],[2,4],[3,2],[4,1]] +Output: [0,2,3,1] +Explanation: The events go as follows: +- At time = 1, task 0 is available to process. Available tasks = {0}. +- Also at time = 1, the idle CPU starts processing task 0. Available tasks = {}. +- At time = 2, task 1 is available to process. Available tasks = {1}. +- At time = 3, task 2 is available to process. Available tasks = {1, 2}. +- Also at time = 3, the CPU finishes task 0 and starts processing task 2 as it is the shortest. Available tasks = {1}. +- At time = 4, task 3 is available to process. Available tasks = {1, 3}. +- At time = 5, the CPU finishes task 2 and starts processing task 3 as it is the shortest. Available tasks = {1}. +- At time = 6, the CPU finishes task 3 and starts processing task 1. Available tasks = {}. +- At time = 10, the CPU finishes task 1 and becomes idle. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Single-Threaded CPU -```go ``` - +Input: tasks = [[7,10],[7,12],[7,5],[7,4],[7,2]] +Output: [4,3,2,0,1] +Explanation: The events go as follows: +- At time = 7, all the tasks become available. Available tasks = {0,1,2,3,4}. +- Also at time = 7, the idle CPU starts processing task 4. Available tasks = {0,1,2,3}. +- At time = 9, the CPU finishes task 4 and starts processing task 3. Available tasks = {0,1,2}. +- At time = 13, the CPU finishes task 3 and starts processing task 2. Available tasks = {0,1}. +- At time = 18, the CPU finishes task 2 and starts processing task 0. Available tasks = {1}. +- At time = 28, the CPU finishes task 0 and starts processing task 1. Available tasks = {}. +- At time = 40, the CPU finishes task 1 and becomes idle. +``` ## 结语 diff --git a/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go index d115ccf5e..a0e6c4605 100644 --- a/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go +++ b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution.go @@ -1,5 +1,86 @@ package Solution -func Solution(x bool) bool { +import ( + "container/heap" + "sort" +) + +/* +这道题开始是这样定义的结构体, 想用Pop后,更新costTime,然后在Fix,后面发现Fix的不太对 + + type task1 struct { + costTime + tasks []task + } +*/ +type task struct { + index int + cost []int +} +type taskHeap []task + +func (t *taskHeap) Len() int { + return len(*t) +} + +func (t *taskHeap) Less(i, j int) bool { + a := (*t)[i] + b := (*t)[j] + if a.cost[1] == b.cost[1] { + return a.index < b.index + } + return a.cost[1] < b.cost[1] +} + +func (t *taskHeap) Swap(i, j int) { + (*t)[i], (*t)[j] = (*t)[j], (*t)[i] +} + +func (t *taskHeap) Push(x interface{}) { + *t = append(*t, x.(task)) +} + +func (t *taskHeap) Pop() interface{} { + old := *t + l := len(old) + x := old[l-1] + *t = old[:l-1] return x } + +func Solution(tasks [][]int) []int { + tl := len(tasks) + ans := make([]int, tl) + taskList := make([]task, tl) + for i := 0; i < len(tasks); i++ { + taskList[i] = task{index: i, cost: tasks[i]} + } + h := taskHeap{} + sort.Slice(taskList, func(i, j int) bool { + return taskList[i].cost[0] < taskList[j].cost[0] + }) + + // wait first task + costTime, done, i := 0, 0, 0 + for done < tl { + if taskList[done].cost[0] > costTime { + costTime = taskList[done].cost[0] + } + for ; done < tl && taskList[done].cost[0] <= costTime; done++ { + heap.Push(&h, taskList[done]) + } + + for h.Len() > 0 && done < tl && costTime < taskList[done].cost[0] { + x := heap.Pop(&h).(task) + ans[i] = x.index + i++ + costTime += x.cost[1] + } + } + for h.Len() > 0 { + x := heap.Pop(&h).(task) + ans[i] = x.index + i++ + } + return ans +} diff --git a/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go index 14ff50eb4..16c0b91d7 100644 --- a/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go +++ b/leetcode/1801-1900/1834.Single-Threaded-CPU/Solution_test.go @@ -10,12 +10,18 @@ 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, 4}, {3, 2}, {4, 1}, + }, []int{0, 2, 3, 1}}, + {"TestCase2", [][]int{ + {7, 10}, {7, 12}, {7, 5}, {7, 4}, {7, 2}, + }, []int{4, 3, 2, 0, 1}}, + {"TestCase3", [][]int{ + {19, 13}, {16, 9}, {21, 10}, {32, 25}, {37, 4}, {49, 24}, {2, 15}, {38, 41}, {37, 34}, {33, 6}, {45, 4}, {18, 18}, {46, 39}, {12, 24}, + }, []int{6, 1, 2, 9, 4, 10, 0, 11, 5, 13, 3, 8, 12, 7}}, } // 开始测试 @@ -30,10 +36,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From e63f0f1358a557c17b9c845c809bddd5cd49f815 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 30 Dec 2022 20:43:16 +0800 Subject: [PATCH 0160/1057] Add solution and test-cases for problem 797 --- .../README.md | 28 +++++++++--------- .../Solution.go | 19 ++++++++++-- .../Solution_test.go | 21 ++++++++----- .../all_1.jpg | Bin 0 -> 10473 bytes .../all_2.jpg | Bin 0 -> 19630 bytes 5 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 leetcode/701-800/0797.All-Paths-From-Source-to-Target/all_1.jpg create mode 100644 leetcode/701-800/0797.All-Paths-From-Source-to-Target/all_2.jpg diff --git a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/README.md b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/README.md index 30e1b41af..ce0619bbb 100644 --- a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/README.md +++ b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/README.md @@ -1,28 +1,28 @@ # [797.All Paths From Source 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 a directed acyclic graph (**DAG**) of `n` nodes labeled from 0 to `n - 1`, find all possible paths from node `0` to node `n - 1` and return them in **any order**. + +The graph is given as follows: `graph[i]` is a list of all nodes you can visit from node `i` (i.e., there is a directed edge from node i to node `graph[i][j]`). + +**Example 1:** -**Example 1:** +![example1](./all_1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: graph = [[1,2],[3],[3],[]] +Output: [[0,1,3],[0,2,3]] +Explanation: There are two paths: 0 -> 1 -> 3 and 0 -> 2 -> 3. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![example2](./all_2.jpg) -### 思路1 -> ... -All Paths From Source to Target -```go ``` - +Input: graph = [[4,3,1],[3,2,4],[3],[4],[]] +Output: [[0,4],[0,3,4],[0,1,3,4],[0,1,2,3,4],[0,1,4]] +``` ## 结语 diff --git a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution.go b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution.go index d115ccf5e..8b7ad9aca 100644 --- a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution.go +++ b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution.go @@ -1,5 +1,20 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(graph [][]int) [][]int { + ans := make([][]int, 0) + var dfs func(int, []int) + dfs = func(node int, path []int) { + if node == len(graph)-1 { + dst := make([]int, len(path)) + copy(dst, path) + ans = append(ans, dst) + return + } + + for _, relNode := range graph[node] { + dfs(relNode, append(path, relNode)) + } + } + dfs(0, []int{0}) + return ans } diff --git a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution_test.go b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution_test.go index 14ff50eb4..a570adb0c 100644 --- a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/Solution_test.go +++ b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/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{ + {1, 2}, {3}, {3}, {}, + }, [][]int{ + {0, 1, 3}, {0, 2, 3}, + }}, + {"TestCase2", [][]int{ + {4, 3, 1}, {3, 2, 4}, {3}, {4}, {}, + }, [][]int{ + {0, 4}, {0, 3, 4}, {0, 1, 3, 4}, {0, 1, 2, 3, 4}, {0, 1, 4}, + }}, } // 开始测试 @@ -30,10 +37,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } diff --git a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/all_1.jpg b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/all_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c01a249da6bd6f5b5118ccafa244b5709ddda60 GIT binary patch literal 10473 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 literal 0 HcmV?d00001 diff --git a/leetcode/701-800/0797.All-Paths-From-Source-to-Target/all_2.jpg b/leetcode/701-800/0797.All-Paths-From-Source-to-Target/all_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d9cabcdaabfc00a3529d1097256f11dd20608089 GIT binary patch literal 19630 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 M$WqXHN&Ejd0Vk9ETmS$7 literal 0 HcmV?d00001 From b77a27b19de74340ef15beea112ab8753cb66f3b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 1 Jan 2023 16:47:06 +0800 Subject: [PATCH 0161/1057] Add solution and test-cases for problem 290 --- leetcode/201-300/0290.Word-Pattern/README.md | 28 ++++++++-------- .../201-300/0290.Word-Pattern/Solution.go | 32 +++++++++++++++++-- .../0290.Word-Pattern/Solution_test.go | 23 ++++++------- 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/leetcode/201-300/0290.Word-Pattern/README.md b/leetcode/201-300/0290.Word-Pattern/README.md index fd79c5836..eb9e60e11 100644 --- a/leetcode/201-300/0290.Word-Pattern/README.md +++ b/leetcode/201-300/0290.Word-Pattern/README.md @@ -1,28 +1,30 @@ # [290.Word 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 `pattern` and a string `s`, find if `s` follows the same pattern. + +Here **follow** means a full match, such that there is a bijection between a letter in `pattern` and a **non-empty** word in `s`. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: pattern = "abba", s = "dog cat cat dog" +Output: true ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Word Pattern -```go +``` +Input: pattern = "abba", s = "dog cat cat fish" +Output: false ``` +**Example 3:** + +``` +Input: pattern = "aaaa", s = "dog cat cat dog" +Output: false +``` ## 结语 diff --git a/leetcode/201-300/0290.Word-Pattern/Solution.go b/leetcode/201-300/0290.Word-Pattern/Solution.go index d115ccf5e..fc2802816 100644 --- a/leetcode/201-300/0290.Word-Pattern/Solution.go +++ b/leetcode/201-300/0290.Word-Pattern/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +import "strings" + +func Solution(pattern string, s string) bool { + words := strings.Split(s, " ") + if len(words) != len(pattern) { + return false + } + b2w := make(map[byte]string) + w2b := make(map[string]byte) + b, w := pattern[0], words[0] + b2w[b] = w + w2b[w] = b + + for i := 1; i < len(pattern); i++ { + if pattern[i] == b { + if words[i] != w { + return false + } + continue + } + b, w = pattern[i], words[i] + v, ok := b2w[pattern[i]] + v1, ok1 := w2b[words[i]] + if (ok && words[i] != v) || (ok1 && pattern[i] != v1) { + return false + } + b2w[b] = w + w2b[w] = b + } + return true } diff --git a/leetcode/201-300/0290.Word-Pattern/Solution_test.go b/leetcode/201-300/0290.Word-Pattern/Solution_test.go index 14ff50eb4..8311d668c 100644 --- a/leetcode/201-300/0290.Word-Pattern/Solution_test.go +++ b/leetcode/201-300/0290.Word-Pattern/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + pattern, s string + expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "abba", "dog cat cat dog", true}, + {"TestCase2", "abba", "dog cat cat fish", false}, + {"TestCase3", "aaaa", "dog cat cat dog", false}, + {"TestCase4", "abba", "dog dog dog dog", false}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.pattern, 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.pattern, c.s) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 686172e2f6fe81fce14c8f9c666ea4dc46954f55 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Jan 2023 11:30:52 +0800 Subject: [PATCH 0162/1057] Add solution and test-cases for problem 520 --- .../501-600/0520.Detect-Capital/README.md | 27 +++++++++---------- .../501-600/0520.Detect-Capital/Solution.go | 27 +++++++++++++++++-- .../0520.Detect-Capital/Solution_test.go | 12 ++++----- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/leetcode/501-600/0520.Detect-Capital/README.md b/leetcode/501-600/0520.Detect-Capital/README.md index 43807cb8b..25f31cba1 100644 --- a/leetcode/501-600/0520.Detect-Capital/README.md +++ b/leetcode/501-600/0520.Detect-Capital/README.md @@ -1,28 +1,27 @@ # [520.Detect Capital][title] -> [!WARNING|style:flat] -> 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 usage of capitals in a word to be right when one of the following cases holds: + +- All letters in this word are capitals, like `"USA"`. +- All letters in this word are not capitals, like `"leetcode"`. +- Only the first letter in this word is capital, like `"Google"`. + +Given a string `word`, return `true` if the usage of capitals in it is right. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: word = "USA" +Output: true ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Detect Capital -```go ``` - +Input: word = "FlaG" +Output: false +``` ## 结语 diff --git a/leetcode/501-600/0520.Detect-Capital/Solution.go b/leetcode/501-600/0520.Detect-Capital/Solution.go index d115ccf5e..3a7333b4d 100644 --- a/leetcode/501-600/0520.Detect-Capital/Solution.go +++ b/leetcode/501-600/0520.Detect-Capital/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(word string) bool { + length := len(word) + if length <= 1 { + return true + } + cap := false + if word[0] >= 65 && word[0] <= 90 { + cap = true + } + + haveCap, haveLow := false, false + for idx := 1; idx < length; idx++ { + if word[idx] >= 65 && word[idx] <= 90 { + haveCap = true + } else { + haveLow = true + } + if haveCap && haveLow { + break + } + } + if cap && !(haveCap && haveLow) { + return true + } + return haveLow && !haveCap } diff --git a/leetcode/501-600/0520.Detect-Capital/Solution_test.go b/leetcode/501-600/0520.Detect-Capital/Solution_test.go index 14ff50eb4..902e2dc37 100644 --- a/leetcode/501-600/0520.Detect-Capital/Solution_test.go +++ b/leetcode/501-600/0520.Detect-Capital/Solution_test.go @@ -10,12 +10,12 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool + inputs string expect bool }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "leetcode", true}, + {"TestCase2", "USA", true}, + {"TestCase3", "FlaG", false}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From ab4118260420d43fb407435b991a370179a55728 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Mon, 2 Jan 2023 23:51:21 +0800 Subject: [PATCH 0163/1057] Add solution for problem 91 --- leetcode/1-100/0091.Decode-Ways/README.md | 53 +++++++++++++++++++ leetcode/1-100/0091.Decode-Ways/Solution.go | 43 +++++++++++++++ .../1-100/0091.Decode-Ways/Solution_test.go | 9 +++- 3 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 leetcode/1-100/0091.Decode-Ways/README.md diff --git a/leetcode/1-100/0091.Decode-Ways/README.md b/leetcode/1-100/0091.Decode-Ways/README.md new file mode 100644 index 000000000..e543a9d80 --- /dev/null +++ b/leetcode/1-100/0091.Decode-Ways/README.md @@ -0,0 +1,53 @@ +# [91.Decode Ways][title] + +## Description +A message containing letters from `A-Z` can be **encoded** into numbers using the following mapping: + +``` +'A' -> "1" +'B' -> "2" +... +'Z' -> "26" +``` + +To **decode** an encoded message, all the digits must be grouped then mapped back into letters using the reverse of the mapping above (there may be multiple ways). For example, `"11106"` can be mapped into: + +- `"AAJF"` with the grouping (`1 1 10 6`) +- `"KJF"` with the grouping (`11 10 6`) + +Note that the grouping (`1 11 06`) is invalid because `"06"` cannot be mapped into `'F'` since `"6"` is different from `"06"`. + +Given a string `s` containing only digits, return the **number** of ways to **decode** it. + +The test cases are generated so that the answer fits in a **32-bit** integer. + +**Example 1:** + +``` +Input: s = "12" +Output: 2 +Explanation: "12" could be decoded as "AB" (1 2) or "L" (12). +``` + +**Example 2:** + +``` +Input: s = "226" +Output: 3 +Explanation: "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6). +``` + +**Example 3:** + +``` +Input: s = "06" +Output: 0 +Explanation: "06" cannot be mapped to "F" because of the leading zero ("6" is different from "06"). +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/decode-ways +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1-100/0091.Decode-Ways/Solution.go b/leetcode/1-100/0091.Decode-Ways/Solution.go index a08163750..776aad451 100644 --- a/leetcode/1-100/0091.Decode-Ways/Solution.go +++ b/leetcode/1-100/0091.Decode-Ways/Solution.go @@ -28,3 +28,46 @@ func numDecodings(s string) int { } return f[n] } + +func numDecodings1(s string) int { + l := len(s) + // 状态只依赖于前一个或者前2个,所以内存可以优化成O(1) + dp := make([]int, l) + if s[0] == '0' { + return 0 + } + dp[0] = 1 + for idx := 1; idx < l; idx++ { + if s[idx] == '0' { + // 0只可以与前面的一个字符组合成10, 20, + if s[idx-1] != '1' && s[idx-1] != '2' { + return 0 + } + // 10 这种情况 + i := idx - 2 + if i < 0 { + i = 0 + } + dp[idx] = dp[i] + continue + } + + dp[idx] = dp[idx-1] + // 108 这种情况就是将8放到最后就可以, + if s[idx-1] == '0' { + continue + } + // 112, 如果要与前一个字符组成1-26, 就需要s[idx-1] =1 或者2 + // s[idx-1] = 1, s[idx]是什么都可以11-19 + // s[idx-1] = 2, s[idx] 只能是21-26. + if (s[idx-1] == '1') || s[idx-1] == '2' && s[idx] >= '1' && s[idx] <= '6' { + i := idx - 2 + if i < 0 { + i = 0 + } + dp[idx] += dp[i] + } + } + + return dp[l-1] +} diff --git a/leetcode/1-100/0091.Decode-Ways/Solution_test.go b/leetcode/1-100/0091.Decode-Ways/Solution_test.go index d0f749409..a09a245ff 100644 --- a/leetcode/1-100/0091.Decode-Ways/Solution_test.go +++ b/leetcode/1-100/0091.Decode-Ways/Solution_test.go @@ -24,14 +24,19 @@ func TestSolution(t *testing.T) { t.Fatalf("expected: %v, but got: %v, with inputs: %v", c.expect, ret, c.inputs) } + ret = numDecodings1(c.inputs) + if !reflect.DeepEqual(ret, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v", + c.expect, ret, c.inputs) + } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From aeefa5e61b02abbf09cf3ff42d000c508c0feece Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 3 Jan 2023 22:03:20 +0800 Subject: [PATCH 0164/1057] Add solution and test-cases for problem 944 --- .../README.md | 52 ++++++++++++++----- .../Solution.go | 17 +++++- .../Solution_test.go | 14 ++--- 3 files changed, 61 insertions(+), 22 deletions(-) diff --git a/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/README.md b/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/README.md index b8ccba5d3..b4eea627b 100644 --- a/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/README.md +++ b/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/README.md @@ -1,28 +1,54 @@ # [944.Delete Columns to Make Sorted][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an array of `n` strings `strs`, all of the same length. -**Example 1:** +The strings can be arranged such that there is one on each line, making a grid. For example, `strs = ["abc", "bce", "cae"]` can be arranged as: ``` -Input: a = "11", b = "1" -Output: "100" +abc +bce +cae ``` -## 题意 -> ... +You want to **delete** the columns that are **not sorted lexicographically**. In the above example (0-indexed), columns 0 (`'a'`, `'b'`, `'c'`) and 2 (`'c'`, `'e'`, `'e'`) are sorted while column 1 (`'b'`, `'c'`, `'a'`) is not, so you would delete column 1. + +Return the number of columns that you will delete. + +**Example 1:** + +``` +Input: strs = ["cba","daf","ghi"] +Output: 1 +Explanation: The grid looks as follows: + cba + daf + ghi +Columns 0 and 2 are sorted, but column 1 is not, so you only need to delete 1 column. +``` -## 题解 +**Example 2:** -### 思路1 -> ... -Delete Columns to Make Sorted -```go +``` +Input: strs = ["a","b"] +Output: 0 +Explanation: The grid looks as follows: + a + b +Column 0 is the only column and is sorted, so you will not delete any columns. ``` +**Example 3:** + +``` +Input: strs = ["zyx","wvu","tsr"] +Output: 3 +Explanation: The grid looks as follows: + zyx + wvu + tsr +All 3 columns are not sorted, so you will delete all 3. +``` ## 结语 diff --git a/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution.go b/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution.go index d115ccf5e..418424fec 100644 --- a/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution.go +++ b/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(strs []string) int { + ans := 0 + rows := len(strs) + cols := len(strs[0]) + for col := 0; col < cols; col++ { + c := strs[0][col] + for row := 1; row < rows; row++ { + if strs[row][col] < c { + ans++ + break + } + c = strs[row][col] + } + } + return ans } diff --git a/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution_test.go b/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution_test.go index 14ff50eb4..5b56b8834 100644 --- a/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/Solution_test.go +++ b/leetcode/901-1000/0944.Delete-Columns-to-Make-Sorted/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{"cba", "daf", "ghi"}, 1}, + {"TestCase2", []string{"a", "b"}, 0}, + {"TestCase3", []string{"zyx", "wvu", "tsr"}, 3}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 722a082265aa2126bd43a44166775207404858f8 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Wed, 4 Jan 2023 22:09:25 +0800 Subject: [PATCH 0165/1057] Add solution and test-cases for problem 2244 --- .../README.md | 30 ++++++++++--------- .../Solution.go | 27 +++++++++++++++-- .../Solution_test.go | 15 +++++----- 3 files changed, 49 insertions(+), 23 deletions(-) diff --git a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md index 347c0b479..35459e793 100755 --- a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md +++ b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/README.md @@ -1,28 +1,30 @@ # [2244.Minimum Rounds to Complete All Tasks][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given a **0-indexed** integer array `tasks`, where `tasks[i]` represents the difficulty level of a task. In each round, you can complete either 2 or 3 tasks of the **same difficulty** level. + +Return the **minimum** rounds required to complete all the tasks, or -1 if it is not possible to complete all the tasks. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: tasks = [2,2,3,3,2,4,4,4,4,4] +Output: 4 +Explanation: To complete all the tasks, a possible plan is: +- In the first round, you complete 3 tasks of difficulty level 2. +- In the second round, you complete 2 tasks of difficulty level 3. +- In the third round, you complete 3 tasks of difficulty level 4. +- In the fourth round, you complete 2 tasks of difficulty level 4. +It can be shown that all the tasks cannot be completed in fewer than 4 rounds, so the answer is 4. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Minimum Rounds to Complete All Tasks -```go ``` - +Input: tasks = [2,3,3] +Output: -1 +Explanation: There is only 1 task of difficulty level 2, but in each round, you can only complete either 2 or 3 tasks of the same difficulty level. Hence, you cannot complete all the tasks, and the answer is -1. +``` ## 结语 diff --git a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go index d115ccf5e..636aa3489 100644 --- a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go +++ b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution.go @@ -1,5 +1,28 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(tasks []int) int { + taskLevel := make(map[int]int) + for _, t := range tasks { + taskLevel[t]++ + } + rounds := 0 + + for _, count := range taskLevel { + if count == 1 { + return -1 + } + cond := count % 3 + if cond == 0 { + rounds += count / 3 + continue + } + // 4(2+2), 7(3+2+2), 10(3+3+2+2), 13(3+3+3+2+2) + if cond == 1 { + rounds += (count-4)/3 + 2 + continue + } + // 5(3+2), 8(3+3+2), 11(3+3+3+2) + rounds += count/3 + 1 + } + return rounds } diff --git a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go index 14ff50eb4..9fce9f0f4 100644 --- a/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go +++ b/leetcode/2201-2300/2244.Minimum-Rounds-to-Complete-All-Tasks/Solution_test.go @@ -10,12 +10,13 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{2, 2, 3, 3, 2, 4, 4, 4, 4, 4}, 4}, + {"TestCase2", []int{2, 3, 3}, -1}, + {"TestCase3", []int{1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7}, 12}, + {"TestCase4", []int{119, 115, 115, 119, 118, 113, 118, 120, 110, 113, 119, 115, 116, 118, 120, 117, 116, 111, 113, 119, 115, 113, 115, 111, 112, 119, 111, 111, 110, 112, 113, 120, 110, 111, 112, 111, 119, 112, 113, 112, 115, 116, 113, 114, 118, 119, 115, 114, 114, 112, 110, 117, 120, 110, 117, 116, 120, 118, 110, 120, 119, 113, 119, 120, 113, 110, 120, 114, 119, 115, 119, 117, 120, 116, 113, 113, 110, 118, 117, 116, 114, 114, 111, 116, 119, 112, 113, 116, 112, 116, 119, 112, 114, 114, 112, 118, 116, 113, 117, 116}, 38}, } // 开始测试 @@ -30,10 +31,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c4f82b036453305ca96c752ceb6c77fd2fc6ed2a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 6 Jan 2023 20:32:45 +0800 Subject: [PATCH 0166/1057] Add solution and test-cases for problem 1833 --- .../1833.Maximum-Ice-Cream-Bars/README.md | 35 ++++++++++++------- .../1833.Maximum-Ice-Cream-Bars/Solution.go | 17 +++++++-- .../Solution_test.go | 21 +++++------ 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md index dc244df9c..8d313ee94 100755 --- a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md +++ b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/README.md @@ -1,28 +1,37 @@ # [1833.Maximum Ice Cream Bars][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +It is a sweltering summer day, and a boy wants to buy some ice cream bars. + +At the store, there are `n` ice cream bars. You are given an array `costs` of length n, where `costs[i]` is the price of the ith ice cream bar in coins. The boy initially has coins coins to spend, and he wants to buy as many ice cream bars as possible. + +Return the **maximum** number of ice cream bars the boy can buy with `coins` coins. + +**Note**: The boy can buy the ice cream bars in any order. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: costs = [1,3,2,4,1], coins = 7 +Output: 4 +Explanation: The boy can buy ice cream bars at indices 0,1,2,4 for a total price of 1 + 3 + 2 + 1 = 7. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Maximum Ice Cream Bars -```go ``` +Input: costs = [10,6,8,7,7,8], coins = 5 +Output: 0 +Explanation: The boy cannot afford any of the ice cream bars. +``` + +**Example 3:** +``` +Input: costs = [1,6,3,1,2,5], coins = 20 +Output: 6 +Explanation: The boy can buy all the ice cream bars for a total price of 1 + 6 + 3 + 1 + 2 + 5 = 18. +``` ## 结语 diff --git a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go index d115ccf5e..91d2bf6f0 100644 --- a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go +++ b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution.go @@ -1,5 +1,18 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +// heap, sort +func Solution(costs []int, coins int) int { + ans := 0 + sum := 0 + sort.Ints(costs) + for i := 0; i < len(costs); i++ { + sum += costs[i] + if sum > coins { + break + } + ans++ + } + return ans } diff --git a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go index 14ff50eb4..19344309e 100644 --- a/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go +++ b/leetcode/1801-1900/1833.Maximum-Ice-Cream-Bars/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs []int + coins int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase", []int{1, 3, 2, 4, 1}, 7, 4}, + {"TestCase", []int{10, 6, 8, 7, 7, 8}, 5, 0}, + {"TestCase", []int{1, 6, 3, 1, 2, 5}, 20, 6}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.coins) 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.coins) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From c981a56e6577e3e635f0970398f34468d512c60c Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sat, 7 Jan 2023 13:09:07 +0800 Subject: [PATCH 0167/1057] Add solution and test-cases for problem 134 --- leetcode/101-200/0134.Gas-Station/README.md | 44 +++++++++++++++++++ leetcode/101-200/0134.Gas-Station/Solution.go | 18 +++++++- .../101-200/0134.Gas-Station/Solution_test.go | 21 +++++---- 3 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 leetcode/101-200/0134.Gas-Station/README.md diff --git a/leetcode/101-200/0134.Gas-Station/README.md b/leetcode/101-200/0134.Gas-Station/README.md new file mode 100644 index 000000000..b1fe6410f --- /dev/null +++ b/leetcode/101-200/0134.Gas-Station/README.md @@ -0,0 +1,44 @@ +# [134. Gas Station][title] + +## Description +There are `n` gas stations along a circular route, where the amount of gas at the ith station is `gas[i]`. + +You have a car with an unlimited gas tank and it costs `cost[i]` of gas to travel from the ith station to its next (i + 1)th station. You begin the journey with an empty tank at one of the gas stations. + +Given two integer arrays `gas` and `cost`, return the starting gas station's index if you can travel around the circuit once in the clockwise direction, otherwise return `-1`. If there exists a solution, it is **guaranteed** to be **unique** + +**Example 1:** + +``` +Input: gas = [1,2,3,4,5], cost = [3,4,5,1,2] +Output: 3 +Explanation: +Start at station 3 (index 3) and fill up with 4 unit of gas. Your tank = 0 + 4 = 4 +Travel to station 4. Your tank = 4 - 1 + 5 = 8 +Travel to station 0. Your tank = 8 - 2 + 1 = 7 +Travel to station 1. Your tank = 7 - 3 + 2 = 6 +Travel to station 2. Your tank = 6 - 4 + 3 = 5 +Travel to station 3. The cost is 5. Your gas is just enough to travel back to station 3. +Therefore, return 3 as the starting index. +``` + +**Example 2:** + +``` +Input: gas = [2,3,4], cost = [3,4,3] +Output: -1 +Explanation: +You can't start at station 0 or 1, as there is not enough gas to travel to the next station. +Let's start at station 2 and fill up with 4 unit of gas. Your tank = 0 + 4 = 4 +Travel to station 0. Your tank = 4 - 3 + 2 = 3 +Travel to station 1. Your tank = 3 - 3 + 3 = 3 +You cannot travel back to station 2, as it requires 4 unit of gas but you only have 3. +Therefore, you can't travel around the circuit once no matter where you start. +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/gas-station/ +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/101-200/0134.Gas-Station/Solution.go b/leetcode/101-200/0134.Gas-Station/Solution.go index d115ccf5e..3502f5c2d 100644 --- a/leetcode/101-200/0134.Gas-Station/Solution.go +++ b/leetcode/101-200/0134.Gas-Station/Solution.go @@ -1,5 +1,19 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(gas []int, cost []int) int { + l := len(gas) + tank, total, target := 0, 0, 0 + for i := 0; i < l; i++ { + tank += gas[i] - cost[i] + if tank < 0 { + target = i + 1 + total += tank + tank = 0 + } + } + + if tank+total < 0 { + return -1 + } + return target } diff --git a/leetcode/101-200/0134.Gas-Station/Solution_test.go b/leetcode/101-200/0134.Gas-Station/Solution_test.go index 14ff50eb4..0cfcf7a74 100644 --- a/leetcode/101-200/0134.Gas-Station/Solution_test.go +++ b/leetcode/101-200/0134.Gas-Station/Solution_test.go @@ -9,31 +9,30 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + gas, cost []int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 2, 3, 4, 5}, []int{3, 4, 5, 1, 2}, 3}, + {"TestCase2", []int{2, 3, 4}, []int{3, 4, 3}, -1}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.gas, c.cost) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.gas, c.cost) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From cecb86041192d160a6472645cabefd892a222b3b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Jan 2023 11:33:55 +0800 Subject: [PATCH 0168/1057] Add solution and test-cases for problem 1248 --- .../README.md | 30 +++++++++------- .../Solution.go | 36 +++++++++++++++++-- .../Solution_test.go | 24 +++++++------ 3 files changed, 65 insertions(+), 25 deletions(-) diff --git a/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/README.md b/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/README.md index 8b17372df..41d8e65da 100644 --- a/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/README.md +++ b/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/README.md @@ -1,28 +1,32 @@ # [1248.Count Number of Nice 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 array of integers `nums` and an integer `k`. A continuous subarray is called **nice** if there are `k` odd numbers on it. + +Return the number of **nice** sub-arrays. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,1,2,1,1], k = 3 +Output: 2 +Explanation: The only sub-arrays with 3 odd numbers are [1,1,2,1] and [1,2,1,1]. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Count Number of Nice Subarrays -```go +``` +Input: nums = [2,4,6], k = 1 +Output: 0 +Explanation: There is no odd numbers in the array. ``` +**Example 3:** + +``` +Input: nums = [2,2,2,1,2,2,1,2,2,2], k = 2 +Output: 16 +``` ## 结语 diff --git a/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution.go b/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution.go index d115ccf5e..f42fd2679 100644 --- a/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution.go +++ b/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution.go @@ -1,5 +1,37 @@ package Solution -func Solution(x bool) bool { - return x +type tmp1248 struct { + left, right int +} + +func Solution(nums []int, k int) int { + ans := 0 + l := len(nums) + indies := make([]tmp1248, 0) + even := 0 + + for i := 0; i < l; i++ { + if nums[i]&1 == 0 { + even++ + continue + } + // left can start with itself so, left = even+1 + indies = append(indies, tmp1248{left: even + 1}) + li := len(indies) + if li > 1 { + indies[li-2].right = even + } + even = 0 + } + if len(indies) == 0 || k > len(indies) { + return 0 + } + li := len(indies) + indies[li-1].right = even + + start := 0 + for ; start <= len(indies)-k; start++ { + ans += indies[start].left * (indies[start+k-1].right + 1) + } + return ans } diff --git a/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution_test.go b/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution_test.go index 14ff50eb4..3631cef5e 100644 --- a/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution_test.go +++ b/leetcode/1201-1300/1248.Count-Number-of-Nice-Subarrays/Solution_test.go @@ -10,30 +10,34 @@ 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, 1, 2, 1, 1}, 3, 2}, + {"TestCase2", []int{2, 4, 6}, 1, 0}, + {"TestCase3", []int{2, 2, 2, 1, 2, 2, 1, 2, 2, 2}, 2, 16}, + {"TestCase4", []int{91473, 45388, 24720, 35841, 29648, 77363, 86290, 58032, 53752, 87188, 34428, 85343, 19801, 73201}, 4, 6}, + {"TestCase5", []int{2, 2, 2, 1, 2, 2, 1, 2, 2, 2}, 1, 24}, + {"TestCase6", []int{2, 1, 1}, 1, 3}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From bd0edcf697b9fbb7f28b40c4d96d821d7fc7fa13 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Jan 2023 17:59:04 +0800 Subject: [PATCH 0169/1057] Add solution and test-cases for problem 2104 --- .../2104.Sum-of-Subarray-Ranges/README.md | 47 ++++++++++++++----- .../2104.Sum-of-Subarray-Ranges/Solution.go | 35 +++++++++++++- .../Solution_test.go | 14 +++--- 3 files changed, 74 insertions(+), 22 deletions(-) diff --git a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md index 274c485d3..0bb2293c5 100755 --- a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md +++ b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/README.md @@ -1,28 +1,49 @@ # [2104.Sum of Subarray Ranges][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are given an integer array `nums`. The **range** of a subarray of `nums` is the difference between the largest and smallest element in the subarray. + +Return the **sum of all** subarray ranges of `nums`. + +A subarray is a contiguous **non-empty** sequence of elements within an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3] +Output: 4 +Explanation: The 6 subarrays of nums are the following: +[1], range = largest - smallest = 1 - 1 = 0 +[2], range = 2 - 2 = 0 +[3], range = 3 - 3 = 0 +[1,2], range = 2 - 1 = 1 +[2,3], range = 3 - 2 = 1 +[1,2,3], range = 3 - 1 = 2 +So the sum of all ranges is 0 + 0 + 0 + 1 + 1 + 2 = 4. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sum of Subarray Ranges -```go ``` +Input: nums = [1,3,3] +Output: 4 +Explanation: The 6 subarrays of nums are the following: +[1], range = largest - smallest = 1 - 1 = 0 +[3], range = 3 - 3 = 0 +[3], range = 3 - 3 = 0 +[1,3], range = 3 - 1 = 2 +[3,3], range = 3 - 3 = 0 +[1,3,3], range = 3 - 1 = 2 +So the sum of all ranges is 0 + 0 + 0 + 2 + 0 + 2 = 4. +``` + +**Example 3:** +``` +Input: nums = [4,-2,-3,4,1] +Output: 59 +Explanation: The sum of all subarray ranges of nums is 59. +``` ## 结语 diff --git a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go index d115ccf5e..67864e58b 100644 --- a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go +++ b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +// 看解析可以用单调栈完成 +func Solution(nums []int) int64 { + length := len(nums) + max, min := make([]int, length), make([]int, length) + max[0], min[0] = nums[0], nums[0] + for i := 1; i < length; i++ { + max[i] = nums[i-1] + min[i] = nums[i-1] + if nums[i] > max[i] { + max[i] = nums[i] + } + if nums[i] < min[i] { + min[i] = nums[i] + } + } + + ans := int64(0) + for l := 2; l <= length; l++ { + m, n := max[l-1], min[l-1] + ans += int64(m - n) + // start + for i := 1; i <= length-l; i++ { + newItem := nums[i+l-1] + if newItem > m { + m = newItem + } + if newItem < n { + n = newItem + } + ans += int64(m - n) + } + } + return ans } diff --git a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go index 14ff50eb4..f5b0030be 100644 --- a/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/Solution_test.go +++ b/leetcode/2101-2200/2104.Sum-of-Subarray-Ranges/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{1, 2, 3}, 4}, + {"TestCase2", []int{1, 3, 3}, 4}, + {"TestCase3", []int{4, -2, -3, 4, 1}, 59}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 86d52d746c2ec1efdad7cec4488d5d3c1b6a0579 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 8 Jan 2023 23:15:30 +0800 Subject: [PATCH 0170/1057] Add solution and test-cases for problem 907 --- .../0907.Sum-of-Subarray-Minimums/README.md | 25 +++++------ .../0907.Sum-of-Subarray-Minimums/Solution.go | 41 ++++++++++++++++++- .../Solution_test.go | 14 +++---- 3 files changed, 57 insertions(+), 23 deletions(-) diff --git a/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/README.md b/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/README.md index 088329818..3b04203e6 100644 --- a/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/README.md +++ b/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/README.md @@ -1,28 +1,25 @@ # [907.Sum of Subarray Minimums][title] -> [!WARNING|style:flat] -> 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, find the sum of `min(b)`, where `b` ranges over every (contiguous) subarray of `arr`. Since the answer may be large, return the answer **modulo** 109 + 7. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: arr = [3,1,2,4] +Output: 17 +Explanation: +Subarrays are [3], [1], [2], [4], [3,1], [1,2], [2,4], [3,1,2], [1,2,4], [3,1,2,4]. +Minimums are 3, 1, 2, 4, 1, 1, 2, 1, 1, 1. +Sum is 17. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Sum of Subarray Minimums -```go ``` - +Input: arr = [11,81,94,43,3] +Output: 444 +``` ## 结语 diff --git a/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution.go b/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution.go index d115ccf5e..791c649cd 100644 --- a/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution.go +++ b/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +const mod907 = 1000000007 + +func Solution(arr []int) int { + l := len(arr) + nextSmaller := make([]int, l) + prevSmaller := make([]int, l) + + stack := make([]int, l) + for i := 0; i < l; i++ { + nextSmaller[i] = l + prevSmaller[i] = -1 + } + startIdx := -1 + for i := 0; i < l; i++ { + for startIdx >= 0 && arr[stack[startIdx]] > arr[i] { + nextSmaller[stack[startIdx]] = i + startIdx-- + } + startIdx++ + stack[startIdx] = i + } + startIdx = -1 + for i := l - 1; i >= 0; i-- { + for startIdx >= 0 && arr[stack[startIdx]] >= arr[i] { + prevSmaller[stack[startIdx]] = i + startIdx-- + } + startIdx++ + stack[startIdx] = i + } + + ans := 0 + for i := 0; i < l; i++ { + right := nextSmaller[i] - i + left := i - prevSmaller[i] - 1 + tmp := right + left*right + ans += tmp * arr[i] + } + return ans % mod907 } diff --git a/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution_test.go b/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution_test.go index 14ff50eb4..7732c2519 100644 --- a/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/Solution_test.go +++ b/leetcode/901-1000/0907.Sum-of-Subarray-Minimums/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, 4, 5, 2, 6, 1}, 50}, + {"TestCase2", []int{3, 1, 2, 4}, 17}, + {"TestCase3", []int{11, 81, 94, 43, 3}, 444}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a182bae261ab92b5f70738d3f76a5b30d3bde4dd Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 10 Jan 2023 00:39:05 +0800 Subject: [PATCH 0171/1057] Add solution and test-cases for problem 1856 --- .../README.md | 40 ++++++++----- .../Solution.go | 58 ++++++++++++++++++- .../Solution_test.go | 14 ++--- 3 files changed, 90 insertions(+), 22 deletions(-) diff --git a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md index 10c44683a..746e721e9 100755 --- a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md +++ b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/README.md @@ -1,28 +1,42 @@ # [1856.Maximum Subarray Min-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 +The **min-product** of an array is equal to the **minimum value** in the array **multiplied by** the array's **sum**. + +- For example, the array `[3,2,5]` (minimum value is `2`) has a min-product of `2 * (3+2+5) = 2 * 10 = 20`. + +Given an array of integers `nums`, return the **maximum min-product** of any **non-empty subarray** of `nums`. Since the answer may be large, return it **modulo** 109 + 7. + +Note that the min-product should be maximized **before** performing the modulo operation. Testcases are generated such that the maximum min-product **without** modulo will fit in a **64-bit signed integer**. + +A **subarray** is a **contiguous** part of an array. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,2,3,2] +Output: 14 +Explanation: The maximum min-product is achieved with the subarray [2,3,2] (minimum value is 2). +2 * (2+3+2) = 2 * 7 = 14. ``` -## 题意 -> ... +**Example 2:** -## 题解 - -### 思路1 -> ... -Maximum Subarray Min-Product -```go ``` +Input: nums = [2,3,3,1,2] +Output: 18 +Explanation: The maximum min-product is achieved with the subarray [3,3] (minimum value is 3). +3 * (3+3) = 3 * 6 = 18. +``` + +**Example 3:** +``` +Input: nums = [3,1,5,6,4,2] +Output: 60 +Explanation: The maximum min-product is achieved with the subarray [5,6,4] (minimum value is 4). +4 * (5+6+4) = 4 * 15 = 60. +``` ## 结语 diff --git a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go index d115ccf5e..f285f4be8 100644 --- a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go +++ b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +const mod1856 = 1000000007 + +func Solution(nums []int) int { + l := len(nums) + sum := make([]int64, l) + sum[0] = int64(nums[0]) + for i := 1; i < l; i++ { + sum[i] = int64(nums[i]) + sum[i-1] + } + + nextSmaller := make([]int, l) + prevSmaleer := make([]int, l) + stack := make([]int, l) + + for i := 0; i < l; i++ { + nextSmaller[i] = l + prevSmaleer[i] = -1 + } + + stackIdx := -1 + for i := 0; i < l; i++ { + for stackIdx >= 0 && nums[stack[stackIdx]] > nums[i] { + nextSmaller[stack[stackIdx]] = i + stackIdx-- + } + stackIdx++ + stack[stackIdx] = i + } + + stackIdx = -1 + for i := l - 1; i >= 0; i-- { + for stackIdx >= 0 && nums[stack[stackIdx]] >= nums[i] { + prevSmaleer[stack[stackIdx]] = i + stackIdx-- + } + stackIdx++ + stack[stackIdx] = i + } + + n := int64(0) + for i := 0; i < l; i++ { + right := nextSmaller[i] - 1 // lastidx + left := prevSmaleer[i] // + s := sum[right] + if left != -1 { + s -= sum[left] + } + + tmp := int64(nums[i]) * s + + if n == -1 || n < tmp { + n = tmp + } + } + + return int(n % mod1856) } diff --git a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution_test.go b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution_test.go index 14ff50eb4..9fe960f1f 100644 --- a/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/Solution_test.go +++ b/leetcode/1801-1900/1856.Maximum-Subarray-Min-Product/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, 3, 3, 1, 2}, 18}, + {"TestCase2", []int{3, 1, 5, 6, 4, 2}, 60}, + {"TestCase3", []int{2, 5, 4, 2, 4, 5, 3, 1, 2}, 50}, } // 开始测试 @@ -30,10 +30,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From 90139d553ecbb759b7539606c6cca314e409c55a Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Tue, 10 Jan 2023 23:00:18 +0800 Subject: [PATCH 0172/1057] Add solution and test-cases for problem 201 --- .../README.md | 26 +++++++------- .../Solution.go | 35 +++++++++++++++++-- .../Solution_test.go | 22 ++++++------ 3 files changed, 57 insertions(+), 26 deletions(-) diff --git a/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/README.md b/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/README.md index 76a1fafe9..25851fc1e 100644 --- a/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/README.md +++ b/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/README.md @@ -1,28 +1,28 @@ # [201.Bitwise AND of Numbers Range][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +Given two integers `left` and `right` that represent the range `[left, right]`, return the bitwise AND of all numbers in this range, inclusive. **Example 1:** ``` -Input: a = "11", b = "1" -Output: "100" +Input: left = 5, right = 7 +Output: 4 ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Bitwise AND of Numbers Range -```go +``` +Input: left = 0, right = 0 +Output: 0 ``` +**Example 3:** + +``` +Input: left = 1, right = 2147483647 +Output: 0 +``` ## 结语 diff --git a/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution.go b/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution.go index d115ccf5e..5b4e1656e 100644 --- a/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution.go +++ b/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution.go @@ -1,5 +1,36 @@ package Solution -func Solution(x bool) bool { - return x +func whichBase(n int) int { + for { + x := n & (n - 1) + if x == 0 { + break + } + n = x + } + return n +} + +func Solution(left int, right int) int { + // 只有在同一个范围的数字才不会出现0 + // 1, 2, 3, 4, 5, 6, 7, 8, 9 + // 0 1, 1, 2, 2, 2, 2, 3, 3 + + l := whichBase(left) + r := whichBase(right) + if l == r { + s := left + for next := left + 1; next <= right; next++ { + s &= next + } + return s + } + return 0 +} + +func Solution2(left, right int) int { + for right > left { + right = right & (right - 1) + } + return left & right } diff --git a/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution_test.go b/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution_test.go index 14ff50eb4..383b1ac49 100644 --- a/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution_test.go +++ b/leetcode/201-300/0201.Bitwise-AND-of-Numbers-Range/Solution_test.go @@ -9,31 +9,31 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + left, right int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, 7, 4}, + {"TestCase2", 0, 0, 0}, + {"TestCase3", 1, 2147483647, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.left, c.right) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.left, c.right) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { } From a2d41b4290ddfa76dab713528e7ec6fefcaf96a0 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 12 Jan 2023 00:45:34 +0800 Subject: [PATCH 0173/1057] Add solution and test-cases for problem 1443 --- .../README.md | 41 ++++++++++++ .../Solution.go | 63 ++++++++++++++++++ .../Solution_test.go | 47 +++++++++++++ .../min_time_collect_apple_1.png | Bin 0 -> 20885 bytes .../min_time_collect_apple_2.png | Bin 0 -> 19409 bytes 5 files changed, 151 insertions(+) create mode 100644 leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/README.md create mode 100644 leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution.go create mode 100644 leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution_test.go create mode 100644 leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/min_time_collect_apple_1.png create mode 100644 leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/min_time_collect_apple_2.png diff --git a/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/README.md b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/README.md new file mode 100644 index 000000000..fc9abd309 --- /dev/null +++ b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/README.md @@ -0,0 +1,41 @@ +# [1443. Minimum Time to Collect All Apples in a Tree][title] + + +## Description +Given an undirected tree consisting of `n` vertices numbered from `0` to `n-1`, which has some apples in their vertices. You spend 1 second to walk over one edge of the tree. Return the minimum time in seconds you have to spend to collect all apples in the tree, starting at **vertex 0** and coming back to this vertex. + +The edges of the undirected tree are given in the array `edges`, where `edges[i] = [ai, bi]` means that exists an edge connecting the vertices ai and bi. Additionally, there is a boolean array `hasApple`, where `hasApple[i] = true` means that vertex `i` has an apple; otherwise, it does not have any apple. + +**Example 1:** + +![example1](./min_time_collect_apple_1.png) + +``` +Input: n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], hasApple = [false,false,true,false,true,true,false] +Output: 8 +Explanation: The figure above represents the given tree where red vertices have an apple. One optimal path to collect all apples is shown by the green arrows. +``` + +**Example 2:** + +![example2](./min_time_collect_apple_2.png) + +``` +Input: n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], hasApple = [false,false,true,false,false,true,false] +Output: 6 +Explanation: The figure above represents the given tree where red vertices have an apple. One optimal path to collect all apples is shown by the green arrows. +``` + +**Example 3:** + +``` +Input: n = 7, edges = [[0,1],[0,2],[1,4],[1,5],[2,3],[2,6]], hasApple = [false,false,false,false,false,false,false] +Output: 0 +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/minimum-time-to-collect-all-apples-in-a-tree +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution.go b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution.go new file mode 100644 index 000000000..a19707308 --- /dev/null +++ b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution.go @@ -0,0 +1,63 @@ +package Solution + +func Solution(n int, edges [][]int, hasApple []bool) int { + graph := make(map[int][]int) + + for _, e := range edges { + if _, ok := graph[e[0]]; !ok { + graph[e[0]] = make([]int, 0) + } + if _, ok := graph[e[1]]; !ok { + graph[e[1]] = make([]int, 0) + } + graph[e[0]] = append(graph[e[0]], e[1]) + graph[e[1]] = append(graph[e[1]], e[0]) + } + + var dfs func(int, int) int + /* + dfs = func(start, path int) { + rels, ok := graph[start] + if !ok { + return + } + apples := 0 + for _, rel := range rels { + if visited[rel] { + continue + } + next := path + 1 + visited[rel] = true + if hasApple[rel] { + apples++ + if apples == 1 { + totalEdges += path + } else { + totalEdges += 1 + } + next = 1 + } + dfs(rel, next) + visited[rel] = false + } + } + */ + dfs = func(start, partent int) int { + rels, ok := graph[start] + if !ok { + return 0 + } + total := 0 + for _, rel := range rels { + if rel == partent { + continue + } + cost := dfs(rel, start) + if cost > 0 || hasApple[rel] { + total += cost + 2 + } + } + return total + } + return dfs(0, -1) +} diff --git a/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution_test.go b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution_test.go new file mode 100644 index 000000000..e6b0d80fe --- /dev/null +++ b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/Solution_test.go @@ -0,0 +1,47 @@ +package Solution + +import ( + "reflect" + "strconv" + "testing" +) + +func TestSolution(t *testing.T) { + // 测试用例 + cases := []struct { + name string + n int + edges [][]int + hasApples []bool + expect int + }{ + {"TestCase", 7, [][]int{ + {0, 1}, {0, 2}, {1, 4}, {1, 5}, {2, 3}, {2, 6}, + }, []bool{false, false, true, false, false, true, false}, 6}, + {"TestCase", 7, [][]int{ + {0, 1}, {0, 2}, {1, 4}, {1, 5}, {2, 3}, {2, 6}, + }, []bool{false, false, true, false, true, true, false}, 8}, + {"TestCase", 1, [][]int{}, []bool{true}, 0}, + {"TestCase", 4, [][]int{{0, 1}, {1, 2}, {0, 3}}, []bool{true, true, true, true}, 6}, + {"TestCase", 4, [][]int{{0, 2}, {0, 3}, {1, 2}}, []bool{false, true, false, false}, 4}, + } + + // 开始测试 + for i, c := range cases { + t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { + got := Solution(c.n, c.edges, c.hasApples) + if !reflect.DeepEqual(got, c.expect) { + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.edges, c.hasApples) + } + }) + } +} + +// 压力测试 +func BenchmarkSolution(b *testing.B) { +} + +// 使用案列 +func ExampleSolution() { +} diff --git a/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/min_time_collect_apple_1.png b/leetcode/1401-1500/1443.MinimumTime-to-Collect-All-Apples-in-a-Tree/min_time_collect_apple_1.png new file mode 100644 index 0000000000000000000000000000000000000000..479423b2309a08cb9af99ad6e7693e9e93fb3b62 GIT binary patch literal 20885 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