From 0e6bd915d1bdce53fe7c1da4e2d588cd8f3cc726 Mon Sep 17 00:00:00 2001 From: kimi0230 Date: Thu, 28 Mar 2024 14:15:11 +0000 Subject: [PATCH] Updated By Github Actions With Build 251 of Build my gitbook and deploy to gh-pages For Github Pages --- .github/workflows/build.yml | 54 + .github/workflows/releace.yml | 75 + .gitignore | 3 + .gitmodules | 0 .vscode/launch.json | 15 + .vscode/settings.json | 3 + Algorithms/A1B2C3/a1b2c3.go | 80 + Algorithms/A1B2C3/a1b2c3_test.go | 48 + Algorithms/A1B2C3/index.html | 3923 ++++++++++++ .../findtargetlastindex.go | 50 + .../findtargetlastindex.html | 3998 ++++++++++++ .../findtargetlastindex_test.go | 98 + .../index.html | 3934 ++++++++++++ .../intersection.go | 19 + .../intersection_test.go | 26 + Algorithms/SearchGraph/index.html | 4010 ++++++++++++ Algorithms/SearchGraph/main.go | 87 + Algorithms/SearchGraph/main_test.go | 29 + Algorithms/WeightedEditDistance/index.html | 3953 ++++++++++++ Algorithms/WeightedEditDistance/main.go | 55 + Algorithms/WeightedEditDistance/main_test.go | 43 + CHANGELOG.html | 3898 +++++++++++ CodeSignal/Arcade/01.Intro/01.Add/main.go | 5 + .../Arcade/01.Intro/01.Add/main_test.go | 33 + .../Arcade/01.Intro/02centuryFromYear/main.go | 10 + .../01.Intro/02centuryFromYear/main_test.go | 33 + .../01.Intro/03.checkPalindrome/main.go | 18 + .../01.Intro/03.checkPalindrome/main_test.go | 33 + .../04.adjacentElementsProduct/main.go | 12 + .../04.adjacentElementsProduct/main_test.go | 29 + .../Arcade/01.Intro/05.shapeArea/main.go | 5 + .../Arcade/01.Intro/05.shapeArea/main_test.go | 33 + .../06.Make-Array-Consecutive-2/main.go | 27 + .../06.Make-Array-Consecutive-2/main_test.go | 33 + .../07.almostIncreasingSequence/main.go | 22 + .../07.almostIncreasingSequence/main_test.go | 40 + .../01.Intro/08.matrixElementsSum/main.go | 15 + .../08.matrixElementsSum/main_test.go | 53 + CodeSignal/Bank-Requests/bankrequests.go | 183 + CodeSignal/Bank-Requests/bankrequests_test.go | 58 + CodeSignal/Bank-Requests/index.html | 4177 ++++++++++++ CodeSignal/index.html | 3899 ++++++++++++ .../0001.Iterations/Binary-Gap/Binary-Gap.go | 38 + .../Binary-Gap/Binary-Gap_test.go | 41 + .../0001.Iterations/Binary-Gap/index.html | 3948 ++++++++++++ .../CyclicRotation/CyclicRotation.go | 20 + .../CyclicRotation/CyclicRotation_test.go | 60 + .../0002.Array/CyclicRotation/index.html | 3936 ++++++++++++ .../OddOccurrencesInArray.go | 25 + .../OddOccurrencesInArray_test.go | 51 + .../OddOccurrencesInArray/index.html | 3953 ++++++++++++ .../0003.Time-Complexity/FrogJmp/FrogJmp.go | 13 + .../FrogJmp/FrogJmp_test.go | 28 + .../0003.Time-Complexity/FrogJmp/index.html | 3931 ++++++++++++ .../PermMissingElem/PermMissingElem.go | 16 + .../PermMissingElem/PermMissingElem_test.go | 21 + .../PermMissingElem/index.html | 3939 ++++++++++++ .../TapeEquilibrium/TapeEquilibrium.go | 29 + .../TapeEquilibrium/TapeEquilibrium_test.go | 21 + .../TapeEquilibrium/index.html | 3960 ++++++++++++ .../FrogRiverOne/FrogRiverOne.go | 12 + .../FrogRiverOne/FrogRiverOne_test.go | 28 + .../FrogRiverOne/index.html | 3947 ++++++++++++ .../MaxCounters/MaxCounters.go | 37 + .../MaxCounters/MaxCounters_test.go | 31 + .../MaxCounters/index.html | 3984 ++++++++++++ .../MissingInteger/MissingInteger.go | 23 + .../MissingInteger/MissingInteger_test.go | 31 + .../MissingInteger/index.html | 3932 ++++++++++++ .../PermCheck/PermCheck.go | 40 + .../PermCheck/PermCheck_test.go | 35 + .../PermCheck/index.html | 3948 ++++++++++++ .../0005.Prefix-Sums/CountDiv/CountDiv.go | 24 + .../CountDiv/CountDiv_test.go | 32 + .../0005.Prefix-Sums/CountDiv/index.html | 3921 ++++++++++++ .../GenomicRangeQuery/GenomicRangeQuery.go | 110 + .../GenomicRangeQuery_test.go | 36 + .../GenomicRangeQuery/index.html | 4047 ++++++++++++ .../MinAvgTwoSlice/MinAvgTwoSlice.go | 29 + .../MinAvgTwoSlice/MinAvgTwoSlice_test.go | 31 + .../MinAvgTwoSlice/index.html | 3971 ++++++++++++ .../PassingCars/PassingCars.go | 16 + .../PassingCars/PassingCars_test.go | 23 + .../0005.Prefix-Sums/PassingCars/index.html | 3946 ++++++++++++ .../Lesson/0006.Sorting/Distinct/Distinct.go | 29 + .../0006.Sorting/Distinct/Distinct_test.go | 55 + .../Lesson/0006.Sorting/Distinct/index.html | 3945 ++++++++++++ .../MaxProductOfThree/MaxProductOfThree.go | 16 + .../MaxProductOfThree_test.go | 21 + .../0006.Sorting/MaxProductOfThree/index.html | 3952 ++++++++++++ .../NumberOfDiscIntersections.go | 68 + .../NumberOfDiscIntersections_test.go | 29 + .../NumberOfDiscIntersections/index.html | 4014 ++++++++++++ .../Lesson/0006.Sorting/Triangle/Triangle.go | 16 + .../0006.Sorting/Triangle/Triangle_test.go | 21 + .../Lesson/0006.Sorting/Triangle/index.html | 3940 ++++++++++++ .../Brackets/Brackets.go | 45 + .../Brackets/Brackets_test.go | 33 + .../Brackets/index.html | 3960 ++++++++++++ .../0007.Stacks-and-Queues/Fish/Fish.go | 27 + .../0007.Stacks-and-Queues/Fish/Fish_test.go | 23 + .../0007.Stacks-and-Queues/Fish/index.html | 3964 ++++++++++++ .../0007.Stacks-and-Queues/Nesting/Nesting.go | 27 + .../Nesting/Nesting_test.go | 25 + .../0007.Stacks-and-Queues/Nesting/index.html | 3948 ++++++++++++ .../StoneWall/StoneWall.go | 18 + .../StoneWall/StoneWall_test.go | 21 + .../StoneWall/index.html | 3943 ++++++++++++ .../Lesson/0008.Leader/Dominator/Dominator.go | 39 + .../0008.Leader/Dominator/Dominator_test.go | 21 + .../Lesson/0008.Leader/Dominator/index.html | 3961 ++++++++++++ .../0008.Leader/EquiLeader/EquiLeader.go | 36 + .../0008.Leader/EquiLeader/EquiLeader_test.go | 21 + .../Lesson/0008.Leader/EquiLeader/index.html | 3976 ++++++++++++ .../MaxDoubleSliceSum/MaxDoubleSliceSum.go | 34 + .../MaxDoubleSliceSum_test.go | 21 + .../MaxDoubleSliceSum/index.html | 3975 ++++++++++++ .../MaxProfit/MaxProfit.go | 17 + .../MaxProfit/MaxProfit_test.go | 21 + .../MaxProfit/index.html | 3949 ++++++++++++ .../MaxSliceSum/MaxSliceSum.go | 18 + .../MaxSliceSum/MaxSliceSum_test.go | 25 + .../MaxSliceSum/index.html | 3938 ++++++++++++ .../CountFactors/CountFactors.go | 21 + .../CountFactors/CountFactors_test.go | 21 + .../CountFactors/index.html | 3919 ++++++++++++ .../Flags/Flags.go | 38 + .../Flags/Flags_test.go | 21 + .../Flags/index.html | 3996 ++++++++++++ .../MinPerimeterRectangle.go | 77 + .../MinPerimeterRectangle_test.go | 45 + .../MinPerimeterRectangle/index.html | 3934 ++++++++++++ .../Peaks/Peaks.go | 70 + .../Peaks/Peaks_test.go | 21 + .../Peaks/index.html | 4028 ++++++++++++ .../CountNonDivisible/CountNonDivisible.go | 137 + .../CountNonDivisible_test.go | 40 + .../CountNonDivisible/index.html | 3967 ++++++++++++ .../CountSemiprimes/CountSemiprimes.go | 116 + .../CountSemiprimes/CountSemiprimes.py | 64 + .../CountSemiprimes/CountSemiprimes_test.go | 62 + .../CountSemiprimes/index.html | 3997 ++++++++++++ .../ChocolatesByNumbers.go | 48 + .../ChocolatesByNumbers_test.go | 66 + .../ChocolatesByNumbers/index.html | 3966 ++++++++++++ .../CommonPrimeDivisors.go | 51 + .../CommonPrimeDivisors_test.go | 23 + .../CommonPrimeDivisors/index.html | 3979 ++++++++++++ .../0013.Fibonacci-Numbers/FibFrog/FibFrog.go | 82 + .../FibFrog/FibFrog_test.go | 21 + .../0013.Fibonacci-Numbers/FibFrog/index.html | 4026 ++++++++++++ .../AbsDistinct/AbsDistinct.go | 8 + .../AbsDistinct/AbsDistinct_test.go | 21 + .../AbsDistinct/index.html | 3938 ++++++++++++ Content.html | 4323 +++++++++++++ ...mum-Difference-Between-Any-Two-Elements.go | 72 + ...ifference-Between-Any-Two-Elements_test.go | 51 + .../index.html | 3959 ++++++++++++ LICENSE | 21 + Leetcode/0000.xxxx/index.html | 3906 ++++++++++++ Leetcode/0000.xxxx/main.go | 2 + Leetcode/0000.xxxx/main_test.go | 34 + .../Merging-2-Packages/index.html | 3897 +++++++++++ .../0001.Two-Sum/Merging-2-Packages/main.go | 13 + .../Merging-2-Packages/main_test.go | 45 + Leetcode/0001.Two-Sum/index.html | 3958 ++++++++++++ Leetcode/0001.Two-Sum/twosum.go | 42 + Leetcode/0001.Two-Sum/twosum_test.go | 78 + Leetcode/0002.Add-Two-Numbers/index.html | 3956 ++++++++++++ Leetcode/0002.Add-Two-Numbers/main.go | 43 + Leetcode/0002.Add-Two-Numbers/main_test.go | 35 + ...-Substring-Without-Repeating-Characters.go | 94 + ...tring-Without-Repeating-Characters_test.go | 93 + .../index.html | 4022 ++++++++++++ .../0005.LongestPalindromicString.jpg | Bin 0 -> 215990 bytes .../index.html | 3932 ++++++++++++ .../main.go | 30 + .../main_test.go | 37 + .../0011.Container-With-Most-Water/index.html | 3937 ++++++++++++ .../0011.Container-With-Most-Water/main.go | 31 + .../main_test.go | 39 + Leetcode/0015.3Sum/3Sum.go | 141 + Leetcode/0015.3Sum/3Sum_test.go | 126 + Leetcode/0015.3Sum/index.html | 4047 ++++++++++++ .../index.html | 3940 ++++++++++++ .../main.go | 35 + .../main_test.go | 45 + Leetcode/0020.Valid-Parentheses/index.html | 3953 ++++++++++++ Leetcode/0020.Valid-Parentheses/main.go | 35 + Leetcode/0020.Valid-Parentheses/main_test.go | 46 + .../0021.Merge-Two-Sorted-Lists/index.html | 3933 ++++++++++++ Leetcode/0021.Merge-Two-Sorted-Lists/main.go | 31 + .../0021.Merge-Two-Sorted-Lists/main_test.go | 78 + .../0027.Remove-Element/Remove-Element.go | 39 + .../Remove-Element_test.go | 79 + Leetcode/0027.Remove-Element/index.html | 3938 ++++++++++++ .../index.html | 3906 ++++++++++++ .../main.go | 41 + .../main_test.go | 34 + .../Search-Insert-Position.go | 48 + .../Search-Insert-Position_test.go | 83 + .../0035.Search-Insert-Position/index.html | 3967 ++++++++++++ Leetcode/0046.Permutations/Permutations.go | 39 + .../0046.Permutations/Permutations_test.go | 31 + Leetcode/0046.Permutations/index.html | 3992 ++++++++++++ Leetcode/0049.Group-Anagrams/index.html | 4065 ++++++++++++ Leetcode/0049.Group-Anagrams/main.go | 52 + Leetcode/0049.Group-Anagrams/main_test.go | 95 + .../0053.Maximum-Subarray/Maximum-Subarray.go | 56 + .../Maximum-Subarray_test.go | 51 + Leetcode/0053.Maximum-Subarray/index.html | 3963 ++++++++++++ .../0059.Spiral-Matrix-II/Spiral-Matrix-II.go | 75 + .../Spiral-Matrix-II_test.go | 32 + Leetcode/0059.Spiral-Matrix-II/index.html | 3969 ++++++++++++ Leetcode/0070.Climbing-Stairs/index.html | 3948 ++++++++++++ Leetcode/0070.Climbing-Stairs/main.go | 39 + Leetcode/0070.Climbing-Stairs/main_test.go | 82 + Leetcode/0072.Edit-Distance/index.html | 4117 ++++++++++++ Leetcode/0072.Edit-Distance/main.go | 117 + Leetcode/0072.Edit-Distance/main_test.go | 78 + Leetcode/0074.Search-a-2D-Matrix/index.html | 3934 ++++++++++++ Leetcode/0074.Search-a-2D-Matrix/main.go | 31 + Leetcode/0074.Search-a-2D-Matrix/main_test.go | 47 + Leetcode/0075.Sort-Colors/0075.Sort-Colors.go | 73 + .../0075.Sort-Colors/0075.Sort-Colors_test.go | 70 + Leetcode/0075.Sort-Colors/index.html | 4012 ++++++++++++ Leetcode/0078.Subsets/index.html | 3934 ++++++++++++ Leetcode/0078.Subsets/main.go | 42 + Leetcode/0078.Subsets/main_test.go | 97 + .../Merge-Sorted-Array.go | 26 + .../Merge-Sorted-Array_test.go | 33 + Leetcode/0088.Merge-Sorted-Array/index.html | 3935 ++++++++++++ .../Binary-Tree-Inorder-Traversal.go | 45 + .../Binary-Tree-Inorder-Traversal_test.go | 71 + .../index.html | 3959 ++++++++++++ Leetcode/0100.Same-Tree/ex1.jpg | Bin 0 -> 13336 bytes Leetcode/0100.Same-Tree/ex2.jpg | Bin 0 -> 8285 bytes Leetcode/0100.Same-Tree/ex3.jpg | Bin 0 -> 13102 bytes Leetcode/0100.Same-Tree/index.html | 3955 ++++++++++++ Leetcode/0100.Same-Tree/main.go | 28 + Leetcode/0100.Same-Tree/main_test.go | 54 + .../index.html | 3916 ++++++++++++ .../0104.Maximum-Depth-of-Binary-Tree/main.go | 47 + .../main_test.go | 49 + ...From Preorder And In order Traversal-2.jpg | Bin 0 -> 127150 bytes .../index.html | 3937 ++++++++++++ .../main.go | 28 + .../main_test.go | 34 + .../0110.Balanced-Binary-Tree/balance_1.jpg | Bin 0 -> 10768 bytes .../0110.Balanced-Binary-Tree/balance_2.jpg | Bin 0 -> 14999 bytes Leetcode/0110.Balanced-Binary-Tree/index.html | 3952 ++++++++++++ Leetcode/0110.Balanced-Binary-Tree/main.go | 48 + .../0110.Balanced-Binary-Tree/main_test.go | 48 + .../index.html | 4003 ++++++++++++ .../main.go | 75 + .../main_test.go | 77 + Leetcode/0125.Valid-Palindrome/index.html | 3965 ++++++++++++ Leetcode/0125.Valid-Palindrome/main.go | 69 + Leetcode/0125.Valid-Palindrome/main_test.go | 48 + .../index.html | 3927 ++++++++++++ .../0128.Longest-Consecutive-Sequence/main.go | 23 + .../main_test.go | 34 + .../index.html | 3961 ++++++++++++ .../main.go | 52 + .../main_test.go | 34 + .../Linked-List-Cycle.go | 19 + .../Linked-List-Cycle_test.go | 29 + Leetcode/0141.Linked-List-Cycle/index.html | 3919 ++++++++++++ Leetcode/0142.Linked-List-CycleII/index.html | 3954 ++++++++++++ Leetcode/0142.Linked-List-CycleII/main.go | 33 + .../0142.Linked-List-CycleII/main_test.go | 43 + Leetcode/0143.Reorder-List/index.html | 3957 ++++++++++++ Leetcode/0143.Reorder-List/main.go | 53 + Leetcode/0143.Reorder-List/main_test.go | 34 + .../index.html | 3979 ++++++++++++ .../main.go | 36 + .../main_test.go | 60 + .../Remove-Linked-List-Elements.go | 74 + .../Remove-Linked-List-Elements_test.go | 100 + .../index.html | 3977 ++++++++++++ Leetcode/0206.Reverse-Linked-List/index.html | 3966 ++++++++++++ Leetcode/0206.Reverse-Linked-List/main.go | 43 + .../0206.Reverse-Linked-List/main_test.go | 67 + .../Minimum-Size-Subarray-Sum.go | 119 + .../Minimum-Size-Subarray-Sum_test.go | 77 + .../0209.Minimum-Size-Subarray-Sum/index.html | 3964 ++++++++++++ .../index.html | 4002 ++++++++++++ .../main.go | 66 + .../main_test.go | 64 + Leetcode/0217.Contains-Duplicate/index.html | 3931 ++++++++++++ Leetcode/0217.Contains-Duplicate/main.go | 12 + Leetcode/0217.Contains-Duplicate/main_test.go | 33 + .../images/invert1-tree.jpg | Bin 0 -> 34272 bytes .../images/invert2-tree.jpg | Bin 0 -> 15045 bytes Leetcode/0226.Invert-Binary-Tree/index.html | 4004 ++++++++++++ Leetcode/0226.Invert-Binary-Tree/main.go | 62 + Leetcode/0226.Invert-Binary-Tree/main_test.go | 87 + .../index.html | 3969 ++++++++++++ .../0238.Product-of-Array-Except-Self/main.go | 40 + .../main_test.go | 60 + Leetcode/0242.Valid-Anagram/index.html | 3971 ++++++++++++ Leetcode/0242.Valid-Anagram/main.go | 42 + Leetcode/0242.Valid-Anagram/main_test.go | 64 + Leetcode/0283.Move-Zeroes/index.html | 3952 ++++++++++++ Leetcode/0283.Move-Zeroes/main.go | 28 + Leetcode/0283.Move-Zeroes/main_test.go | 64 + .../index.html | 4030 ++++++++++++ .../main.go | 84 + .../main_test.go | 81 + Leetcode/0310.Minimum-Height-Trees/index.html | 3991 ++++++++++++ Leetcode/0310.Minimum-Height-Trees/main.go | 71 + .../0310.Minimum-Height-Trees/main_test.go | 31 + Leetcode/0322.Coin-Change/Coin-Change.go | 105 + Leetcode/0322.Coin-Change/Coin-Change_test.go | 88 + Leetcode/0322.Coin-Change/index.html | 4029 ++++++++++++ .../0344.Reverse-String/Reverse-String.go | 7 + .../Reverse-String_test.go | 29 + Leetcode/0344.Reverse-String/index.html | 3915 ++++++++++++ .../0347.Top-K-Frequent-Elements/index.html | 4101 ++++++++++++ Leetcode/0347.Top-K-Frequent-Elements/main.go | 131 + .../0347.Top-K-Frequent-Elements/main_test.go | 66 + .../0354.Russian-Doll-Envelopes/index.html | 4033 ++++++++++++ Leetcode/0354.Russian-Doll-Envelopes/main.go | 105 + .../0354.Russian-Doll-Envelopes/main_test.go | 59 + .../index.html | 3989 ++++++++++++ .../0380.Insert-Delete-GetRandom-O1/main.go | 57 + .../main_test.go | 47 + .../index.html | 4014 ++++++++++++ .../main.go | 79 + .../main_test.go | 60 + Leetcode/0409.Longest-Palindrome/index.html | 3936 ++++++++++++ Leetcode/0409.Longest-Palindrome/main.go | 21 + Leetcode/0409.Longest-Palindrome/main_test.go | 37 + Leetcode/0412.Fizz-Buzz/index.html | 3933 ++++++++++++ Leetcode/0412.Fizz-Buzz/main.go | 63 + Leetcode/0412.Fizz-Buzz/main_test.go | 69 + .../index.html | 3990 ++++++++++++ .../main.go | 75 + .../main_test.go | 65 + .../0509.Fibonacci-Number/Fibonacci-Number.go | 182 + .../Fibonacci-Number_test.go | 236 + Leetcode/0509.Fibonacci-Number/index.html | 3947 ++++++++++++ .../index.html | 3908 ++++++++++++ .../main.go | 50 + .../main_test.go | 37 + .../0543.Diameter-of-Binary-Tree/index.html | 3961 ++++++++++++ Leetcode/0543.Diameter-of-Binary-Tree/main.go | 45 + .../0543.Diameter-of-Binary-Tree/main_test.go | 43 + .../0567.Permutation-in-String/index.html | 3995 ++++++++++++ Leetcode/0567.Permutation-in-String/main.go | 83 + .../0567.Permutation-in-String/main_test.go | 62 + .../Binary-Number-with-Alternating-Bits.go | 38 + ...inary-Number-with-Alternating-Bits_test.go | 61 + .../index.html | 3960 ++++++++++++ .../images/maxarea1-grid.jpg | Bin 0 -> 136231 bytes Leetcode/0695.Max-Area-of-Island/index.html | 3982 ++++++++++++ Leetcode/0695.Max-Area-of-Island/main.go | 48 + Leetcode/0695.Max-Area-of-Island/main_test.go | 38 + .../index.html | 3997 ++++++++++++ .../main.go | 61 + .../main_test.go | 41 + Leetcode/0704.Binary-Search/index.html | 4028 ++++++++++++ Leetcode/0704.Binary-Search/main.go | 146 + Leetcode/0704.Binary-Search/main_test.go | 156 + .../0721.Accounts-Merge/Accounts-Merge.go | 150 + .../Accounts-Merge_test.go | 103 + Leetcode/0721.Accounts-Merge/index.html | 4087 ++++++++++++ .../0733.Flood-Fill/images/flood1-grid.jpg | Bin 0 -> 17608 bytes Leetcode/0733.Flood-Fill/index.html | 4038 ++++++++++++ Leetcode/0733.Flood-Fill/main.go | 70 + Leetcode/0733.Flood-Fill/main_test.go | 101 + .../0746.Min-Cost-Climbing-Stairs/index.html | 4048 ++++++++++++ .../0746.Min-Cost-Climbing-Stairs/main.go | 50 + .../main_test.go | 61 + Leetcode/0752.Open-the-Lock/index.html | 4166 ++++++++++++ Leetcode/0752.Open-the-Lock/main.go | 235 + Leetcode/0752.Open-the-Lock/main_test.go | 85 + Leetcode/0875.Koko-Eating-Bananas/index.html | 3930 ++++++++++++ Leetcode/0875.Koko-Eating-Bananas/main.go | 40 + .../0875.Koko-Eating-Bananas/main_test.go | 39 + .../0876.Middle-of-the-Linked-List/index.html | 3954 ++++++++++++ .../0876.Middle-of-the-Linked-List/main.go | 42 + .../main_test.go | 38 + Leetcode/1046.Last-Stone-Weight/index.html | 4013 ++++++++++++ Leetcode/1046.Last-Stone-Weight/main.go | 67 + Leetcode/1046.Last-Stone-Weight/main_test.go | 34 + .../index.html | 3999 ++++++++++++ .../1143.Longest-Common-Subsequence/main.go | 48 + .../main_test.go | 74 + .../1195.Fizz-Buzz-Multithreaded/index.html | 3958 ++++++++++++ Leetcode/1195.Fizz-Buzz-Multithreaded/main.go | 112 + .../1195.Fizz-Buzz-Multithreaded/main_test.go | 35 + ...44\346\225\260\344\271\213\345\222\214.go" | 22 + ...64\347\232\204\345\256\271\345\231\250.go" | 40 + ...15\346\216\222\351\223\276\350\241\250.go" | 62 + ...n-\344\270\252\347\273\223\347\202\271.go" | 37 + ...44\346\225\260\347\233\270\345\212\240.go" | 50 + ...36\346\226\207\345\255\220\344\270\262.go" | 40 + ...11\347\232\204\347\217\202\347\217\202.go" | 49 + SUMMARY.md | 225 + Utility/crud/crud.go | 135 + Utility/crud/crud_test.go | 74 + Utility/structures/StackBasedOnArray.go | 79 + Utility/structures/TreeNode.go | 251 + Utility/structures/tree/BinaryTree.go | 207 + Utility/structures/tree/BinaryTree_test.go | 87 + Utility/structures/tree/QueueBasedOnArray.go | 80 + Utility/structures/tree/StackBasedOnArray.go | 72 + Utility/structures/tree/tree.go | 27 + assets/images/0046.permutations.png | Bin 0 -> 80972 bytes assets/images/0142.LinkedListCycleII.jpg | Bin 0 -> 109587 bytes assets/images/fibfrog.jpg | Bin 0 -> 1866354 bytes gitbook/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome/fontawesome-webfont.svg | 685 ++ .../fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fontawesome/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fontawesome/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes .../plugin.js | 10 + .../website.css | 40 + .../plugin.css | 55 + .../plugin.js | 25 + gitbook/gitbook-plugin-code/plugin.css | 37 + gitbook/gitbook-plugin-code/plugin.js | 91 + gitbook/gitbook-plugin-edit-link/plugin.js | 30 + .../expandable-chapters.css | 29 + .../expandable-chapters.js | 69 + .../fontsettings.js | 240 + .../gitbook-plugin-fontsettings/website.css | 291 + .../gitbook-plugin-github-buttons/plugin.js | 85 + .../plugin.js.map | 1 + gitbook/gitbook-plugin-github/plugin.js | 14 + gitbook/gitbook-plugin-highlight/ebook.css | 135 + gitbook/gitbook-plugin-highlight/website.css | 434 ++ gitbook/gitbook-plugin-hints/plugin-hints.css | 9 + .../gitbook-plugin-intopic-toc/anchor.min.js | 7 + .../gumshoe.polyfills.min.js | 3 + gitbook/gitbook-plugin-intopic-toc/plugin.js | 9 + .../gitbook-plugin-intopic-toc/plugin.js.map | 1 + gitbook/gitbook-plugin-intopic-toc/style.css | 242 + .../lib/plugin.js | 35 + .../style/plugin.css | 19 + .../anchor-3.1.1.min.js | 6 + gitbook/gitbook-plugin-page-toc/page-toc.css | 25 + gitbook/gitbook-plugin-page-toc/page-toc.js | 81 + .../jquery.mark.min.js | 7 + gitbook/gitbook-plugin-search-plus/search.css | 44 + gitbook/gitbook-plugin-search-plus/search.js | 252 + .../gitbook-plugin-sharing-plus/buttons.js | 71 + gitbook/gitbook-plugin-splitter/splitter.css | 22 + gitbook/gitbook-plugin-splitter/splitter.js | 128 + gitbook/gitbook-plugin-tabs2/tabs.css | 9 + gitbook/gitbook-plugin-tabs2/tabs.js | 9 + gitbook/gitbook-plugin-tags/plugin.css | 19 + gitbook/gitbook-plugin-wide-page/wide.css | 6 + gitbook/gitbook.js | 4 + .../apple-touch-icon-precomposed-152.png | Bin 0 -> 4817 bytes gitbook/images/favicon.ico | Bin 0 -> 4286 bytes gitbook/style.css | 9 + gitbook/theme.js | 4 + go.mod | 14 + go.sum | 20 + index.html | 5671 +++++++++++++++++ makefile | 24 + package-lock.json | 785 +++ package.json | 8 + search_plus_index.json | 1 + sitemap.xml | 129 + structures/Heap.go | 30 + structures/Heap_test.go | 30 + structures/Interval.go | 53 + structures/Interval_test.go | 59 + structures/ListNode.go | 82 + structures/ListNode_test.go | 68 + structures/NestedInteger.go | 37 + structures/NestedInterger_test.go | 30 + structures/Point.go | 27 + structures/Point_test.go | 78 + structures/PriorityQueue.go | 54 + structures/PriorityQueue_test.go | 53 + structures/Quadtree/Quadtree.go | 153 + structures/Quadtree/Quadtree_test.go | 79 + structures/Queue.go | 33 + structures/Queue_test.go | 27 + structures/Stack.go | 33 + structures/Stack_test.go | 27 + structures/TreeNode.go | 233 + structures/TreeNode_test.go | 166 + structures/heap/FullBT_CompleteBT.jpg | Bin 0 -> 20036 bytes structures/heap/index.en.html | 4052 ++++++++++++ structures/index.html | 3895 +++++++++++ tags.html | 4630 ++++++++++++++ template/CLRUCache.go | 176 + template/CLRUCache_test.go | 130 + template/LFUCache.go | 196 + template/LRUCache.go | 139 + template/SegmentTree.go | 265 + template/UnionFind.go | 134 + template/bucket.go | 55 + template/index.html | 3901 ++++++++++++ 500 files changed, 524480 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/releace.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 Algorithms/A1B2C3/a1b2c3.go create mode 100644 Algorithms/A1B2C3/a1b2c3_test.go create mode 100644 Algorithms/A1B2C3/index.html create mode 100644 Algorithms/Find_Target_Last_Index/findtargetlastindex.go create mode 100644 Algorithms/Find_Target_Last_Index/findtargetlastindex.html create mode 100644 Algorithms/Find_Target_Last_Index/findtargetlastindex_test.go create mode 100644 Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/index.html create mode 100644 Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection.go create mode 100644 Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection_test.go create mode 100644 Algorithms/SearchGraph/index.html create mode 100644 Algorithms/SearchGraph/main.go create mode 100644 Algorithms/SearchGraph/main_test.go create mode 100644 Algorithms/WeightedEditDistance/index.html create mode 100644 Algorithms/WeightedEditDistance/main.go create mode 100644 Algorithms/WeightedEditDistance/main_test.go create mode 100644 CHANGELOG.html create mode 100644 CodeSignal/Arcade/01.Intro/01.Add/main.go create mode 100644 CodeSignal/Arcade/01.Intro/01.Add/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/02centuryFromYear/main.go create mode 100644 CodeSignal/Arcade/01.Intro/02centuryFromYear/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/03.checkPalindrome/main.go create mode 100644 CodeSignal/Arcade/01.Intro/03.checkPalindrome/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main.go create mode 100644 CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/05.shapeArea/main.go create mode 100644 CodeSignal/Arcade/01.Intro/05.shapeArea/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main.go create mode 100644 CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main.go create mode 100644 CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main_test.go create mode 100644 CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main.go create mode 100644 CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main_test.go create mode 100644 CodeSignal/Bank-Requests/bankrequests.go create mode 100644 CodeSignal/Bank-Requests/bankrequests_test.go create mode 100644 CodeSignal/Bank-Requests/index.html create mode 100644 CodeSignal/index.html create mode 100644 Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap.go create mode 100644 Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap_test.go create mode 100644 Codility/Lesson/0001.Iterations/Binary-Gap/index.html create mode 100644 Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation.go create mode 100644 Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation_test.go create mode 100644 Codility/Lesson/0002.Array/CyclicRotation/index.html create mode 100644 Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray.go create mode 100644 Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray_test.go create mode 100644 Codility/Lesson/0002.Array/OddOccurrencesInArray/index.html create mode 100644 Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp.go create mode 100644 Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp_test.go create mode 100644 Codility/Lesson/0003.Time-Complexity/FrogJmp/index.html create mode 100644 Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem.go create mode 100644 Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem_test.go create mode 100644 Codility/Lesson/0003.Time-Complexity/PermMissingElem/index.html create mode 100644 Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium.go create mode 100644 Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium_test.go create mode 100644 Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/index.html create mode 100644 Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne.go create mode 100644 Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne_test.go create mode 100644 Codility/Lesson/0004.Counting-Elements/FrogRiverOne/index.html create mode 100644 Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters.go create mode 100644 Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters_test.go create mode 100644 Codility/Lesson/0004.Counting-Elements/MaxCounters/index.html create mode 100644 Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger.go create mode 100644 Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger_test.go create mode 100644 Codility/Lesson/0004.Counting-Elements/MissingInteger/index.html create mode 100644 Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck.go create mode 100644 Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck_test.go create mode 100644 Codility/Lesson/0004.Counting-Elements/PermCheck/index.html create mode 100644 Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv_test.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/CountDiv/index.html create mode 100644 Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery_test.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/index.html create mode 100644 Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice_test.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/index.html create mode 100644 Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars_test.go create mode 100644 Codility/Lesson/0005.Prefix-Sums/PassingCars/index.html create mode 100644 Codility/Lesson/0006.Sorting/Distinct/Distinct.go create mode 100644 Codility/Lesson/0006.Sorting/Distinct/Distinct_test.go create mode 100644 Codility/Lesson/0006.Sorting/Distinct/index.html create mode 100644 Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree.go create mode 100644 Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree_test.go create mode 100644 Codility/Lesson/0006.Sorting/MaxProductOfThree/index.html create mode 100644 Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections.go create mode 100644 Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections_test.go create mode 100644 Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/index.html create mode 100644 Codility/Lesson/0006.Sorting/Triangle/Triangle.go create mode 100644 Codility/Lesson/0006.Sorting/Triangle/Triangle_test.go create mode 100644 Codility/Lesson/0006.Sorting/Triangle/index.html create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets_test.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Brackets/index.html create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish_test.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Fish/index.html create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting_test.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/Nesting/index.html create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall_test.go create mode 100644 Codility/Lesson/0007.Stacks-and-Queues/StoneWall/index.html create mode 100644 Codility/Lesson/0008.Leader/Dominator/Dominator.go create mode 100644 Codility/Lesson/0008.Leader/Dominator/Dominator_test.go create mode 100644 Codility/Lesson/0008.Leader/Dominator/index.html create mode 100644 Codility/Lesson/0008.Leader/EquiLeader/EquiLeader.go create mode 100644 Codility/Lesson/0008.Leader/EquiLeader/EquiLeader_test.go create mode 100644 Codility/Lesson/0008.Leader/EquiLeader/index.html create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum.go create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum_test.go create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/index.html create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit.go create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit_test.go create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/index.html create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum.go create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum_test.go create mode 100644 Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/index.html create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors_test.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/index.html create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags_test.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/index.html create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle_test.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/index.html create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks_test.go create mode 100644 Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/index.html create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible.go create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible_test.go create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/index.html create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.go create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.py create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes_test.go create mode 100644 Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/index.html create mode 100644 Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers.go create mode 100644 Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers_test.go create mode 100644 Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/index.html create mode 100644 Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors.go create mode 100644 Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors_test.go create mode 100644 Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/index.html create mode 100644 Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog.go create mode 100644 Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog_test.go create mode 100644 Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/index.html create mode 100644 Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct.go create mode 100644 Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct_test.go create mode 100644 Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/index.html create mode 100644 Content.html create mode 100644 GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements.go create mode 100644 GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements_test.go create mode 100644 GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/index.html create mode 100644 LICENSE create mode 100644 Leetcode/0000.xxxx/index.html create mode 100644 Leetcode/0000.xxxx/main.go create mode 100644 Leetcode/0000.xxxx/main_test.go create mode 100644 Leetcode/0001.Two-Sum/Merging-2-Packages/index.html create mode 100644 Leetcode/0001.Two-Sum/Merging-2-Packages/main.go create mode 100644 Leetcode/0001.Two-Sum/Merging-2-Packages/main_test.go create mode 100644 Leetcode/0001.Two-Sum/index.html create mode 100644 Leetcode/0001.Two-Sum/twosum.go create mode 100644 Leetcode/0001.Two-Sum/twosum_test.go create mode 100644 Leetcode/0002.Add-Two-Numbers/index.html create mode 100644 Leetcode/0002.Add-Two-Numbers/main.go create mode 100644 Leetcode/0002.Add-Two-Numbers/main_test.go create mode 100644 Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters.go create mode 100644 Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters_test.go create mode 100644 Leetcode/0003.Longest-Substring-Without-Repeating-Characters/index.html create mode 100644 Leetcode/0005.Longest-Palindromic-Substring/0005.LongestPalindromicString.jpg create mode 100644 Leetcode/0005.Longest-Palindromic-Substring/index.html create mode 100644 Leetcode/0005.Longest-Palindromic-Substring/main.go create mode 100644 Leetcode/0005.Longest-Palindromic-Substring/main_test.go create mode 100644 Leetcode/0011.Container-With-Most-Water/index.html create mode 100644 Leetcode/0011.Container-With-Most-Water/main.go create mode 100644 Leetcode/0011.Container-With-Most-Water/main_test.go create mode 100644 Leetcode/0015.3Sum/3Sum.go create mode 100644 Leetcode/0015.3Sum/3Sum_test.go create mode 100644 Leetcode/0015.3Sum/index.html create mode 100644 Leetcode/0019.Remove-Nth-Node-From-End-of-List/index.html create mode 100644 Leetcode/0019.Remove-Nth-Node-From-End-of-List/main.go create mode 100644 Leetcode/0019.Remove-Nth-Node-From-End-of-List/main_test.go create mode 100644 Leetcode/0020.Valid-Parentheses/index.html create mode 100644 Leetcode/0020.Valid-Parentheses/main.go create mode 100644 Leetcode/0020.Valid-Parentheses/main_test.go create mode 100644 Leetcode/0021.Merge-Two-Sorted-Lists/index.html create mode 100644 Leetcode/0021.Merge-Two-Sorted-Lists/main.go create mode 100644 Leetcode/0021.Merge-Two-Sorted-Lists/main_test.go create mode 100644 Leetcode/0027.Remove-Element/Remove-Element.go create mode 100644 Leetcode/0027.Remove-Element/Remove-Element_test.go create mode 100644 Leetcode/0027.Remove-Element/index.html create mode 100644 Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/index.html create mode 100644 Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main.go create mode 100644 Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main_test.go create mode 100644 Leetcode/0035.Search-Insert-Position/Search-Insert-Position.go create mode 100644 Leetcode/0035.Search-Insert-Position/Search-Insert-Position_test.go create mode 100644 Leetcode/0035.Search-Insert-Position/index.html create mode 100644 Leetcode/0046.Permutations/Permutations.go create mode 100644 Leetcode/0046.Permutations/Permutations_test.go create mode 100644 Leetcode/0046.Permutations/index.html create mode 100644 Leetcode/0049.Group-Anagrams/index.html create mode 100644 Leetcode/0049.Group-Anagrams/main.go create mode 100644 Leetcode/0049.Group-Anagrams/main_test.go create mode 100644 Leetcode/0053.Maximum-Subarray/Maximum-Subarray.go create mode 100644 Leetcode/0053.Maximum-Subarray/Maximum-Subarray_test.go create mode 100644 Leetcode/0053.Maximum-Subarray/index.html create mode 100644 Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II.go create mode 100644 Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II_test.go create mode 100644 Leetcode/0059.Spiral-Matrix-II/index.html create mode 100644 Leetcode/0070.Climbing-Stairs/index.html create mode 100644 Leetcode/0070.Climbing-Stairs/main.go create mode 100644 Leetcode/0070.Climbing-Stairs/main_test.go create mode 100644 Leetcode/0072.Edit-Distance/index.html create mode 100644 Leetcode/0072.Edit-Distance/main.go create mode 100644 Leetcode/0072.Edit-Distance/main_test.go create mode 100644 Leetcode/0074.Search-a-2D-Matrix/index.html create mode 100644 Leetcode/0074.Search-a-2D-Matrix/main.go create mode 100644 Leetcode/0074.Search-a-2D-Matrix/main_test.go create mode 100644 Leetcode/0075.Sort-Colors/0075.Sort-Colors.go create mode 100644 Leetcode/0075.Sort-Colors/0075.Sort-Colors_test.go create mode 100644 Leetcode/0075.Sort-Colors/index.html create mode 100644 Leetcode/0078.Subsets/index.html create mode 100644 Leetcode/0078.Subsets/main.go create mode 100644 Leetcode/0078.Subsets/main_test.go create mode 100644 Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array.go create mode 100644 Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array_test.go create mode 100644 Leetcode/0088.Merge-Sorted-Array/index.html create mode 100644 Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal.go create mode 100644 Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal_test.go create mode 100644 Leetcode/0094.Binary-Tree-Inorder-Traversal/index.html create mode 100644 Leetcode/0100.Same-Tree/ex1.jpg create mode 100644 Leetcode/0100.Same-Tree/ex2.jpg create mode 100644 Leetcode/0100.Same-Tree/ex3.jpg create mode 100644 Leetcode/0100.Same-Tree/index.html create mode 100644 Leetcode/0100.Same-Tree/main.go create mode 100644 Leetcode/0100.Same-Tree/main_test.go create mode 100644 Leetcode/0104.Maximum-Depth-of-Binary-Tree/index.html create mode 100644 Leetcode/0104.Maximum-Depth-of-Binary-Tree/main.go create mode 100644 Leetcode/0104.Maximum-Depth-of-Binary-Tree/main_test.go create mode 100644 Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/105.construct Binary Tree From Preorder And In order Traversal-2.jpg create mode 100644 Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/index.html create mode 100644 Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main.go create mode 100644 Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main_test.go create mode 100644 Leetcode/0110.Balanced-Binary-Tree/balance_1.jpg create mode 100644 Leetcode/0110.Balanced-Binary-Tree/balance_2.jpg create mode 100644 Leetcode/0110.Balanced-Binary-Tree/index.html create mode 100644 Leetcode/0110.Balanced-Binary-Tree/main.go create mode 100644 Leetcode/0110.Balanced-Binary-Tree/main_test.go create mode 100644 Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/index.html create mode 100644 Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main.go create mode 100644 Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main_test.go create mode 100644 Leetcode/0125.Valid-Palindrome/index.html create mode 100644 Leetcode/0125.Valid-Palindrome/main.go create mode 100644 Leetcode/0125.Valid-Palindrome/main_test.go create mode 100644 Leetcode/0128.Longest-Consecutive-Sequence/index.html create mode 100644 Leetcode/0128.Longest-Consecutive-Sequence/main.go create mode 100644 Leetcode/0128.Longest-Consecutive-Sequence/main_test.go create mode 100644 Leetcode/0138.Copy-List-with-Random-Pointer/index.html create mode 100644 Leetcode/0138.Copy-List-with-Random-Pointer/main.go create mode 100644 Leetcode/0138.Copy-List-with-Random-Pointer/main_test.go create mode 100644 Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle.go create mode 100644 Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle_test.go create mode 100644 Leetcode/0141.Linked-List-Cycle/index.html create mode 100644 Leetcode/0142.Linked-List-CycleII/index.html create mode 100644 Leetcode/0142.Linked-List-CycleII/main.go create mode 100644 Leetcode/0142.Linked-List-CycleII/main_test.go create mode 100644 Leetcode/0143.Reorder-List/index.html create mode 100644 Leetcode/0143.Reorder-List/main.go create mode 100644 Leetcode/0143.Reorder-List/main_test.go create mode 100644 Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/index.html create mode 100644 Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main.go create mode 100644 Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main_test.go create mode 100644 Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements.go create mode 100644 Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements_test.go create mode 100644 Leetcode/0203.Remove-Linked-List-Elements/index.html create mode 100644 Leetcode/0206.Reverse-Linked-List/index.html create mode 100644 Leetcode/0206.Reverse-Linked-List/main.go create mode 100644 Leetcode/0206.Reverse-Linked-List/main_test.go create mode 100644 Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum.go create mode 100644 Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum_test.go create mode 100644 Leetcode/0209.Minimum-Size-Subarray-Sum/index.html create mode 100644 Leetcode/0215.Kth-Largest-Element-in-an-Array/index.html create mode 100644 Leetcode/0215.Kth-Largest-Element-in-an-Array/main.go create mode 100644 Leetcode/0215.Kth-Largest-Element-in-an-Array/main_test.go create mode 100644 Leetcode/0217.Contains-Duplicate/index.html create mode 100644 Leetcode/0217.Contains-Duplicate/main.go create mode 100644 Leetcode/0217.Contains-Duplicate/main_test.go create mode 100644 Leetcode/0226.Invert-Binary-Tree/images/invert1-tree.jpg create mode 100644 Leetcode/0226.Invert-Binary-Tree/images/invert2-tree.jpg create mode 100644 Leetcode/0226.Invert-Binary-Tree/index.html create mode 100644 Leetcode/0226.Invert-Binary-Tree/main.go create mode 100644 Leetcode/0226.Invert-Binary-Tree/main_test.go create mode 100644 Leetcode/0238.Product-of-Array-Except-Self/index.html create mode 100644 Leetcode/0238.Product-of-Array-Except-Self/main.go create mode 100644 Leetcode/0238.Product-of-Array-Except-Self/main_test.go create mode 100644 Leetcode/0242.Valid-Anagram/index.html create mode 100644 Leetcode/0242.Valid-Anagram/main.go create mode 100644 Leetcode/0242.Valid-Anagram/main_test.go create mode 100644 Leetcode/0283.Move-Zeroes/index.html create mode 100644 Leetcode/0283.Move-Zeroes/main.go create mode 100644 Leetcode/0283.Move-Zeroes/main_test.go create mode 100644 Leetcode/0300.Longest-Increasing-Subsequence/index.html create mode 100644 Leetcode/0300.Longest-Increasing-Subsequence/main.go create mode 100644 Leetcode/0300.Longest-Increasing-Subsequence/main_test.go create mode 100644 Leetcode/0310.Minimum-Height-Trees/index.html create mode 100644 Leetcode/0310.Minimum-Height-Trees/main.go create mode 100644 Leetcode/0310.Minimum-Height-Trees/main_test.go create mode 100644 Leetcode/0322.Coin-Change/Coin-Change.go create mode 100644 Leetcode/0322.Coin-Change/Coin-Change_test.go create mode 100644 Leetcode/0322.Coin-Change/index.html create mode 100644 Leetcode/0344.Reverse-String/Reverse-String.go create mode 100644 Leetcode/0344.Reverse-String/Reverse-String_test.go create mode 100644 Leetcode/0344.Reverse-String/index.html create mode 100644 Leetcode/0347.Top-K-Frequent-Elements/index.html create mode 100644 Leetcode/0347.Top-K-Frequent-Elements/main.go create mode 100644 Leetcode/0347.Top-K-Frequent-Elements/main_test.go create mode 100644 Leetcode/0354.Russian-Doll-Envelopes/index.html create mode 100644 Leetcode/0354.Russian-Doll-Envelopes/main.go create mode 100644 Leetcode/0354.Russian-Doll-Envelopes/main_test.go create mode 100644 Leetcode/0380.Insert-Delete-GetRandom-O1/index.html create mode 100644 Leetcode/0380.Insert-Delete-GetRandom-O1/main.go create mode 100644 Leetcode/0380.Insert-Delete-GetRandom-O1/main_test.go create mode 100644 Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/index.html create mode 100644 Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main.go create mode 100644 Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main_test.go create mode 100644 Leetcode/0409.Longest-Palindrome/index.html create mode 100644 Leetcode/0409.Longest-Palindrome/main.go create mode 100644 Leetcode/0409.Longest-Palindrome/main_test.go create mode 100644 Leetcode/0412.Fizz-Buzz/index.html create mode 100644 Leetcode/0412.Fizz-Buzz/main.go create mode 100644 Leetcode/0412.Fizz-Buzz/main_test.go create mode 100644 Leetcode/0438.Find-All-Anagrams-in-a-String/index.html create mode 100644 Leetcode/0438.Find-All-Anagrams-in-a-String/main.go create mode 100644 Leetcode/0438.Find-All-Anagrams-in-a-String/main_test.go create mode 100644 Leetcode/0509.Fibonacci-Number/Fibonacci-Number.go create mode 100644 Leetcode/0509.Fibonacci-Number/Fibonacci-Number_test.go create mode 100644 Leetcode/0509.Fibonacci-Number/index.html create mode 100644 Leetcode/0516.Longest-Palindromic-Subsequence/index.html create mode 100644 Leetcode/0516.Longest-Palindromic-Subsequence/main.go create mode 100644 Leetcode/0516.Longest-Palindromic-Subsequence/main_test.go create mode 100644 Leetcode/0543.Diameter-of-Binary-Tree/index.html create mode 100644 Leetcode/0543.Diameter-of-Binary-Tree/main.go create mode 100644 Leetcode/0543.Diameter-of-Binary-Tree/main_test.go create mode 100644 Leetcode/0567.Permutation-in-String/index.html create mode 100644 Leetcode/0567.Permutation-in-String/main.go create mode 100644 Leetcode/0567.Permutation-in-String/main_test.go create mode 100644 Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits.go create mode 100644 Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits_test.go create mode 100644 Leetcode/0693.Binary-Number-with-Alternating-Bits/index.html create mode 100644 Leetcode/0695.Max-Area-of-Island/images/maxarea1-grid.jpg create mode 100644 Leetcode/0695.Max-Area-of-Island/index.html create mode 100644 Leetcode/0695.Max-Area-of-Island/main.go create mode 100644 Leetcode/0695.Max-Area-of-Island/main_test.go create mode 100644 Leetcode/0703.Kth-Largest-Element-in-a-Stream/index.html create mode 100644 Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go create mode 100644 Leetcode/0703.Kth-Largest-Element-in-a-Stream/main_test.go create mode 100644 Leetcode/0704.Binary-Search/index.html create mode 100644 Leetcode/0704.Binary-Search/main.go create mode 100644 Leetcode/0704.Binary-Search/main_test.go create mode 100644 Leetcode/0721.Accounts-Merge/Accounts-Merge.go create mode 100644 Leetcode/0721.Accounts-Merge/Accounts-Merge_test.go create mode 100644 Leetcode/0721.Accounts-Merge/index.html create mode 100644 Leetcode/0733.Flood-Fill/images/flood1-grid.jpg create mode 100644 Leetcode/0733.Flood-Fill/index.html create mode 100644 Leetcode/0733.Flood-Fill/main.go create mode 100644 Leetcode/0733.Flood-Fill/main_test.go create mode 100644 Leetcode/0746.Min-Cost-Climbing-Stairs/index.html create mode 100644 Leetcode/0746.Min-Cost-Climbing-Stairs/main.go create mode 100644 Leetcode/0746.Min-Cost-Climbing-Stairs/main_test.go create mode 100644 Leetcode/0752.Open-the-Lock/index.html create mode 100644 Leetcode/0752.Open-the-Lock/main.go create mode 100644 Leetcode/0752.Open-the-Lock/main_test.go create mode 100644 Leetcode/0875.Koko-Eating-Bananas/index.html create mode 100644 Leetcode/0875.Koko-Eating-Bananas/main.go create mode 100644 Leetcode/0875.Koko-Eating-Bananas/main_test.go create mode 100644 Leetcode/0876.Middle-of-the-Linked-List/index.html create mode 100644 Leetcode/0876.Middle-of-the-Linked-List/main.go create mode 100644 Leetcode/0876.Middle-of-the-Linked-List/main_test.go create mode 100644 Leetcode/1046.Last-Stone-Weight/index.html create mode 100644 Leetcode/1046.Last-Stone-Weight/main.go create mode 100644 Leetcode/1046.Last-Stone-Weight/main_test.go create mode 100644 Leetcode/1143.Longest-Common-Subsequence/index.html create mode 100644 Leetcode/1143.Longest-Common-Subsequence/main.go create mode 100644 Leetcode/1143.Longest-Common-Subsequence/main_test.go create mode 100644 Leetcode/1195.Fizz-Buzz-Multithreaded/index.html create mode 100644 Leetcode/1195.Fizz-Buzz-Multithreaded/main.go create mode 100644 Leetcode/1195.Fizz-Buzz-Multithreaded/main_test.go create mode 100644 "Leetcode_labuladong/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" create mode 100644 "Leetcode_labuladong/11.\347\233\233\346\234\200\345\244\232\346\260\264\347\232\204\345\256\271\345\231\250.go" create mode 100644 "Leetcode_labuladong/143.\351\207\215\346\216\222\351\223\276\350\241\250.go" create mode 100644 "Leetcode_labuladong/19.\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254-n-\344\270\252\347\273\223\347\202\271.go" create mode 100644 "Leetcode_labuladong/2.\344\270\244\346\225\260\347\233\270\345\212\240.go" create mode 100644 "Leetcode_labuladong/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.go" create mode 100644 "Leetcode_labuladong/875.\347\210\261\345\220\203\351\246\231\350\225\211\347\232\204\347\217\202\347\217\202.go" create mode 100644 SUMMARY.md create mode 100644 Utility/crud/crud.go create mode 100644 Utility/crud/crud_test.go create mode 100644 Utility/structures/StackBasedOnArray.go create mode 100644 Utility/structures/TreeNode.go create mode 100644 Utility/structures/tree/BinaryTree.go create mode 100644 Utility/structures/tree/BinaryTree_test.go create mode 100644 Utility/structures/tree/QueueBasedOnArray.go create mode 100644 Utility/structures/tree/StackBasedOnArray.go create mode 100644 Utility/structures/tree/tree.go create mode 100644 assets/images/0046.permutations.png create mode 100644 assets/images/0142.LinkedListCycleII.jpg create mode 100644 assets/images/fibfrog.jpg create mode 100644 gitbook/fonts/fontawesome/FontAwesome.otf create mode 100644 gitbook/fonts/fontawesome/fontawesome-webfont.eot create mode 100644 gitbook/fonts/fontawesome/fontawesome-webfont.svg create mode 100644 gitbook/fonts/fontawesome/fontawesome-webfont.ttf create mode 100644 gitbook/fonts/fontawesome/fontawesome-webfont.woff create mode 100644 gitbook/fonts/fontawesome/fontawesome-webfont.woff2 create mode 100644 gitbook/gitbook-plugin-auto-scroll-table/plugin.js create mode 100644 gitbook/gitbook-plugin-auto-scroll-table/website.css create mode 100644 gitbook/gitbook-plugin-back-to-top-button/plugin.css create mode 100644 gitbook/gitbook-plugin-back-to-top-button/plugin.js create mode 100644 gitbook/gitbook-plugin-code/plugin.css create mode 100644 gitbook/gitbook-plugin-code/plugin.js create mode 100644 gitbook/gitbook-plugin-edit-link/plugin.js create mode 100644 gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.css create mode 100644 gitbook/gitbook-plugin-expandable-chapters/expandable-chapters.js create mode 100644 gitbook/gitbook-plugin-fontsettings/fontsettings.js create mode 100644 gitbook/gitbook-plugin-fontsettings/website.css create mode 100644 gitbook/gitbook-plugin-github-buttons/plugin.js create mode 100644 gitbook/gitbook-plugin-github-buttons/plugin.js.map create mode 100644 gitbook/gitbook-plugin-github/plugin.js create mode 100644 gitbook/gitbook-plugin-highlight/ebook.css create mode 100644 gitbook/gitbook-plugin-highlight/website.css create mode 100644 gitbook/gitbook-plugin-hints/plugin-hints.css create mode 100644 gitbook/gitbook-plugin-intopic-toc/anchor.min.js create mode 100644 gitbook/gitbook-plugin-intopic-toc/gumshoe.polyfills.min.js create mode 100644 gitbook/gitbook-plugin-intopic-toc/plugin.js create mode 100644 gitbook/gitbook-plugin-intopic-toc/plugin.js.map create mode 100644 gitbook/gitbook-plugin-intopic-toc/style.css create mode 100644 gitbook/gitbook-plugin-page-footer-ex/lib/plugin.js create mode 100644 gitbook/gitbook-plugin-page-footer-ex/style/plugin.css create mode 100644 gitbook/gitbook-plugin-page-toc/anchor-3.1.1.min.js create mode 100644 gitbook/gitbook-plugin-page-toc/page-toc.css create mode 100644 gitbook/gitbook-plugin-page-toc/page-toc.js create mode 100644 gitbook/gitbook-plugin-search-plus/jquery.mark.min.js create mode 100644 gitbook/gitbook-plugin-search-plus/search.css create mode 100644 gitbook/gitbook-plugin-search-plus/search.js create mode 100644 gitbook/gitbook-plugin-sharing-plus/buttons.js create mode 100644 gitbook/gitbook-plugin-splitter/splitter.css create mode 100644 gitbook/gitbook-plugin-splitter/splitter.js create mode 100644 gitbook/gitbook-plugin-tabs2/tabs.css create mode 100644 gitbook/gitbook-plugin-tabs2/tabs.js create mode 100644 gitbook/gitbook-plugin-tags/plugin.css create mode 100644 gitbook/gitbook-plugin-wide-page/wide.css create mode 100644 gitbook/gitbook.js create mode 100644 gitbook/images/apple-touch-icon-precomposed-152.png create mode 100644 gitbook/images/favicon.ico create mode 100644 gitbook/style.css create mode 100644 gitbook/theme.js create mode 100644 go.mod create mode 100644 go.sum create mode 100644 index.html create mode 100644 makefile create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 search_plus_index.json create mode 100644 sitemap.xml create mode 100644 structures/Heap.go create mode 100644 structures/Heap_test.go create mode 100644 structures/Interval.go create mode 100644 structures/Interval_test.go create mode 100644 structures/ListNode.go create mode 100644 structures/ListNode_test.go create mode 100644 structures/NestedInteger.go create mode 100644 structures/NestedInterger_test.go create mode 100644 structures/Point.go create mode 100644 structures/Point_test.go create mode 100644 structures/PriorityQueue.go create mode 100644 structures/PriorityQueue_test.go create mode 100644 structures/Quadtree/Quadtree.go create mode 100644 structures/Quadtree/Quadtree_test.go create mode 100644 structures/Queue.go create mode 100644 structures/Queue_test.go create mode 100644 structures/Stack.go create mode 100644 structures/Stack_test.go create mode 100644 structures/TreeNode.go create mode 100644 structures/TreeNode_test.go create mode 100644 structures/heap/FullBT_CompleteBT.jpg create mode 100644 structures/heap/index.en.html create mode 100644 structures/index.html create mode 100644 tags.html create mode 100644 template/CLRUCache.go create mode 100644 template/CLRUCache_test.go create mode 100644 template/LFUCache.go create mode 100644 template/LRUCache.go create mode 100644 template/SegmentTree.go create mode 100644 template/UnionFind.go create mode 100644 template/bucket.go create mode 100644 template/index.html diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..bb150a630 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,54 @@ +name: Build my gitbook and deploy to gh-pages + +on: + workflow_dispatch: + push: + branches: + - master + +jobs: + master-to-gh-pages: + runs-on: ubuntu-latest + + steps: + - name: checkout master + uses: actions/checkout@v2 + with: + submodules: recursive + ref: master + + - name: install nodejs + uses: actions/setup-node@v3 + with: + node-version: 10.14.1 + + - name: configue gitbook + run: | + npm install + npm install -g gitbook-cli + gitbook install + npm install -g gitbook-summary + + - name: generate _book folder + run: | + book sm + ln -s -f SUMMARY.md Content.md + gitbook build + cp SUMMARY.md _book + + - name: push _book to branch gh-pages + env: + TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} + REF: github.com/${{github.repository}} + MYEMAIL: kimi0230@gmail.com + MYNAME: ${{github.repository_owner}} + run: | + cd _book + git config --global user.email "${MYEMAIL}" + git config --global user.name "${MYNAME}" + git init + git remote add origin https://${REF} + git add . + git commit -m "Updated By Github Actions With Build ${{github.run_number}} of ${{github.workflow}} For Github Pages" + git branch -M master + git push --force --quiet "https://${TOKEN}@${REF}" master:gh-pages diff --git a/.github/workflows/releace.yml b/.github/workflows/releace.yml new file mode 100644 index 000000000..32839eec7 --- /dev/null +++ b/.github/workflows/releace.yml @@ -0,0 +1,75 @@ +name: Build latest tag + +on: + workflow_dispatch: + push: + tags: + - "v*.*.*" + +jobs: + build: + name: Build + runs-on: macos-latest + steps: + - name: checkout master + uses: actions/checkout@v2 + with: + submodules: recursive + ref: master + + - name: install nodejs + uses: actions/setup-node@v1 + + - name: install calibre + run: | + brew install calibre + + - name: configue gitbook + run: | + npm install -g gitbook-cli + gitbook install + npm install -g gitbook-summary + + - name: generate pdf file + run: | + book sm + ln -s -f SUMMARY.md README.md + gitbook pdf + gitbook epub + gitbook mobi + mkdir -p path/to/artifact + cp book.pdf path/to/artifact + cp book.epub path/to/artifact + cp book.mobi path/to/artifact + + - name: Upload file + uses: actions/upload-artifact@v2 + with: + name: book.pdf + path: path/to/artifact/book.pdf + + - name: Download file + id: download + uses: actions/download-artifact@v2 + with: + name: book.pdf + path: path/to/artifact + + - name: Display structure of downloaded files + run: ls -R + working-directory: path/to/artifact + + - name: 'Echo download path' + run: echo ${{steps.download.outputs.download-path}} + + - name: Release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + files: | + path/to/artifact/book.pdf + path/to/artifact/book.epub + path/to/artifact/book.mobi + LICENSE + env: + GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..6cc51ba2e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +_book +node_modules +.obsidian/* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..e69de29bb diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..608d3c699 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Package", + "type": "go", + "request": "launch", + "mode": "auto", + "program": "${fileDirname}" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..52a988850 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "vue.features.codeActions.enable": false +} \ No newline at end of file diff --git a/Algorithms/A1B2C3/a1b2c3.go b/Algorithms/A1B2C3/a1b2c3.go new file mode 100644 index 000000000..0bb37d4d1 --- /dev/null +++ b/Algorithms/A1B2C3/a1b2c3.go @@ -0,0 +1,80 @@ +package a1b2c3 + +import ( + "sync" +) + +func ChannelWBuffer() { + abc := make(chan struct{}, 1) + num := make(chan struct{}, 1) + done := make(chan struct{}) + abc <- struct{}{} + + go func() { + for i := 65; i <= 90; i++ { + <-abc + // fmt.Printf("%v", string(rune(i))) + num <- struct{}{} + } + }() + go func() { + for i := 1; i <= 26; i++ { + <-num + // fmt.Printf("%v", i) + abc <- struct{}{} + } + done <- struct{}{} + }() + // time.Sleep(1 * time.Second) + <-done +} + +func ChannelWOBuffer() { + abc := make(chan struct{}) + num := make(chan struct{}) + done := make(chan struct{}) + + go func() { + for i := 65; i <= 90; i++ { + // fmt.Printf("%v", string(rune(i))) + abc <- struct{}{} + <-num + } + }() + go func() { + for i := 1; i <= 26; i++ { + <-abc + // fmt.Printf("%v", i) + num <- struct{}{} + } + done <- struct{}{} + }() + // time.Sleep(1 * time.Second) + <-done +} + +func WGLock() { + abcMux := sync.Mutex{} + numMux := sync.Mutex{} + + numMux.Lock() + wg := sync.WaitGroup{} + wg.Add(2) + go func() { + defer wg.Done() + for i := 65; i <= 90; i++ { + abcMux.Lock() + // fmt.Printf("%v", string(rune(i))) + numMux.Unlock() + } + }() + go func() { + defer wg.Done() + for i := 1; i <= 26; i++ { + numMux.Lock() + // fmt.Printf("%v", i) + abcMux.Unlock() + } + }() + wg.Wait() +} diff --git a/Algorithms/A1B2C3/a1b2c3_test.go b/Algorithms/A1B2C3/a1b2c3_test.go new file mode 100644 index 000000000..f2f18c13a --- /dev/null +++ b/Algorithms/A1B2C3/a1b2c3_test.go @@ -0,0 +1,48 @@ +package a1b2c3 + +import "testing" + +func TestChannelWBuffer(t *testing.T) { + ChannelWBuffer() +} + +func TestChannelWOBuffer(t *testing.T) { + ChannelWOBuffer() +} +func TestWGLock(t *testing.T) { + WGLock() +} + +func BenchmarkChannelWBuffer(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ChannelWBuffer() + } +} + +func BenchmarkChannelWOBuffer(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ChannelWOBuffer() + } +} + +func BenchmarkWGLock(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + WGLock() + } +} + +// go test -benchmem -run=none LeetcodeGolang/Algorithms/A1B2C3 -bench=. +/* +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Algorithms/A1B2C3 +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkChannelWBuffer-4 79159 14612 ns/op 344 B/op 5 allocs/op +BenchmarkChannelWOBuffer-4 83068 14451 ns/op 344 B/op 5 allocs/op +BenchmarkWGLock-4 51303 23072 ns/op 96 B/op 5 allocs/op +PASS +ok LeetcodeGolang/Algorithms/A1B2C3 4.092s +*/ diff --git a/Algorithms/A1B2C3/index.html b/Algorithms/A1B2C3/index.html new file mode 100644 index 000000000..27d0a33b5 --- /dev/null +++ b/Algorithms/A1B2C3/index.html @@ -0,0 +1,3923 @@ + + + + + + + A1B2C3: Two Go Routine Print A1B2C3....Z26 · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+ +
+ + + + + + + + +
+
+ +
+
+ +
+ +

A1B2C3

用兩個 go routine 印出 A1B2C3....Z26 +Two Go Routine Print A1B2C3....Z26

+

Channle With Buffer

+
func ChannelWBuffer() {
+    abc := make(chan struct{}, 1)
+    num := make(chan struct{}, 1)
+    done := make(chan struct{})
+    abc 
+

Channel Without Buffer

+
func ChannelWOBuffer() {
+    abc := make(chan struct{})
+    num := make(chan struct{})
+    done := make(chan struct{})
+
+    go func() {
+        for i := 65; i 
+

Wait Group

+

+func WGLock() {
+    abcMux := sync.Mutex{}
+    numMux := sync.Mutex{}
+
+    numMux.Lock()
+    wg := sync.WaitGroup{}
+    wg.Add(2)
+    go func() {
+        defer wg.Done()
+        for i := 65; i 
+

Benchmark

+
goos: darwin
+goarch: amd64
+pkg: LeetcodeGolang/Algorithms/A1B2C3
+cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
+BenchmarkChannelWBuffer-4          79159             14612 ns/op             344 B/op          5 allocs/op
+BenchmarkChannelWOBuffer-4         83068             14451 ns/op             344 B/op          5 allocs/op
+BenchmarkWGLock-4                  51303             23072 ns/op              96 B/op          5 allocs/op
+PASS
+ok      LeetcodeGolang/Algorithms/A1B2C3        4.092s
+
+
© Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
+ +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +
    + +
    + + + + + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Algorithms/Find_Target_Last_Index/findtargetlastindex.go b/Algorithms/Find_Target_Last_Index/findtargetlastindex.go new file mode 100644 index 000000000..86a57ed4c --- /dev/null +++ b/Algorithms/Find_Target_Last_Index/findtargetlastindex.go @@ -0,0 +1,50 @@ +package findtargetlastindex + +// RightBound, 有點類似 nums 大於 target的元素有幾個 + +// 二分搜尋 +func Solution(nums []int, target int) int { + + left, right := 0, len(nums)-1 + + for left <= right { + mid := int(uint(left+right) >> 1) + if nums[mid] == target { + if nums[right] == target { + return right + } else { + right-- + } + } else if nums[mid] < target { + left = mid + 1 + } else { + right = mid - 1 + } + } + return -1 +} + +func SolutionRecursive(nums []int, target int) int { + left, right := 0, len(nums)-1 + return findTarget(nums, left, right, target) +} + +func findTarget(nums []int, left, right, target int) int { + if left > right { + return -1 + } + + mid := int(uint(left+right) >> 1) + if nums[mid] == target { + if nums[right] == target { + return right + } else { + return findTarget(nums, mid, right-1, target) + } + } else if nums[mid] < target { + return findTarget(nums, mid+1, right, target) + } else { + return findTarget(nums, left, mid-1, target) + } + +} diff --git a/Algorithms/Find_Target_Last_Index/findtargetlastindex.html b/Algorithms/Find_Target_Last_Index/findtargetlastindex.html new file mode 100644 index 000000000..c72eb3511 --- /dev/null +++ b/Algorithms/Find_Target_Last_Index/findtargetlastindex.html @@ -0,0 +1,3998 @@ + + + + + + + Find Target Last Index · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    +
    + +
    + +

    Find Target Last Index

    在有序的array中 找出target在array中最後的index是什麼 +用二分搜尋法去找, RightBound

    +

    可參考

    +

    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0704.Binary-Search/main.go

    +

    方法一

    +
    func Solution(nums []int, target int) int {
    +    left, right := 0, len(nums)-1
    +    result := -1
    +    for left <= right="" {="" mid="" :="int(uint(right+left)">> 1)
    +        if nums[mid] == target {
    +            // 繼續找, 縮小右邊
    +            if target == nums[right] {
    +                result = right
    +                break
    +            } else {
    +                right--
    +            }
    +        } else if nums[mid] < target {
    +            // 往右找
    +            left = mid + 1
    +        } else if nums[mid] > target {
    +            // 往左找
    +            right = mid - 1
    +        }
    +    }
    +    return result
    +}
    +
    +
    +

    方法二 遞迴

    +
    func SolutionRecursive(nums []int, target int) int {
    +    left, right := 0, len(nums)-1
    +    return findTarget(nums, left, right, target)
    +}
    +
    +func findTarget(nums []int, left, right, target int) int {
    +    if left > right {
    +        return -1
    +    }
    +
    +    mid := int(uint(left+right) >> 1)
    +    if nums[mid] == target {
    +        if nums[right] == target {
    +            return right
    +        } else {
    +            return findTarget(nums, mid, right-1, target)
    +        }
    +    } else if nums[mid] < target {
    +        return findTarget(nums, mid+1, right, target)
    +    } else {
    +        return findTarget(nums, left, mid-1, target)
    +    }
    +
    +}
    +
    +
    go test -benchmem -run=none LeetcodeGolang/Algorithms/Find_Target_Last_Index -bench=.
    +goos: darwin
    +goarch: amd64
    +pkg: LeetcodeGolang/Algorithms/Find_Target_Last_Index
    +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
    +BenchmarkSolution-8             54216429                24.75 ns/op            0 B/op          0 allocs/op
    +BenchmarkSolutionRecursive-8    40756744                27.75 ns/op            0 B/op          0 allocs/op
    +PASS
    +ok      LeetcodeGolang/Algorithms/Find_Target_Last_Index        2.537s
    +
    +
    +

    RightBound

    +
    // 有點類似 nums 大於 target的元素有幾個
    +func RightBound(nums []int, target int) (index int) {
    +    lenght := len(nums)
    +    if lenght <= 0="" {="" return="" -1="" }="" left,="" right="" :="0," lenght-1="" for="" left="" <="right" 除以2="" mid="" +="" (right-left)="">>1
    +        mid := int(uint(right+left) >> 1)
    +        if nums[mid] == target {
    +            // 注意:要繼續找右邊, 所以把左邊變大=mid+1
    +            left = mid + 1
    +        } else if nums[mid] < target {
    +            // 找右邊
    +            left = mid + 1
    +        } else if nums[mid] > target {
    +            // 找左邊
    +            right = mid - 1
    +        }
    +    }
    +    // 都沒找到 注意:right越界情況
    +    if right < 0 || nums[right] != target {
    +        return -1
    +    }
    +    return right
    +}
    +
    +

    LeftBound

    +
    // 有點類似 nums 小於 target的元素有幾個
    +func LeftBound(nums []int, target int) (index int) {
    +    lenght := len(nums)
    +    if lenght <= 0="" {="" return="" -1="" }="" left,="" right="" :="0," lenght-1="" for="" left="" <="right" 除以2="" mid="" +="" (right-left)="">>1
    +        mid := int(uint(right+left) >> 1)
    +        if nums[mid] == target {
    +            // 要繼續找左邊, 所以把右邊變小
    +            right = mid - 1
    +        } else if nums[mid] < target {
    +            // 找右邊
    +            left = mid + 1
    +        } else if nums[mid] > target {
    +            // 找左邊
    +            right = mid - 1
    +        }
    +    }
    +    // 都沒找到 注意: left越界情況
    +    if left >= lenght || nums[left] != target {
    +        return -1
    +    }
    +    return left
    +}
    +
    +
    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
    + +
    + +
    +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Algorithms/Find_Target_Last_Index/findtargetlastindex_test.go b/Algorithms/Find_Target_Last_Index/findtargetlastindex_test.go new file mode 100644 index 000000000..d5ae6f89c --- /dev/null +++ b/Algorithms/Find_Target_Last_Index/findtargetlastindex_test.go @@ -0,0 +1,98 @@ +package findtargetlastindex + +import "testing" + +var tests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{1, 2, 3, 4, 5, 6, 6, 6, 9}, + 6, + 7, + }, + { + []int{1, 2, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 8, 9, 9, 9, 9}, + 6, + 12, + }, + { + []int{1, 2, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 8, 9, 9, 9, 9}, + 5, + 6, + }, + { + []int{5, 7, 7, 8, 8, 10}, + 8, + 4, + }, + { + []int{5, 7, 7, 8, 8, 10}, + 6, + -1, + }, + { + []int{1, 2, 3, 4, 5}, + 3, + 2, + }, + { + []int{1, 2, 3, 4, 5}, + 5, + 4, + }, + {[]int{1, 2, 3, 4, 5}, + 0, + -1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionRecursive(t *testing.T) { + for _, tt := range tests { + // start := 0 + // end := len(tt.arg1) - 1 + if got := SolutionRecursive(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + + // SolutionRecursive(tt.arg1, start, end, tt.arg2) + } +} + +func BenchmarkSolution(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + for _, tt := range tests { + Solution(tt.arg1, tt.arg2) + } + } +} +func BenchmarkSolutionRecursive(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + for _, tt := range tests { + SolutionRecursive(tt.arg1, tt.arg2) + } + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Algorithms/Find_Target_Last_Index -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Algorithms/Find_Target_Last_Index +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkSolution-8 54216429 24.75 ns/op 0 B/op 0 allocs/op +BenchmarkSolutionRecursive-8 40756744 27.75 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Algorithms/Find_Target_Last_Index 2.537s +*/ diff --git a/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/index.html b/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/index.html new file mode 100644 index 000000000..e7adcc1d4 --- /dev/null +++ b/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/index.html @@ -0,0 +1,3934 @@ + + + + + + + Intersection Of Two Sorted Arrays Using In Place Approach · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      Intersection of Two Sorted Arrays using In Place Approach

      Intersection of Two Sorted Arrays using In Place Approach

      +

      要在原地(in-place)解決這個問題,可以使用雙指針的方法。假設給定的兩個數組分別為A和B,它們已經按升序排序。

      +

      首先,我們可以初始化兩個指針i和j分別指向A和B的起始位置,然後開始進行比較。如果A[i]小於B[j],則移動指針i向後移動一位;如果A[i]大於B[j],則移動指針j向後移動一位;如果A[i]等於B[j],則將該值添加到結果中,並將兩個指針都向後移動一位。

      +

      重複上述步驟,直到其中一個數組的指針達到數組末尾為止。最終,得到的結果就是兩個數組的交集。

      +
      package intersection
      +
      +func FindIntersection(A, B []int) []int {
      +    var i, j int = 0, 0
      +    result := []int{}
      +
      +    for i < len(A) && j < len(B) {
      +        if A[i] < B[j] {
      +            i++
      +        } else if A[i] > B[j] {
      +            j++
      +        } else {
      +            result = append(result, A[i])
      +            i++
      +            j++
      +        }
      +    }
      +    return result
      +}
      +
      +
      func TestFindIntersection(t *testing.T) {
      +    var tests = []struct {
      +        arg1 []int
      +        arg2 []int
      +        want []int
      +    }{
      +        {
      +            arg1: []int{1, 3, 4, 6, 7},
      +            arg2: []int{2, 4, 6, 8, 9},
      +            want: []int{4, 6},
      +        },
      +    }
      +
      +    for _, tt := range tests {
      +        if got := FindIntersection(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) {
      +            t.Errorf("got = %v, want = %v", got, tt.want)
      +        }
      +    }
      +}
      +
      +

      TODO: +延伸

      +
        +
      1. 349. Intersection of Two Arrays (easy)
      2. +
      3. 350. Intersection of Two Arrays II
      4. +
      +
      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
      + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection.go b/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection.go new file mode 100644 index 000000000..60b892662 --- /dev/null +++ b/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection.go @@ -0,0 +1,19 @@ +package intersection + +func FindIntersection(A, B []int) []int { + var i, j int = 0, 0 + result := []int{} + + for i < len(A) && j < len(B) { + if A[i] < B[j] { + i++ + } else if A[i] > B[j] { + j++ + } else { + result = append(result, A[i]) + i++ + j++ + } + } + return result +} diff --git a/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection_test.go b/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection_test.go new file mode 100644 index 000000000..a757ec2f2 --- /dev/null +++ b/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/intersection_test.go @@ -0,0 +1,26 @@ +package intersection + +import ( + "reflect" + "testing" +) + +func TestFindIntersection(t *testing.T) { + var tests = []struct { + arg1 []int + arg2 []int + want []int + }{ + { + arg1: []int{1, 3, 4, 6, 7}, + arg2: []int{2, 4, 6, 8, 9}, + want: []int{4, 6}, + }, + } + + for _, tt := range tests { + if got := FindIntersection(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Algorithms/SearchGraph/index.html b/Algorithms/SearchGraph/index.html new file mode 100644 index 000000000..1c231fdae --- /dev/null +++ b/Algorithms/SearchGraph/index.html @@ -0,0 +1,4010 @@ + + + + + + + Search Graph In Golang · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        Search Graph

             2
        +   /   \
        +  /     \
        + 1 - 3 - 5 - 7
        +  \        /
        +   \      6
        +    \   /
        +      4
        +
        +一個Graph,隨便指定一個起點, 優先print出周圍的值
        +
        +// 1 -> [2, 3, 4]
        +// 2 -> [1, 5]
        +// 3 -> [1, 5]
        +// 4 -> [1, 6]
        +// 5 -> [2, 3, 7]
        +// 6 -> [4, 7]
        +// 7 -> [5, 6]
        +// print : 1,2,3,4,5,6,7
        +// Also this is valid : 1,4,3,2,6,5,7
        +
        +例如 開始位置1, print : 1,2,3,4,5,6,
        +
        +

        解法

        +

        用BFS(Queue) +時間複雜度是O(V+E),其中V是圖中節點的數量,E是圖中邊的數量

        +

        解答

        +
        package searchgraph
        +
        +import (
        +    "LeetcodeGolang/Utility/crud"
        +    "LeetcodeGolang/structures"
        +    "fmt"
        +    "strconv"
        +
        +    jsoniter "github.com/json-iterator/go"
        +)
        +
        +func fetchNeighbours(node int) []int {
        +    crud := crud.NewCrud("https://hackbear.tv/graph/" + strconv.Itoa(node))
        +    var result = []int{}
        +
        +    if got := crud.Get(); got.Error != nil {
        +        // fmt.Printf("got = %v", got)
        +    } else {
        +        var json = jsoniter.ConfigCompatibleWithStandardLibrary
        +        json.Unmarshal([]byte(got.Response), &result)
        +    }
        +    return result
        +}
        +
        +/*
        +     2
        +   /   \
        +  /     \
        + 1 - 3 - 5 - 7
        +  \        /
        +   \      6
        +    \   /
        +      4
        +*/
        +
        +// 1 -> [2, 3, 4]
        +// 2 -> [1, 5]
        +// 3 -> [1, 5]
        +// 4 -> [1, 6]
        +// 5 -> [2, 3, 7]
        +// 6 -> [4, 7]
        +// 7 -> [5, 6]
        +// print : 1,2,3,4,5,6,7
        +// Also this is valid : 1,4,3,2,6,5,7
        +
        +// You will be working on this part
        +/*
        +時間複雜度是O(V+E),其中V是圖中節點的數量,E是圖中邊的數量
        +*/
        +func SearchGraph(start int) {
        +    queue := structures.NewQueue()
        +    queue.Push(start)
        +    visit := make(map[int][]int)
        +    for queue.Len() > 0 {
        +        node := queue.Pop()
        +        if _, ok := visit[node]; !ok {
        +            fmt.Printf("%d ", node)
        +            neighours := fetchNeighbours(node)
        +            visit[node] = neighours
        +            for _, neighour := range neighours {
        +                if _, ok := visit[neighour]; !ok {
        +                    queue.Push(neighour)
        +                }
        +            }
        +        }
        +
        +    }
        +}
        +
        +func SearchGraph2(start int) {
        +    queue := structures.NewQueue()
        +    queue.Push(start)
        +    visited := make(map[int]bool)
        +    for queue.Len() > 0 {
        +        node := queue.Pop()
        +        if !visited[node] {
        +            fmt.Printf("%d ", node)
        +            visited[node] = true
        +            neighbors := fetchNeighbours(node)
        +            for _, neighbor := range neighbors {
        +                if !visited[neighbor] {
        +                    queue.Push(neighbor)
        +                }
        +            }
        +        }
        +    }
        +}
        +
        +

        Reference

        + +
        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
        + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Algorithms/SearchGraph/main.go b/Algorithms/SearchGraph/main.go new file mode 100644 index 000000000..c1651e6cb --- /dev/null +++ b/Algorithms/SearchGraph/main.go @@ -0,0 +1,87 @@ +package searchgraph + +import ( + "LeetcodeGolang/Utility/crud" + "LeetcodeGolang/structures" + "fmt" + "strconv" + + jsoniter "github.com/json-iterator/go" +) + +func fetchNeighbours(node int) []int { + crud := crud.NewCrud("https://hackbear.tv/graph/" + strconv.Itoa(node)) + var result = []int{} + + if got := crud.Get(); got.Error != nil { + // fmt.Printf("got = %v", got) + } else { + var json = jsoniter.ConfigCompatibleWithStandardLibrary + json.Unmarshal([]byte(got.Response), &result) + } + return result +} + +/* + 2 + / \ + / \ + 1 - 3 - 5 - 7 + \ / + \ 6 + \ / + 4 +*/ + +// 1 -> [2, 3, 4] +// 2 -> [1, 5] +// 3 -> [1, 5] +// 4 -> [1, 6] +// 5 -> [2, 3, 7] +// 6 -> [4, 7] +// 7 -> [5, 6] +// print : 1,2,3,4,5,6,7 +// Also this is valid : 1,4,3,2,6,5,7 + +// You will be working on this part +/* +時間複雜度是O(V+E),其中V是圖中節點的數量,E是圖中邊的數量 +*/ +func SearchGraph(start int) { + queue := structures.NewQueue() + queue.Push(start) + visit := make(map[int][]int) + for queue.Len() > 0 { + node := queue.Pop() + if _, ok := visit[node]; !ok { + fmt.Printf("%d ", node) + neighours := fetchNeighbours(node) + visit[node] = neighours + for _, neighour := range neighours { + if _, ok := visit[neighour]; !ok { + queue.Push(neighour) + } + } + } + + } +} + +func SearchGraph2(start int) { + queue := structures.NewQueue() + queue.Push(start) + visited := make(map[int]bool) + for queue.Len() > 0 { + node := queue.Pop() + if !visited[node] { + fmt.Printf("%d ", node) + visited[node] = true + neighbors := fetchNeighbours(node) + for _, neighbor := range neighbors { + if !visited[neighbor] { + queue.Push(neighbor) + } + } + } + } +} diff --git a/Algorithms/SearchGraph/main_test.go b/Algorithms/SearchGraph/main_test.go new file mode 100644 index 000000000..e993d95f2 --- /dev/null +++ b/Algorithms/SearchGraph/main_test.go @@ -0,0 +1,29 @@ +package searchgraph + +import "testing" + +func TestSearchGraph(t *testing.T) { + SearchGraph(1) +} + +func TestSearchGraph2(t *testing.T) { + SearchGraph2(1) +} +func BenchmarkSearchGraph(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SearchGraph(1) + } +} + +func BenchmarkSearchGraph2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SearchGraph2(1) + } +} + +// go test -benchmem -run=none LeetcodeGolang/Algorithms/SearchGraph -bench=. +/* + + */ diff --git a/Algorithms/WeightedEditDistance/index.html b/Algorithms/WeightedEditDistance/index.html new file mode 100644 index 000000000..5e1401186 --- /dev/null +++ b/Algorithms/WeightedEditDistance/index.html @@ -0,0 +1,3953 @@ + + + + + + + Weighted Edit Distance · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          WeightedEditDistance

          WeightedEditDistance 是一個計算帶有權重的編輯距離的函式。編輯距離是衡量兩個字串之間的相似度的指標,表示將一個字串轉換為另一個字串所需的最小操作數量。

          +

          在標準的編輯距離算法中,操作包括插入、刪除和替換字符。每個操作都被認為具有相同的代價。然而,在 WeightedEditDistance 中,每個字符的操作代價可以不同,並由一個權重映射表指定。

          +

          函式 WeightedEditDistance 接受兩個字符串 word1word2,以及一個權重映射表 weights。該映射表將每個字符映射到其相應的權重值,用於計算操作的代價。

          +

          該函式使用動態規劃的方法計算編輯距離。它創建一個二維矩陣 dp,其中 dp[i][j] 表示將 word1[:i] 轉換為 word2[:j] 的最小操作代價。

          +

          算法的核心是遍歷 dp 矩陣並計算每個單元格的值。如果 word1[i-1] 等於 word2[j-1],則表示兩個字符相等,不需要進行操作,所以 dp[i][j] 等於 dp[i-1][j-1]。否則,需要考慮插入、刪除和替換操作的代價,並取其中最小的作為 dp[i][j] 的值。

          +

          最終,函式返回 dp[m][n],其中 mn 分別為 word1word2 的長度,表示將整個字串 word1 轉換為 word2 的最小操作代價。

          +

          使用 WeightedEditDistance 函式,您可以根據字符的權重值計算帶有自定義操作代價的編輯距離,以更好地反映兩個字串之間的相似性。

          +

          題目大意

          +

          weightededitdistance 雖然不是一個特定的LeetCode問題,但它涉及到一個概念:加權編輯距離(Weighted Edit Distance)。

          +

          加權編輯距離是指在兩個字串之間進行編輯操作(插入、刪除、替換)時,每個操作具有不同的成本或權重。該問題要求計算從一個字串轉換到另一個字串的最小總成本或權重。

          +

          解題思路

          +

          解決加權編輯距離問題的常用方法是使用動態規劃(Dynamic Programming)。

          +
            +
          1. 創建一個二維數組dp,其中dp[i][j]表示將字串1的前i個字符轉換為字串2的前j個字符的最小加權編輯距離。

            +
          2. +
          3. 初始化dp矩陣的第一行和第一列,分別表示將空字串轉換為字串1和字串2的成本,根據具體問題設置初始值。

            +
          4. +
          5. 遍歷dp矩陣,計算每個dp[i][j]的值,根據以下三種情況進行選擇:

            +
              +
            • 如果字串1的第i個字符等於字串2的第j個字符,則dp[i][j]等於dp[i-1][j-1],即不需要進行編輯操作,繼承前一個狀態的編輯距離。

              +
            • +
            • 否則,dp[i][j]等於插入操作的成本加上dp[i][j-1],刪除操作的成本加上dp[i-1][j],替換操作的成本加上dp[i-1][j-1],取這三種操作的最小值。

              +
            • +
            +
          6. +
          7. 最終,dp[m][n](其中m和n分別為兩個字串的長度)即為兩個字串的最小加權編輯距離。

            +
          8. +
          + + + + + + + + + + + + + +
          替換 /跳過
          dp[i-1][j-1]
          刪除
          dp[i-1][j]
          插入
          dp[i][j-1]
          dp[i][j]
          +

          時間複雜度: 動態規劃的遍歷過程需要計算和填充dp矩陣的每個元素,因此時間複雜度為O(m*n),其中m和n分別為兩個字串的長度。

          +

          空間複雜度: 需要使用一個二維數組dp來保存中間結果,因此空間複雜度為O(m*n)。

          +

          解答

          +
          package weightededitdistance
          +
          +import "fmt"
          +
          +func WeightedEditDistance(word1, word2 string, weights map[rune]int) int {
          +    m, n := len(word1), len(word2)
          +
          +    // 創建二維矩陣用於保存編輯距離
          +    // dp,其中 dp[i][j] 表示將 word1[:i] 轉換為 word2[:j] 的最小操作代價
          +    dp := make([][]int, m+1)
          +    for i := 0; i 
          +

          相關 0072.Edit-Distance

          +
          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
          + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Algorithms/WeightedEditDistance/main.go b/Algorithms/WeightedEditDistance/main.go new file mode 100644 index 000000000..a25bcadcf --- /dev/null +++ b/Algorithms/WeightedEditDistance/main.go @@ -0,0 +1,55 @@ +package weightededitdistance + +import "fmt" + +func WeightedEditDistance(word1, word2 string, weights map[rune]int) int { + m, n := len(word1), len(word2) + + // 創建二維矩陣用於保存編輯距離 + // dp,其中 dp[i][j] 表示將 word1[:i] 轉換為 word2[:j] 的最小操作代價 + dp := make([][]int, m+1) + for i := 0; i <= m; i++ { + dp[i] = make([]int, n+1) + } + + // 初始化第一列, base case + for i := 1; i <= m; i++ { + dp[i][0] = dp[i-1][0] + weights[rune(word1[i-1])] + } + + // 初始化第一行 + for j := 1; j <= n; j++ { + dp[0][j] = dp[0][j-1] + weights[rune(word2[j-1])] + + } + // fmt.Println(dp) + // 填充編輯距離矩陣 + for i := 1; i <= m; i++ { + for j := 1; j <= n; j++ { + if word1[i-1] == word2[j-1] { + dp[i][j] = dp[i-1][j-1] + } else { + // 計算插入、刪除和替換操作的代價 + // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1 + insertCost := dp[i][j-1] + weights[rune(word2[j-1])] + deleteCost := dp[i-1][j] + weights[rune(word1[i-1])] + replaceCost := dp[i-1][j-1] + weights[rune(word1[i-1])] + weights[rune(word2[j-1])] + // 取最小的代價作為當前操作的編輯距離 + dp[i][j] = min(insertCost, deleteCost, replaceCost) + } + } + } + fmt.Println(dp) + return dp[m][n] +} + +// 輔助函式,返回三個數字中的最小值 +func min(a, b, c int) int { + if a <= b && a <= c { + return a + } else if b <= a && b <= c { + return b + } else { + return c + } +} diff --git a/Algorithms/WeightedEditDistance/main_test.go b/Algorithms/WeightedEditDistance/main_test.go new file mode 100644 index 000000000..8ae394558 --- /dev/null +++ b/Algorithms/WeightedEditDistance/main_test.go @@ -0,0 +1,43 @@ +package weightededitdistance + +import ( + "testing" +) + +func TestWeightedEditDistance(t *testing.T) { + tests := []struct { + word1 string + word2 string + weights map[rune]int + expected int + }{ + {"abc", "", map[rune]int{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}, 6}, + {"abc", "def", map[rune]int{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}, 21}, + {"kitten", "sitting", map[rune]int{'k': 1, 'i': 2, 't': 3, 'e': 4, 'n': 5, 's': 6, 'g': 7}, 20}, + } + + for _, test := range tests { + actual := WeightedEditDistance(test.word1, test.word2, test.weights) + if actual != test.expected { + t.Errorf("WeightedEditDistance(%s, %s, %v) = %d, expected %d", test.word1, test.word2, test.weights, actual, test.expected) + } + } +} + +/* +{"abc", "def", map[rune]int{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}, 21}, +a 與 d 的替換代價:1 + 4 = 5 +b 與 e 的替換代價:2 + 5 = 7 +c 與 f 的替換代價:3 + 6 = 9 +因此,最小操作代價是 5 + 7 + 9 = 21 + +{"kitten", "sitting", map[rune]int{'k': 1, 'i': 2, 't': 3, 'e': 4, 'n': 5, 's': 6, 'g': 7}, 14}, +k 转换为 s 的替换代价:1 + 6 = 7 +i 转换为 i 的替换代价:0 +t 转换为 t 的替换代价:0 +t 转换为 t 的替换代价:0 +e 转换为 i 的替换代价:4 + 2 = 6 +n 转换为 n 的替换代价:5 + 5 = 10 +因此,最小操作代价是 7 + 4 + 6 + 6 + 6 + 10 = 39 + +*/ diff --git a/CHANGELOG.html b/CHANGELOG.html new file mode 100644 index 000000000..7b7d8e7eb --- /dev/null +++ b/CHANGELOG.html @@ -0,0 +1,3898 @@ + + + + + + + CHANGELOG · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            +
            + + + + + + + + +
            + +
            + +
            + + + + + + + + +
            +
            + +
            +
            + +
            + +

            kk2

            +
            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
            + + +
            + +
            +
            +
            + +

            results matching ""

            +
              + +
              +
              + +

              No results matching ""

              + +
              +
              +
              + +
              +
              + +
              + + + + + + + + + + + + + + +
              + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CodeSignal/Arcade/01.Intro/01.Add/main.go b/CodeSignal/Arcade/01.Intro/01.Add/main.go new file mode 100644 index 000000000..45b4ed8ee --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/01.Add/main.go @@ -0,0 +1,5 @@ +package add + +func Add(param1 int, param2 int) int { + return param1 + param2 +} diff --git a/CodeSignal/Arcade/01.Intro/01.Add/main_test.go b/CodeSignal/Arcade/01.Intro/01.Add/main_test.go new file mode 100644 index 000000000..157663e5a --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/01.Add/main_test.go @@ -0,0 +1,33 @@ +package add + +import ( + "fmt" + "testing" +) + +func TestAddSingel(t *testing.T) { + ans := Add(2, 2) + if ans != 4 { + t.Errorf("IntMin(2) = %d; want 5", ans) + } +} + +func TestAddTableDriven(t *testing.T) { + var tests = []struct { + a, b int + want int + }{ + {1, 1, 2}, + {2, 2, 4}, + {-3, 3, 0}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%d %d", tt.a, tt.b) + t.Run(testname, func(t *testing.T) { + ans := Add(tt.a, tt.b) + if ans != tt.want { + t.Errorf("got %d, want %d", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/02centuryFromYear/main.go b/CodeSignal/Arcade/01.Intro/02centuryFromYear/main.go new file mode 100644 index 000000000..1ea01fa20 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/02centuryFromYear/main.go @@ -0,0 +1,10 @@ +package centuryfromyear + +func centuryFromYear(year int) int { + carry := year % 100 + if carry > 0 { + return year/100 + 1 + } else { + return year / 100 + } +} diff --git a/CodeSignal/Arcade/01.Intro/02centuryFromYear/main_test.go b/CodeSignal/Arcade/01.Intro/02centuryFromYear/main_test.go new file mode 100644 index 000000000..f10c53da2 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/02centuryFromYear/main_test.go @@ -0,0 +1,33 @@ +package centuryfromyear + +import ( + "fmt" + "testing" +) + +func TestCenturyFromYearSingel(t *testing.T) { + ans := centuryFromYear(2001) + if ans != 21 { + t.Errorf("centuryFromYear(2001) = %d; want 21", ans) + } +} + +func TestCenturyFromYearTableDriven(t *testing.T) { + var tests = []struct { + a int + want int + }{ + {1, 1}, + {1700, 17}, + {2001, 21}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%d ", tt.a) + t.Run(testname, func(t *testing.T) { + ans := centuryFromYear(tt.a) + if ans != tt.want { + t.Errorf("got %d, want %d", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/03.checkPalindrome/main.go b/CodeSignal/Arcade/01.Intro/03.checkPalindrome/main.go new file mode 100644 index 000000000..b3dd6795d --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/03.checkPalindrome/main.go @@ -0,0 +1,18 @@ +package checkpalindrome + +func checkPalindrome(inputString string) bool { + strLen := len(inputString) + if strLen < 2 { + return true + } + left, right := 0, strLen-1 + + for left < right { + if inputString[left] != inputString[right] { + return false + } + left++ + right-- + } + return true +} diff --git a/CodeSignal/Arcade/01.Intro/03.checkPalindrome/main_test.go b/CodeSignal/Arcade/01.Intro/03.checkPalindrome/main_test.go new file mode 100644 index 000000000..5f13a327e --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/03.checkPalindrome/main_test.go @@ -0,0 +1,33 @@ +package checkpalindrome + +import ( + "fmt" + "testing" +) + +func TestCheckPalindromeSingel(t *testing.T) { + ans := checkPalindrome("abba") + if ans != true { + t.Errorf("checkPalindrome(abba) = %v; want true", ans) + } +} + +func TestCheckPalindromeTableDriven(t *testing.T) { + var tests = []struct { + a string + want bool + }{ + {"abba", true}, + {"abcba", true}, + {"test", false}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%v ", tt.a) + t.Run(testname, func(t *testing.T) { + ans := checkPalindrome(tt.a) + if ans != tt.want { + t.Errorf("got %v, want %v", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main.go b/CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main.go new file mode 100644 index 000000000..cf9a01672 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main.go @@ -0,0 +1,12 @@ +package adjacentelementsproduct + +func adjacentElementEproduct(inputArray []int) int { + maxProduct := inputArray[0] * inputArray[1] + for i := 1; i < len(inputArray)-1; i++ { + tmpProduct := inputArray[i] * inputArray[i+1] + if tmpProduct > maxProduct { + maxProduct = tmpProduct + } + } + return maxProduct +} diff --git a/CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main_test.go b/CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main_test.go new file mode 100644 index 000000000..a09530779 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/04.adjacentElementsProduct/main_test.go @@ -0,0 +1,29 @@ +package adjacentelementsproduct + +import ( + "fmt" + "testing" +) + +func TestAdjacentElementEproduct(t *testing.T) { + var tests = []struct { + input []int + want int + }{ + {[]int{3, 6, -2, -5, 7, 3}, 21}, + {[]int{-1, -2}, 2}, + {[]int{5, 1, 2, 3, 1, 4}, 6}, + {[]int{9, 5, 10, 2, 24, -1, -48}, 50}, + {[]int{5, 6, -4, 2, 3, 2, -23}, 30}, + } + + for _, tt := range tests { + testname := fmt.Sprintf("input: %v", tt.input) + t.Run(testname, func(t *testing.T) { + ans := adjacentElementEproduct(tt.input) + if ans != tt.want { + t.Errorf("got %d, want %d", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/05.shapeArea/main.go b/CodeSignal/Arcade/01.Intro/05.shapeArea/main.go new file mode 100644 index 000000000..56226d4c1 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/05.shapeArea/main.go @@ -0,0 +1,5 @@ +package shapearea + +func shapeArea(n int) int { + return (n-1)*(n-1) + n*n +} diff --git a/CodeSignal/Arcade/01.Intro/05.shapeArea/main_test.go b/CodeSignal/Arcade/01.Intro/05.shapeArea/main_test.go new file mode 100644 index 000000000..45ae63784 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/05.shapeArea/main_test.go @@ -0,0 +1,33 @@ +package shapearea + +import ( + "fmt" + "testing" +) + +func TestShapeAreaSingel(t *testing.T) { + ans := shapeArea(2) + if ans != 5 { + t.Errorf("IntMin(2) = %d; want 5", ans) + } +} + +func TestShapeAreaTableDriven(t *testing.T) { + var tests = []struct { + a int + want int + }{ + {1, 1}, + {2, 5}, + {3, 13}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%d ", tt.a) + t.Run(testname, func(t *testing.T) { + ans := shapeArea(tt.a) + if ans != tt.want { + t.Errorf("got %d, want %d", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main.go b/CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main.go new file mode 100644 index 000000000..69817635e --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main.go @@ -0,0 +1,27 @@ +package makearrayconsecutive2 + +import "sort" + +func makeArrayConsecutive2(statues []int) int { + sort.Ints(statues) + max := statues[len(statues)-1] + min := statues[0] + total := (max - min) + 1 + + minAdditional := total - len(statues) + + return minAdditional + + // sort.Ints(statues) + // max:=statues[len(statues)-1] + // min:=statues[0] + // currentIdx,result := 0,0 + // for i:= min; i i { + // result++ + // }else{ + // currentIdx++ + // } + // } + // return result +} diff --git a/CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main_test.go b/CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main_test.go new file mode 100644 index 000000000..499048766 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/06.Make-Array-Consecutive-2/main_test.go @@ -0,0 +1,33 @@ +package makearrayconsecutive2 + +import ( + "fmt" + "testing" +) + +func TestMakeArrayConsecutive2Singel(t *testing.T) { + ans := makeArrayConsecutive2([]int{6, 2, 3, 8}) + if ans != 3 { + t.Errorf("makeArrayConsecutive2([]int{6, 2, 3, 8}) = %d; want 3", ans) + } +} + +func TestMakeArrayConsecutive2TableDriven(t *testing.T) { + var tests = []struct { + a []int + want int + }{ + {[]int{6, 2, 3, 8}, 3}, + {[]int{0, 3}, 2}, + {[]int{5, 4, 6}, 0}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%d ", tt.a) + t.Run(testname, func(t *testing.T) { + ans := makeArrayConsecutive2(tt.a) + if ans != tt.want { + t.Errorf("got %d, want %d", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main.go b/CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main.go new file mode 100644 index 000000000..183834663 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main.go @@ -0,0 +1,22 @@ +package almostincreasingsequence + +func almostIncreasingSequence(sequence []int) bool { + removed := false + for i := 1; i < len(sequence); i++ { + if sequence[i] <= sequence[i-1] { + if removed { + return false + } + removed = true + if i == 1 || sequence[i] > sequence[i-2] { + // remove index i-1 + sequence[i-1] = sequence[i] + } else { + // remove index i + sequence[i] = sequence[i-1] + } + } + + } + return true +} diff --git a/CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main_test.go b/CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main_test.go new file mode 100644 index 000000000..fb8048c2d --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/07.almostIncreasingSequence/main_test.go @@ -0,0 +1,40 @@ +package almostincreasingsequence + +import ( + "fmt" + "testing" +) + +func TestAlmostIncreasingSequenceSingel(t *testing.T) { + ans := almostIncreasingSequence([]int{1, 3, 2, 1}) + if ans != false { + t.Errorf("almostIncreasingSequence([]int{1, 3, 2, 1}) = %v; want false", ans) + } +} + +func TestAlmostIncreasingSequenceTableDriven(t *testing.T) { + var tests = []struct { + a []int + want bool + }{ + {[]int{1, 3, 2, 1}, false}, + {[]int{1, 3, 2}, true}, + {[]int{1, 2, 1, 2}, false}, + {[]int{3, 6, 5, 8, 10, 20, 15}, false}, + {[]int{1, 1, 2, 3, 4, 4}, false}, + {[]int{1, 4, 10, 4, 2}, false}, + {[]int{10, 1, 2, 3, 4, 5}, true}, + {[]int{1, 1, 1, 2, 3}, false}, + {[]int{0, -2, 5, 6}, true}, + {[]int{1, 2, 3, 4, 5, 3, 5, 6}, false}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%d ", tt.a) + t.Run(testname, func(t *testing.T) { + ans := almostIncreasingSequence(tt.a) + if ans != tt.want { + t.Errorf("got %v, want %v", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main.go b/CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main.go new file mode 100644 index 000000000..cf8a6c9df --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main.go @@ -0,0 +1,15 @@ +package matrixelementssum + +// 從左上往左下走, 遇到0就結束. 一路由左邊統計到右邊 +func matrixElementsSum(matrix [][]int) int { + sum := 0 + for i := 0; i < len(matrix[0]); i++ { + for j := 0; j < len(matrix); j++ { + if matrix[j][i] <= 0 { + break + } + sum += matrix[j][i] + } + } + return sum +} diff --git a/CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main_test.go b/CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main_test.go new file mode 100644 index 000000000..693f3f805 --- /dev/null +++ b/CodeSignal/Arcade/01.Intro/08.matrixElementsSum/main_test.go @@ -0,0 +1,53 @@ +package matrixelementssum + +import ( + "fmt" + "testing" +) + +func TestMatrixElementsSumSingel(t *testing.T) { + ans := matrixElementsSum([][]int{{0, 1, 1, 2}, + {0, 5, 0, 0}, + {2, 0, 3, 3}}) + if ans != 9 { + t.Errorf("matrixElementsSum([][]int{{0, 1, 1, 2},{0, 5, 0, 0},{2, 0, 3, 3}})) = %v; want 9", ans) + } +} + +func TestMatrixElementsSumTableDriven(t *testing.T) { + var tests = []struct { + a [][]int + want int + }{ + {[][]int{{0, 1, 1, 2}, + {0, 5, 0, 0}, + {2, 0, 3, 3}}, 9}, + {[][]int{{1, 1, 1, 0}, + {0, 5, 0, 1}, + {2, 1, 3, 10}}, 9}, + {[][]int{{1, 1, 1}, + {2, 2, 2}, + {3, 3, 3}}, 18}, + {[][]int{{0}}, 0}, + {[][]int{{1, 0, 3}, + {0, 2, 1}, + {1, 2, 0}}, 5}, + {[][]int{{1}, + {5}, + {0}, + {3}}, 6}, + {[][]int{{1, 2, 3, 4, 5}}, 15}, + {[][]int{{2}, + {5}, + {10}}, 17}, + } + for _, tt := range tests { + testname := fmt.Sprintf("%v ", tt.a) + t.Run(testname, func(t *testing.T) { + ans := matrixElementsSum(tt.a) + if ans != tt.want { + t.Errorf("got %d, want %d", ans, tt.want) + } + }) + } +} diff --git a/CodeSignal/Bank-Requests/bankrequests.go b/CodeSignal/Bank-Requests/bankrequests.go new file mode 100644 index 000000000..7b11a82f9 --- /dev/null +++ b/CodeSignal/Bank-Requests/bankrequests.go @@ -0,0 +1,183 @@ +package bankrequests + +import ( + "errors" + "fmt" + "regexp" + "strconv" + "strings" + "sync" +) + +var ( + errInvaldTransfer = errors.New("invalid transfer") + errInvaldWithdraw = errors.New("invalid withdraw") + errInvaldDeposit = errors.New("invalid deposit") + errUnknownAction = errors.New("unknown action") +) + +var requestScheme = [][]string{ + 3: {"action", "from", "amount"}, + 4: {"action", "from", "to", "amount"}, +} + +type BankService interface { + getActionName() string + transfer() error + withdraw() error + deposit() error +} + +type Bank struct { + BankService + action string + requestId int + from int + to int + amount int + balances []int + requestFailed bool + failedRequest []int + + mutex sync.RWMutex +} + +func (bank *Bank) getActionName() string { + return bank.action +} + +func (bank *Bank) transfer() error { + bank.mutex.Lock() + defer bank.mutex.Unlock() + + invalidAmout := bank.balances[bank.from-1] < bank.amount + invalidReceiver := len(bank.balances) < bank.to + if invalidAmout || invalidReceiver { + return errInvaldTransfer + } + bank.balances[bank.from-1] -= bank.amount + bank.balances[bank.to-1] += bank.amount + return nil +} + +func (bank *Bank) withdraw() error { + bank.mutex.Lock() + defer bank.mutex.Unlock() + + if bank.balances[bank.from-1] < bank.amount { + return errInvaldWithdraw + } + bank.balances[bank.from-1] -= bank.amount + return nil +} + +func (bank *Bank) deposit() error { + bank.mutex.Lock() + defer bank.mutex.Unlock() + + invalidAccount := len(bank.balances) < bank.from + if invalidAccount { + return errInvaldDeposit + } + bank.balances[bank.from-1] += bank.amount + return nil +} + +func NewBank() *Bank { + return &Bank{} +} + +// 錯誤處理: 回傳錯誤為 +// 單一元素為`[- ]`的數組(請注意負號) +func (bank *Bank) failedAction() { + bank.mutex.Lock() + defer bank.mutex.Unlock() + failed := []int{-bank.requestId} + + bank.balances = []int{} + bank.requestFailed = true + bank.failedRequest = failed +} + +func (bank *Bank) Action() { + var requestErr error + action := bank.getActionName() + // fmt.Println("action:", action) + + switch action { + case "transfer": + requestErr = bank.transfer() + case "withdraw": + requestErr = bank.withdraw() + case "deposit": + requestErr = bank.deposit() + default: + requestErr = errUnknownAction + } + if requestErr != nil { + fmt.Println("requestErr:", requestErr) + bank.failedAction() + } +} + +func extractRequestParams(request string) map[string]interface{} { + res := map[string]interface{}{} + reqSlice := strToSlice(request) + fmt.Println("reqSlice:", reqSlice) + + // len is 3: {"action", "from", "amount"}, + // len is 4: {"action", "from", "to", "amount"}, + scheme := requestScheme[len(reqSlice)] + + for i, v := range scheme { + res[v] = reqSlice[i] + } + return res +} + +func strToSlice(str string) []interface{} { + var res []interface{} + erp := strings.Fields(str) + + re, err := regexp.Compile("[0-9]+") + if err != nil { + fmt.Println("Error compiling regex:", err) + return nil + } + + for _, v := range erp { + if isNum := re.MatchString(v); isNum { + if n, _ := strconv.Atoi(v); n != 0 { + res = append(res, n) + } + } else { + res = append(res, v) + } + } + + return res +} + +func bankRequests(requests []string, balances []int) []int { + var res []int + for index, request := range requests { + reqParams := extractRequestParams(request) + bank := NewBank() + bank.requestId = index + 1 + bank.action = reqParams["action"].(string) + bank.amount = reqParams["amount"].(int) + bank.from = reqParams["from"].(int) + if _, ok := reqParams["to"]; ok { + bank.to = reqParams["to"].(int) + } + + bank.balances = balances + bank.Action() + + if bank.requestFailed { + return bank.failedRequest + } + res = bank.balances + } + return res +} diff --git a/CodeSignal/Bank-Requests/bankrequests_test.go b/CodeSignal/Bank-Requests/bankrequests_test.go new file mode 100644 index 000000000..9606f71d1 --- /dev/null +++ b/CodeSignal/Bank-Requests/bankrequests_test.go @@ -0,0 +1,58 @@ +package bankrequests + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []string + arg2 []int + want []int +}{ + { + []string{ + "transfer 1 4 10", + "deposit 3 10", + "withdraw 5 15", + }, + []int{20, 30, 10, 90, 60}, + []int{10, 30, 20, 100, 45}, + }, + { + []string{ + "transfer 1 4 40", + "deposit 3 10", + "withdraw 5 65", + }, + []int{20, 30, 10, 90, 60}, + []int{-1}, + }, + { + []string{ + "withdraw 2 10", + "transfer 5 1 20", + "deposit 5 20", + "transfer 3 4 15", + }, + []int{10, 100, 20, 50, 30}, + []int{30, 90, 5, 65, 30}, + }, + { + []string{ + "deposit 3 400", + "transfer 1 2 30", + "withdraw 4 50", + }, + []int{20, 1000, 500, 40, 90}, + []int{-2}, + }, +} + +func TestBankRequests(t *testing.T) { + for _, tt := range tests { + if got := bankRequests(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/CodeSignal/Bank-Requests/index.html b/CodeSignal/Bank-Requests/index.html new file mode 100644 index 000000000..bf2817c5f --- /dev/null +++ b/CodeSignal/Bank-Requests/index.html @@ -0,0 +1,4177 @@ + + + + + + + Bank Requests · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              +
              + + + + + + + + +
              + +
              + +
              + + + + + + + + +
              +
              + +
              +
              + +
              + +

              Bank Requests

              A solution to one of my coding interview questions. Complete solution - written in GoLang

              +
              +

              Task:

              +

              You've been asked to program a bot for a popular bank that will automate the management of incoming requests. There are three types of requests the bank can receive:

              +
                +
              • transfer i j sum: request to transfer sum amount of money from the i-th account to the j-th one
              • +
              • deposit i sum: request to deposit sum amount of money in the i-th account
              • +
              • withdraw i sum: request to withdraw sum amount of money from the i-th account.
              • +
              +

              Your bot should also be able to process invalid requests. There are two types of invalid requests: invalid account number in the requests; deposit / withdrawal of a larger amount of money than is currently available.

              +

              For the given list of accounts and requests, return the state of accounts after all requests have been processed, or an array of a single element [- ] (please note the minus sign), where is the 1-based index of the first invalid request.

              +

              Example for accounts = [10, 100, 20, 50, 30] and requests = ["withdraw 2 10", "transfer 5 1 20", "deposit 5 20", "transfer 3 4 15"], the output should be bankRequests(accounts, requests) = [30, 90, 5, 65, 30].

              +

              accounts = [10, 100, 20, 50, 30] : 代表 ID:1 有10元, ID:2 有100元 ... +"withdraw 2 10" : 從ID:2 提領 10元, 所以100-10 最後得到accounts= [10, 90, 20, 50, 30]

              +

              Here are the states of accounts after each request:

              +
                +
              • "withdraw 2 10": [10, 90, 20, 50, 30]
              • +
              • "transfer 5 1 20": [30, 90, 20, 50, 10]
              • +
              • "deposit 5 20": [30, 90, 20, 50, 30]
              • +
              • "transfer 3 4 15": [30, 90, 5, 65, 30], which is the answer
              • +
              +

              For accounts = [20, 1000, 500, 40, 90] and requests = ["deposit 3 400", "transfer 1 2 30", "withdraw 4 50"], the output should be bankRequests(accounts, requests) = [-2].

              +

              After the first request, accounts becomes equal to [20, 1000, 900, 40, 90], but the second one turns it into [-10, 1030, 900, 40, 90], which is invalid. Thus, the second request is invalid, and the answer is [-2]. Note that the last request is also invalid, but it shouldn't be included in the answer.

              +

              中文意思: +你被要求為一家知名銀行編寫一個機器人,該機器人將自動處理來自客戶的請求。銀行可能會收到三種類型的請求:

              +
                +
              • transfer i j sum:從第i個帳戶轉移sum金額到第j個帳戶的請求
              • +
              • deposit i sum:向第i個帳戶存入sum金額的請求
              • +
              • withdraw i sum:從第i個帳戶提取sum金額的請求。
              • +
              +

              你的機器人還應該能夠處理無效的請求。無效的請求有兩種類型:請求中的帳戶號碼無效;存款/提款金額大於當前可用金額。

              +

              對於給定的帳戶列表和請求,返回處理完所有請求後的帳戶狀態,或單一元素為[- ]的數組(請注意負號),其中 是第一個無效請求的從1開始的索引。

              +

              accounts = [10, 100, 20, 50, 30]requests = ["withdraw 2 10", "transfer 5 1 20", "deposit 5 20", "transfer 3 4 15"] 為例,輸出應為 bankRequests(accounts, requests) = [30, 90, 5, 65, 30]

              +

              accounts = [10, 100, 20, 50, 30] 代表:ID:1 有10元, ID:2 有100元 ... +"withdraw 2 10" 從ID:2 提領 10元,所以100-10 最後得到accounts= [10, 90, 20, 50, 30]

              +

              這是每個請求後帳戶的狀態:

              +
                +
              • "withdraw 2 10": [10, 90, 20, 50, 30]
              • +
              • "transfer 5 1 20": [30, 90, 20, 50, 10]
              • +
              • "deposit 5 20": [30, 90, 20, 50, 30]
              • +
              • "transfer 3 4 15": [30, 90, 5, 65, 30],這是答案
              • +
              +

              對於accounts = [20, 1000, 500, 40, 90]requests = ["deposit 3 400", "transfer 1 2 30", "withdraw 4 50"],輸出應為 bankRequests(accounts, requests) = [-2]

              +

              第一個請求後,帳戶變成 [20, 1000, 900, 40, 90],但第二個請求將其變為 [-10, 1030, 900, 40, 90],這是無效的。因此,第二個請求無效,答案為[-2]。請注意最後一個請求也是無效的,但不應包含在答案中。

              +

              解答

              +
              package bankrequests
              +
              +import (
              +    "errors"
              +    "fmt"
              +    "regexp"
              +    "strconv"
              +    "strings"
              +    "sync"
              +)
              +
              +var (
              +    errInvaldTransfer = errors.New("invalid transfer")
              +    errInvaldWithdraw = errors.New("invalid withdraw")
              +    errInvaldDeposit  = errors.New("invalid deposit")
              +    errUnknownAction  = errors.New("unknown action")
              +)
              +
              +var requestScheme = [][]string{
              +    3: {"action", "from", "amount"},
              +    4: {"action", "from", "to", "amount"},
              +}
              +
              +type BankService interface {
              +    getActionName() string
              +    transfer() error
              +    withdraw() error
              +    deposit() error
              +}
              +
              +type Bank struct {
              +    BankService
              +    action        string
              +    requestId     int
              +    from          int
              +    to            int
              +    amount        int
              +    balances      []int
              +    requestFailed bool
              +    failedRequest []int
              +
              +    mutex sync.RWMutex
              +}
              +
              +func (bank *Bank) getActionName() string {
              +    return bank.action
              +}
              +
              +func (bank *Bank) transfer() error {
              +    bank.mutex.Lock()
              +    defer bank.mutex.Unlock()
              +
              +    invalidAmout := bank.balances[bank.from-1] < bank.amount
              +    invalidReceiver := len(bank.balances) < bank.to
              +    if invalidAmout || invalidReceiver {
              +        return errInvaldTransfer
              +    }
              +    bank.balances[bank.from-1] -= bank.amount
              +    bank.balances[bank.to-1] += bank.amount
              +    return nil
              +}
              +
              +func (bank *Bank) withdraw() error {
              +    bank.mutex.Lock()
              +    defer bank.mutex.Unlock()
              +
              +    if bank.balances[bank.from-1] < bank.amount {
              +        return errInvaldWithdraw
              +    }
              +    bank.balances[bank.from-1] -= bank.amount
              +    return nil
              +}
              +
              +func (bank *Bank) deposit() error {
              +    bank.mutex.Lock()
              +    defer bank.mutex.Unlock()
              +
              +    invalidAccount := len(bank.balances) < bank.from
              +    if invalidAccount {
              +        return errInvaldDeposit
              +    }
              +    bank.balances[bank.from-1] += bank.amount
              +    return nil
              +}
              +
              +func NewBank() *Bank {
              +    return &Bank{}
              +}
              +
              +// 錯誤處理: 回傳錯誤為
              +// 單一元素為`[- ]`的數組(請注意負號)
              +func (bank *Bank) failedAction() {
              +    bank.mutex.Lock()
              +    defer bank.mutex.Unlock()
              +    failed := []int{-bank.requestId}
              +
              +    bank.balances = []int{}
              +    bank.requestFailed = true
              +    bank.failedRequest = failed
              +}
              +
              +func (bank *Bank) Action() {
              +    var requestErr error
              +    action := bank.getActionName()
              +    // fmt.Println("action:", action)
              +
              +    switch action {
              +    case "transfer":
              +        requestErr = bank.transfer()
              +    case "withdraw":
              +        requestErr = bank.withdraw()
              +    case "deposit":
              +        requestErr = bank.deposit()
              +    default:
              +        requestErr = errUnknownAction
              +    }
              +    if requestErr != nil {
              +        fmt.Println("requestErr:", requestErr)
              +        bank.failedAction()
              +    }
              +}
              +
              +func extractRequestParams(request string) map[string]interface{} {
              +    res := map[string]interface{}{}
              +    reqSlice := strToSlice(request)
              +    fmt.Println("reqSlice:", reqSlice)
              +
              +    // len is 3: {"action", "from", "amount"},
              +    // len is 4: {"action", "from", "to", "amount"},
              +    scheme := requestScheme[len(reqSlice)]
              +
              +    for i, v := range scheme {
              +        res[v] = reqSlice[i]
              +    }
              +    return res
              +}
              +
              +func strToSlice(str string) []interface{} {
              +    var res []interface{}
              +    erp := strings.Fields(str)
              +
              +    re, err := regexp.Compile("[0-9]+")
              +    if err != nil {
              +        fmt.Println("Error compiling regex:", err)
              +        return nil
              +    }
              +
              +    for _, v := range erp {
              +        if isNum := re.MatchString(v); isNum {
              +            if n, _ := strconv.Atoi(v); n != 0 {
              +                res = append(res, n)
              +            }
              +        } else {
              +            res = append(res, v)
              +        }
              +    }
              +
              +    return res
              +}
              +
              +func bankRequests(requests []string, balances []int) []int {
              +    var res []int
              +    for index, request := range requests {
              +        reqParams := extractRequestParams(request)
              +        bank := NewBank()
              +        bank.requestId = index + 1
              +        bank.action = reqParams["action"].(string)
              +        bank.amount = reqParams["amount"].(int)
              +        bank.from = reqParams["from"].(int)
              +        if _, ok := reqParams["to"]; ok {
              +            bank.to = reqParams["to"].(int)
              +        }
              +
              +        bank.balances = balances
              +        bank.Action()
              +
              +        if bank.requestFailed {
              +            return bank.failedRequest
              +        }
              +        res = bank.balances
              +    }
              +    return res
              +}
              +
              +

              unit test

              +
              package bankrequests
              +
              +import (
              +    "reflect"
              +    "testing"
              +)
              +
              +var tests = []struct {
              +    arg1 []string
              +    arg2 []int
              +    want []int
              +}{
              +    {
              +        []string{
              +            "transfer 1 4 10",
              +            "deposit 3 10",
              +            "withdraw 5 15",
              +        },
              +        []int{20, 30, 10, 90, 60},
              +        []int{10, 30, 20, 100, 45},
              +    },
              +    {
              +        []string{
              +            "transfer 1 4 40",
              +            "deposit 3 10",
              +            "withdraw 5 65",
              +        },
              +        []int{20, 30, 10, 90, 60},
              +        []int{-1},
              +    },
              +    {
              +        []string{
              +            "withdraw 2 10",
              +            "transfer 5 1 20",
              +            "deposit 5 20",
              +            "transfer 3 4 15",
              +        },
              +        []int{10, 100, 20, 50, 30},
              +        []int{30, 90, 5, 65, 30},
              +    },
              +    {
              +        []string{
              +            "deposit 3 400",
              +            "transfer 1 2 30",
              +            "withdraw 4 50",
              +        },
              +        []int{20, 1000, 500, 40, 90},
              +        []int{-2},
              +    },
              +}
              +
              +func TestBankRequests(t *testing.T) {
              +    for _, tt := range tests {
              +        if got := bankRequests(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) {
              +            t.Errorf("got = %v, want = %v", got, tt.want)
              +        }
              +    }
              +}
              +
              +

              Reference

              + +
              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
              + +
              + +
              +
              +
              + +

              results matching ""

              +
                + +
                +
                + +

                No results matching ""

                + +
                +
                +
                + +
                +
                + +
                + + + + + + +
                + + +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CodeSignal/index.html b/CodeSignal/index.html new file mode 100644 index 000000000..0b0976db3 --- /dev/null +++ b/CodeSignal/index.html @@ -0,0 +1,3899 @@ + + + + + + + Code Signal · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +
                + + + + + + + + +
                + +
                + +
                + + + + + + + + +
                +
                + +
                +
                + +
                + +

                Code Signal

                +

                Reference

                + +
                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                + + +
                + +
                +
                +
                + +

                results matching ""

                +
                  + +
                  +
                  + +

                  No results matching ""

                  + +
                  +
                  +
                  + +
                  +
                  + +
                  + + + + + + + + + + +
                  + + +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap.go b/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap.go new file mode 100644 index 000000000..174e6c4e9 --- /dev/null +++ b/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap.go @@ -0,0 +1,38 @@ +package binarygap + +// O(log n) +func Solution(N int) int { + maxLen, curLen := 0, 0 + findOne := false + for N > 0 { + curBit := N & 1 + if curBit == 1 { + curLen = 0 + findOne = true + } else if curBit == 0 && findOne { + curLen++ + } + + if curLen > maxLen { + maxLen = curLen + } + N = N >> 1 + } + return maxLen +} + +// https://wandbox.org/permlink/totZwDAbL1wCgsqt +func evil(x int) int { + if x&(x+1) > 0 { + return evil(x|(x>>1)) + 1 + } else { + return 0 + } +} + +func SolutionRecur(N int) int { + for (N & 1) == 0 { + N = N >> 1 + } + return evil(N) +} diff --git a/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap_test.go b/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap_test.go new file mode 100644 index 000000000..5e94a2e2a --- /dev/null +++ b/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap_test.go @@ -0,0 +1,41 @@ +package binarygap + +import "testing" + +var tests = []struct { + arg1 int + want int +}{ + { + 141, // 1000 1101 + 3, + }, + { + 1041, // 10100 0001 0001 + 5, + }, + { + 32, // 10100 0001 0001 + 0, + }, + { + 2147483647, // 2^31-1: 0111 1111 1111 1111 1111 1111 1111 1111 + 0, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionRecur(t *testing.T) { + for _, tt := range tests { + if got := SolutionRecur(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0001.Iterations/Binary-Gap/index.html b/Codility/Lesson/0001.Iterations/Binary-Gap/index.html new file mode 100644 index 000000000..1dc2849da --- /dev/null +++ b/Codility/Lesson/0001.Iterations/Binary-Gap/index.html @@ -0,0 +1,3948 @@ + + + + + + + Binary Gap · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  + + + + + + + + +
                  + +
                  + +
                  + + + + + + + + +
                  +
                  + +
                  +
                  + +
                  + +

                  BinaryGap

                  START +Find longest sequence of zeros in binary representation of an integer.

                  +

                  題目

                  +

                  A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N.

                  +

                  For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binary representation 10100 and contains one binary gap of length 1. The number 15 has binary representation 1111 and has no binary gaps. The number 32 has binary representation 100000 and has no binary gaps.

                  +

                  Write a function:

                  +

                  func Solution(N int) int

                  +

                  that, given a positive integer N, returns the length of its longest binary gap. The function should return 0 if N doesn't contain a binary gap.

                  +

                  For example, given N = 1041 the function should return 5, because N has binary representation 10000010001 and so its longest binary gap is of length 5. Given N = 32 the function should return 0, because N has binary representation '100000' and thus no binary gaps.

                  +

                  Write an efficient algorithm for the following assumptions:

                  +

                  N is an integer within the range [1..2,147,483,647]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                  +

                  題目大意

                  +

                  輸入正整數, 找出此數在二進位,兩個bit值為1中裡面隔著最多0的長度

                  +

                  解題思路

                  +

                  先找出bit 1的位子, 再開始算中間最長的長度 +解題思路通常可以使用位運算來處理二進制數字。我們可以將N轉換為二進制表示,然後使用遍歷或迴圈來找到相鄰1之間的最大距離。可以使用兩個指針來記錄相鄰的1的

                  +

                  時間複雜度: 解題思路中的遍歷或迴圈需要將N轉換為二進制,因此時間複雜度取決於二進制表示的位數。假設N的位數為k,則時間複雜度為O(k)。

                  +

                  空間複雜度: 解題思路中不需要使用額外的數據結構,只需要使用幾個變數來保存位置和計算結果,因此空間複雜度為O(1)。

                  +

                  來源

                  + +

                  解答

                  +

                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap.go

                  +
                  package binarygap
                  +
                  +// O(log n)
                  +func Solution(N int) int {
                  +    maxLen, curLen := 0, 0
                  +    findOne := false
                  +    for N > 0 {
                  +        curBit := N & 1
                  +        if curBit == 1 {
                  +            curLen = 0
                  +            findOne = true
                  +        } else if curBit == 0 && findOne {
                  +            curLen++
                  +        }
                  +
                  +        if curLen > maxLen {
                  +            maxLen = curLen
                  +        }
                  +        N = N >> 1
                  +    }
                  +    return maxLen
                  +}
                  +
                  +// https://wandbox.org/permlink/totZwDAbL1wCgsqt
                  +func evil(x int) int {
                  +    if x&(x+1) > 0 {
                  +        return evil(x|(x>>1)) + 1
                  +    } else {
                  +        return 0
                  +    }
                  +}
                  +
                  +func SolutionRecur(N int) int {
                  +    for (N & 1) == 0 {
                  +        N = N >> 1
                  +    }
                  +    return evil(N)
                  +}
                  +
                  +
                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                  + +
                  + +
                  +
                  +
                  + +

                  results matching ""

                  +
                    + +
                    +
                    + +

                    No results matching ""

                    + +
                    +
                    +
                    + +
                    +
                    + +
                    + + + + + + +
                    + + +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation.go b/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation.go new file mode 100644 index 000000000..3d3d94a4b --- /dev/null +++ b/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation.go @@ -0,0 +1,20 @@ +package cyclicrotation + +func Solution(A []int, K int) []int { + if K == 0 || len(A) <= 1 { + return A + } + + K = K % len(A) + return append(A[len(A)-K:], A[:len(A)-K]...) +} + +func Solution2(A []int, K int) []int { + if K == 0 || len(A) <= 1 { + return A + } + if K > len(A) { + K = K % len(A) + } + return append(A[len(A)-K:], A[:len(A)-K]...) +} diff --git a/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation_test.go b/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation_test.go new file mode 100644 index 000000000..02e15ba03 --- /dev/null +++ b/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation_test.go @@ -0,0 +1,60 @@ +package cyclicrotation + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + arg2 int + want []int +}{ + { + []int{3, 8, 9, 7, 6}, + 3, + []int{9, 7, 6, 3, 8}, + }, + { + []int{0, 0, 0}, + 1, + []int{0, 0, 0}, + }, + { + []int{1, 2, 3, 4}, + 4, + []int{1, 2, 3, 4}, + }, + { + []int{-1, 2, 3, 4, 7, 10, -10}, + 8, + []int{-10, -1, 2, 3, 4, 7, 10}, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSolution(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution(tests[3].arg1, tests[3].arg2) + } +} +func BenchmarkSolution2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution2(tests[3].arg1, tests[3].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Codility/Lesson/0002.Array/CyclicRotation -bench=. +BenchmarkSolution-4 19386909 56.24 ns/op 64 B/op 1 allocs/op +BenchmarkSolution2-4 20282828 54.88 ns/op 64 B/op 1 allocs/op +*/ diff --git a/Codility/Lesson/0002.Array/CyclicRotation/index.html b/Codility/Lesson/0002.Array/CyclicRotation/index.html new file mode 100644 index 000000000..0fde897d5 --- /dev/null +++ b/Codility/Lesson/0002.Array/CyclicRotation/index.html @@ -0,0 +1,3936 @@ + + + + + + + Cyclic Rotation · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    +
                    + + + + + + + + +
                    + +
                    + +
                    + + + + + + + + +
                    +
                    + +
                    +
                    + +
                    + +

                    CyclicRotation

                    An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9, 7] (elements are shifted right by one index and 6 is moved to the first place).

                    +

                    The goal is to rotate array A K times; that is, each element of A will be shifted to the right K times.

                    +

                    Write a function:

                    +

                    func Solution(A []int, K int) []int

                    +

                    that, given an array A consisting of N integers and an integer K, returns the array A rotated K times.

                    +

                    For example, given

                    +
                    A = [3, 8, 9, 7, 6]
                    +K = 3
                    +

                    the function should return [9, 7, 6, 3, 8]. Three rotations were made:

                    +
                    [3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7]
                    +[6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9]
                    +[7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8]
                    +

                    For another example, given

                    +
                    A = [0, 0, 0]
                    +K = 1
                    +

                    the function should return [0, 0, 0]

                    +

                    Given

                    +
                    A = [1, 2, 3, 4]
                    +K = 4
                    +

                    the function should return [1, 2, 3, 4]

                    +

                    Assume that:

                    +

                    N and K are integers within the range [0..100]; +each element of array A is an integer within the range [−1,000..1,000]. +In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment.

                    +

                    Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                    +

                    題目大意

                    +

                    CyclicRotation題目要求將給定的整數陣列按照給定的旋轉步數進行循環右移,並返回旋轉後的陣列。例如,如果陣列是[3, 8, 9, 7, 6]且旋轉步數是3,則右移後的陣列為[9, 7, 6, 3, 8]。

                    +

                    解題思路

                    +

                    解題思路可以使用多種方法。一種常見的方法是使用額外的陣列來存儲旋轉後的結果。另一種方法是通過循環右移的操作,直接在原始陣列上進行元素交換。根據旋轉步數,我們可以將陣列分為兩個部分,並進行相應的元素交換操作。

                    +

                    時間複雜度: 解題思路中的操作需要遍歷整個陣列,因此時間複雜度為O(N),其中N是陣列的長度。 +空間複雜度: 解題思路中使用了額外的陣列或進行原地交換,不需要使用額外的數據結構,因此空間複雜度為O(1)。

                    +

                    來源

                    + +

                    解答

                    +

                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation.go

                    +
                    package cyclicrotation
                    +
                    +func Solution(A []int, K int) []int {
                    +    if K == 0 || len(A) <= 0="" 1="" {="" return="" a="" }="" k="K" %="" len(a)="" append(a[len(a)-k:],="" a[:len(a)-k]...)="" func="" solution2(a="" []int,="" int)="" []int="" if="" ||="" <="1"> len(A) {
                    +        K = K % len(A)
                    +    }
                    +    return append(A[len(A)-K:], A[:len(A)-K]...)
                    +}
                    +
                    +
                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                    + +
                    + +
                    +
                    +
                    + +

                    results matching ""

                    +
                      + +
                      +
                      + +

                      No results matching ""

                      + +
                      +
                      +
                      + +
                      +
                      + +
                      + + + + + + + + + + +
                      + + +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray.go b/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray.go new file mode 100644 index 000000000..162134e7c --- /dev/null +++ b/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray.go @@ -0,0 +1,25 @@ +package oddoccurrencesinarray + +func Solution(A []int) int { + intMap := make(map[int]int) + for i := 0; i < len(A); i++ { + intMap[A[i]] += 1 + } + + for k, v := range intMap { + if v%2 != 0 { + return k + } + } + return -1 +} + +// 所有的整數XOR起來, 若是兩個整數相同XOR得到0, 最後剩下基數次的數字 +// 前提只能有一個基數數字 +func Solution2(A []int) int { + result := 0 + for i := 0; i < len(A); i++ { + result ^= A[i] + } + return result +} diff --git a/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray_test.go b/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray_test.go new file mode 100644 index 000000000..274066b2c --- /dev/null +++ b/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray_test.go @@ -0,0 +1,51 @@ +package oddoccurrencesinarray + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{9, 3, 9, 3, 9, 7, 9}, + 7, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution2(t *testing.T) { + for _, tt := range tests { + if got := Solution2(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSolution(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution(tests[0].arg1) + } +} +func BenchmarkSolution2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution2(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Codility/Lesson/0002.Array/OddOccurrencesInArray -bench=. +BenchmarkSolution-4 5143094 224.6 ns/op 48 B/op 2 allocs/op +BenchmarkSolution2-4 335248345 3.501 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Codility/Lesson/0002.Array/OddOccurrencesInArray/index.html b/Codility/Lesson/0002.Array/OddOccurrencesInArray/index.html new file mode 100644 index 000000000..0a25c97de --- /dev/null +++ b/Codility/Lesson/0002.Array/OddOccurrencesInArray/index.html @@ -0,0 +1,3953 @@ + + + + + + + Odd Occurrences In Array · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      +
                      + + + + + + + + +
                      + +
                      + +
                      + + + + + + + + +
                      +
                      + +
                      +
                      + +
                      + +

                      OddOccurrencesInArray

                      +

                      A non-empty array A consisting of N integers is given. The array contains an odd number of elements, and each element of the array can be paired with another element that has the same value, except for one element that is left unpaired.

                      +

                      For example, in array A such that:

                      +

                      A[0] = 9 A[1] = 3 A[2] = 9 + A[3] = 3 A[4] = 9 A[5] = 7 + A[6] = 9 +the elements at indexes 0 and 2 have value 9, +the elements at indexes 1 and 3 have value 3, +the elements at indexes 4 and 6 have value 9, +the element at index 5 has value 7 and is unpaired. +Write a function:

                      +

                      func Solution(A []int) int

                      +

                      that, given an array A consisting of N integers fulfilling the above conditions, returns the value of the unpaired element.

                      +

                      For example, given array A such that:

                      +

                      A[0] = 9 A[1] = 3 A[2] = 9 + A[3] = 3 A[4] = 9 A[5] = 7 + A[6] = 9 +the function should return 7, as explained in the example above.

                      +

                      Write an efficient algorithm for the following assumptions:

                      +

                      N is an odd integer within the range [1..1,000,000]; +each element of array A is an integer within the range [1..1,000,000,000]; +all but one of the values in A occur an even number of times. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                      +

                      題目大意

                      +

                      給定一個非空array A,包含有N個整數,找出只出現基數次的整式

                      +

                      解題思路

                      +
                        +
                      1. 方法一: 可以用Map紀錄每個整數出現的次數, 在檢查是否是偶數
                      2. +
                      3. 方法二: 所有的整數XOR起來, 若是兩個整數相同XOR得到0, 最後剩下基數次的數字
                      4. +
                      +

                      來源

                      + +

                      解答

                      +

                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray.go

                      +
                      package oddoccurrencesinarray
                      +
                      +func Solution(A []int) int {
                      +    intMap := make(map[int]int)
                      +    for i := 0; i < len(A); i++ {
                      +        intMap[A[i]] += 1
                      +    }
                      +
                      +    for k, v := range intMap {
                      +        if v%2 != 0 {
                      +            return k
                      +        }
                      +    }
                      +    return -1
                      +}
                      +
                      +// 所有的整數XOR起來, 若是兩個整數相同XOR得到0, 最後剩下基數次的數字
                      +// 前提只能有一個基數數字
                      +func Solution2(A []int) int {
                      +    result := 0
                      +    for i := 0; i < len(A); i++ {
                      +        result ^= A[i]
                      +    }
                      +    return result
                      +}
                      +
                      +
                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                      + + +
                      + +
                      +
                      +
                      + +

                      results matching ""

                      +
                        + +
                        +
                        + +

                        No results matching ""

                        + +
                        +
                        +
                        + +
                        +
                        + +
                        + + + + + + + + + + +
                        + + +
                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp.go b/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp.go new file mode 100644 index 000000000..58461f6fd --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp.go @@ -0,0 +1,13 @@ +package frogjump + +import ( + "math" +) + +func Solution(X int, Y int, D int) int { + if Y < X { + return 0 + } + remainDist := Y - X + return int(math.Ceil(float64(remainDist) / float64(D))) +} diff --git a/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp_test.go b/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp_test.go new file mode 100644 index 000000000..400ac24b0 --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp_test.go @@ -0,0 +1,28 @@ +package frogjump + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + arg2 int + arg3 int + want int +}{ + { + 10, 80, 30, 3, + }, + { + 50, 40, 30, 0, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2, tt.arg3); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0003.Time-Complexity/FrogJmp/index.html b/Codility/Lesson/0003.Time-Complexity/FrogJmp/index.html new file mode 100644 index 000000000..62b9d659e --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/FrogJmp/index.html @@ -0,0 +1,3931 @@ + + + + + + + Frog Jmp · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                        +
                        + + + + + + + + +
                        + +
                        + +
                        + + + + + + + + +
                        +
                        + +
                        +
                        + +
                        + +

                        FrogJmp

                        +

                        A small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to a position greater than or equal to Y. The small frog always jumps a fixed distance, D.

                        +

                        Count the minimal number of jumps that the small frog must perform to reach its target.

                        +

                        Write a function:

                        +

                        func Solution(X int, Y int, D int) int

                        +

                        that, given three integers X, Y and D, returns the minimal number of jumps from position X to a position equal to or greater than Y.

                        +

                        For example, given:

                        +

                        X = 10 + Y = 85 + D = 30 +the function should return 3, because the frog will be positioned as follows:

                        +

                        after the first jump, at position 10 + 30 = 40 +after the second jump, at position 10 + 30 + 30 = 70 +after the third jump, at position 10 + 30 + 30 + 30 = 100 +Write an efficient algorithm for the following assumptions:

                        +

                        X, Y and D are integers within the range [1..1,000,000,000]; +X ≤ Y. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                        +

                        題目大意

                        +

                        解題思路

                        +

                        來源

                        + +

                        解答

                        +

                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp.go

                        +
                        package frogjump
                        +
                        +import (
                        +    "math"
                        +)
                        +
                        +func Solution(X int, Y int, D int) int {
                        +    if Y < X {
                        +        return 0
                        +    }
                        +    remainDist := Y - X
                        +    return int(math.Ceil(float64(remainDist) / float64(D)))
                        +}
                        +
                        +
                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                        + + +
                        + +
                        +
                        +
                        + +

                        results matching ""

                        +
                          + +
                          +
                          + +

                          No results matching ""

                          + +
                          +
                          +
                          + +
                          +
                          + +
                          + + + + + + + + + + +
                          + + +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem.go b/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem.go new file mode 100644 index 000000000..d410a7c18 --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem.go @@ -0,0 +1,16 @@ +package permmissingelem + +func Solution(A []int) int { + if len(A) < 1 { + return 1 + } + + n := len(A) + 1 + predictSume := (n + 1) * n / 2 + + var sum int + for _, v := range A { + sum += v + } + return predictSume - sum +} diff --git a/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem_test.go b/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem_test.go new file mode 100644 index 000000000..cadf8bc56 --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem_test.go @@ -0,0 +1,21 @@ +package permmissingelem + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{5, 3, 4, 2}, + 1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0003.Time-Complexity/PermMissingElem/index.html b/Codility/Lesson/0003.Time-Complexity/PermMissingElem/index.html new file mode 100644 index 000000000..471892bac --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/PermMissingElem/index.html @@ -0,0 +1,3939 @@ + + + + + + + Perm Missing Elem · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          +
                          + + + + + + + + +
                          + +
                          + +
                          + + + + + + + + +
                          +
                          + +
                          +
                          + +
                          + +

                          PermMissingElem

                          +

                          An array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing.

                          +

                          Your goal is to find that missing element.

                          +

                          Write a function:

                          +

                          func Solution(A []int) int

                          +

                          that, given an array A, returns the value of the missing element.

                          +

                          For example, given array A such that:

                          +

                          A[0] = 2 + A[1] = 3 + A[2] = 1 + A[3] = 5 +the function should return 4, as it is the missing element.

                          +

                          Write an efficient algorithm for the following assumptions:

                          +

                          N is an integer within the range [0..100,000]; +the elements of A are all distinct; +each element of array A is an integer within the range [1..(N + 1)]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                          +

                          題目大意

                          +

                          解題思路

                          +

                          來源

                          + +

                          解答

                          +

                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem.go

                          +
                          package permmissingelem
                          +
                          +func Solution(A []int) int {
                          +    if len(A) < 1 {
                          +        return 1
                          +    }
                          +
                          +    n := len(A) + 1
                          +    predictSume := (n + 1) * n / 2
                          +
                          +    var sum int
                          +    for _, v := range A {
                          +        sum += v
                          +    }
                          +    return predictSume - sum
                          +}
                          +
                          +
                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                          + + +
                          + +
                          +
                          +
                          + +

                          results matching ""

                          +
                            + +
                            +
                            + +

                            No results matching ""

                            + +
                            +
                            +
                            + +
                            +
                            + +
                            + + + + + + + + + + + + + + +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium.go b/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium.go new file mode 100644 index 000000000..fc7c628d2 --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium.go @@ -0,0 +1,29 @@ +package TapeEquilibrium + +import "math" + +func Solution(A []int) int { + + totalSum := 0 + for _, v := range A { + totalSum += v + } + + leftSum := A[0] + rightSum := totalSum - leftSum + result := math.MaxInt32 + for i := 1; i < len(A); i++ { + tmpDiff := int(math.Abs(float64(rightSum) - float64(leftSum))) + if tmpDiff < result { + result = tmpDiff + } + rightSum -= A[i] + leftSum += A[i] + } + + if result == math.MaxInt32 { + result = 0 + } + + return result +} diff --git a/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium_test.go b/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium_test.go new file mode 100644 index 000000000..0eba7bf92 --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium_test.go @@ -0,0 +1,21 @@ +package TapeEquilibrium + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{3, 1, 2, 4, 3}, + 1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/index.html b/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/index.html new file mode 100644 index 000000000..2f60ab364 --- /dev/null +++ b/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/index.html @@ -0,0 +1,3960 @@ + + + + + + + Tape Equilibrium · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            + + + + + + + + +
                            + +
                            + +
                            + + + + + + + + +
                            +
                            + +
                            +
                            + +
                            + +

                            TapeEquilibrium

                            +

                            Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|.

                            +

                            A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.

                            +

                            Any integer P, such that 0 < P < N, splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].

                            +

                            The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|

                            +

                            In other words, it is the absolute difference between the sum of the first part and the sum of the second part.

                            +

                            For example, consider array A such that:

                            +

                            A[0] = 3 + A[1] = 1 + A[2] = 2 + A[3] = 4 + A[4] = 3 +We can split this tape in four places:

                            +

                            P = 1, difference = |3 − 10| = 7 +P = 2, difference = |4 − 9| = 5 +P = 3, difference = |6 − 7| = 1 +P = 4, difference = |10 − 3| = 7 +Write a function:

                            +

                            func Solution(A []int) int

                            +

                            that, given a non-empty array A of N integers, returns the minimal difference that can be achieved.

                            +

                            For example, given:

                            +

                            A[0] = 3 + A[1] = 1 + A[2] = 2 + A[3] = 4 + A[4] = 3 +the function should return 1, as explained above.

                            +

                            Write an efficient algorithm for the following assumptions:

                            +

                            N is an integer within the range [2..100,000]; +each element of array A is an integer within the range [−1,000..1,000].

                            +

                            Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                            +

                            題目大意

                            +

                            解題思路

                            +

                            來源

                            + +

                            解答

                            +

                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium.go

                            +
                            package TapeEquilibrium
                            +
                            +import "math"
                            +
                            +func Solution(A []int) int {
                            +
                            +    totalSum := 0
                            +    for _, v := range A {
                            +        totalSum += v
                            +    }
                            +
                            +    leftSum := A[0]
                            +    rightSum := totalSum - leftSum
                            +    result := math.MaxInt32
                            +    for i := 1; i < len(A); i++ {
                            +        tmpDiff := int(math.Abs(float64(rightSum) - float64(leftSum)))
                            +        if tmpDiff < result {
                            +            result = tmpDiff
                            +        }
                            +        rightSum -= A[i]
                            +        leftSum += A[i]
                            +    }
                            +
                            +    if result == math.MaxInt32 {
                            +        result = 0
                            +    }
                            +
                            +    return result
                            +}
                            +
                            +
                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                            + + +
                            + +
                            +
                            +
                            + +

                            results matching ""

                            +
                              + +
                              +
                              + +

                              No results matching ""

                              + +
                              +
                              +
                              + +
                              +
                              + +
                              + + + + + + + + + + +
                              + + +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne.go b/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne.go new file mode 100644 index 000000000..c27dd59b0 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne.go @@ -0,0 +1,12 @@ +package FrogRiverOne + +func Solution(X int, A []int) int { + intMap := make(map[int]bool) + for i := 0; i < len(A); i++ { + intMap[A[i]] = true + if len(intMap) == X { + return i + } + } + return -1 +} diff --git a/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne_test.go b/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne_test.go new file mode 100644 index 000000000..d7e19e0f5 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne_test.go @@ -0,0 +1,28 @@ +package FrogRiverOne + +import "testing" + +var tests = []struct { + arg1 int + arg2 []int + want int +}{ + { + 5, + []int{1, 3, 1, 4, 2, 3, 5, 4}, + 6, + }, + { + 2, + []int{2, 2, 2, 2, 2}, + -1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/index.html b/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/index.html new file mode 100644 index 000000000..7a2f4473f --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/index.html @@ -0,0 +1,3947 @@ + + + + + + + Frog River One · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              +
                              + + + + + + + + +
                              + +
                              + +
                              + + + + + + + + +
                              +
                              + +
                              +
                              + +
                              + +

                              FrogRiverOne

                              +

                              Find the earliest time when a frog can jump to the other side of a river.

                              +

                              A small frog wants to get to the other side of a river. The frog is initially located on one bank of the river (position 0) and wants to get to the opposite bank (position X+1). Leaves fall from a tree onto the surface of the river.

                              +

                              You are given an array A consisting of N integers representing the falling leaves. A[K] represents the position where one leaf falls at time K, measured in seconds.

                              +

                              The goal is to find the earliest time when the frog can jump to the other side of the river. The frog can cross only when leaves appear at every position across the river from 1 to X (that is, we want to find the earliest moment when all the positions from 1 to X are covered by leaves). You may assume that the speed of the current in the river is negligibly small, i.e. the leaves do not change their positions once they fall in the river.

                              +

                              For example, you are given integer X = 5 and array A such that:

                              +

                              A[0] = 1 + A[1] = 3 + A[2] = 1 + A[3] = 4 + A[4] = 2 + A[5] = 3 + A[6] = 5 + A[7] = 4 +In second 6, a leaf falls into position 5. This is the earliest time when leaves appear in every position across the river.

                              +

                              Write a function:

                              +

                              func Solution(X int, A []int) int

                              +

                              that, given a non-empty array A consisting of N integers and integer X, returns the earliest time when the frog can jump to the other side of the river.

                              +

                              If the frog is never able to jump to the other side of the river, the function should return −1.

                              +

                              For example, given X = 5 and array A such that:

                              +

                              A[0] = 1 + A[1] = 3 + A[2] = 1 + A[3] = 4 + A[4] = 2 + A[5] = 3 + A[6] = 5 + A[7] = 4 +the function should return 6, as explained above.

                              +

                              Write an efficient algorithm for the following assumptions:

                              +

                              N and X are integers within the range [1..100,000]; +each element of array A is an integer within the range [1..X]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                              +

                              題目大意

                              +

                              要X步才能到對面, 每一個走過的位子不能重複計算

                              +

                              解題思路

                              +

                              使用map存哪些地方走過

                              +

                              來源

                              + +

                              解答

                              +

                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne.go

                              +
                              package FrogRiverOne
                              +
                              +func Solution(X int, A []int) int {
                              +    intMap := make(map[int]bool)
                              +    for i := 0; i < len(A); i++ {
                              +        intMap[A[i]] = true
                              +        if len(intMap) == X {
                              +            return i
                              +        }
                              +    }
                              +    return -1
                              +}
                              +
                              +
                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                              + + +
                              + +
                              +
                              +
                              + +

                              results matching ""

                              +
                                + +
                                +
                                + +

                                No results matching ""

                                + +
                                +
                                +
                                + +
                                +
                                + +
                                + + + + + + + + + + +
                                + + +
                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters.go b/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters.go new file mode 100644 index 000000000..a701a6147 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters.go @@ -0,0 +1,37 @@ +package MaxCounters + +func Max(x, y int) int { + if x > y { + return x + } + return y +} + +// 時間 O(N+M) , 空間 O(N) +func Solution(N int, A []int) []int { + result := make([]int, N) + maxNum := 0 + nowMaxNum := 0 + for i := 0; i < len(A); i++ { + if A[i] > N { + // 如果A[i] 大於 N 則將計數器中所有的數更新為計數器當前的最大數值 + maxNum = nowMaxNum + } else { + // 如果A[i] 小於 N 則將計數器中對應位置的數+1, + if result[A[i]-1] < maxNum { + result[A[i]-1] = maxNum + } + result[A[i]-1]++ + + if nowMaxNum < result[A[i]-1] { + nowMaxNum = result[A[i]-1] + } + } + } + for i := 0; i < N; i++ { + if result[i] < maxNum { + result[i] = maxNum + } + } + return result +} diff --git a/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters_test.go b/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters_test.go new file mode 100644 index 000000000..50df55648 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters_test.go @@ -0,0 +1,31 @@ +package MaxCounters + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + arg2 []int + want []int +}{ + { + 5, + []int{3, 4, 4, 6, 1, 4, 4}, + []int{3, 2, 2, 4, 2}, + }, + { + 5, + []int{3, 4, 4, 6, 1, 4, 4}, + []int{3, 2, 2, 4, 2}, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0004.Counting-Elements/MaxCounters/index.html b/Codility/Lesson/0004.Counting-Elements/MaxCounters/index.html new file mode 100644 index 000000000..d58289b63 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/MaxCounters/index.html @@ -0,0 +1,3984 @@ + + + + + + + Max Counters · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                +
                                + + + + + + + + +
                                + +
                                + +
                                + + + + + + + + +
                                +
                                + +
                                +
                                + +
                                + +

                                MaxCounters

                                +

                                Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum.

                                +

                                You are given N counters, initially set to 0, and you have two possible operations on them:

                                +

                                increase(X) − counter X is increased by 1, +max counter − all counters are set to the maximum value of any counter. +A non-empty array A of M integers is given. This array represents consecutive operations:

                                +

                                if A[K] = X, such that 1 ≤ X ≤ N, then operation K is increase(X), +if A[K] = N + 1 then operation K is max counter. +For example, given integer N = 5 and array A such that:

                                +
                                A[0] = 3
                                +A[1] = 4
                                +A[2] = 4
                                +A[3] = 6
                                +A[4] = 1
                                +A[5] = 4
                                +A[6] = 4
                                +

                                the values of the counters after each consecutive operation will be:

                                +
                                (0, 0, 1, 0, 0)
                                +(0, 0, 1, 1, 0)
                                +(0, 0, 1, 2, 0)
                                +(2, 2, 2, 2, 2)
                                +(3, 2, 2, 2, 2)
                                +(3, 2, 2, 3, 2)
                                +(3, 2, 2, 4, 2)
                                +

                                The goal is to calculate the value of every counter after all operations.

                                +

                                Write a function:

                                +

                                func Solution(N int, A []int) []int

                                +

                                that, given an integer N and a non-empty array A consisting of M integers, returns a sequence of integers representing the values of the counters.

                                +

                                Result array should be returned as an array of integers.

                                +

                                For example, given:

                                +
                                A[0] = 3
                                +A[1] = 4
                                +A[2] = 4
                                +A[3] = 6
                                +A[4] = 1
                                +A[5] = 4
                                +A[6] = 4
                                +

                                the function should return [3, 2, 2, 4, 2], as explained above.

                                +

                                Write an efficient algorithm for the following assumptions:

                                +

                                N and M are integers within the range [1..100,000]; +each element of array A is an integer within the range [1..N + 1]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                +

                                題目大意

                                +

                                如果A[i] 小於 N 則將計數器中對應位置的數+1, 如果A[i] 大於 N 則將計數器中所有的數更新為計數器當前的最大數值

                                +

                                解題思路

                                +

                                來源

                                +

                                https://app.codility.com/programmers/lessons/4-counting_elements/

                                +

                                解答

                                +

                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters.go

                                +
                                package MaxCounters
                                +
                                +func Max(x, y int) int {
                                +    if x > y {
                                +        return x
                                +    }
                                +    return y
                                +}
                                +
                                +// 時間 O(N+M) , 空間 O(N)
                                +func Solution(N int, A []int) []int {
                                +    result := make([]int, N)
                                +    maxNum := 0
                                +    nowMaxNum := 0
                                +    for i := 0; i < len(A); i++ {
                                +        if A[i] > N {
                                +            // 如果A[i] 大於 N 則將計數器中所有的數更新為計數器當前的最大數值
                                +            maxNum = nowMaxNum
                                +        } else {
                                +            // 如果A[i] 小於 N 則將計數器中對應位置的數+1,
                                +            if result[A[i]-1] < maxNum {
                                +                result[A[i]-1] = maxNum
                                +            }
                                +            result[A[i]-1]++
                                +
                                +            if nowMaxNum < result[A[i]-1] {
                                +                nowMaxNum = result[A[i]-1]
                                +            }
                                +        }
                                +    }
                                +    for i := 0; i < N; i++ {
                                +        if result[i] < maxNum {
                                +            result[i] = maxNum
                                +        }
                                +    }
                                +    return result
                                +}
                                +
                                +
                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                + + +
                                + +
                                +
                                +
                                + +

                                results matching ""

                                +
                                  + +
                                  +
                                  + +

                                  No results matching ""

                                  + +
                                  +
                                  +
                                  + +
                                  +
                                  + +
                                  + + + + + + + + + + + + + + +
                                  + + +
                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger.go b/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger.go new file mode 100644 index 000000000..4d92faaa4 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger.go @@ -0,0 +1,23 @@ +package MissingInteger + +func Solution(A []int) int { + smallNum := 1 + intMap := make(map[int]bool) + + // 將出現的數字塞入map + for _, v := range A { + if v > 0 && !intMap[v] { + intMap[v] = true + } + } + + for i := 1; i <= len(intMap); i++ { + if !intMap[i] { + // 此正整數沒在map找到 + return i + } + smallNum = i + 1 + } + + return smallNum +} diff --git a/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger_test.go b/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger_test.go new file mode 100644 index 000000000..285b9ae37 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger_test.go @@ -0,0 +1,31 @@ +package MissingInteger + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{1, 3, 6, 4, 1, 2}, + 5, + }, + { + []int{1, 2, 3}, + 4, + }, + { + []int{-1, -3}, + 1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0004.Counting-Elements/MissingInteger/index.html b/Codility/Lesson/0004.Counting-Elements/MissingInteger/index.html new file mode 100644 index 000000000..bf99c261c --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/MissingInteger/index.html @@ -0,0 +1,3932 @@ + + + + + + + Missing Integer · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  +
                                  + + + + + + + + +
                                  + +
                                  + +
                                  + + + + + + + + +
                                  +
                                  + +
                                  +
                                  + +
                                  + +

                                  MissingInteger

                                  +

                                  Find the smallest positive integer that does not occur in a given sequence.

                                  +

                                  This is a demo task.

                                  +

                                  Write a function:

                                  +

                                  func Solution(A []int) int

                                  +

                                  that, given an array A of N integers, returns the smallest positive integer (greater than 0) that does not occur in A.

                                  +

                                  For example, given A = [1, 3, 6, 4, 1, 2], the function should return 5.

                                  +

                                  Given A = [1, 2, 3], the function should return 4.

                                  +

                                  Given A = [−1, −3], the function should return 1.

                                  +

                                  Write an efficient algorithm for the following assumptions:

                                  +

                                  N is an integer within the range [1..100,000]; +each element of array A is an integer within the range [−1,000,000..1,000,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                  +

                                  題目大意

                                  +

                                  找出該array沒出現的最小整數

                                  +

                                  解題思路

                                  +

                                  先講出現的數字記錄起來, 再依序從1開始往後找出最小的整數且沒出現過

                                  +

                                  來源

                                  +

                                  https://app.codility.com/programmers/lessons/4-counting_elements/missing_integer/

                                  +

                                  解答

                                  +

                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger.go

                                  +
                                  package MissingInteger
                                  +
                                  +func Solution(A []int) int {
                                  +    smallNum := 1
                                  +    intMap := make(map[int]bool)
                                  +
                                  +    // 將出現的數字塞入map
                                  +    for _, v := range A {
                                  +        if v > 0 && !intMap[v] {
                                  +            intMap[v] = true
                                  +        }
                                  +    }
                                  +
                                  +    for i := 1; i 
                                  +
                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                  + + +
                                  + +
                                  +
                                  +
                                  + +

                                  results matching ""

                                  +
                                    + +
                                    +
                                    + +

                                    No results matching ""

                                    + +
                                    +
                                    +
                                    + +
                                    +
                                    + +
                                    + + + + + + + + + + + + + + +
                                    + + +
                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck.go b/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck.go new file mode 100644 index 000000000..13673aa86 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck.go @@ -0,0 +1,40 @@ +package PermCheck + +func Solution(A []int) int { + intMap := make(map[int]bool) + + for _, v := range A { + if !intMap[v] { + intMap[v] = true + } else { + // 重複出現 + return 0 + } + } + + for i := 1; i <= len(A); i++ { + if !intMap[i] { + return 0 + } + } + return 1 +} + +func Solution2(A []int) int { + intMap := make(map[int]bool) + sum := 0 + for _, v := range A { + if !intMap[v] { + intMap[v] = true + sum += v + } else { + // 重複出現 + return 0 + } + } + + if sum == (len(A)+1)*len(A)/2 { + return 1 + } + return 0 +} diff --git a/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck_test.go b/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck_test.go new file mode 100644 index 000000000..51f838a07 --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck_test.go @@ -0,0 +1,35 @@ +package PermCheck + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{4, 1, 3, 2}, + 1, + }, + { + []int{4, 3, 2}, + 0, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution2(t *testing.T) { + for _, tt := range tests { + if got := Solution2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0004.Counting-Elements/PermCheck/index.html b/Codility/Lesson/0004.Counting-Elements/PermCheck/index.html new file mode 100644 index 000000000..52724d41c --- /dev/null +++ b/Codility/Lesson/0004.Counting-Elements/PermCheck/index.html @@ -0,0 +1,3948 @@ + + + + + + + Perm Check · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                    +
                                    + + + + + + + + +
                                    + +
                                    + +
                                    + + + + + + + + +
                                    +
                                    + +
                                    +
                                    + +
                                    + +

                                    PermCheck

                                    +

                                    Check whether array A is a permutation.

                                    +

                                    A non-empty array A consisting of N integers is given.

                                    +

                                    A permutation(排列) is a sequence containing each element from 1 to N once, and only once.

                                    +

                                    For example, array A such that:

                                    +
                                    A[0] = 4
                                    +A[1] = 1
                                    +A[2] = 3
                                    +A[3] = 2
                                    +

                                    is a permutation, but array A such that:

                                    +
                                    A[0] = 4
                                    +A[1] = 1
                                    +A[2] = 3
                                    +

                                    is not a permutation, because value 2 is missing.

                                    +

                                    The goal is to check whether array A is a permutation.

                                    +

                                    Write a function:

                                    +

                                    func Solution(A []int) int

                                    +

                                    that, given an array A, returns 1 if array A is a permutation and 0 if it is not.

                                    +

                                    For example, given array A such that:

                                    +
                                    A[0] = 4
                                    +A[1] = 1
                                    +A[2] = 3
                                    +A[3] = 2
                                    +

                                    the function should return 1.

                                    +

                                    Given array A such that:

                                    +
                                    A[0] = 4
                                    +A[1] = 1
                                    +A[2] = 3
                                    +

                                    the function should return 0.

                                    +

                                    Write an efficient algorithm for the following assumptions:

                                    +

                                    N is an integer within the range [1..100,000]; +each element of array A is an integer within the range [1..1,000,000,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                    +

                                    題目大意

                                    +

                                    如果是連續排列的array 回傳 1 反之回傳1

                                    +

                                    解題思路

                                    +

                                    類似lesson 4的MissingInteger. 先將現有的直寫入到map. 除了檢查是否有重複數字出現外,順便將總和算起來 +最後檢查總時對不對

                                    +

                                    來源

                                    +

                                    https://app.codility.com/programmers/lessons/4-counting_elements/perm_check/

                                    +

                                    解答

                                    +

                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck.go

                                    +
                                    package PermCheck
                                    +
                                    +func Solution(A []int) int {
                                    +    intMap := make(map[int]bool)
                                    +
                                    +    for _, v := range A {
                                    +        if !intMap[v] {
                                    +            intMap[v] = true
                                    +        } else {
                                    +            // 重複出現
                                    +            return 0
                                    +        }
                                    +    }
                                    +
                                    +    for i := 1; i 
                                    +
                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                    + + +
                                    + +
                                    +
                                    +
                                    + +

                                    results matching ""

                                    +
                                      + +
                                      +
                                      + +

                                      No results matching ""

                                      + +
                                      +
                                      +
                                      + +
                                      +
                                      + +
                                      + + + + + + + + + + +
                                      + + +
                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv.go b/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv.go new file mode 100644 index 000000000..bc7e59528 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv.go @@ -0,0 +1,24 @@ +package CountDiv + +import "math" + +// 時間: O(n) +func SolutionBurst(A int, B int, K int) int { + result := 0 + for i := A; i <= B; i++ { + if i%K == 0 { + result++ + } + } + + return result +} + +// 時間:O(1) 空間: O(1) +func Solution(A int, B int, K int) int { + result := 0 + if A%2 == 0 { + result = 1 + } + return int(math.Floor(float64(B/K))) - int(math.Floor(float64(A/K))) + result +} diff --git a/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv_test.go b/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv_test.go new file mode 100644 index 000000000..e1948c698 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv_test.go @@ -0,0 +1,32 @@ +package CountDiv + +import ( + "testing" +) + +var tests = []struct { + arg1 int + arg2 int + arg3 int + want int +}{ + { + 6, 11, 2, 3, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2, tt.arg3); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionBurst(t *testing.T) { + for _, tt := range tests { + if got := SolutionBurst(tt.arg1, tt.arg2, tt.arg3); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0005.Prefix-Sums/CountDiv/index.html b/Codility/Lesson/0005.Prefix-Sums/CountDiv/index.html new file mode 100644 index 000000000..116fb9b43 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/CountDiv/index.html @@ -0,0 +1,3921 @@ + + + + + + + Count Div · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      +
                                      + + + + + + + + +
                                      + +
                                      + +
                                      + + + + + + + + +
                                      +
                                      + +
                                      +
                                      + +
                                      + +

                                      CountDiv

                                      +

                                      Compute number of integers divisible by k in range [a..b].

                                      +

                                      Write a function:

                                      +

                                      func Solution(A int, B int, K int) int

                                      +

                                      that, given three integers A, B and K, returns the number of integers within the range [A..B] that are divisible by K, i.e.:

                                      +

                                      { i : A ≤ i ≤ B, i mod K = 0 }

                                      +

                                      For example, for A = 6, B = 11 and K = 2, your function should return 3, because there are three numbers divisible by 2 within the range [6..11], namely 6, 8 and 10.

                                      +

                                      Write an efficient algorithm for the following assumptions:

                                      +

                                      A and B are integers within the range [0..2,000,000,000]; +K is an integer within the range [1..2,000,000,000]; +A ≤ B. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                      +

                                      題目大意

                                      +

                                      A~B之間的數字 mod K 後為0 的數字有幾個

                                      +

                                      解題思路

                                      +

                                      B/K 找出最大的商, A/K 最小的商. 相減取得在此中間之商的數量. 如果A%K==0 需要在+1

                                      +

                                      來源

                                      + +

                                      解答

                                      +

                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv.go

                                      +
                                      package CountDiv
                                      +
                                      +import "math"
                                      +
                                      +// 時間: O(n)
                                      +func SolutionBurst(A int, B int, K int) int {
                                      +    result := 0
                                      +    for i := A; i 
                                      +
                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                      + + +
                                      + +
                                      +
                                      +
                                      + +

                                      results matching ""

                                      +
                                        + +
                                        +
                                        + +

                                        No results matching ""

                                        + +
                                        +
                                        +
                                        + +
                                        +
                                        + +
                                        + + + + + + + + + + +
                                        + + +
                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery.go b/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery.go new file mode 100644 index 000000000..bf2651b19 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery.go @@ -0,0 +1,110 @@ +package GenomicRangeQuery + +func Solution(S string, P []int, Q []int) []int { + A, C, G, T := prefixSums(S) + result := make([]int, len(P)) + /* + // fmt.Println("A: ", A) + // fmt.Println("C: ", C) + // fmt.Println("G: ", G) + // fmt.Println("T: ", T) + idx 0 1 2 3 4 5 6 7 + S: [C A G C C T A] + A: [0 0 1 1 1 1 1 2] + C: [0 1 1 1 2 3 3 3] + G: [0 0 0 1 1 1 1 1] + T: [0 0 0 0 0 0 1 1] + P: [2 5 0] + Q: [4 5 6] + */ + + for k, _ := range P { + // 判斷 A[end of slice]-A[Begin of Slice]是否大於零 即可判斷是否 A 出現過 + if A[Q[k]+1]-A[P[k]] > 0 { + result[k] = 1 + } else if C[Q[k]+1]-C[P[k]] > 0 { + result[k] = 2 + } else if G[Q[k]+1]-G[P[k]] > 0 { + result[k] = 3 + } else if T[Q[k]+1]-T[P[k]] > 0 { + result[k] = 4 + } + } + + return result +} + +// 數算從開始到每個固定索引的A,C,G,T個數. 開頭插入0 +func prefixSums(S string) ([]int, []int, []int, []int) { + n := len(S) + A := make([]int, n+1) + C := make([]int, n+1) + G := make([]int, n+1) + T := make([]int, n+1) + + for i := 1; i < n+1; i++ { + s := string(S[i-1]) + A[i] = A[i-1] + C[i] = C[i-1] + G[i] = G[i-1] + T[i] = T[i-1] + + switch s { + case "A": + A[i]++ + case "C": + C[i]++ + case "G": + G[i]++ + case "T": + T[i]++ + } + + } + + return A, C, G, T +} + +func inLoop(arr string, s string) bool { + for _, v := range arr { + if string(v) == s { + return true + } + } + return false +} + +// O(N * M) +func SolutionBurst(S string, P []int, Q []int) []int { + result := make([]int, len(P)) + for i := 0; i < len(P); i++ { + tmp := S[P[i] : Q[i]+1] + if inLoop(tmp, "A") { + result[i] = 1 + } else if inLoop(tmp, "C") { + result[i] = 2 + } else if inLoop(tmp, "G") { + result[i] = 3 + } else if inLoop(tmp, "T") { + result[i] = 4 + } + } + return result +} + +/* +def solutionBySlice(S, P, Q): + result = [] + length = len(P) + for i in range(length): + temp = (S[P[i]:Q[i]+1]) + if "A" in temp: + result.append(1) + elif "C" in temp: + result.append(2) + elif "G" in temp: + result.append(3) + elif "T" in temp: + result.append(4) + return result +*/ diff --git a/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery_test.go b/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery_test.go new file mode 100644 index 000000000..c3820554b --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery_test.go @@ -0,0 +1,36 @@ +package GenomicRangeQuery + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 string + arg2 []int + arg3 []int + want []int +}{ + { + "CAGCCTA", + []int{2, 5, 0}, + []int{4, 5, 6}, + []int{2, 4, 1}, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2, tt.arg3); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionBurst(t *testing.T) { + for _, tt := range tests { + if got := SolutionBurst(tt.arg1, tt.arg2, tt.arg3); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/index.html b/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/index.html new file mode 100644 index 000000000..dd74fc373 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/index.html @@ -0,0 +1,4047 @@ + + + + + + + Genomic Range Query · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        +
                                        + + + + + + + + +
                                        + +
                                        + +
                                        + + + + + + + + +
                                        +
                                        + +
                                        +
                                        + +
                                        + +

                                        GenomicRangeQuery

                                        +

                                        Find the minimal nucleotide(核苷酸) from a range of sequence DNA.

                                        +

                                        A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which correspond to the types of successive nucleotides in the sequence. Each nucleotide has an impact factor, which is an integer. Nucleotides of types A, C, G and T have impact factors of 1, 2, 3 and 4, respectively. You are going to answer several queries of the form: What is the minimal impact factor of nucleotides contained in a particular part of the given DNA sequence?

                                        +

                                        The DNA sequence is given as a non-empty string S = S[0]S[1]...S[N-1] consisting of N characters. There are M queries, which are given in non-empty arrays P and Q, each consisting of M integers. The K-th query (0 ≤ K < M) requires you to find the minimal impact factor of nucleotides contained in the DNA sequence between positions P[K] and Q[K] (inclusive).

                                        +

                                        For example, consider string S = CAGCCTA and arrays P, Q such that:

                                        +
                                        P[0] = 2    Q[0] = 4
                                        +P[1] = 5    Q[1] = 5
                                        +P[2] = 0    Q[2] = 6
                                        +

                                        The answers to these M = 3 queries are as follows:

                                        +

                                        The part of the DNA between positions 2 and 4 contains nucleotides G and C (twice), whose impact factors are 3 and 2 respectively, so the answer is 2. +The part between positions 5 and 5 contains a single nucleotide T, whose impact factor is 4, so the answer is 4. +The part between positions 0 and 6 (the whole string) contains all nucleotides, in particular nucleotide A whose impact factor is 1, so the answer is 1. +Write a function:

                                        +

                                        func Solution(S string, P []int, Q []int) []int

                                        +

                                        that, given a non-empty string S consisting of N characters and two non-empty arrays P and Q consisting of M integers, returns an array consisting of M integers specifying the consecutive answers to all queries.

                                        +

                                        Result array should be returned as an array of integers.

                                        +

                                        For example, given the string S = CAGCCTA and arrays P, Q such that:

                                        +
                                        P[0] = 2    Q[0] = 4
                                        +P[1] = 5    Q[1] = 5
                                        +P[2] = 0    Q[2] = 6
                                        +

                                        the function should return the values [2, 4, 1], as explained above.

                                        +

                                        Write an efficient algorithm for the following assumptions:

                                        +

                                        N is an integer within the range [1..100,000]; +M is an integer within the range [1..50,000]; +each element of arrays P, Q is an integer within the range [0..N − 1]; +P[K] ≤ Q[K], where 0 ≤ K < M; +string S consists only of upper-case English letters A, C, G, T. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                        +

                                        題目大意

                                        +

                                        CAGCCTA +A 代表1, C 代表2, G 代表3 ,T 代表4 +K=0: P[0]=2, Q[0]=4 之間的核苷酸 DNA(GCC)因素分別是3和2, 最小的就是2. +K=1: P[1]=5, Q[1]=5 DNA(T),最小的是4. +K=2: P[2]=0, Q[2]=6 DNA(CAGCCTA),最小的是1.

                                        +

                                        解題思路

                                        +

                                        來源

                                        +

                                        https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/

                                        +

                                        解答

                                        +

                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery.go

                                        +
                                        package GenomicRangeQuery
                                        +
                                        +func Solution(S string, P []int, Q []int) []int {
                                        +    A, C, G, T := prefixSums(S)
                                        +    result := make([]int, len(P))
                                        +    /*
                                        +        // fmt.Println("A: ", A)
                                        +        // fmt.Println("C: ", C)
                                        +        // fmt.Println("G: ", G)
                                        +        // fmt.Println("T: ", T)
                                        +        idx  0 1 2 3 4 5 6 7
                                        +        S:  [C A G C C T A]
                                        +        A:  [0 0 1 1 1 1 1 2]
                                        +        C:  [0 1 1 1 2 3 3 3]
                                        +        G:  [0 0 0 1 1 1 1 1]
                                        +        T:  [0 0 0 0 0 0 1 1]
                                        +        P:  [2 5 0]
                                        +        Q:  [4 5 6]
                                        +    */
                                        +
                                        +    for k, _ := range P {
                                        +        // 判斷 A[end of slice]-A[Begin of Slice]是否大於零 即可判斷是否 A 出現過
                                        +        if A[Q[k]+1]-A[P[k]] > 0 {
                                        +            result[k] = 1
                                        +        } else if C[Q[k]+1]-C[P[k]] > 0 {
                                        +            result[k] = 2
                                        +        } else if G[Q[k]+1]-G[P[k]] > 0 {
                                        +            result[k] = 3
                                        +        } else if T[Q[k]+1]-T[P[k]] > 0 {
                                        +            result[k] = 4
                                        +        }
                                        +    }
                                        +
                                        +    return result
                                        +}
                                        +
                                        +// 數算從開始到每個固定索引的A,C,G,T個數. 開頭插入0
                                        +func prefixSums(S string) ([]int, []int, []int, []int) {
                                        +    n := len(S)
                                        +    A := make([]int, n+1)
                                        +    C := make([]int, n+1)
                                        +    G := make([]int, n+1)
                                        +    T := make([]int, n+1)
                                        +
                                        +    for i := 1; i < n+1; i++ {
                                        +        s := string(S[i-1])
                                        +        A[i] = A[i-1]
                                        +        C[i] = C[i-1]
                                        +        G[i] = G[i-1]
                                        +        T[i] = T[i-1]
                                        +
                                        +        switch s {
                                        +        case "A":
                                        +            A[i]++
                                        +        case "C":
                                        +            C[i]++
                                        +        case "G":
                                        +            G[i]++
                                        +        case "T":
                                        +            T[i]++
                                        +        }
                                        +
                                        +    }
                                        +
                                        +    return A, C, G, T
                                        +}
                                        +
                                        +func inLoop(arr string, s string) bool {
                                        +    for _, v := range arr {
                                        +        if string(v) == s {
                                        +            return true
                                        +        }
                                        +    }
                                        +    return false
                                        +}
                                        +
                                        +// O(N * M)
                                        +func SolutionBurst(S string, P []int, Q []int) []int {
                                        +    result := make([]int, len(P))
                                        +    for i := 0; i < len(P); i++ {
                                        +        tmp := S[P[i] : Q[i]+1]
                                        +        if inLoop(tmp, "A") {
                                        +            result[i] = 1
                                        +        } else if inLoop(tmp, "C") {
                                        +            result[i] = 2
                                        +        } else if inLoop(tmp, "G") {
                                        +            result[i] = 3
                                        +        } else if inLoop(tmp, "T") {
                                        +            result[i] = 4
                                        +        }
                                        +    }
                                        +    return result
                                        +}
                                        +
                                        +/*
                                        +def solutionBySlice(S, P, Q):
                                        +  result = []
                                        +  length = len(P)
                                        +  for i in range(length):
                                        +    temp = (S[P[i]:Q[i]+1])
                                        +    if "A" in temp:
                                        +      result.append(1)
                                        +    elif "C" in temp:
                                        +      result.append(2)
                                        +    elif "G" in temp:
                                        +      result.append(3)
                                        +    elif "T" in temp:
                                        +      result.append(4)
                                        +  return result
                                        +*/
                                        +
                                        +
                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                        + + +
                                        + +
                                        +
                                        +
                                        + +

                                        results matching ""

                                        +
                                          + +
                                          +
                                          + +

                                          No results matching ""

                                          + +
                                          +
                                          +
                                          + +
                                          +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + +
                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice.go b/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice.go new file mode 100644 index 000000000..acd928a2d --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice.go @@ -0,0 +1,29 @@ +package MinAvgTwoSlice + +import "math" + +func Solution(A []int) int { + + min := math.MaxFloat64 + minIndex := -1 + for i := 0; i < len(A)-1; i++ { + // 2個數平均 + if i+1 < len(A) { + tmp := (float64(A[i]) + float64(A[i+1])) / float64(2) + if tmp < min { + min = tmp + minIndex = i + } + } + // 3個數平均 + if i+2 < len(A) { + tmp := (float64(A[i]) + float64(A[i+1]) + float64(A[i+2])) / float64(3) + if tmp < min { + min = tmp + minIndex = i + } + } + } + + return minIndex +} diff --git a/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice_test.go b/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice_test.go new file mode 100644 index 000000000..e66233cdf --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice_test.go @@ -0,0 +1,31 @@ +package MinAvgTwoSlice + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{4, 2, 2, 5, 1, 5, 8}, + 1, + }, + { + []int{1, 3, 6, 4, 1, 2}, + 4, + }, + { + []int{10, 10, -1, 2, 4, -1, 2, -1}, + 5, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/index.html b/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/index.html new file mode 100644 index 000000000..2f7ec1c4c --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/index.html @@ -0,0 +1,3971 @@ + + + + + + + Min Avg Two Slice · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          +
                                          + + + + + + + + +
                                          + +
                                          + +
                                          + + + + + + + + +
                                          +
                                          + +
                                          +
                                          + +
                                          + +

                                          MinAvgTwoSlice

                                          +

                                          Find the minimal average of any slice containing at least two elements.

                                          +

                                          A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P < Q < N, is called a slice of array A (notice that the slice contains at least two elements). The average of a slice (P, Q) is the sum of A[P] + A[P + 1] + ... + A[Q] divided by the length of the slice. To be precise, the average equals (A[P] + A[P + 1] + ... + A[Q]) / (Q − P + 1).

                                          +

                                          For example, array A such that:

                                          +
                                          A[0] = 4
                                          +A[1] = 2
                                          +A[2] = 2
                                          +A[3] = 5
                                          +A[4] = 1
                                          +A[5] = 5
                                          +A[6] = 8
                                          +

                                          contains the following example slices:

                                          +

                                          slice (1, 2), whose average is (2 + 2) / 2 = 2; +slice (3, 4), whose average is (5 + 1) / 2 = 3; +slice (1, 4), whose average is (2 + 2 + 5 + 1) / 4 = 2.5. +The goal is to find the starting position of a slice whose average is minimal.

                                          +

                                          Write a function:

                                          +

                                          func Solution(A []int) int

                                          +

                                          that, given a non-empty array A consisting of N integers, returns the starting position of the slice with the minimal average. If there is more than one slice with a minimal average, you should return the smallest starting position of such a slice.

                                          +

                                          For example, given array A such that:

                                          +
                                          A[0] = 4
                                          +A[1] = 2
                                          +A[2] = 2
                                          +A[3] = 5
                                          +A[4] = 1
                                          +A[5] = 5
                                          +A[6] = 8
                                          +

                                          the function should return 1, as explained above.

                                          +

                                          Write an efficient algorithm for the following assumptions:

                                          +

                                          N is an integer within the range [2..100,000]; +each element of array A is an integer within the range [−10,000..10,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                          +

                                          題目大意

                                          +

                                          找出array兩index中平均值最小 ,並回傳start的 index

                                          +

                                          解題思路

                                          +

                                          最小avg的slice(n,m),m-n+1一定是2或者3,也就是這個最小avg的slice由2個或者3個元素組成 +因為題目中說明 0 因此可以得出2個或者3個元素是最小的組合,比如length=3的數組,你無法一次分出2個slice,length=2的數組也一樣。為什麼要這麼去想呢?因為你要“比較”出最小的avg,怎麼才能"比較"?那就是必須一次至少有2個slice才能相互比較。那麼當N>=4時,我們就能一次最少分出2個slice

                                          +

                                          來源

                                          + +

                                          解答

                                          +

                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice.go

                                          +
                                          package MinAvgTwoSlice
                                          +
                                          +import "math"
                                          +
                                          +func Solution(A []int) int {
                                          +
                                          +    min := math.MaxFloat64
                                          +    minIndex := -1
                                          +    for i := 0; i < len(A)-1; i++ {
                                          +        // 2個數平均
                                          +        if i+1 < len(A) {
                                          +            tmp := (float64(A[i]) + float64(A[i+1])) / float64(2)
                                          +            if tmp < min {
                                          +                min = tmp
                                          +                minIndex = i
                                          +            }
                                          +        }
                                          +        // 3個數平均
                                          +        if i+2 < len(A) {
                                          +            tmp := (float64(A[i]) + float64(A[i+1]) + float64(A[i+2])) / float64(3)
                                          +            if tmp < min {
                                          +                min = tmp
                                          +                minIndex = i
                                          +            }
                                          +        }
                                          +    }
                                          +
                                          +    return minIndex
                                          +}
                                          +
                                          +
                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                          + + +
                                          + +
                                          +
                                          +
                                          + +

                                          results matching ""

                                          +
                                            + +
                                            +
                                            + +

                                            No results matching ""

                                            + +
                                            +
                                            +
                                            + +
                                            +
                                            + +
                                            + + + + + + + + + + + + + + +
                                            + + +
                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars.go b/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars.go new file mode 100644 index 000000000..2c1dfaf30 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars.go @@ -0,0 +1,16 @@ +package PassingCars + +func Solution(A []int) int { + addBase, result := 0, 0 + for i := 0; i < len(A); i++ { + if A[i] == 0 { + addBase++ + } else { + result += addBase + } + } + if result > 1000000000 { + return -1 + } + return result +} diff --git a/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars_test.go b/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars_test.go new file mode 100644 index 000000000..aec7d3f75 --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars_test.go @@ -0,0 +1,23 @@ +package PassingCars + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{0, 1, 0, 1, 1}, + 5, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0005.Prefix-Sums/PassingCars/index.html b/Codility/Lesson/0005.Prefix-Sums/PassingCars/index.html new file mode 100644 index 000000000..7592459cc --- /dev/null +++ b/Codility/Lesson/0005.Prefix-Sums/PassingCars/index.html @@ -0,0 +1,3946 @@ + + + + + + + Passing Cars · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                            +
                                            + + + + + + + + +
                                            + +
                                            + +
                                            + + + + + + + + +
                                            +
                                            + +
                                            +
                                            + +
                                            + +

                                            PassingCars

                                            +

                                            A non-empty array A consisting of N integers is given. The consecutive(連續) elements of array A represent consecutive cars on a road.

                                            +

                                            Array A contains only 0s and/or 1s:

                                            +

                                            0 represents a car traveling east, +1 represents a car traveling west. +The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 ≤ P < Q < N, is passing when P is traveling to the east and Q is traveling to the west.

                                            +

                                            For example, consider array A such that:

                                            +

                                            A[0] = 0 // no.0 car trave to east + A[1] = 1 // no.1 car trave to west + A[2] = 0 // no.2 car trave to east + A[3] = 1 // no.3 car trave to west + A[4] = 1 // no.4 car trave to west +We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4).

                                            +

                                            Write a function:

                                            +

                                            func Solution(A []int) int

                                            +

                                            that, given a non-empty array A of N integers, returns the number of pairs of passing cars.

                                            +

                                            The function should return −1 if the number of pairs of passing cars exceeds 1,000,000,000.

                                            +

                                            For example, given:

                                            +

                                            A[0] = 0 + A[1] = 1 + A[2] = 0 + A[3] = 1 + A[4] = 1 +the function should return 5, as explained above.

                                            +

                                            Write an efficient algorithm for the following assumptions:

                                            +

                                            N is an integer within the range [1..100,000]; +each element of array A is an integer that can have one of the following values: 0, 1.

                                            +

                                            Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                            +

                                            題目大意

                                            +

                                            每台車的車號為A[]的index, 0 代表往東, 1代表往西, 向東的車號需要小於向西的車號. 找出會車的幾種可能性

                                            +

                                            解題思路

                                            +

                                            每一個向東走的車, 都會跟向西的配對. 當遇到向西時組合+1. +所以車號0可以跟所有大於0的向西車配對. 車號2跟所有大於0的向西車配對 +1號車前面只有車號0這選擇. 車號3跟4有車號0跟2這兩個選擇. 所以是1+2*2=5

                                            +

                                            來源

                                            +

                                            https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/

                                            +

                                            解答

                                            +

                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars.go

                                            +
                                            package PassingCars
                                            +
                                            +func Solution(A []int) int {
                                            +    addBase, result := 0, 0
                                            +    for i := 0; i < len(A); i++ {
                                            +        if A[i] == 0 {
                                            +            addBase++
                                            +        } else {
                                            +            result += addBase
                                            +        }
                                            +    }
                                            +    if result > 1000000000 {
                                            +        return -1
                                            +    }
                                            +    return result
                                            +}
                                            +
                                            +
                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                            + + +
                                            + +
                                            +
                                            +
                                            + +

                                            results matching ""

                                            +
                                              + +
                                              +
                                              + +

                                              No results matching ""

                                              + +
                                              +
                                              +
                                              + +
                                              +
                                              + +
                                              + + + + + + + + + + +
                                              + + +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0006.Sorting/Distinct/Distinct.go b/Codility/Lesson/0006.Sorting/Distinct/Distinct.go new file mode 100644 index 000000000..2feed16cf --- /dev/null +++ b/Codility/Lesson/0006.Sorting/Distinct/Distinct.go @@ -0,0 +1,29 @@ +package Distinct + +import "sort" + +func Solution(A []int) int { + sort.Ints(A) + if len(A) == 0 { + return 0 + } + result := 1 + for i := 1; i < len(A); i++ { + if A[i] != A[i-1] { + result++ + } + } + return result +} + +func SolutionSet(A []int) int { + set := make(map[int]struct{}) + var void struct{} + + for i := 0; i < len(A); i++ { + if _, ok := set[A[i]]; !ok { + set[A[i]] = void + } + } + return len(set) +} diff --git a/Codility/Lesson/0006.Sorting/Distinct/Distinct_test.go b/Codility/Lesson/0006.Sorting/Distinct/Distinct_test.go new file mode 100644 index 000000000..08f699078 --- /dev/null +++ b/Codility/Lesson/0006.Sorting/Distinct/Distinct_test.go @@ -0,0 +1,55 @@ +package Distinct + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{2, 1, 1, 2, 3, 1}, + 3, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionSet(t *testing.T) { + for _, tt := range tests { + if got := SolutionSet(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSolution(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution(tests[0].arg1) + } +} + +func BenchmarkSolutionSet(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SolutionSet(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Codility/Lesson/0006.Sorting/Distinct -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Codility/Lesson/0006.Sorting/Distinct +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkSolution-4 15742278 70.30 ns/op 24 B/op 1 allocs/op +BenchmarkSolutionSet-4 14324376 81.14 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Codility/Lesson/0006.Sorting/Distinct/index.html b/Codility/Lesson/0006.Sorting/Distinct/index.html new file mode 100644 index 000000000..d9f8bea13 --- /dev/null +++ b/Codility/Lesson/0006.Sorting/Distinct/index.html @@ -0,0 +1,3945 @@ + + + + + + + Distinct · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              +
                                              + + + + + + + + +
                                              + +
                                              + +
                                              + + + + + + + + +
                                              +
                                              + +
                                              +
                                              + +
                                              + +

                                              Distinct

                                              +

                                              Compute number of distinct values in an array.

                                              +

                                              Write a function

                                              +

                                              func Solution(A []int) int

                                              +

                                              that, given an array A consisting of N integers, returns the number of distinct values in array A.

                                              +

                                              For example, given array A consisting of six elements such that:

                                              +

                                              A[0] = 2 A[1] = 1 A[2] = 1 + A[3] = 2 A[4] = 3 A[5] = 1 +the function should return 3, because there are 3 distinct values appearing in array A, namely 1, 2 and 3.

                                              +

                                              Write an efficient algorithm for the following assumptions:

                                              +

                                              N is an integer within the range [0..100,000]; +each element of array A is an integer within the range [−1,000,000..1,000,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                              +

                                              題目大意

                                              +

                                              返回不重複的整數數量

                                              +

                                              解題思路

                                              +
                                                +
                                              1. 方法ㄧ: 先排序, 在檢查當前跟前一個是不是同一個整數. 不是的會結果+1
                                              2. +
                                              3. 方法二: 建立一個set. 最後返回set的長度
                                              4. +
                                              +

                                              來源

                                              +

                                              https://app.codility.com/programmers/lessons/6-sorting/distinct/

                                              +

                                              解答

                                              +

                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/Distinct/Distinct.go

                                              +
                                              package Distinct
                                              +
                                              +import "sort"
                                              +
                                              +func Solution(A []int) int {
                                              +    sort.Ints(A)
                                              +    if len(A) == 0 {
                                              +        return 0
                                              +    }
                                              +    result := 1
                                              +    for i := 1; i < len(A); i++ {
                                              +        if A[i] != A[i-1] {
                                              +            result++
                                              +        }
                                              +    }
                                              +    return result
                                              +}
                                              +
                                              +func SolutionSet(A []int) int {
                                              +    set := make(map[int]struct{})
                                              +    var void struct{}
                                              +
                                              +    for i := 0; i < len(A); i++ {
                                              +        if _, ok := set[A[i]]; !ok {
                                              +            set[A[i]] = void
                                              +        }
                                              +    }
                                              +    return len(set)
                                              +}
                                              +
                                              +
                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                              + + +
                                              + +
                                              +
                                              +
                                              + +

                                              results matching ""

                                              +
                                                + +
                                                +
                                                + +

                                                No results matching ""

                                                + +
                                                +
                                                +
                                                + +
                                                +
                                                + +
                                                + + + + + + + + + + +
                                                + + +
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree.go b/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree.go new file mode 100644 index 000000000..11b8765ec --- /dev/null +++ b/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree.go @@ -0,0 +1,16 @@ +package MaxProductOfThree + +import "sort" + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func Solution(A []int) int { + sort.Ints(A) + aLen := len(A) + return max(A[0]*A[1]*A[aLen-1], A[aLen-1]*A[aLen-2]*A[aLen-3]) +} diff --git a/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree_test.go b/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree_test.go new file mode 100644 index 000000000..2273822ae --- /dev/null +++ b/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree_test.go @@ -0,0 +1,21 @@ +package MaxProductOfThree + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{-3, 1, 2, -2, 5, 6}, + 60, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0006.Sorting/MaxProductOfThree/index.html b/Codility/Lesson/0006.Sorting/MaxProductOfThree/index.html new file mode 100644 index 000000000..6539efc78 --- /dev/null +++ b/Codility/Lesson/0006.Sorting/MaxProductOfThree/index.html @@ -0,0 +1,3952 @@ + + + + + + + Max Product Of Three · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                +
                                                + + + + + + + + +
                                                + +
                                                + +
                                                + + + + + + + + +
                                                +
                                                + +
                                                +
                                                + +
                                                + +

                                                MaxProductOfThree

                                                +

                                                Maximize A[P] A[Q] A[R] for any triplet (P, Q, R).

                                                +

                                                A non-empty array A consisting of N integers is given. The product of triplet (P, Q, R) equates to A[P] A[Q] A[R] (0 ≤ P < Q < R < N).

                                                +

                                                For example, array A such that:

                                                +

                                                A[0] = -3 + A[1] = 1 + A[2] = 2 + A[3] = -2 + A[4] = 5 + A[5] = 6 +contains the following example triplets:

                                                +

                                                (0, 1, 2), product is −3 1 2 = −6 +(1, 2, 4), product is 1 2 5 = 10 +(2, 4, 5), product is 2 5 6 = 60 +Your goal is to find the maximal product of any triplet.

                                                +

                                                Write a function:

                                                +

                                                func Solution(A []int) int

                                                +

                                                that, given a non-empty array A, returns the value of the maximal product of any triplet.

                                                +

                                                For example, given array A such that:

                                                +

                                                A[0] = -3 + A[1] = 1 + A[2] = 2 + A[3] = -2 + A[4] = 5 + A[5] = 6 +the function should return 60, as the product of triplet (2, 4, 5) is maximal.

                                                +

                                                Write an efficient algorithm for the following assumptions:

                                                +

                                                N is an integer within the range [3..100,000]; +each element of array A is an integer within the range [−1,000..1,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                +

                                                題目大意

                                                +

                                                給一整數陣列A,找出陣列中任意三數乘積的最大值

                                                +

                                                解題思路

                                                +

                                                先排序.然後比較 前兩個元素*最後一個元素的乘積最後三個元素的乘積 取最大值

                                                +

                                                來源

                                                +

                                                https://app.codility.com/programmers/lessons/6-sorting/max_product_of_three/

                                                +

                                                解答

                                                +

                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree.go

                                                +
                                                package MaxProductOfThree
                                                +
                                                +import "sort"
                                                +
                                                +func max(a, b int) int {
                                                +    if a > b {
                                                +        return a
                                                +    }
                                                +    return b
                                                +}
                                                +
                                                +func Solution(A []int) int {
                                                +    sort.Ints(A)
                                                +    aLen := len(A)
                                                +    return max(A[0]*A[1]*A[aLen-1], A[aLen-1]*A[aLen-2]*A[aLen-3])
                                                +}
                                                +
                                                +
                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                + + +
                                                + +
                                                +
                                                +
                                                + +

                                                results matching ""

                                                +
                                                  + +
                                                  +
                                                  + +

                                                  No results matching ""

                                                  + +
                                                  +
                                                  +
                                                  + +
                                                  +
                                                  + +
                                                  + + + + + + + + + + + + + + +
                                                  + + +
                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections.go b/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections.go new file mode 100644 index 000000000..a29033af5 --- /dev/null +++ b/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections.go @@ -0,0 +1,68 @@ +package NumberOfDiscIntersections + +import "sort" + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func min(a, b int) int { + if a > b { + return b + } + return a +} + +// 時間複雜 O(n^2) +func SolutionDirect(A []int) int { + count := 0 + for indexI, valueI := range A { + tmpArr := A[indexI+1:] + for indexJ, valueJ := range tmpArr { + if valueI+valueJ >= indexJ+indexI+1-indexI { + count++ + } + } + } + + return count +} + +// 時間複雜 O(nlogn) or O(n) +// TODO: 待研究 +func Solution(A []int) int { + iLimit := make([]int, len(A)) // 左 + jLimit := make([]int, len(A)) // 右 + result := 0 + + for i := 0; i < len(A); i += 1 { + iLimit[i] = i - A[i] + jLimit[i] = i + A[i] + } + // 針對iLimit中的每個元素,利用二分查找算法,找到其不小於jLimit中元素的個數 + sort.Ints(iLimit) + sort.Ints(jLimit) + for idx, _ := range iLimit { + end := jLimit[idx] + + // Binary search for index of element of the rightmost value less than to the interval-end + count := sort.Search(len(iLimit), func(i int) bool { + return iLimit[i] > end + }) + + // 因為i=j時,A[i]+i 肯定不小於j-A[j],也就是說多算了一個,因此要減去1。 + // 減去idx是因為圓盤A和圓盤B相交,次數加上1了,圓盤B和圓盤A相交就不用再加1了。 + count = count - idx - 1 + result += count + + if result > 10000000 { + return -1 + } + + } + + return result +} diff --git a/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections_test.go b/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections_test.go new file mode 100644 index 000000000..a1b821b6c --- /dev/null +++ b/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections_test.go @@ -0,0 +1,29 @@ +package NumberOfDiscIntersections + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{1, 5, 2, 1, 4, 0}, + 11, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionDirect(t *testing.T) { + for _, tt := range tests { + if got := SolutionDirect(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/index.html b/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/index.html new file mode 100644 index 000000000..218bfd5ba --- /dev/null +++ b/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/index.html @@ -0,0 +1,4014 @@ + + + + + + + Number Of Disc Intersections · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                  +
                                                  + + + + + + + + +
                                                  + +
                                                  + +
                                                  + + + + + + + + +
                                                  +
                                                  + +
                                                  +
                                                  + +
                                                  + +

                                                  NumberOfDiscIntersections

                                                  +

                                                  Compute the number of intersections(相交) in a sequence of discs(圓盤).

                                                  +

                                                  We draw N discs on a plane. The discs are numbered from 0 to N − 1. An array A of N non-negative integers, specifying the radiuses(半徑) of the discs, is given. The J-th disc is drawn with its center at (J, 0) and radius A[J].

                                                  +

                                                  We say that the J-th disc and K-th disc intersect if J ≠ K and the J-th and K-th discs have at least one common point (assuming that the discs contain their borders).

                                                  +

                                                  The figure below shows discs drawn for N = 6 and A as follows:

                                                  +

                                                  A[0] = 1 + A[1] = 5 + A[2] = 2 + A[3] = 1 + A[4] = 4 + A[5] = 0

                                                  +

                                                  number_of_disc_intersections

                                                  +

                                                  There are eleven (unordered) pairs of discs that intersect, namely:

                                                  +
                                                    +
                                                  • discs 1 and 4 intersect, and both intersect with all the other discs;
                                                  • +
                                                  • disc 2 also intersects with discs 0 and 3. +Write a function:
                                                  • +
                                                  +

                                                  func Solution(A []int) int

                                                  +

                                                  that, given an array A describing N discs as explained above, returns the number of (unordered) pairs of intersecting discs. The function should return −1 if the number of intersecting pairs exceeds 10,000,000.

                                                  +

                                                  Given array A shown above, the function should return 11, as explained above.

                                                  +

                                                  Write an efficient algorithm for the following assumptions:

                                                  +

                                                  N is an integer within the range [0..100,000]; +each element of array A is an integer within the range [0..2,147,483,647]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                  +

                                                  題目大意

                                                  +

                                                  A[0] = 1, 代表在(0,0)的位置上有一個半徑為1的圓. 找出圓相交的個數

                                                  +

                                                  解題思路

                                                  +
                                                    +
                                                  • 方法一: 對於第i,j個圓來說,如果兩個原要相交的話 +
                                                  • +
                                                  +

                                                  參考SolutionDirect. 時間複雜度為O(n^2)

                                                  +
                                                    +
                                                  • 方法二 +也就是將原來的二維的線段列表變為2個一維的列表 +首先遍歷數組A得到A[i]+i組成的數組i_limit,以及j-A[j]組成的數組j_limit。然後再遍歷數組i_limit中的元素S,利用二分查找算法得到數組j_limit中不大於S的元素個數。前一個操作時間複雜度是O(N),二分查找算法時間複雜度是O(LogN),因此最終的時間複雜度為O(N*logN)。參考Solution。 +
                                                  • +
                                                  +

                                                  來源

                                                  + +

                                                  解答

                                                  +

                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections.go

                                                  +
                                                  package NumberOfDiscIntersections
                                                  +
                                                  +import "sort"
                                                  +
                                                  +func max(a, b int) int {
                                                  +    if a > b {
                                                  +        return a
                                                  +    }
                                                  +    return b
                                                  +}
                                                  +
                                                  +func min(a, b int) int {
                                                  +    if a > b {
                                                  +        return b
                                                  +    }
                                                  +    return a
                                                  +}
                                                  +
                                                  +// 時間複雜 O(n^2)
                                                  +func SolutionDirect(A []int) int {
                                                  +    count := 0
                                                  +    for indexI, valueI := range A {
                                                  +        tmpArr := A[indexI+1:]
                                                  +        for indexJ, valueJ := range tmpArr {
                                                  +            if valueI+valueJ >= indexJ+indexI+1-indexI {
                                                  +                count++
                                                  +            }
                                                  +        }
                                                  +    }
                                                  +
                                                  +    return count
                                                  +}
                                                  +
                                                  +// 時間複雜 O(nlogn) or O(n)
                                                  +// TODO: 待研究
                                                  +func Solution(A []int) int {
                                                  +    iLimit := make([]int, len(A)) // 左
                                                  +    jLimit := make([]int, len(A)) // 右
                                                  +    result := 0
                                                  +
                                                  +    for i := 0; i < len(A); i += 1 {
                                                  +        iLimit[i] = i - A[i]
                                                  +        jLimit[i] = i + A[i]
                                                  +    }
                                                  +    // 針對iLimit中的每個元素,利用二分查找算法,找到其不小於jLimit中元素的個數
                                                  +    sort.Ints(iLimit)
                                                  +    sort.Ints(jLimit)
                                                  +    for idx, _ := range iLimit {
                                                  +        end := jLimit[idx]
                                                  +
                                                  +        // Binary search for index of element of the rightmost value less than to the interval-end
                                                  +        count := sort.Search(len(iLimit), func(i int) bool {
                                                  +            return iLimit[i] > end
                                                  +        })
                                                  +
                                                  +        // 因為i=j時,A[i]+i 肯定不小於j-A[j],也就是說多算了一個,因此要減去1。
                                                  +        // 減去idx是因為圓盤A和圓盤B相交,次數加上1了,圓盤B和圓盤A相交就不用再加1了。
                                                  +        count = count - idx - 1
                                                  +        result += count
                                                  +
                                                  +        if result > 10000000 {
                                                  +            return -1
                                                  +        }
                                                  +
                                                  +    }
                                                  +
                                                  +    return result
                                                  +}
                                                  +
                                                  +
                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                  + + +
                                                  + +
                                                  +
                                                  +
                                                  + +

                                                  results matching ""

                                                  +
                                                    + +
                                                    +
                                                    + +

                                                    No results matching ""

                                                    + +
                                                    +
                                                    +
                                                    + +
                                                    +
                                                    + +
                                                    + + + + + + + + + + + + + + +
                                                    + + +
                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0006.Sorting/Triangle/Triangle.go b/Codility/Lesson/0006.Sorting/Triangle/Triangle.go new file mode 100644 index 000000000..14d34dc41 --- /dev/null +++ b/Codility/Lesson/0006.Sorting/Triangle/Triangle.go @@ -0,0 +1,16 @@ +package Triangle + +import "sort" + +func Solution(A []int) int { + if len(A) < 3 { + return 0 + } + sort.Ints(A) + for i := 0; i < len(A)-2; i++ { + if A[i+2] < A[i+1]+A[i] { + return 1 + } + } + return 0 +} diff --git a/Codility/Lesson/0006.Sorting/Triangle/Triangle_test.go b/Codility/Lesson/0006.Sorting/Triangle/Triangle_test.go new file mode 100644 index 000000000..df8c7916d --- /dev/null +++ b/Codility/Lesson/0006.Sorting/Triangle/Triangle_test.go @@ -0,0 +1,21 @@ +package Triangle + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{10, 2, 5, 1, 8, 20}, + 1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0006.Sorting/Triangle/index.html b/Codility/Lesson/0006.Sorting/Triangle/index.html new file mode 100644 index 000000000..4fe612525 --- /dev/null +++ b/Codility/Lesson/0006.Sorting/Triangle/index.html @@ -0,0 +1,3940 @@ + + + + + + + Triangle · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                    +
                                                    + + + + + + + + +
                                                    + +
                                                    + +
                                                    + + + + + + + + +
                                                    +
                                                    + +
                                                    +
                                                    + +
                                                    + +

                                                    Triangle

                                                    +

                                                    Determine whether a triangle can be built from a given set of edges.

                                                    +

                                                    An array A consisting of N integers is given. A triplet (P, Q, R) is triangular if 0 ≤ P < Q < R < N and:

                                                    +

                                                    A[P] + A[Q] > A[R], +A[Q] + A[R] > A[P], +A[R] + A[P] > A[Q]. +For example, consider array A such that:

                                                    +

                                                    A[0] = 10 A[1] = 2 A[2] = 5 + A[3] = 1 A[4] = 8 A[5] = 20 +Triplet (0, 2, 4) is triangular.

                                                    +

                                                    Write a function:

                                                    +

                                                    func Solution(A []int) int

                                                    +

                                                    that, given an array A consisting of N integers, returns 1 if there exists a triangular triplet for this array and returns 0 otherwise.

                                                    +

                                                    For example, given array A such that:

                                                    +

                                                    A[0] = 10 A[1] = 2 A[2] = 5 + A[3] = 1 A[4] = 8 A[5] = 20 +the function should return 1, as explained above. Given array A such that:

                                                    +

                                                    A[0] = 10 A[1] = 50 A[2] = 5 + A[3] = 1 +the function should return 0.

                                                    +

                                                    Write an efficient algorithm for the following assumptions:

                                                    +

                                                    N is an integer within the range [0..100,000]; +each element of array A is an integer within the range [−2,147,483,648..2,147,483,647].

                                                    +

                                                    Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                    +

                                                    題目大意

                                                    +

                                                    如果該array存在一個三角形的三元組,則返回1, 否則返回0

                                                    +

                                                    解題思路

                                                    +

                                                    從大到小排序, 如果前面的值小於後面兩數和, 則可以組成三角形. 三數皆不能為0或負數

                                                    +

                                                    來源

                                                    +

                                                    https://app.codility.com/programmers/lessons/6-sorting/triangle/

                                                    +

                                                    解答

                                                    +

                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/Triangle/Triangle.go

                                                    +
                                                    package Triangle
                                                    +
                                                    +import "sort"
                                                    +
                                                    +func Solution(A []int) int {
                                                    +    if len(A) < 3 {
                                                    +        return 0
                                                    +    }
                                                    +    sort.Ints(A)
                                                    +    for i := 0; i < len(A)-2; i++ {
                                                    +        if A[i+2] < A[i+1]+A[i] {
                                                    +            return 1
                                                    +        }
                                                    +    }
                                                    +    return 0
                                                    +}
                                                    +
                                                    +
                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                    + + +
                                                    + +
                                                    +
                                                    +
                                                    + +

                                                    results matching ""

                                                    +
                                                      + +
                                                      +
                                                      + +

                                                      No results matching ""

                                                      + +
                                                      +
                                                      +
                                                      + +
                                                      +
                                                      + +
                                                      + + + + + + + + + + +
                                                      + + +
                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets.go b/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets.go new file mode 100644 index 000000000..49841a787 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets.go @@ -0,0 +1,45 @@ +package Brackets + +import ( + "LeetcodeGolang/Utility/structures" +) + +func Solution(S string) int { + if len(S) == 0 { + return 1 + } + if len(S)%2 != 0 { + return 0 + } + + BracketMap := map[string]string{ + ")": "(", + "]": "[", + "}": "{", + } + + stack := structures.NewArrayStack() + for _, v := range S { + val := string(v) + if val == "(" || val == "[" || val == "{" { + stack.Push(val) + } else if val == ")" || val == "]" || val == "}" { + if stack.IsEmpty() { + return 0 + } + + topVal := stack.Top() + if topVal == BracketMap[val] { + stack.Pop() + } else { + // 找不到可配對的括號 + return 0 + } + } + } + if stack.IsEmpty() { + return 1 + } else { + return 0 + } +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets_test.go b/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets_test.go new file mode 100644 index 000000000..1d642286e --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets_test.go @@ -0,0 +1,33 @@ +package Brackets + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "{[()()]}", + 1, + }, + { + "([)()]", + 0, + }, + { + ")(", + 0, + }, + { + "", + 1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Brackets/index.html b/Codility/Lesson/0007.Stacks-and-Queues/Brackets/index.html new file mode 100644 index 000000000..22eb74fa4 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Brackets/index.html @@ -0,0 +1,3960 @@ + + + + + + + Brackets · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      +
                                                      + + + + + + + + +
                                                      + +
                                                      + +
                                                      + + + + + + + + +
                                                      +
                                                      + +
                                                      +
                                                      + +
                                                      + +

                                                      Brackets

                                                      +

                                                      Determine whether a given string of parentheses (multiple types) is properly nested.

                                                      +

                                                      A string S consisting of N characters is considered to be properly nested if any of the following conditions is true:

                                                      +

                                                      S is empty; +S has the form "(U)" or "[U]" or "{U}" where U is a properly nested string; +S has the form "VW" where V and W are properly nested strings. +For example, the string "{[()()]}" is properly nested but "([)()]" is not.

                                                      +

                                                      Write a function:

                                                      +

                                                      func Solution(S string) int

                                                      +

                                                      that, given a string S consisting of N characters, returns 1 if S is properly nested and 0 otherwise.

                                                      +

                                                      For example, given S = "{[()()]}", the function should return 1 and given S = "([)()]", the function should return 0, as explained above.

                                                      +

                                                      Write an efficient algorithm for the following assumptions:

                                                      +

                                                      N is an integer within the range [0..200,000]; +string S consists only of the following characters: "(", "{", "[", "]", "}" and/or ")". +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                      +

                                                      題目大意

                                                      +

                                                      括號配對, 可配對回傳1 反之回傳0.

                                                      +

                                                      解題思路

                                                      +

                                                      將左括號都放入stack. 遇到右括號時將stack pop出來並檢查pop出來的左括號是否跟右括號配對.

                                                      +

                                                      來源

                                                      +

                                                      https://app.codility.com/programmers/lessons/7-stacks_and_queues/brackets/

                                                      +

                                                      解答

                                                      +

                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets.go

                                                      +
                                                      package Brackets
                                                      +
                                                      +import (
                                                      +    "LeetcodeGolang/Utility/structures"
                                                      +)
                                                      +
                                                      +func Solution(S string) int {
                                                      +    if len(S) == 0 {
                                                      +        return 1
                                                      +    }
                                                      +    if len(S)%2 != 0 {
                                                      +        return 0
                                                      +    }
                                                      +
                                                      +    BracketMap := map[string]string{
                                                      +        ")": "(",
                                                      +        "]": "[",
                                                      +        "}": "{",
                                                      +    }
                                                      +
                                                      +    stack := structures.NewArrayStack()
                                                      +    for _, v := range S {
                                                      +        val := string(v)
                                                      +        if val == "(" || val == "[" || val == "{" {
                                                      +            stack.Push(val)
                                                      +        } else if val == ")" || val == "]" || val == "}" {
                                                      +            if stack.IsEmpty() {
                                                      +                return 0
                                                      +            }
                                                      +
                                                      +            topVal := stack.Top()
                                                      +            if topVal == BracketMap[val] {
                                                      +                stack.Pop()
                                                      +            } else {
                                                      +                // 找不到可配對的括號
                                                      +                return 0
                                                      +            }
                                                      +        }
                                                      +    }
                                                      +    if stack.IsEmpty() {
                                                      +        return 1
                                                      +    } else {
                                                      +        return 0
                                                      +    }
                                                      +}
                                                      +
                                                      +
                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                      + + +
                                                      + +
                                                      +
                                                      +
                                                      + +

                                                      results matching ""

                                                      +
                                                        + +
                                                        +
                                                        + +

                                                        No results matching ""

                                                        + +
                                                        +
                                                        +
                                                        + +
                                                        +
                                                        + +
                                                        + + + + + + + + + + +
                                                        + + +
                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish.go b/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish.go new file mode 100644 index 000000000..6dfb599ce --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish.go @@ -0,0 +1,27 @@ +package Fish + +import "LeetcodeGolang/Utility/structures" + +func Solution(A []int, B []int) int { + stack := structures.NewArrayStack() + aliveFish := 0 + for idx, val := range B { + if val == 1 { + stack.Push(A[idx]) + } else { + // 繼續往下游 + for !stack.IsEmpty() { + if stack.Top().(int) < A[idx] { + // stack的魚比遇到的魚還小, stack被吃掉 + stack.Pop() + } else { + break + } + } + if stack.IsEmpty() { + aliveFish++ + } + } + } + return aliveFish + stack.Size() +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish_test.go b/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish_test.go new file mode 100644 index 000000000..334722621 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish_test.go @@ -0,0 +1,23 @@ +package Fish + +import "testing" + +var tests = []struct { + arg1 []int + arg2 []int + want int +}{ + { + []int{4, 3, 2, 1, 5}, + []int{0, 1, 0, 0, 0}, + 2, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Fish/index.html b/Codility/Lesson/0007.Stacks-and-Queues/Fish/index.html new file mode 100644 index 000000000..7c8be9508 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Fish/index.html @@ -0,0 +1,3964 @@ + + + + + + + Fish · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                        +
                                                        + + + + + + + + +
                                                        + +
                                                        + +
                                                        + + + + + + + + +
                                                        +
                                                        + +
                                                        +
                                                        + +
                                                        + +

                                                        Fish

                                                        +

                                                        N voracious fish are moving along a river. Calculate how many fish are alive.

                                                        +

                                                        You are given two non-empty arrays A and B consisting of N integers. Arrays A and B represent N voracious fish in a river, ordered downstream along the flow of the river.

                                                        +

                                                        The fish are numbered from 0 to N − 1. If P and Q are two fish and P < Q, then fish P is initially upstream of fish Q. Initially, each fish has a unique position.

                                                        +

                                                        Fish number P is represented by A[P] and B[P]. Array A contains the sizes of the fish. All its elements are unique. Array B contains the directions of the fish. It contains only 0s and/or 1s, where:

                                                        +

                                                        0 represents a fish flowing upstream, +1 represents a fish flowing downstream. +If two fish move in opposite directions and there are no other (living) fish between them, they will eventually meet each other. Then only one fish can stay alive − the larger fish eats the smaller one. More precisely, we say that two fish P and Q meet each other when P < Q, B[P] = 1 and B[Q] = 0, and there are no living fish between them. After they meet:

                                                        +

                                                        If A[P] > A[Q] then P eats Q, and P will still be flowing downstream, +If A[Q] > A[P] then Q eats P, and Q will still be flowing upstream. +We assume that all the fish are flowing at the same speed. That is, fish moving in the same direction never meet. The goal is to calculate the number of fish that will stay alive.

                                                        +

                                                        For example, consider arrays A and B such that:

                                                        +

                                                        A[0] = 4 B[0] = 0 + A[1] = 3 B[1] = 1 + A[2] = 2 B[2] = 0 + A[3] = 1 B[3] = 0 + A[4] = 5 B[4] = 0 +Initially all the fish are alive and all except fish number 1 are moving upstream. Fish number 1 meets fish number 2 and eats it, then it meets fish number 3 and eats it too. Finally, it meets fish number 4 and is eaten by it. The remaining two fish, number 0 and 4, never meet and therefore stay alive.

                                                        +

                                                        Write a function:

                                                        +

                                                        func Solution(A []int, B []int) int

                                                        +

                                                        that, given two non-empty arrays A and B consisting of N integers, returns the number of fish that will stay alive.

                                                        +

                                                        For example, given the arrays shown above, the function should return 2, as explained above.

                                                        +

                                                        Write an efficient algorithm for the following assumptions:

                                                        +

                                                        N is an integer within the range [1..100,000]; +each element of array A is an integer within the range [0..1,000,000,000]; +each element of array B is an integer that can have one of the following values: 0, 1; +the elements of A are all distinct.

                                                        +

                                                        Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                        +

                                                        題目大意

                                                        +

                                                        最開始每個魚都有特定的起始位置 +A: 活魚的大小, B: 魚游的方向. 如果於相遇的話大魚會吃掉小魚. +返回剩下魚的數量

                                                        +

                                                        解題思路

                                                        +

                                                        從 B 開始找, 當值為1 存入stack. 代表向下游的魚. 來進行把活魚吃掉. 如果把列表的活魚都吃掉. 則結果+1 +如果值為0且stack為空, 代表沒遇到下游的魚所以活魚++

                                                        +

                                                        來源

                                                        +

                                                        https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/

                                                        +

                                                        解答

                                                        +

                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish.go

                                                        +
                                                        package Fish
                                                        +
                                                        +import "LeetcodeGolang/Utility/structures"
                                                        +
                                                        +func Solution(A []int, B []int) int {
                                                        +    stack := structures.NewArrayStack()
                                                        +    aliveFish := 0
                                                        +    for idx, val := range B {
                                                        +        if val == 1 {
                                                        +            stack.Push(A[idx])
                                                        +        } else {
                                                        +            // 繼續往下游
                                                        +            for !stack.IsEmpty() {
                                                        +                if stack.Top().(int) < A[idx] {
                                                        +                    // stack的魚比遇到的魚還小, stack被吃掉
                                                        +                    stack.Pop()
                                                        +                } else {
                                                        +                    break
                                                        +                }
                                                        +            }
                                                        +            if stack.IsEmpty() {
                                                        +                aliveFish++
                                                        +            }
                                                        +        }
                                                        +    }
                                                        +    return aliveFish + stack.Size()
                                                        +}
                                                        +
                                                        +
                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                        + + +
                                                        + +
                                                        +
                                                        +
                                                        + +

                                                        results matching ""

                                                        +
                                                          + +
                                                          +
                                                          + +

                                                          No results matching ""

                                                          + +
                                                          +
                                                          +
                                                          + +
                                                          +
                                                          + +
                                                          + + + + + + + + + + + + + + +
                                                          + + +
                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting.go b/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting.go new file mode 100644 index 000000000..78fc6c69c --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting.go @@ -0,0 +1,27 @@ +package Nesting + +import "LeetcodeGolang/Utility/structures" + +func Solution(S string) int { + if len(S) == 0 { + return 1 + } + if len(S)%2 != 0 { + return 0 + } + + stack := structures.NewArrayStack() + for _, v := range S { + val := string(v) + if val == "(" { + stack.Push(val) + } else if val == ")" { + stack.Pop() + } + } + if stack.IsEmpty() { + return 1 + } else { + return 0 + } +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting_test.go b/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting_test.go new file mode 100644 index 000000000..7b94d2282 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting_test.go @@ -0,0 +1,25 @@ +package Nesting + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "(()(())())", + 1, + }, + { + "())", + 0, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/Nesting/index.html b/Codility/Lesson/0007.Stacks-and-Queues/Nesting/index.html new file mode 100644 index 000000000..186bf5b41 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/Nesting/index.html @@ -0,0 +1,3948 @@ + + + + + + + Nesting · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                          +
                                                          + + + + + + + + +
                                                          + +
                                                          + +
                                                          + + + + + + + + +
                                                          +
                                                          + +
                                                          +
                                                          + +
                                                          + +

                                                          Nesting

                                                          +

                                                          Determine whether a given string of parentheses (single type) is properly nested.

                                                          +

                                                          A string S consisting of N characters is called properly nested if:

                                                          +

                                                          S is empty; +S has the form "(U)" where U is a properly nested string; +S has the form "VW" where V and W are properly nested strings. +For example, string "(()(())())" is properly nested but string "())" isn't.

                                                          +

                                                          Write a function:

                                                          +

                                                          func Solution(S string) int

                                                          +

                                                          that, given a string S consisting of N characters, returns 1 if string S is properly nested and 0 otherwise.

                                                          +

                                                          For example, given S = "(()(())())", the function should return 1 and given S = "())", the function should return 0, as explained above.

                                                          +

                                                          Write an efficient algorithm for the following assumptions:

                                                          +

                                                          N is an integer within the range [0..1,000,000]; +string S consists only of the characters "(" and/or ")". +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                          +

                                                          題目大意

                                                          +

                                                          括號配對

                                                          +

                                                          解題思路

                                                          +

                                                          與Bracket類似

                                                          +

                                                          來源

                                                          +

                                                          https://app.codility.com/programmers/lessons/7-stacks_and_queues/nesting/

                                                          +

                                                          解答

                                                          +

                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting.go

                                                          +
                                                          package Nesting
                                                          +
                                                          +import "LeetcodeGolang/Utility/structures"
                                                          +
                                                          +func Solution(S string) int {
                                                          +    if len(S) == 0 {
                                                          +        return 1
                                                          +    }
                                                          +    if len(S)%2 != 0 {
                                                          +        return 0
                                                          +    }
                                                          +
                                                          +    stack := structures.NewArrayStack()
                                                          +    for _, v := range S {
                                                          +        val := string(v)
                                                          +        if val == "(" {
                                                          +            stack.Push(val)
                                                          +        } else if val == ")" {
                                                          +            stack.Pop()
                                                          +        }
                                                          +    }
                                                          +    if stack.IsEmpty() {
                                                          +        return 1
                                                          +    } else {
                                                          +        return 0
                                                          +    }
                                                          +}
                                                          +
                                                          +
                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                          + + +
                                                          + +
                                                          +
                                                          +
                                                          + +

                                                          results matching ""

                                                          +
                                                            + +
                                                            +
                                                            + +

                                                            No results matching ""

                                                            + +
                                                            +
                                                            +
                                                            + +
                                                            +
                                                            + +
                                                            + + + + + + + + + + + + + + +
                                                            + + +
                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall.go b/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall.go new file mode 100644 index 000000000..f09fcb161 --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall.go @@ -0,0 +1,18 @@ +package StoneWall + +import "LeetcodeGolang/Utility/structures" + +func Solution(H []int) int { + stack := structures.NewArrayStack() + result := 0 + for _, v := range H { + for !stack.IsEmpty() && stack.Top().(int) > v { + stack.Pop() + } + if stack.IsEmpty() || stack.Top().(int) < v { + stack.Push(v) + result++ + } + } + return result +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall_test.go b/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall_test.go new file mode 100644 index 000000000..def07317f --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall_test.go @@ -0,0 +1,21 @@ +package StoneWall + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{8, 8, 5, 7, 9, 8, 7, 4, 8}, + 7, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/index.html b/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/index.html new file mode 100644 index 000000000..63c20c6fa --- /dev/null +++ b/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/index.html @@ -0,0 +1,3943 @@ + + + + + + + Stone Wall · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                            +
                                                            + + + + + + + + +
                                                            + +
                                                            + +
                                                            + + + + + + + + +
                                                            +
                                                            + +
                                                            +
                                                            + +
                                                            + +

                                                            StoneWall

                                                            +

                                                            Cover "Manhattan skyline" using the minimum number of rectangles.

                                                            +

                                                            You are going to build a stone wall. The wall should be straight and N meters long, and its thickness should be constant; however, it should have different heights in different places. The height of the wall is specified by an array H of N positive integers. H[I] is the height of the wall from I to I+1 meters to the right of its left end. In particular, H[0] is the height of the wall's left end and H[N−1] is the height of the wall's right end.

                                                            +

                                                            The wall should be built of cuboid (長方體) stone blocks (that is, all sides of such blocks are rectangular). Your task is to compute the minimum number of blocks needed to build the wall.

                                                            +

                                                            Write a function:

                                                            +

                                                            func Solution(H []int) int

                                                            +

                                                            that, given an array H of N positive integers specifying the height of the wall, returns the minimum number of blocks needed to build it.

                                                            +

                                                            For example, given array H containing N = 9 integers:

                                                            +

                                                            H[0] = 8 H[1] = 8 H[2] = 5 + H[3] = 7 H[4] = 9 H[5] = 8 + H[6] = 7 H[7] = 4 H[8] = 8 +the function should return 7. The figure shows one possible arrangement of seven blocks.

                                                            +

                                                            +

                                                            Write an efficient algorithm for the following assumptions:

                                                            +

                                                            N is an integer within the range [1..100,000]; +each element of array H is an integer within the range [1..1,000,000,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                            +

                                                            題目大意

                                                            +

                                                            如何用最少的數量來貼出符合 H 的牆呢 +要建立一面長N米的強. 厚度固定, 每個地方的高度不同. +H[I]代表牆從 I 到 I+1 米處的高度. +H[0]大表牆最左到1米處的高度 +H[N-1]大表牆N-1米處到最右的高度

                                                            +

                                                            解題思路

                                                            +

                                                            尋遍整個array, 當當前高度大於先前高度時,加入stack裡, 並視為一個矩形. 將結果+1 +若當前高度小於先前,將先前高度pop出去.直到stack 為空或當前高度大於等於先前高度

                                                            +

                                                            來源

                                                            + +

                                                            解答

                                                            +

                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall.go

                                                            +
                                                            package StoneWall
                                                            +
                                                            +import "LeetcodeGolang/Utility/structures"
                                                            +
                                                            +func Solution(H []int) int {
                                                            +    stack := structures.NewArrayStack()
                                                            +    result := 0
                                                            +    for _, v := range H {
                                                            +        for !stack.IsEmpty() && stack.Top().(int) > v {
                                                            +            stack.Pop()
                                                            +        }
                                                            +        if stack.IsEmpty() || stack.Top().(int) < v {
                                                            +            stack.Push(v)
                                                            +            result++
                                                            +        }
                                                            +    }
                                                            +    return result
                                                            +}
                                                            +
                                                            +
                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                            + + +
                                                            + +
                                                            +
                                                            +
                                                            + +

                                                            results matching ""

                                                            +
                                                              + +
                                                              +
                                                              + +

                                                              No results matching ""

                                                              + +
                                                              +
                                                              +
                                                              + +
                                                              +
                                                              + +
                                                              + + + + + + + + + + +
                                                              + + +
                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0008.Leader/Dominator/Dominator.go b/Codility/Lesson/0008.Leader/Dominator/Dominator.go new file mode 100644 index 000000000..89ec30489 --- /dev/null +++ b/Codility/Lesson/0008.Leader/Dominator/Dominator.go @@ -0,0 +1,39 @@ +package Dominator + +import ( + "math" +) + +func Solution(A []int) int { + mapInt := make(map[int]int, len(A)) + + for _, v := range A { + if _, ok := mapInt[v]; !ok { + mapInt[v] = 1 + } else { + mapInt[v]++ + } + } + + maxCount := 0 + maxVal := 0 + for k, v := range mapInt { + if v > maxCount { + maxCount = v + maxVal = k + } + } + minIndex := -1 + for k, v := range A { + if v == maxVal { + minIndex = k + break + } + } + + if maxCount > int(math.Floor(float64(len(A))/2.0)) { + return minIndex + } else { + return -1 + } +} diff --git a/Codility/Lesson/0008.Leader/Dominator/Dominator_test.go b/Codility/Lesson/0008.Leader/Dominator/Dominator_test.go new file mode 100644 index 000000000..b39fe1ccd --- /dev/null +++ b/Codility/Lesson/0008.Leader/Dominator/Dominator_test.go @@ -0,0 +1,21 @@ +package Dominator + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{3, 4, 3, 2, 3, -1, 3, 3}, + 0, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0008.Leader/Dominator/index.html b/Codility/Lesson/0008.Leader/Dominator/index.html new file mode 100644 index 000000000..2d1e9c85d --- /dev/null +++ b/Codility/Lesson/0008.Leader/Dominator/index.html @@ -0,0 +1,3961 @@ + + + + + + + Dominator · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                              +
                                                              + + + + + + + + +
                                                              + +
                                                              + +
                                                              + + + + + + + + +
                                                              +
                                                              + +
                                                              +
                                                              + +
                                                              + +

                                                              Dominator

                                                              +

                                                              Find an index of an array such that its value occurs at more than half of indices in the array.

                                                              +

                                                              An array A consisting of N integers is given. The dominator of array A is the value that occurs in more than half of the elements of A.

                                                              +

                                                              For example, consider array A such that

                                                              +

                                                              A[0] = 3 A[1] = 4 A[2] = 3 + A[3] = 2 A[4] = 3 A[5] = -1 + A[6] = 3 A[7] = 3 +The dominator of A is 3 because it occurs in 5 out of 8 elements of A (namely in those with indices 0, 2, 4, 6 and 7) and 5 is more than a half of 8.

                                                              +

                                                              Write a function

                                                              +

                                                              func Solution(A []int) int

                                                              +

                                                              that, given an array A consisting of N integers, returns index of any element of array A in which the dominator of A occurs. The function should return −1 if array A does not have a dominator.

                                                              +

                                                              For example, given array A such that

                                                              +

                                                              A[0] = 3 A[1] = 4 A[2] = 3 + A[3] = 2 A[4] = 3 A[5] = -1 + A[6] = 3 A[7] = 3 +the function may return 0, 2, 4, 6 or 7, as explained above.

                                                              +

                                                              Write an efficient algorithm for the following assumptions:

                                                              +

                                                              N is an integer within the range [0..100,000]; +each element of array A is an integer within the range [−2,147,483,648..2,147,483,647]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                              +

                                                              題目大意

                                                              +

                                                              返回Array中的支配數. A的支配數是3,因為它出現在A的8個元素中的5個元素中(index為0、2、4、6和7). 而5是8的一半以上 +可以返回 0,2,4,6,7中的任一數

                                                              +

                                                              解題思路

                                                              +

                                                              用map紀錄每筆數出現次數. 取最大次數看是否有超過一半以上. +是的話返回此數任一個index, 反之返回-1

                                                              +

                                                              來源

                                                              +

                                                              https://app.codility.com/programmers/lessons/8-leader/dominator/

                                                              +

                                                              解答

                                                              +

                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0008.Leader/Dominator/Dominator.go

                                                              +
                                                              package Dominator
                                                              +
                                                              +import (
                                                              +    "math"
                                                              +)
                                                              +
                                                              +func Solution(A []int) int {
                                                              +    mapInt := make(map[int]int, len(A))
                                                              +
                                                              +    for _, v := range A {
                                                              +        if _, ok := mapInt[v]; !ok {
                                                              +            mapInt[v] = 1
                                                              +        } else {
                                                              +            mapInt[v]++
                                                              +        }
                                                              +    }
                                                              +
                                                              +    maxCount := 0
                                                              +    maxVal := 0
                                                              +    for k, v := range mapInt {
                                                              +        if v > maxCount {
                                                              +            maxCount = v
                                                              +            maxVal = k
                                                              +        }
                                                              +    }
                                                              +    minIndex := -1
                                                              +    for k, v := range A {
                                                              +        if v == maxVal {
                                                              +            minIndex = k
                                                              +            break
                                                              +        }
                                                              +    }
                                                              +
                                                              +    if maxCount > int(math.Floor(float64(len(A))/2.0)) {
                                                              +        return minIndex
                                                              +    } else {
                                                              +        return -1
                                                              +    }
                                                              +}
                                                              +
                                                              +
                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                              + + +
                                                              + +
                                                              +
                                                              +
                                                              + +

                                                              results matching ""

                                                              +
                                                                + +
                                                                +
                                                                + +

                                                                No results matching ""

                                                                + +
                                                                +
                                                                +
                                                                + +
                                                                +
                                                                + +
                                                                + + + + + + + + + + +
                                                                + + +
                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader.go b/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader.go new file mode 100644 index 000000000..0c602a601 --- /dev/null +++ b/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader.go @@ -0,0 +1,36 @@ +package EquiLeader + +func Solution(A []int) int { + leaderDict := make(map[int]int) + for i := 0; i < len(A); i++ { + if _, ok := leaderDict[A[i]]; ok { + leaderDict[A[i]]++ + } else { + leaderDict[A[i]] = 1 + } + } + + leader := 0 + times := 0 + for k, v := range leaderDict { + if v > times { + times = v + leader = k + } + } + + equiCount := 0 + count := 0 // 超頻數已出現的次數 + + for index, v := range A { + if v == leader { + count++ + } + if count > (index+1)/2 && (times-count) > (len(A)-(index+1))/2 { + equiCount++ + } + + } + + return equiCount +} diff --git a/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader_test.go b/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader_test.go new file mode 100644 index 000000000..d7b688a07 --- /dev/null +++ b/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader_test.go @@ -0,0 +1,21 @@ +package EquiLeader + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{4, 3, 4, 4, 4, 2}, + 2, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0008.Leader/EquiLeader/index.html b/Codility/Lesson/0008.Leader/EquiLeader/index.html new file mode 100644 index 000000000..fb8a00118 --- /dev/null +++ b/Codility/Lesson/0008.Leader/EquiLeader/index.html @@ -0,0 +1,3976 @@ + + + + + + + Equi Leader · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                +
                                                                + + + + + + + + +
                                                                + +
                                                                + +
                                                                + + + + + + + + +
                                                                +
                                                                + +
                                                                +
                                                                + +
                                                                + +

                                                                EquiLeader

                                                                +

                                                                Find the index S such that the leaders of the sequences A[0], A[1], ..., A[S] and A[S + 1], A[S + 2], ..., A[N - 1] are the same.

                                                                +

                                                                A non-empty array A consisting of N integers is given.

                                                                +

                                                                The leader of this array is the value that occurs in more than half of the elements of A.

                                                                +

                                                                An equi leader is an index S such that 0 ≤ S < N − 1 and two sequences A[0], A[1], ..., A[S] and A[S + 1], A[S + 2], ..., A[N − 1] have leaders of the same value.

                                                                +

                                                                For example, given array A such that:

                                                                +
                                                                A[0] = 4
                                                                +A[1] = 3
                                                                +A[2] = 4
                                                                +A[3] = 4
                                                                +A[4] = 4
                                                                +A[5] = 2
                                                                +

                                                                we can find two equi leaders:

                                                                +
                                                                  +
                                                                • 0, because sequences: (4) and (3, 4, 4, 4, 2) have the same leader, whose value is 4.
                                                                • +
                                                                • 2, because sequences: (4, 3, 4) and (4, 4, 2) have the same leader, whose value is 4. +The goal is to count the number of equi leaders.
                                                                • +
                                                                +

                                                                Write a function:

                                                                +

                                                                func Solution(A []int) int

                                                                +

                                                                that, given a non-empty array A consisting of N integers, returns the number of equi leaders.

                                                                +

                                                                For example, given:

                                                                +
                                                                A[0] = 4
                                                                +A[1] = 3
                                                                +A[2] = 4
                                                                +A[3] = 4
                                                                +A[4] = 4
                                                                +A[5] = 2
                                                                +

                                                                the function should return 2, as explained above.

                                                                +

                                                                Write an efficient algorithm for the following assumptions:

                                                                +

                                                                N is an integer within the range [1..100,000]; +each element of array A is an integer within the range [−1,000,000,000..1,000,000,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                +

                                                                題目大意

                                                                +

                                                                選定一個下標, 將一個數組分爲左右兩個子數組, 使得兩個子數組都有相同的leader, +則稱此下標爲EquiLeader, 要求返回給定數組中EquiLeader的個數n. +事實上, 若一個數同時是左子數組的leader, 它必然也是整個數組的leader.

                                                                +

                                                                解題思路

                                                                +

                                                                需要先找出序列中的leader, 記錄其出現的次數. +然後再遍歷整個數組,枚舉分割點,記錄下左子數組leader出現的次數s, +看s與n-s是否能使得leader在左右子數組中仍爲leader.

                                                                +

                                                                來源

                                                                + +

                                                                解答

                                                                +

                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader.go

                                                                +
                                                                package EquiLeader
                                                                +
                                                                +func Solution(A []int) int {
                                                                +    leaderDict := make(map[int]int)
                                                                +    for i := 0; i < len(A); i++ {
                                                                +        if _, ok := leaderDict[A[i]]; ok {
                                                                +            leaderDict[A[i]]++
                                                                +        } else {
                                                                +            leaderDict[A[i]] = 1
                                                                +        }
                                                                +    }
                                                                +
                                                                +    leader := 0
                                                                +    times := 0
                                                                +    for k, v := range leaderDict {
                                                                +        if v > times {
                                                                +            times = v
                                                                +            leader = k
                                                                +        }
                                                                +    }
                                                                +
                                                                +    equiCount := 0
                                                                +    count := 0 // 超頻數已出現的次數
                                                                +
                                                                +    for index, v := range A {
                                                                +        if v == leader {
                                                                +            count++
                                                                +        }
                                                                +        if count > (index+1)/2 && (times-count) > (len(A)-(index+1))/2 {
                                                                +            equiCount++
                                                                +        }
                                                                +
                                                                +    }
                                                                +
                                                                +    return equiCount
                                                                +}
                                                                +
                                                                +
                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                + + +
                                                                + +
                                                                +
                                                                +
                                                                + +

                                                                results matching ""

                                                                +
                                                                  + +
                                                                  +
                                                                  + +

                                                                  No results matching ""

                                                                  + +
                                                                  +
                                                                  +
                                                                  + +
                                                                  +
                                                                  + +
                                                                  + + + + + + + + + + +
                                                                  + + +
                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum.go b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum.go new file mode 100644 index 000000000..620844262 --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum.go @@ -0,0 +1,34 @@ +package MaxDoubleSliceSum + +import ( + "math" +) + +func Solution(A []int) int { + if len(A) < 4 { + return 0 + } + N := len(A) - 2 + forwardSum := make([]int, N) + reverseSum := make([]int, N) + + // 0 ≤ X < Y < Z < N, + // A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1]. + // A : [ 3, 2, 6, -1, 4, 5, -1, 2] + // forwardSum : [ 0, 2, 8, 7, 11, 16] + // reverseSum : [14, 8, 9, 5, 0, 0] + for i := 0; i < N-1; i++ { + forwardVal := A[i+1] + reverseVal := A[N-i] + + forwardSum[i+1] = int(math.Max(0, float64(forwardVal)+float64(forwardSum[i]))) + reverseSum[N-i-2] = int(math.Max(0, float64(reverseVal)+float64(reverseSum[N-i-1]))) + } + + combineMax := math.MinInt64 + for i := 0; i < N; i++ { + combineMax = int(math.Max(float64(combineMax), float64(forwardSum[i])+float64(reverseSum[i]))) + } + + return combineMax +} diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum_test.go b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum_test.go new file mode 100644 index 000000000..9f6d4df55 --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum_test.go @@ -0,0 +1,21 @@ +package MaxDoubleSliceSum + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{3, 2, 6, -1, 4, 5, -1, 2}, + 17, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/index.html b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/index.html new file mode 100644 index 000000000..9dac297bd --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/index.html @@ -0,0 +1,3975 @@ + + + + + + + Max Double Slice Sum · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                  +
                                                                  + + + + + + + + +
                                                                  + +
                                                                  + +
                                                                  + + + + + + + + +
                                                                  +
                                                                  + +
                                                                  +
                                                                  + +
                                                                  + +

                                                                  MaxDoubleSliceSum

                                                                  +

                                                                  Find the maximal sum of any double slice.

                                                                  +

                                                                  A non-empty array A consisting of N integers is given.

                                                                  +

                                                                  A triplet (X, Y, Z), such that 0 ≤ X < Y < Z < N, is called a double slice.

                                                                  +

                                                                  The sum of double slice (X, Y, Z) is the total of A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1].

                                                                  +

                                                                  For example, array A such that:

                                                                  +
                                                                  A[0] = 3
                                                                  +A[1] = 2
                                                                  +A[2] = 6
                                                                  +A[3] = -1
                                                                  +A[4] = 4
                                                                  +A[5] = 5
                                                                  +A[6] = -1
                                                                  +A[7] = 2
                                                                  +

                                                                  contains the following example double slices:

                                                                  +

                                                                  double slice (0, 3, 6), sum is 2 + 6 + 4 + 5 = 17, +double slice (0, 3, 7), sum is 2 + 6 + 4 + 5 − 1 = 16, +double slice (3, 4, 5), sum is 0. +The goal is to find the maximal sum of any double slice.

                                                                  +

                                                                  Write a function:

                                                                  +

                                                                  func Solution(A []int) int

                                                                  +

                                                                  that, given a non-empty array A consisting of N integers, returns the maximal sum of any double slice.

                                                                  +

                                                                  For example, given:

                                                                  +
                                                                  A[0] = 3
                                                                  +A[1] = 2
                                                                  +A[2] = 6
                                                                  +A[3] = -1
                                                                  +A[4] = 4
                                                                  +A[5] = 5
                                                                  +A[6] = -1
                                                                  +A[7] = 2
                                                                  +

                                                                  the function should return 17, because no double slice of array A has a sum of greater than 17.

                                                                  +

                                                                  Write an efficient algorithm for the following assumptions:

                                                                  +

                                                                  N is an integer within the range [3..100,000]; +each element of array A is an integer within the range [−10,000..10,000]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                  +

                                                                  題目大意

                                                                  +

                                                                  A[X+1]到A[Y-1] + A[Y+1]到A[Z-1] 最大的和

                                                                  +

                                                                  解題思路

                                                                  +

                                                                  正向尋過array, 獲得到達每個index可以得到的最大值序列, 然后反向尋過array獲得到達每個index可以得到的最大值序列, +反向的的最大值序列需要倒轉.然後間隔一個位置, +最後尋遍array起兩者相加最大值

                                                                  +

                                                                  來源

                                                                  + +

                                                                  解答

                                                                  +

                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum.go

                                                                  +
                                                                  package MaxDoubleSliceSum
                                                                  +
                                                                  +import (
                                                                  +    "math"
                                                                  +)
                                                                  +
                                                                  +func Solution(A []int) int {
                                                                  +    if len(A) < 4 {
                                                                  +        return 0
                                                                  +    }
                                                                  +    N := len(A) - 2
                                                                  +    forwardSum := make([]int, N)
                                                                  +    reverseSum := make([]int, N)
                                                                  +
                                                                  +    //  0 ≤ X < Y < Z < N,
                                                                  +    //  A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1].
                                                                  +    //             A : [ 3,  2, 6, -1,  4,  5, -1, 2]
                                                                  +    // forwardSum : [ 0,  2, 8,  7, 11, 16]
                                                                  +    // reverseSum : [14,  8, 9,  5,  0,  0]
                                                                  +    for i := 0; i < N-1; i++ {
                                                                  +        forwardVal := A[i+1]
                                                                  +        reverseVal := A[N-i]
                                                                  +
                                                                  +        forwardSum[i+1] = int(math.Max(0, float64(forwardVal)+float64(forwardSum[i])))
                                                                  +        reverseSum[N-i-2] = int(math.Max(0, float64(reverseVal)+float64(reverseSum[N-i-1])))
                                                                  +    }
                                                                  +
                                                                  +    combineMax := math.MinInt64
                                                                  +    for i := 0; i < N; i++ {
                                                                  +        combineMax = int(math.Max(float64(combineMax), float64(forwardSum[i])+float64(reverseSum[i])))
                                                                  +    }
                                                                  +
                                                                  +    return combineMax
                                                                  +}
                                                                  +
                                                                  +
                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                  + + +
                                                                  + +
                                                                  +
                                                                  +
                                                                  + +

                                                                  results matching ""

                                                                  +
                                                                    + +
                                                                    +
                                                                    + +

                                                                    No results matching ""

                                                                    + +
                                                                    +
                                                                    +
                                                                    + +
                                                                    +
                                                                    + +
                                                                    + + + + + + + + + + +
                                                                    + + +
                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit.go b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit.go new file mode 100644 index 000000000..618abdc07 --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit.go @@ -0,0 +1,17 @@ +package MaxProfit + +import ( + "math" +) + +func Solution(A []int) int { + minBuyPrice := math.MaxFloat64 + maxProfit := 0.0 + + for _, v := range A { + minBuyPrice = math.Min(minBuyPrice, float64(v)) + maxProfit = math.Max(maxProfit, float64(v)-minBuyPrice) + } + + return int(maxProfit) +} diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit_test.go b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit_test.go new file mode 100644 index 000000000..ccfdde7de --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit_test.go @@ -0,0 +1,21 @@ +package MaxProfit + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{23171, 21011, 21123, 21366, 21013, 21367}, + 356, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/index.html b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/index.html new file mode 100644 index 000000000..83b1f3c4c --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/index.html @@ -0,0 +1,3949 @@ + + + + + + + Max Profit · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                    +
                                                                    + + + + + + + + +
                                                                    + +
                                                                    + +
                                                                    + + + + + + + + +
                                                                    +
                                                                    + +
                                                                    +
                                                                    + +
                                                                    + +

                                                                    MaxProfit

                                                                    +

                                                                    Given a log of stock prices compute the maximum possible earning.

                                                                    +

                                                                    An array A consisting of N integers is given. It contains daily prices of a stock share for a period of N consecutive days. If a single share was bought on day P and sold on day Q, where 0 ≤ P ≤ Q < N, then the profit of such transaction is equal to A[Q] − A[P], provided that A[Q] ≥ A[P]. Otherwise, the transaction brings loss of A[P] − A[Q].

                                                                    +

                                                                    For example, consider the following array A consisting of six elements such that:

                                                                    +

                                                                    A[0] = 23171 + A[1] = 21011 + A[2] = 21123 + A[3] = 21366 + A[4] = 21013 + A[5] = 21367 +If a share was bought on day 0 and sold on day 2, a loss of 2048 would occur because A[2] − A[0] = 21123 − 23171 = −2048. If a share was bought on day 4 and sold on day 5, a profit of 354 would occur because A[5] − A[4] = 21367 − 21013 = 354. Maximum possible profit was 356. It would occur if a share was bought on day 1 and sold on day 5.

                                                                    +

                                                                    Write a function,

                                                                    +

                                                                    func Solution(A []int) int

                                                                    +

                                                                    that, given an array A consisting of N integers containing daily prices of a stock share for a period of N consecutive days, returns the maximum possible profit from one transaction during this period. The function should return 0 if it was impossible to gain any profit.

                                                                    +

                                                                    For example, given array A consisting of six elements such that:

                                                                    +

                                                                    A[0] = 23171 + A[1] = 21011 + A[2] = 21123 + A[3] = 21366 + A[4] = 21013 + A[5] = 21367 +the function should return 356, as explained above.

                                                                    +

                                                                    Write an efficient algorithm for the following assumptions:

                                                                    +

                                                                    N is an integer within the range [0..400,000]; +each element of array A is an integer within the range [0..200,000].

                                                                    +

                                                                    Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                    +

                                                                    題目大意

                                                                    +

                                                                    計算股票可能獲得的最大利潤

                                                                    +

                                                                    解題思路

                                                                    +

                                                                    尋遍整個array, 找出最小的買入金額, 同時計算當前的賣出金額-最小買入金額, 得出最大利潤

                                                                    +

                                                                    來源

                                                                    +

                                                                    https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/

                                                                    +

                                                                    解答

                                                                    +

                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit.go

                                                                    +
                                                                    package MaxProfit
                                                                    +
                                                                    +import (
                                                                    +    "math"
                                                                    +)
                                                                    +
                                                                    +func Solution(A []int) int {
                                                                    +    minBuyPrice := math.MaxFloat64
                                                                    +    maxProfit := 0.0
                                                                    +
                                                                    +    for _, v := range A {
                                                                    +        minBuyPrice = math.Min(minBuyPrice, float64(v))
                                                                    +        maxProfit = math.Max(maxProfit, float64(v)-minBuyPrice)
                                                                    +    }
                                                                    +
                                                                    +    return int(maxProfit)
                                                                    +}
                                                                    +
                                                                    +
                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                    + + +
                                                                    + +
                                                                    +
                                                                    +
                                                                    + +

                                                                    results matching ""

                                                                    +
                                                                      + +
                                                                      +
                                                                      + +

                                                                      No results matching ""

                                                                      + +
                                                                      +
                                                                      +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      + + + + + + + + + + + + + + +
                                                                      + + +
                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum.go b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum.go new file mode 100644 index 000000000..5f738eabc --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum.go @@ -0,0 +1,18 @@ +package MaxSliceSum + +import ( + "math" +) + +func Solution(A []int) int { + if len(A) == 1 { + return A[0] + } + result := math.MinInt64 + sum := math.MinInt64 + for i := 0; i < len(A); i++ { + sum = int(math.Max(float64(A[i]), float64(A[i])+float64(sum))) + result = int(math.Max(float64(sum), float64(result))) + } + return result +} diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum_test.go b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum_test.go new file mode 100644 index 000000000..bc0211e50 --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum_test.go @@ -0,0 +1,25 @@ +package MaxSliceSum + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{3, 2, -6, 4, 0}, + 5, + }, + // { + // []int{-2, -2}, + // -2, + // }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/index.html b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/index.html new file mode 100644 index 000000000..3e3d4cdf2 --- /dev/null +++ b/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/index.html @@ -0,0 +1,3938 @@ + + + + + + + Max Slice Sum · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                      +
                                                                      + + + + + + + + +
                                                                      + +
                                                                      + +
                                                                      + + + + + + + + +
                                                                      +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      + +

                                                                      MaxSliceSum

                                                                      +

                                                                      Find a maximum sum of a compact subsequence of array elements.

                                                                      +

                                                                      A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P ≤ Q < N, is called a slice of array A. The sum of a slice (P, Q) is the total of A[P] + A[P+1] + ... + A[Q].

                                                                      +

                                                                      Write a function:

                                                                      +

                                                                      func Solution(A []int) int

                                                                      +

                                                                      that, given an array A consisting of N integers, returns the maximum sum of any slice of A.

                                                                      +

                                                                      For example, given array A such that:

                                                                      +

                                                                      A[0] = 3 A[1] = 2 A[2] = -6 +A[3] = 4 A[4] = 0 +the function should return 5 because:

                                                                      +

                                                                      (3, 4) is a slice of A that has sum 4, +(2, 2) is a slice of A that has sum −6, +(0, 1) is a slice of A that has sum 5, +no other slice of A has sum greater than (0, 1). +Write an efficient algorithm for the following assumptions:

                                                                      +

                                                                      N is an integer within the range [1..1,000,000]; +each element of array A is an integer within the range [−1,000,000..1,000,000]; +the result will be an integer within the range [−2,147,483,648..2,147,483,647].

                                                                      +

                                                                      Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                      +

                                                                      題目大意

                                                                      +

                                                                      找出連續子序列最大的和

                                                                      +

                                                                      解題思路

                                                                      +

                                                                      長度如果為1, 回傳第一筆 +當下的值跟當下的值加上先前的和, 取最大值. 再將剛剛算出的最大值跟紀錄中的最大值比較,取最大值

                                                                      +

                                                                      來源

                                                                      +

                                                                      https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/

                                                                      +

                                                                      解答

                                                                      +

                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum.go

                                                                      +
                                                                      package MaxSliceSum
                                                                      +
                                                                      +import (
                                                                      +    "math"
                                                                      +)
                                                                      +
                                                                      +func Solution(A []int) int {
                                                                      +    if len(A) == 1 {
                                                                      +        return A[0]
                                                                      +    }
                                                                      +    result := math.MinInt64
                                                                      +    sum := math.MinInt64
                                                                      +    for i := 0; i < len(A); i++ {
                                                                      +        sum = int(math.Max(float64(A[i]), float64(A[i])+float64(sum)))
                                                                      +        result = int(math.Max(float64(sum), float64(result)))
                                                                      +    }
                                                                      +    return result
                                                                      +}
                                                                      +
                                                                      +
                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                      + + +
                                                                      + +
                                                                      +
                                                                      +
                                                                      + +

                                                                      results matching ""

                                                                      +
                                                                        + +
                                                                        +
                                                                        + +

                                                                        No results matching ""

                                                                        + +
                                                                        +
                                                                        +
                                                                        + +
                                                                        +
                                                                        + +
                                                                        + + + + + + + + + + +
                                                                        + + +
                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors.go new file mode 100644 index 000000000..9a2250848 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors.go @@ -0,0 +1,21 @@ +package CountFactors + +import ( + "math" +) + +func Solution(N int) int { + result := 0 + for i := 1; i <= int(math.Pow(float64(N), 0.5)); i++ { + if N%i == 0 { + if i*i == N { + // fmt.Println("+1 : ", i) + result++ + } else { + // fmt.Println("+2 : ", i) + result += 2 + } + } + } + return result +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors_test.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors_test.go new file mode 100644 index 000000000..34608d047 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors_test.go @@ -0,0 +1,21 @@ +package CountFactors + +import "testing" + +var tests = []struct { + arg1 int + want int +}{ + { + 24, + 8, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/index.html b/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/index.html new file mode 100644 index 000000000..c9142bd69 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/index.html @@ -0,0 +1,3919 @@ + + + + + + + Count Factors · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                        +
                                                                        + + + + + + + + +
                                                                        + +
                                                                        + +
                                                                        + + + + + + + + +
                                                                        +
                                                                        + +
                                                                        +
                                                                        + +
                                                                        + +

                                                                        CountFactors

                                                                        +

                                                                        Count factors of given number n.

                                                                        +

                                                                        A positive integer D is a factor of a positive integer N if there exists an integer M such that N = D * M.

                                                                        +

                                                                        For example, 6 is a factor of 24, because M = 4 satisfies the above condition (24 = 6 * 4).

                                                                        +

                                                                        Write a function:

                                                                        +

                                                                        func Solution(N int) int

                                                                        +

                                                                        that, given a positive integer N, returns the number of its factors.

                                                                        +

                                                                        For example, given N = 24, the function should return 8, because 24 has 8 factors, namely 1, 2, 3, 4, 6, 8, 12, 24. There are no other factors of 24.

                                                                        +

                                                                        Write an efficient algorithm for the following assumptions:

                                                                        +

                                                                        N is an integer within the range [1..2,147,483,647].

                                                                        +

                                                                        Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                        +

                                                                        題目大意

                                                                        +

                                                                        找出該數的因子個數

                                                                        +

                                                                        解題思路

                                                                        +

                                                                        尋遍該數字平方根的整數, 每次可以獲得2個因子

                                                                        +

                                                                        來源

                                                                        +

                                                                        https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/count_factors/

                                                                        +

                                                                        解答

                                                                        +

                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors.go

                                                                        +
                                                                        package CountFactors
                                                                        +
                                                                        +import (
                                                                        +    "math"
                                                                        +)
                                                                        +
                                                                        +func Solution(N int) int {
                                                                        +    result := 0
                                                                        +    for i := 1; i 
                                                                        +
                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                        + + +
                                                                        + +
                                                                        +
                                                                        +
                                                                        + +

                                                                        results matching ""

                                                                        +
                                                                          + +
                                                                          +
                                                                          + +

                                                                          No results matching ""

                                                                          + +
                                                                          +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + +
                                                                          + + + + + + + + + + +
                                                                          + + +
                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags.go new file mode 100644 index 000000000..d02e61489 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags.go @@ -0,0 +1,38 @@ +package Flags + +import ( + "math" +) + +func Solution(A []int) int { + var peaksFlag []int + + for i := 1; i < len(A)-1; i++ { + if A[i] > A[i-1] && A[i] > A[i+1] { + peaksFlag = append(peaksFlag, i) + } + } + + if len(peaksFlag) == 0 { + return 0 + } + if len(peaksFlag) == 1 { + return 1 + } + + maxFlag := int(math.Pow(float64(peaksFlag[len(peaksFlag)-1]-peaksFlag[0]), 0.5) + 1) + + for i := maxFlag; i > 1; i-- { + addressFlag := []int{peaksFlag[0]} + for _, val := range peaksFlag[1:] { + if val-addressFlag[len(addressFlag)-1] >= i { + addressFlag = append(addressFlag, val) + if len(addressFlag) >= i { + return i + } + } + } + } + + return 1 +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags_test.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags_test.go new file mode 100644 index 000000000..48994a714 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags_test.go @@ -0,0 +1,21 @@ +package Flags + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{1, 5, 3, 4, 3, 4, 1, 2, 3, 4, 6, 2}, + 3, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/index.html b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/index.html new file mode 100644 index 000000000..cbc446c0f --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/index.html @@ -0,0 +1,3996 @@ + + + + + + + Flags · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                          +
                                                                          + + + + + + + + +
                                                                          + +
                                                                          + +
                                                                          + + + + + + + + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + +
                                                                          + +

                                                                          Flags

                                                                          +

                                                                          Find the maximum number of flags that can be set on mountain peaks.

                                                                          +

                                                                          A non-empty array A consisting of N integers is given.

                                                                          +

                                                                          A peak is an array element which is larger than its neighbours. More precisely, it is an index P such that 0 < P < N − 1 and A[P − 1] < A[P] > A[P + 1].

                                                                          +

                                                                          For example, the following array A:

                                                                          +
                                                                          A[0] = 1
                                                                          +A[1] = 5 //peaks
                                                                          +A[2] = 3
                                                                          +A[3] = 4 //peaks
                                                                          +A[4] = 3
                                                                          +A[5] = 4 //peaks
                                                                          +A[6] = 1
                                                                          +A[7] = 2
                                                                          +A[8] = 3
                                                                          +A[9] = 4
                                                                          +A[10] = 6 //peaks
                                                                          +A[11] = 2
                                                                          +

                                                                          has exactly four peaks: elements 1, 3, 5 and 10.

                                                                          +

                                                                          You are going on a trip to a range of mountains whose relative heights are represented by array A, as shown in a figure below. You have to choose how many flags you should take with you. The goal is to set the maximum number of flags on the peaks, according to certain rules.

                                                                          +

                                                                          +

                                                                          Flags can only be set on peaks. What's more, if you take K flags, then the distance between any two flags should be greater than or equal to K. The distance between indices P and Q is the absolute value |P − Q|.

                                                                          +

                                                                          For example, given the mountain range represented by array A, above, with N = 12, if you take:

                                                                          +

                                                                          two flags, you can set them on peaks 1 and 5; +three flags, you can set them on peaks 1, 5 and 10; +four flags, you can set only three flags, on peaks 1, 5 and 10. +You can therefore set a maximum of three flags in this case.

                                                                          +

                                                                          Write a function:

                                                                          +

                                                                          func Solution(A []int) int

                                                                          +

                                                                          that, given a non-empty array A of N integers, returns the maximum number of flags that can be set on the peaks of the array.

                                                                          +

                                                                          For example, the following array A:

                                                                          +
                                                                          A[0] = 1
                                                                          +A[1] = 5
                                                                          +A[2] = 3
                                                                          +A[3] = 4
                                                                          +A[4] = 3
                                                                          +A[5] = 4
                                                                          +A[6] = 1
                                                                          +A[7] = 2
                                                                          +A[8] = 3
                                                                          +A[9] = 4
                                                                          +A[10] = 6
                                                                          +A[11] = 2
                                                                          +

                                                                          the function should return 3, as explained above.

                                                                          +

                                                                          Write an efficient algorithm for the following assumptions:

                                                                          +

                                                                          N is an integer within the range [1..400,000]; +each element of array A is an integer within the range [0..1,000,000,000].

                                                                          +

                                                                          Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                          +

                                                                          題目大意

                                                                          +

                                                                          計算可以在山峰上設置的最大旗標數量 +旗標只能在山峰上設置, 如果帶了K個旗標, 則任意兩個旗標的索引距離不能小於K

                                                                          +

                                                                          解題思路

                                                                          +

                                                                          先找出peak的索引位置並存入array中. 根據peak array的第一個最後一個可以判斷理論上最多的旗標數為K: K*(K-1)<=P[-1] - P[0]=dis, 所以K的最大值為 int(sqrt(P[-1] - P[0]) +1). +然後從K的最大值開始找, 尋遍peak array, 只要滿足距離大於等於就將旗標存入旗標array, 只要旗標array數不小於K值,就返回

                                                                          +

                                                                          來源

                                                                          + +

                                                                          解答

                                                                          +

                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags.go

                                                                          +
                                                                          package Flags
                                                                          +
                                                                          +import (
                                                                          +    "math"
                                                                          +)
                                                                          +
                                                                          +func Solution(A []int) int {
                                                                          +    var peaksFlag []int
                                                                          +
                                                                          +    for i := 1; i < len(A)-1; i++ {
                                                                          +        if A[i] > A[i-1] && A[i] > A[i+1] {
                                                                          +            peaksFlag = append(peaksFlag, i)
                                                                          +        }
                                                                          +    }
                                                                          +
                                                                          +    if len(peaksFlag) == 0 {
                                                                          +        return 0
                                                                          +    }
                                                                          +    if len(peaksFlag) == 1 {
                                                                          +        return 1
                                                                          +    }
                                                                          +
                                                                          +    maxFlag := int(math.Pow(float64(peaksFlag[len(peaksFlag)-1]-peaksFlag[0]), 0.5) + 1)
                                                                          +
                                                                          +    for i := maxFlag; i > 1; i-- {
                                                                          +        addressFlag := []int{peaksFlag[0]}
                                                                          +        for _, val := range peaksFlag[1:] {
                                                                          +            if val-addressFlag[len(addressFlag)-1] >= i {
                                                                          +                addressFlag = append(addressFlag, val)
                                                                          +                if len(addressFlag) >= i {
                                                                          +                    return i
                                                                          +                }
                                                                          +            }
                                                                          +        }
                                                                          +    }
                                                                          +
                                                                          +    return 1
                                                                          +}
                                                                          +
                                                                          +
                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                          + + +
                                                                          + +
                                                                          +
                                                                          +
                                                                          + +

                                                                          results matching ""

                                                                          +
                                                                            + +
                                                                            +
                                                                            + +

                                                                            No results matching ""

                                                                            + +
                                                                            +
                                                                            +
                                                                            + +
                                                                            +
                                                                            + +
                                                                            + + + + + + + + + + + + + + +
                                                                            + + +
                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle.go new file mode 100644 index 000000000..735b84b38 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle.go @@ -0,0 +1,77 @@ +package minperimeterrectangle + +import ( + "math" +) + +// O(sqrt(N)) +func Solution(N int) int { + if N <= 0 { + return 0 + } + + min := math.MaxInt32 + for i := 1; i*i <= N; i++ { + if N%i == 0 { + perimeter := 2 * (i + N/i) + min = int(math.Min(float64(min), float64(perimeter))) + } + + } + + if min == math.MaxInt32 { + return 0 + } + return min +} + +/* +O(N) +Task Score 60% +Correctness 100% +Performance 20% +*/ +func Solution1(N int) int { + if N <= 0 { + return 0 + } + + min := math.MaxInt32 + for i := 1; i <= N; i++ { + if N%i == 0 && i*i <= N { + perimeter := 2 * (i + N/i) + min = int(math.Min(float64(min), float64(perimeter))) + } + } + if min == math.MaxInt32 { + return 0 + } + return min +} + +// O(sqrt(N)) +func Solution2(N int) int { + if N <= 0 { + return 0 + } + pairs := make(map[int]int) + i := 1 + for i*i <= N { + if N%i == 0 { + pairs[i] = N / i + } + i++ + } + + min := math.MaxInt32 + for i, v := range pairs { + perimeter := 2 * (i + v) + min = int(math.Min(float64(min), float64(perimeter))) + + } + + if min == math.MaxInt32 { + return 0 + } + return min +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle_test.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle_test.go new file mode 100644 index 000000000..58876bef5 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle_test.go @@ -0,0 +1,45 @@ +package minperimeterrectangle + +import "testing" + +var tests = []struct { + arg1 int + want int +}{ + { + 30, + 22, + }, + { + 1, + 4, + }, + { + 36, + 24, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution1(t *testing.T) { + for _, tt := range tests { + if got := Solution1(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution2(t *testing.T) { + for _, tt := range tests { + if got := Solution2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/index.html b/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/index.html new file mode 100644 index 000000000..0f4a4cb32 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/index.html @@ -0,0 +1,3934 @@ + + + + + + + Min Perimeter Rectangle · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                            +
                                                                            + + + + + + + + +
                                                                            + +
                                                                            + +
                                                                            + + + + + + + + +
                                                                            +
                                                                            + +
                                                                            +
                                                                            + +
                                                                            + +

                                                                            MinPerimeterRectangle

                                                                            +

                                                                            Find the minimal perimeter of any rectangle whose area equals N.

                                                                            +

                                                                            An integer N is given, representing the area of some rectangle.

                                                                            +

                                                                            The area of a rectangle whose sides are of length A and B is A B, and the perimeter is 2 (A + B).

                                                                            +

                                                                            The goal is to find the minimal perimeter of any rectangle whose area equals N. The sides of this rectangle should be only integers.

                                                                            +

                                                                            For example, given integer N = 30, rectangles of area 30 are:

                                                                            +

                                                                            (1, 30), with a perimeter of 62, +(2, 15), with a perimeter of 34, +(3, 10), with a perimeter of 26, +(5, 6), with a perimeter of 22. +Write a function:

                                                                            +

                                                                            func Solution(N int) int

                                                                            +

                                                                            that, given an integer N, returns the minimal perimeter of any rectangle whose area is exactly equal to N.

                                                                            +

                                                                            For example, given an integer N = 30, the function should return 22, as explained above.

                                                                            +

                                                                            Write an efficient algorithm for the following assumptions:

                                                                            +

                                                                            N is an integer within the range [1..1,000,000,000].

                                                                            +

                                                                            Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                            +

                                                                            題目大意

                                                                            +

                                                                            給整數的面積N, 找出面積為N的最小周長

                                                                            +

                                                                            解題思路

                                                                            +

                                                                            從不大於N的平方根的數開始遍歷,只要找到N的因子 +因為越往後所得的周長越大.邊長接近平方根的矩形的周長是最小的

                                                                            +

                                                                            來源

                                                                            + +

                                                                            解答

                                                                            +

                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle.go

                                                                            +
                                                                            package minperimeterrectangle
                                                                            +
                                                                            +import (
                                                                            +    "math"
                                                                            +)
                                                                            +
                                                                            +// O(sqrt(N))
                                                                            +func Solution(N int) int {
                                                                            +    if N 
                                                                            +
                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                            + + +
                                                                            + +
                                                                            +
                                                                            +
                                                                            + +

                                                                            results matching ""

                                                                            +
                                                                              + +
                                                                              +
                                                                              + +

                                                                              No results matching ""

                                                                              + +
                                                                              +
                                                                              +
                                                                              + +
                                                                              +
                                                                              + +
                                                                              + + + + + + + + + + + + + + +
                                                                              + + +
                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks.go new file mode 100644 index 000000000..3e1d3231a --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks.go @@ -0,0 +1,70 @@ +package peaks + +/* +expected worst-case time complexity is O(N*log(log(N))); +expected worst-case space complexity is O(N) +*/ +func Solution(A []int) int { + // 先找出peaks + peaks := []int{} + for i := 1; i < len(A)-1; i++ { + if A[i-1] < A[i] && A[i] > A[i+1] { + peaks = append(peaks, i) + } + } + + if len(peaks) < 0 { + return 0 + } else if len(peaks) == 1 { + return 1 + } + + for size := len(peaks); size > 0; size-- { + if len(A)%size == 0 { + // 每個區塊的size + blockSize := len(A) / size + found := make(map[int]bool, size) + foundCnt := 0 + for _, peak := range peaks { + // 檢查每個區塊是否有找到 peak + blockNr := peak / blockSize + if ok := found[blockNr]; !ok { + found[blockNr] = true + foundCnt++ + } + } + if foundCnt == size { + return size + } + } + } + return 0 +} + +/* +def solution(A): + peaks = [] + + for idx in range(1, len(A)-1): + if A[idx-1] < A[idx] > A[idx+1]: + peaks.append(idx) + + if len(peaks) == 0: + return 0 + + for size in range(len(peaks), 0, -1): + if len(A) % size == 0: + block_size = len(A) // size + found = [False] * size + found_cnt = 0 + for peak in peaks: + block_nr = peak//block_size + if found[block_nr] == False: + found[block_nr] = True + found_cnt += 1 + + if found_cnt == size: + return size + + return 0 +*/ diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks_test.go b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks_test.go new file mode 100644 index 000000000..691117a76 --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks_test.go @@ -0,0 +1,21 @@ +package peaks + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{1, 2, 3, 4, 3, 4, 1, 2, 3, 4, 6, 2}, + 3, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/index.html b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/index.html new file mode 100644 index 000000000..13723321f --- /dev/null +++ b/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/index.html @@ -0,0 +1,4028 @@ + + + + + + + Peaks · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                              +
                                                                              + + + + + + + + +
                                                                              + +
                                                                              + +
                                                                              + + + + + + + + +
                                                                              +
                                                                              + +
                                                                              +
                                                                              + +
                                                                              + +

                                                                              Peaks

                                                                              +

                                                                              Divide an array into the maximum number of same-sized blocks, each of which should contain an index P such that A[P - 1] < A[P] > A[P + 1].

                                                                              +

                                                                              A non-empty array A consisting of N integers is given.

                                                                              +

                                                                              A peak is an array element which is larger than its neighbors. More precisely, it is an index P such that 0 < P < N − 1, A[P − 1] < A[P] and A[P] > A[P + 1].

                                                                              +

                                                                              For example, the following array A:

                                                                              +
                                                                              A[0] = 1
                                                                              +A[1] = 2
                                                                              +A[2] = 3
                                                                              +A[3] = 4
                                                                              +A[4] = 3
                                                                              +A[5] = 4
                                                                              +A[6] = 1
                                                                              +A[7] = 2
                                                                              +A[8] = 3
                                                                              +A[9] = 4
                                                                              +A[10] = 6
                                                                              +A[11] = 2
                                                                              +

                                                                              has exactly three peaks: 3, 5, 10.

                                                                              +

                                                                              We want to divide this array into blocks containing the same number of elements. More precisely, we want to choose a number K that will yield the following blocks:

                                                                              +

                                                                              A[0], A[1], ..., A[K − 1], +A[K], A[K + 1], ..., A[2K − 1], +... +A[N − K], A[N − K + 1], ..., A[N − 1]. +What's more, every block should contain at least one peak. Notice that extreme elements of the blocks (for example A[K − 1] or A[K]) can also be peaks, but only if they have both neighbors (including one in an adjacent blocks).

                                                                              +

                                                                              The goal is to find the maximum number of blocks into which the array A can be divided.

                                                                              +

                                                                              Array A can be divided into blocks as follows:

                                                                              +

                                                                              one block (1, 2, 3, 4, 3, 4, 1, 2, 3, 4, 6, 2). This block contains three peaks. +two blocks (1, 2, 3, 4, 3, 4) and (1, 2, 3, 4, 6, 2). Every block has a peak. +three blocks (1, 2, 3, 4), (3, 4, 1, 2), (3, 4, 6, 2). Every block has a peak. Notice in particular that the first block (1, 2, 3, 4) has a peak at A[3], because A[2] < A[3] > A[4], even though A[4] is in the adjacent block. +However, array A cannot be divided into four blocks, (1, 2, 3), (4, 3, 4), (1, 2, 3) and (4, 6, 2), because the (1, 2, 3) blocks do not contain a peak. Notice in particular that the (4, 3, 4) block contains two peaks: A[3] and A[5].

                                                                              +

                                                                              The maximum number of blocks that array A can be divided into is three.

                                                                              +

                                                                              Write a function:

                                                                              +

                                                                              func Solution(A []int) int

                                                                              +

                                                                              that, given a non-empty array A consisting of N integers, returns the maximum number of blocks into which A can be divided.

                                                                              +

                                                                              If A cannot be divided into some number of blocks, the function should return 0.

                                                                              +

                                                                              For example, given:

                                                                              +
                                                                              A[0] = 1
                                                                              +A[1] = 2
                                                                              +A[2] = 3
                                                                              +A[3] = 4
                                                                              +A[4] = 3
                                                                              +A[5] = 4
                                                                              +A[6] = 1
                                                                              +A[7] = 2
                                                                              +A[8] = 3
                                                                              +A[9] = 4
                                                                              +A[10] = 6
                                                                              +A[11] = 2
                                                                              +

                                                                              the function should return 3, as explained above.

                                                                              +

                                                                              Write an efficient algorithm for the following assumptions:

                                                                              +

                                                                              N is an integer within the range [1..100,000]; +each element of array A is an integer within the range [0..1,000,000,000].

                                                                              +

                                                                              Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                              +

                                                                              題目大意

                                                                              +

                                                                              將 array 分成同樣長度的區塊, 買個區塊至少包含一個peak.

                                                                              +

                                                                              解題思路

                                                                              +

                                                                              先找出所有peak的index 寫入peaks array. +從peaks的長度開始往下找, 將 A 拆成區塊, +每個區塊檢查是否有有找到peak

                                                                              +

                                                                              來源

                                                                              + +

                                                                              解答

                                                                              +

                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks.go

                                                                              +
                                                                              package peaks
                                                                              +
                                                                              +/*
                                                                              +expected worst-case time complexity is O(N*log(log(N)));
                                                                              +expected worst-case space complexity is O(N)
                                                                              +*/
                                                                              +func Solution(A []int) int {
                                                                              +    // 先找出peaks
                                                                              +    peaks := []int{}
                                                                              +    for i := 1; i < len(A)-1; i++ {
                                                                              +        if A[i-1] < A[i] && A[i] > A[i+1] {
                                                                              +            peaks = append(peaks, i)
                                                                              +        }
                                                                              +    }
                                                                              +
                                                                              +    if len(peaks) < 0 {
                                                                              +        return 0
                                                                              +    } else if len(peaks) == 1 {
                                                                              +        return 1
                                                                              +    }
                                                                              +
                                                                              +    for size := len(peaks); size > 0; size-- {
                                                                              +        if len(A)%size == 0 {
                                                                              +            // 每個區塊的size
                                                                              +            blockSize := len(A) / size
                                                                              +            found := make(map[int]bool, size)
                                                                              +            foundCnt := 0
                                                                              +            for _, peak := range peaks {
                                                                              +                // 檢查每個區塊是否有找到 peak
                                                                              +                blockNr := peak / blockSize
                                                                              +                if ok := found[blockNr]; !ok {
                                                                              +                    found[blockNr] = true
                                                                              +                    foundCnt++
                                                                              +                }
                                                                              +            }
                                                                              +            if foundCnt == size {
                                                                              +                return size
                                                                              +            }
                                                                              +        }
                                                                              +    }
                                                                              +    return 0
                                                                              +}
                                                                              +
                                                                              +/*
                                                                              +def solution(A):
                                                                              +    peaks = []
                                                                              +
                                                                              +    for idx in range(1, len(A)-1):
                                                                              +        if A[idx-1] < A[idx] > A[idx+1]:
                                                                              +            peaks.append(idx)
                                                                              +
                                                                              +    if len(peaks) == 0:
                                                                              +        return 0
                                                                              +
                                                                              +    for size in range(len(peaks), 0, -1):
                                                                              +        if len(A) % size == 0:
                                                                              +            block_size = len(A) // size
                                                                              +            found = [False] * size
                                                                              +            found_cnt = 0
                                                                              +            for peak in peaks:
                                                                              +                block_nr = peak//block_size
                                                                              +                if found[block_nr] == False:
                                                                              +                    found[block_nr] = True
                                                                              +                    found_cnt += 1
                                                                              +
                                                                              +            if found_cnt == size:
                                                                              +                return size
                                                                              +
                                                                              +    return 0
                                                                              +*/
                                                                              +
                                                                              +
                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                              + + +
                                                                              + +
                                                                              +
                                                                              +
                                                                              + +

                                                                              results matching ""

                                                                              +
                                                                                + +
                                                                                +
                                                                                + +

                                                                                No results matching ""

                                                                                + +
                                                                                +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + +
                                                                                + + + + + + + + + + +
                                                                                + + +
                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible.go b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible.go new file mode 100644 index 000000000..a84a605fc --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible.go @@ -0,0 +1,137 @@ +package countnondivisible + +import ( + "math" +) + +/* +Task Score 100% +Correctness 100% +Performance 100% +*/ +func Solution(A []int) []int { + // write your code in Go 1.4 + result := []int{} + if len(A) < 0 { + return result + } + + elementDict := make(map[int]int) + for _, i := range A { + elementDict[i]++ + } + + // 用 map存起非因子數的個數, 空間換取時間 + nonDivisorsCountMap := make(map[int]int) + for _, val := range A { + if v, ok := nonDivisorsCountMap[val]; ok { + result = append(result, v) + } else { + divisors := 0 + for factor := 1; factor*factor <= val; factor++ { + if val%factor == 0 { + // 檢查是否有在原先的 array 中, 並取得因子次數 + if v, ok := elementDict[factor]; ok { + divisors += v + } + + // 避免因子重複計算 + otherFactor := int(val / factor) + if v, ok := elementDict[otherFactor]; ok && otherFactor != factor { + divisors += v + } + } + } + // 推出非因子次數 + nonDivisors := len(A) - divisors + result = append(result, nonDivisors) + nonDivisorsCountMap[val] = nonDivisors + } + } + return result +} + +/* +Task Score 88% +Correctness 100% +Performance 75% +*/ +func Solution2(A []int) []int { + result := []int{} + if len(A) < 0 { + return result + } + + elementDict := make(map[int]int) + for _, i := range A { + elementDict[i]++ + } + + // 用 map存起非因子數的個數, 空間換取時間 + nonDivisorsCountMap := make(map[int]int) + for _, val := range A { + if v, ok := nonDivisorsCountMap[val]; ok { + result = append(result, v) + } else { + divisors := 0 + for factor := 1; factor <= int(math.Pow(float64(val), 0.5)); factor++ { + if val%factor == 0 { + // 檢查是否有在原先的 array 中, 並取得因子次數 + if v, ok := elementDict[factor]; ok { + divisors += v + } + + // 避免因子重複計算 + otherFactor := int(val / factor) + if v, ok := elementDict[otherFactor]; ok && otherFactor != factor { + divisors += v + } + } + } + // 推出非因子次數 + nonDivisors := len(A) - divisors + result = append(result, nonDivisors) + nonDivisorsCountMap[val] = nonDivisors + } + } + return result +} + +/* +Task Score 77% +Correctness 100% +Performance 50% +*/ +func Solution1(A []int) []int { + result := []int{} + if len(A) < 0 { + return result + } + + elementDict := make(map[int]int) + for _, i := range A { + elementDict[i]++ + } + + for _, val := range A { + divisors := 0 + for factor := 1; factor <= int(math.Pow(float64(val), 0.5)); factor++ { + if val%factor == 0 { + // 檢查是否有在原先的 array 中, 並取得因子次數 + if v, ok := elementDict[factor]; ok { + divisors += v + } + + // 避免因子重複計算 + otherFactor := int(val / factor) + if v, ok := elementDict[otherFactor]; ok && otherFactor != factor { + divisors += v + } + } + } + // 推出非因子次數 + nonDivisors := len(A) - divisors + result = append(result, nonDivisors) + } + return result +} diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible_test.go b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible_test.go new file mode 100644 index 000000000..729ac5740 --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible_test.go @@ -0,0 +1,40 @@ +package countnondivisible + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want []int +}{ + { + []int{3, 1, 2, 3, 6}, + []int{2, 4, 3, 2, 0}, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution2(t *testing.T) { + for _, tt := range tests { + if got := Solution2(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution1(t *testing.T) { + for _, tt := range tests { + if got := Solution1(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/index.html b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/index.html new file mode 100644 index 000000000..c66081770 --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/index.html @@ -0,0 +1,3967 @@ + + + + + + + Count Non Divisible · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                +
                                                                                + + + + + + + + +
                                                                                + +
                                                                                + +
                                                                                + + + + + + + + +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + +
                                                                                + +

                                                                                CountNonDivisible

                                                                                +

                                                                                Calculate the number of elements of an array that are not divisors(因數) of each element.

                                                                                +

                                                                                You are given an array A consisting of N integers.

                                                                                +

                                                                                For each number A[i] such that 0 ≤ i < N, we want to count the number of elements of the array that are not the divisors of A[i]. We say that these elements are non-divisors.

                                                                                +

                                                                                For example, consider integer N = 5 and array A such that:

                                                                                +
                                                                                A[0] = 3
                                                                                +A[1] = 1
                                                                                +A[2] = 2
                                                                                +A[3] = 3
                                                                                +A[4] = 6
                                                                                +

                                                                                For the following elements:

                                                                                +

                                                                                A[0] = 3, the non-divisors are: 2, 6, +A[1] = 1, the non-divisors are: 3, 2, 3, 6, +A[2] = 2, the non-divisors are: 3, 3, 6, +A[3] = 3, the non-divisors are: 2, 6, +A[4] = 6, there aren't any non-divisors. +Write a function:

                                                                                +

                                                                                func Solution(A []int) []int

                                                                                +

                                                                                that, given an array A consisting of N integers, returns a sequence of integers representing the amount of non-divisors.

                                                                                +

                                                                                Result array should be returned as an array of integers.

                                                                                +

                                                                                For example, given:

                                                                                +
                                                                                A[0] = 3
                                                                                +A[1] = 1
                                                                                +A[2] = 2
                                                                                +A[3] = 3
                                                                                +A[4] = 6
                                                                                +

                                                                                the function should return [2, 4, 3, 2, 0], as explained above.

                                                                                +

                                                                                Write an efficient algorithm for the following assumptions:

                                                                                +

                                                                                N is an integer within the range [1..50,000]; +each element of array A is an integer within the range [1..2 * N].

                                                                                +

                                                                                Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                                +

                                                                                題目大意

                                                                                +

                                                                                算出array中所有元素的非因子數的個數

                                                                                +

                                                                                解題思路

                                                                                +

                                                                                先算數每個數字出現的次數存入map +遍歷A, 對於每個元素從1到sqrt(i)中找出因子,如果是因子,就去字典找出出現次數 +最後用總長度減去因子數就可得出非因子數, 並將結果存入map, 空間換取時間

                                                                                +

                                                                                factor <= int(math.Pow(float64(val), 0.5)) 改成 factor*factor <= val 可提高效能

                                                                                +

                                                                                來源

                                                                                + +

                                                                                解答

                                                                                +

                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible.go

                                                                                +
                                                                                package countnondivisible
                                                                                +
                                                                                +import (
                                                                                +    "math"
                                                                                +)
                                                                                +
                                                                                +/*
                                                                                +Task Score 100%
                                                                                +Correctness 100%
                                                                                +Performance 100%
                                                                                +*/
                                                                                +func Solution(A []int) []int {
                                                                                +    // write your code in Go 1.4
                                                                                +    result := []int{}
                                                                                +    if len(A) < 0 {
                                                                                +        return result
                                                                                +    }
                                                                                +
                                                                                +    elementDict := make(map[int]int)
                                                                                +    for _, i := range A {
                                                                                +        elementDict[i]++
                                                                                +    }
                                                                                +
                                                                                +    // 用 map存起非因子數的個數, 空間換取時間
                                                                                +    nonDivisorsCountMap := make(map[int]int)
                                                                                +    for _, val := range A {
                                                                                +        if v, ok := nonDivisorsCountMap[val]; ok {
                                                                                +            result = append(result, v)
                                                                                +        } else {
                                                                                +            divisors := 0
                                                                                +            for factor := 1; factor*factor 
                                                                                +
                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                + + +
                                                                                + +
                                                                                +
                                                                                +
                                                                                + +

                                                                                results matching ""

                                                                                +
                                                                                  + +
                                                                                  +
                                                                                  + +

                                                                                  No results matching ""

                                                                                  + +
                                                                                  +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  + +
                                                                                  + + + + + + + + + + +
                                                                                  + + +
                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.go b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.go new file mode 100644 index 000000000..523c9c0b6 --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.go @@ -0,0 +1,116 @@ +package countsemiprimes + +func Solution(N int, P []int, Q []int) []int { + semiPrime := []int{} + + // 半質數:兩個質數的乘積所得的自然數我們稱之為半質數. + // 4, 6, 9, 10, 14, 15, 21,22,25,26,33,34,35,38,39,46,49,51,55,57,58,62,65,69,74,77,82,85,86,87,91,93,94,95,106, ... + // 它們包含1及自己在內合共有3或4個因數 + for i := 1; i <= N; i++ { + factorCount := 0 + sign := 0 + for j := 1; j*j <= i; j++ { + if i%j == 0 { + factorCount++ + f := i / j + if f != j { + if f == j*j { + // 3個相同: ex i=27, j=3, f=9 + sign = 1 + semiPrime = append(semiPrime, 0) + break + } else { + factorCount++ + } + } + } + if factorCount > 4 { + sign = 1 + semiPrime = append(semiPrime, 0) + break + } + } + if sign != 1 { + if factorCount >= 3 { + semiPrime = append(semiPrime, i) + } else { + semiPrime = append(semiPrime, 0) + } + } + } + // idx 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 + // semiPrime 0 0 0 4 0 6 0 0 9 10 0 0 0 14 15 0 0 0 0 0 21 22 0 0 25 26 + + // fmt.Println("semiPrime", semiPrime) + + // 當前array和前面一共有幾個半質數 + indexMap := make(map[int]int) + // 如果是半質數添加到 map + semiMap := make(map[int]struct{}) + count := 0 + + for i := 0; i < len(semiPrime); i++ { + if semiPrime[i] != 0 { + count++ + indexMap[semiPrime[i]] = count + semiMap[semiPrime[i]] = struct{}{} + } else { + indexMap[i+1] = count + } + } + // indexMap : map[1:0 2:0 3:0 4:1 5:1 6:2 7:2 8:2 9:3 10:4 11:4 12:4 13:4 14:5 15:6 16:6 17:6 18:6 19:6 20:6 21:7 22:8 23:8 24:8 25:9 26:10] + // semiMap : map[4:0 6:0 9:0 10:0 14:0 15:0 21:0 22:0 25:0 26:0] + // fmt.Println("indexMap : ", indexMap) + // fmt.Println("semiMap : ", semiMap) + + result := []int{} + for i := 0; i < len(P); i++ { + if _, ok := semiMap[P[i]]; ok { + result = append(result, indexMap[Q[i]]-indexMap[P[i]]+1) + } else { + result = append(result, indexMap[Q[i]]-indexMap[P[i]]) + } + } + return result +} + +// TODO: +func Solution2(N int, P []int, Q []int) []int { + prime := make([]int, N+1) + i := 2 + for i*i <= N { + if prime[i] == 0 { + k := i * i + for k <= N { + if prime[k] == 0 { + prime[k] = i + } + k = k + i + } + } + i++ + } + // fmt.Println("prime: ", prime) + + // 當前一共有幾個半質數 + semiprime := make([]int, N+1) + for i := 1; i < len(prime); i++ { + p := prime[i] + if p == 0 { + semiprime[i] = semiprime[i-1] + continue + } + if prime[i/p] == 0 { + semiprime[i] = semiprime[i-1] + 1 + } else { + semiprime[i] = semiprime[i-1] + } + } + // fmt.Println("semiprime: ", semiprime) + + result := make([]int, len(P)) + for i, p := range P { + result[i] = semiprime[Q[i]] - semiprime[p-1] + } + return result +} diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.py b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.py new file mode 100644 index 000000000..405e96dac --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.py @@ -0,0 +1,64 @@ +# https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L11_Sieve%20of%20Eratosthenes/11.2%20CountSemiprimes.md +def solution(N, P, Q): + """ + 返回由数组P、Q的元素组成的区间内,不大于N的半素数的个数, 时间复杂度O(N * log(log(N)) + M) + :param N: 半素数的最大值 + :param P: 数组 + :param Q: 数组 + :return: 每次查询,得到的半素数的个数 + """ + # 半素数只有3或4个因子,并且不能是素数的立方,例如(1, 3, 9, 27)(1, 5, 25, 125)这种情况 + # 首先计算出不大于N的半素数列表,是半素数的为其值,不是的为0 + semi_prime = [] + k =0 + for i in range(1, N + 1): + factor_count = 0 + sign = 0 + for j in range(1, int(i ** 0.5) + 1): + if i % j == 0: + factor_count += 1 + f = i / j + if f != j: + if f == j ** 2: + sign = 1 + semi_prime.append(0) + break + else: + factor_count += 1 + if factor_count > 4: + sign = 1 + semi_prime.append(0) + break + if sign != 1: + if factor_count >= 3: + semi_prime.append(i) + else: + semi_prime.append(0) + + index_dict = {} # 得出当前数值以及前面一共有几个半素数 + semi_dict = {} # 如果是半素数,则添加到字典中 + count = 0 + for index, value in enumerate(semi_prime): + if value != 0: + count += 1 + index_dict[value] = count + semi_dict[value] = 0 + else: + index_dict[index + 1] = count + # index_dict {1: 0, 2: 0, 3: 0, 4: 1, 5: 1, 6: 2, 7: 2, 8: 2, 9: 3, 10: 4, 11: 4, 12: 4, 13: 4, 14: 5, 15: 6, 16: 6, 17: 6, 18: 6, 19: 6, 20: 6, 21: 7, 22: 8, 23: 8, 24: 8, 25: 9, 26: 10} + #semi_dict {4: 0, 6: 0, 9: 0, 10: 0, 14: 0, 15: 0, 21: 0, 22: 0, 25: 0, 26: 0} + print("index_dict",index_dict) + print("semi_dict",semi_dict) + + result_list = [] # 开始计算,在指定区间内有几个半素数 + for i, j in zip(P, Q): + if i in semi_dict: + result_list.append(index_dict[j] - index_dict[i] + 1) + else: + result_list.append(index_dict[j] - index_dict[i]) + + return result_list + + +if __name__ == '__main__': + solution(26,[1, 4, 16],[26, 10, 20]) \ No newline at end of file diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes_test.go b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes_test.go new file mode 100644 index 000000000..be9116c64 --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes_test.go @@ -0,0 +1,62 @@ +package countsemiprimes + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + arg2 []int + arg3 []int + want []int +}{ + { + 26, + []int{1, 4, 16}, + []int{26, 10, 20}, + []int{10, 4, 0}, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2, tt.arg3); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolution2(t *testing.T) { + for _, tt := range tests { + if got := Solution2(tt.arg1, tt.arg2, tt.arg3); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSolution(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution(tests[0].arg1, tests[0].arg2, tests[0].arg3) + } +} + +func BenchmarkSolution2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Solution(tests[0].arg1, tests[0].arg2, tests[0].arg3) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkSolution-8 316700 3294 ns/op 1907 B/op 15 allocs/op +BenchmarkSolution2-8 361731 3326 ns/op 1906 B/op 15 allocs/op +PASS +ok LeetcodeGolang/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes 2.577s +*/ diff --git a/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/index.html b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/index.html new file mode 100644 index 000000000..812812251 --- /dev/null +++ b/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/index.html @@ -0,0 +1,3997 @@ + + + + + + + Count Semiprimes · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                  +
                                                                                  + + + + + + + + +
                                                                                  + +
                                                                                  + +
                                                                                  + + + + + + + + +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  + +
                                                                                  + +

                                                                                  CountSemiprimes

                                                                                  +

                                                                                  Count the semiprime(半質數:兩個質數的乘積所得的自然數我們稱之為半質數) numbers in the given range [a..b]

                                                                                  +

                                                                                  A prime is a positive integer X that has exactly two distinct divisors: 1 and X. The first few prime integers are 2, 3, 5, 7, 11 and 13.

                                                                                  +

                                                                                  A semiprime is a natural number that is the product of two (not necessarily distinct) prime numbers. The first few semiprimes are 4, 6, 9, 10, 14, 15, 21, 22, 25, 26.

                                                                                  +

                                                                                  You are given two non-empty arrays P and Q, each consisting of M integers. These arrays represent queries about the number of semiprimes within specified ranges.

                                                                                  +

                                                                                  Query K requires you to find the number of semiprimes within the range (P[K], Q[K]), where 1 ≤ P[K] ≤ Q[K] ≤ N.

                                                                                  +

                                                                                  For example, consider an integer N = 26 and arrays P, Q such that:

                                                                                  +
                                                                                  P[0] = 1    Q[0] = 26
                                                                                  +P[1] = 4    Q[1] = 10
                                                                                  +P[2] = 16   Q[2] = 20
                                                                                  +

                                                                                  The number of semiprimes within each of these ranges is as follows:

                                                                                  +

                                                                                  (1, 26) is 10, +(4, 10) is 4, +(16, 20) is 0. +Write a function:

                                                                                  +

                                                                                  func Solution(N int, P []int, Q []int) []int

                                                                                  +

                                                                                  that, given an integer N and two non-empty arrays P and Q consisting of M integers, returns an array consisting of M elements specifying the consecutive answers to all the queries.

                                                                                  +

                                                                                  For example, given an integer N = 26 and arrays P, Q such that:

                                                                                  +
                                                                                  P[0] = 1    Q[0] = 26
                                                                                  +P[1] = 4    Q[1] = 10
                                                                                  +P[2] = 16   Q[2] = 20
                                                                                  +

                                                                                  the function should return the values [10, 4, 0], as explained above.

                                                                                  +

                                                                                  Write an efficient algorithm for the following assumptions:

                                                                                  +

                                                                                  N is an integer within the range [1..50,000]; +M is an integer within the range [1..30,000]; +each element of arrays P, Q is an integer within the range [1..N]; +P[i] ≤ Q[i]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                                  +

                                                                                  題目大意

                                                                                  +

                                                                                  計算[a,b]區間得半質數的個數

                                                                                  +

                                                                                  解題思路

                                                                                  +

                                                                                  先把半質數列表找出來. +(半質數:兩個質數的乘積所得的自然數我們稱之為半質數ㄝ開始的幾個半質數是4, 6, 9, 10, 14, 15, 21, 22, 25, 26, ... (OEIS中的數列A001358)它們包含1及自己在內合共有3或4個因數) +計算當前array和前面一共有幾個半質數 +遍歷P arry 算出 Q跟P 之前的半質數總和差, 並寫入結果

                                                                                  +

                                                                                  來源

                                                                                  + +

                                                                                  解答

                                                                                  +

                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.go

                                                                                  +
                                                                                  package countsemiprimes
                                                                                  +
                                                                                  +func Solution(N int, P []int, Q []int) []int {
                                                                                  +    semiPrime := []int{}
                                                                                  +
                                                                                  +    // 半質數:兩個質數的乘積所得的自然數我們稱之為半質數.
                                                                                  +    // 4, 6, 9, 10, 14, 15, 21,22,25,26,33,34,35,38,39,46,49,51,55,57,58,62,65,69,74,77,82,85,86,87,91,93,94,95,106, ...
                                                                                  +    // 它們包含1及自己在內合共有3或4個因數
                                                                                  +    for i := 1; i <= 0="" n;="" i++="" {="" factorcount="" :="0" sign="" for="" j="" j*j="" <="i;" j++="" if="" i%j="=" factorcount++="" f="" !="j" 3個相同:="" ex="" i="27," semiprime="append(semiPrime," 0)="" break="" }="" else=""> 4 {
                                                                                  +                sign = 1
                                                                                  +                semiPrime = append(semiPrime, 0)
                                                                                  +                break
                                                                                  +            }
                                                                                  +        }
                                                                                  +        if sign != 1 {
                                                                                  +            if factorCount >= 3 {
                                                                                  +                semiPrime = append(semiPrime, i)
                                                                                  +            } else {
                                                                                  +                semiPrime = append(semiPrime, 0)
                                                                                  +            }
                                                                                  +        }
                                                                                  +    }
                                                                                  +    // idx         0 1 2 3 4 5 6 7 8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
                                                                                  +    // semiPrime 0 0 0 4 0 6 0 0 9 10  0  0  0 14 15  0  0  0  0  0 21 22  0  0 25 26
                                                                                  +
                                                                                  +    // fmt.Println("semiPrime", semiPrime)
                                                                                  +
                                                                                  +    // 當前array和前面一共有幾個半質數
                                                                                  +    indexMap := make(map[int]int)
                                                                                  +    // 如果是半質數添加到 map
                                                                                  +    semiMap := make(map[int]struct{})
                                                                                  +    count := 0
                                                                                  +
                                                                                  +    for i := 0; i < len(semiPrime); i++ {
                                                                                  +        if semiPrime[i] != 0 {
                                                                                  +            count++
                                                                                  +            indexMap[semiPrime[i]] = count
                                                                                  +            semiMap[semiPrime[i]] = struct{}{}
                                                                                  +        } else {
                                                                                  +            indexMap[i+1] = count
                                                                                  +        }
                                                                                  +    }
                                                                                  +    //     indexMap :  map[1:0 2:0 3:0 4:1 5:1 6:2 7:2 8:2 9:3 10:4 11:4 12:4 13:4 14:5 15:6 16:6 17:6 18:6 19:6 20:6 21:7 22:8 23:8 24:8 25:9 26:10]
                                                                                  +    // semiMap :  map[4:0 6:0 9:0 10:0 14:0 15:0 21:0 22:0 25:0 26:0]
                                                                                  +    // fmt.Println("indexMap : ", indexMap)
                                                                                  +    // fmt.Println("semiMap : ", semiMap)
                                                                                  +
                                                                                  +    result := []int{}
                                                                                  +    for i := 0; i < len(P); i++ {
                                                                                  +        if _, ok := semiMap[P[i]]; ok {
                                                                                  +            result = append(result, indexMap[Q[i]]-indexMap[P[i]]+1)
                                                                                  +        } else {
                                                                                  +            result = append(result, indexMap[Q[i]]-indexMap[P[i]])
                                                                                  +        }
                                                                                  +    }
                                                                                  +    return result
                                                                                  +}
                                                                                  +
                                                                                  +// TODO:
                                                                                  +func Solution2(N int, P []int, Q []int) []int {
                                                                                  +    prime := make([]int, N+1)
                                                                                  +    i := 2
                                                                                  +    for i*i 
                                                                                  +
                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                  + + +
                                                                                  + +
                                                                                  +
                                                                                  +
                                                                                  + +

                                                                                  results matching ""

                                                                                  +
                                                                                    + +
                                                                                    +
                                                                                    + +

                                                                                    No results matching ""

                                                                                    + +
                                                                                    +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    + +
                                                                                    + + + + + + + + + + +
                                                                                    + + +
                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers.go b/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers.go new file mode 100644 index 000000000..1cb714e24 --- /dev/null +++ b/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers.go @@ -0,0 +1,48 @@ +package chocolatesbynumbers + +func gcd(N int, M int) int { + if N%M == 0 { + return M + } else { + return gcd(M, N%M) + } +} + +/* +可以吃到的巧克力的數量就是總的巧克力顆數 N 除以 N 和 M 的最大公因數 +計算 N和M的最大公因數P, N除以P得到商即為答案 +O(log(N + M)) +*/ +func Solution(N int, M int) int { + return N / gcd(N, M) +} + +/* +Task Score 75% +Correctness 100% +Performance 50% +input (947853, 4453) the solution exceeded the time limit. +從0號開始吃, 下一個號碼+M-1號 +*/ +func SolutionBurst(N int, M int) int { + eaten := make(map[int]struct{}) + eatCount := 0 + + if N == 1 || M == 1 { + return N + } + + for { + sumNum := eatCount * M + startNum := sumNum % N + + if _, ok := eaten[startNum]; !ok { + eaten[startNum] = struct{}{} + eatCount++ + } else { + // 找到已吃過的巧克力 + break + } + } + return eatCount +} diff --git a/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers_test.go b/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers_test.go new file mode 100644 index 000000000..7b253ba30 --- /dev/null +++ b/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers_test.go @@ -0,0 +1,66 @@ +package chocolatesbynumbers + +import "testing" + +var tests = []struct { + arg1 int + arg2 int + want int +}{ + { + 10, + 4, + 5, + }, + { + 947853, + 4453, + 947853, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSolutionBurst(t *testing.T) { + for _, tt := range tests { + if got := SolutionBurst(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSolution(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + for _, tt := range tests { + Solution(tt.arg1, tt.arg2) + } + } +} + +func BenchmarkSolutionBurst(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + for _, tt := range tests { + SolutionBurst(tt.arg1, tt.arg2) + } + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkSolution-4 12411740 112.2 ns/op 0 B/op 0 allocs/op +BenchmarkSolutionBurst-4 3 354775339 ns/op 49782528 B/op 38396 allocs/op +PASS +ok LeetcodeGolang/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers 4.425s +*/ diff --git a/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/index.html b/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/index.html new file mode 100644 index 000000000..739e5b07f --- /dev/null +++ b/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/index.html @@ -0,0 +1,3966 @@ + + + + + + + Chocolates By Numbers · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                    +
                                                                                    + + + + + + + + +
                                                                                    + +
                                                                                    + +
                                                                                    + + + + + + + + +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    + +
                                                                                    + +

                                                                                    ChocolatesByNumbers

                                                                                    +

                                                                                    There are N chocolates in a circle. Count the number of chocolates you will eat.

                                                                                    +

                                                                                    Two positive integers N and M are given. Integer N represents the number of chocolates arranged in a circle, numbered from 0 to N − 1.

                                                                                    +

                                                                                    You start to eat the chocolates. After eating a chocolate you leave only a wrapper.

                                                                                    +

                                                                                    You begin with eating chocolate number 0. Then you omit(忽略) the next M − 1 chocolates or wrappers on the circle, and eat the following one.

                                                                                    +

                                                                                    More precisely(恰恰), if you ate chocolate number X, then you will next eat the chocolate with number (X + M) modulo N (remainder of division).

                                                                                    +

                                                                                    You stop eating when you encounter an empty wrapper.

                                                                                    +

                                                                                    For example, given integers N = 10 and M = 4. You will eat the following chocolates: 0, 4, 8, 2, 6.

                                                                                    +

                                                                                    The goal is to count the number of chocolates that you will eat, following the above rules.

                                                                                    +

                                                                                    Write a function:

                                                                                    +

                                                                                    func Solution(N int, M int) int

                                                                                    +

                                                                                    that, given two positive integers N and M, returns the number of chocolates that you will eat.

                                                                                    +

                                                                                    For example, given integers N = 10 and M = 4. the function should return 5, as explained above.

                                                                                    +

                                                                                    Write an efficient algorithm for the following assumptions:

                                                                                    +

                                                                                    N and M are integers within the range [1..1,000,000,000].

                                                                                    +

                                                                                    Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                                    +

                                                                                    題目大意

                                                                                    +

                                                                                    N塊巧克力,如果吃的是X號 下一個是吃 (X + M) modulo N 號 +總共可以吃幾顆.

                                                                                    +

                                                                                    解題思路

                                                                                    +

                                                                                    方法ㄧ: 從0號開始吃, 下一個號碼+M-1號. 迴圈去跑 +方法二: 可以吃到的巧克力的數量就是總的巧克力顆數 N 除以 N 和 M 的最大公因數. 計算 N和M的最大公因數P, N除以P得到商即為答案

                                                                                    +

                                                                                    來源

                                                                                    +

                                                                                    https://app.codility.com/programmers/lessons/12-euclidean_algorithm/chocolates_by_numbers/

                                                                                    +

                                                                                    解答

                                                                                    +

                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers.go

                                                                                    +
                                                                                    package chocolatesbynumbers
                                                                                    +
                                                                                    +func gcd(N int, M int) int {
                                                                                    +    if N%M == 0 {
                                                                                    +        return M
                                                                                    +    } else {
                                                                                    +        return gcd(M, N%M)
                                                                                    +    }
                                                                                    +}
                                                                                    +
                                                                                    +/*
                                                                                    +可以吃到的巧克力的數量就是總的巧克力顆數 N 除以 N 和 M 的最大公因數
                                                                                    +計算 N和M的最大公因數P, N除以P得到商即為答案
                                                                                    +O(log(N + M))
                                                                                    +*/
                                                                                    +func Solution(N int, M int) int {
                                                                                    +    return N / gcd(N, M)
                                                                                    +}
                                                                                    +
                                                                                    +/*
                                                                                    +Task Score 75%
                                                                                    +Correctness 100%
                                                                                    +Performance 50%
                                                                                    +input (947853, 4453) the solution exceeded the time limit.
                                                                                    +從0號開始吃, 下一個號碼+M-1號
                                                                                    +*/
                                                                                    +func SolutionBurst(N int, M int) int {
                                                                                    +    eaten := make(map[int]struct{})
                                                                                    +    eatCount := 0
                                                                                    +
                                                                                    +    if N == 1 || M == 1 {
                                                                                    +        return N
                                                                                    +    }
                                                                                    +
                                                                                    +    for {
                                                                                    +        sumNum := eatCount * M
                                                                                    +        startNum := sumNum % N
                                                                                    +
                                                                                    +        if _, ok := eaten[startNum]; !ok {
                                                                                    +            eaten[startNum] = struct{}{}
                                                                                    +            eatCount++
                                                                                    +        } else {
                                                                                    +            // 找到已吃過的巧克力
                                                                                    +            break
                                                                                    +        }
                                                                                    +    }
                                                                                    +    return eatCount
                                                                                    +}
                                                                                    +
                                                                                    +
                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                    + + +
                                                                                    + +
                                                                                    +
                                                                                    +
                                                                                    + +

                                                                                    results matching ""

                                                                                    +
                                                                                      + +
                                                                                      +
                                                                                      + +

                                                                                      No results matching ""

                                                                                      + +
                                                                                      +
                                                                                      +
                                                                                      + +
                                                                                      +
                                                                                      + +
                                                                                      + + + + + + + + + + +
                                                                                      + + +
                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors.go b/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors.go new file mode 100644 index 000000000..0c004f50d --- /dev/null +++ b/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors.go @@ -0,0 +1,51 @@ +package commonprimedivisors + +/* +func gcd(a, b int) int { + for b != 0 { + t := b + b = a % b + a = t + } + return a +} +*/ +func gcd(N int, M int) int { + if N%M == 0 { + return M + } else { + return gcd(M, N%M) + } +} + +func Solution(A []int, B []int) int { + result := 0 + for i := 0; i < len(A); i++ { + if A[i] == B[i] { + result++ + continue + } + // 先判斷兩數的最大公因數, + abGcd := gcd(A[i], B[i]) + + // 再判斷兩個數是含有最大公因數沒有的因子 + a := A[i] / abGcd + aGcd := gcd(a, abGcd) + for aGcd != 1 { + // 還有其他因子 + a = a / aGcd + aGcd = gcd(aGcd, a) + } + + b := B[i] / abGcd + bGcd := gcd(b, abGcd) + for bGcd != 1 { + b = b / bGcd + bGcd = gcd(bGcd, b) + } + if a == b { + result++ + } + } + return result +} diff --git a/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors_test.go b/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors_test.go new file mode 100644 index 000000000..77909f3ec --- /dev/null +++ b/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors_test.go @@ -0,0 +1,23 @@ +package commonprimedivisors + +import "testing" + +var tests = []struct { + arg1 []int + arg2 []int + want int +}{ + { + []int{15, 10, 3}, + []int{75, 30, 5}, + 1, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/index.html b/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/index.html new file mode 100644 index 000000000..a7d033de3 --- /dev/null +++ b/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/index.html @@ -0,0 +1,3979 @@ + + + + + + + Common Prime Divisors · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                      +
                                                                                      + + + + + + + + +
                                                                                      + +
                                                                                      + +
                                                                                      + + + + + + + + +
                                                                                      +
                                                                                      + +
                                                                                      +
                                                                                      + +
                                                                                      + +

                                                                                      CommonPrimeDivisors

                                                                                      +

                                                                                      Check whether two numbers have the same prime divisors.

                                                                                      +

                                                                                      A prime is a positive integer X that has exactly two distinct divisors: 1 and X. The first few prime integers are 2, 3, 5, 7, 11 and 13.

                                                                                      +

                                                                                      A prime D is called a prime divisor(質因數) of a positive integer P if there exists a positive integer K such that D * K = P. For example, 2 and 5 are prime divisors of 20.

                                                                                      +

                                                                                      You are given two positive integers N and M. The goal is to check whether the sets of prime divisors of integers N and M are exactly the same.

                                                                                      +

                                                                                      For example, given:

                                                                                      +

                                                                                      N = 15 and M = 75, the prime divisors are the same: {3, 5}; +N = 10 and M = 30, the prime divisors aren't the same: {2, 5} is not equal to {2, 3, 5}; +N = 9 and M = 5, the prime divisors aren't the same: {3} is not equal to {5}. +Write a function:

                                                                                      +

                                                                                      func Solution(A []int, B []int) int

                                                                                      +

                                                                                      that, given two non-empty arrays A and B of Z integers, returns the number of positions K for which the prime divisors of A[K] and B[K] are exactly the same.

                                                                                      +

                                                                                      For example, given:

                                                                                      +
                                                                                      A[0] = 15   B[0] = 75
                                                                                      +A[1] = 10   B[1] = 30
                                                                                      +A[2] = 3    B[2] = 5
                                                                                      +

                                                                                      the function should return 1, because only one pair (15, 75) has the same set of prime divisors.

                                                                                      +

                                                                                      Write an efficient algorithm for the following assumptions:

                                                                                      +

                                                                                      Z is an integer within the range [1..6,000]; +each element of arrays A, B is an integer within the range [1..2,147,483,647]. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                                      +

                                                                                      題目大意

                                                                                      +

                                                                                      判斷兩個數是否有相同的質因數

                                                                                      +

                                                                                      解題思路

                                                                                      +

                                                                                      先判斷兩數的最大公因數, 再判斷兩個數是含有最大公因數沒有的因子 +15 , 75 的最大公因數為 35 +15= 35 +75= 355

                                                                                      +

                                                                                      來源

                                                                                      + +

                                                                                      解答

                                                                                      +

                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors.go

                                                                                      +
                                                                                      package commonprimedivisors
                                                                                      +
                                                                                      +/*
                                                                                      +func gcd(a, b int) int {
                                                                                      +    for b != 0 {
                                                                                      +        t := b
                                                                                      +        b = a % b
                                                                                      +        a = t
                                                                                      +    }
                                                                                      +    return a
                                                                                      +}
                                                                                      +*/
                                                                                      +func gcd(N int, M int) int {
                                                                                      +    if N%M == 0 {
                                                                                      +        return M
                                                                                      +    } else {
                                                                                      +        return gcd(M, N%M)
                                                                                      +    }
                                                                                      +}
                                                                                      +
                                                                                      +func Solution(A []int, B []int) int {
                                                                                      +    result := 0
                                                                                      +    for i := 0; i < len(A); i++ {
                                                                                      +        if A[i] == B[i] {
                                                                                      +            result++
                                                                                      +            continue
                                                                                      +        }
                                                                                      +        // 先判斷兩數的最大公因數,
                                                                                      +        abGcd := gcd(A[i], B[i])
                                                                                      +
                                                                                      +        // 再判斷兩個數是含有最大公因數沒有的因子
                                                                                      +        a := A[i] / abGcd
                                                                                      +        aGcd := gcd(a, abGcd)
                                                                                      +        for aGcd != 1 {
                                                                                      +            // 還有其他因子
                                                                                      +            a = a / aGcd
                                                                                      +            aGcd = gcd(aGcd, a)
                                                                                      +        }
                                                                                      +
                                                                                      +        b := B[i] / abGcd
                                                                                      +        bGcd := gcd(b, abGcd)
                                                                                      +        for bGcd != 1 {
                                                                                      +            b = b / bGcd
                                                                                      +            bGcd = gcd(bGcd, b)
                                                                                      +        }
                                                                                      +        if a == b {
                                                                                      +            result++
                                                                                      +        }
                                                                                      +    }
                                                                                      +    return result
                                                                                      +}
                                                                                      +
                                                                                      +
                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                      + + +
                                                                                      + +
                                                                                      +
                                                                                      +
                                                                                      + +

                                                                                      results matching ""

                                                                                      +
                                                                                        + +
                                                                                        +
                                                                                        + +

                                                                                        No results matching ""

                                                                                        + +
                                                                                        +
                                                                                        +
                                                                                        + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + + + + + + + +
                                                                                        + + +
                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog.go b/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog.go new file mode 100644 index 000000000..d6034c054 --- /dev/null +++ b/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog.go @@ -0,0 +1,82 @@ +package fibfrog + +/** + * @description: 產生不大於n的斐波那契數的列表 + * @param {int} N + * @return {*} + */ +func Fib(N int) (fibArr []int) { + fibArr = append(fibArr, 0) + fibArr = append(fibArr, 1) + fibArr = append(fibArr, 1) + i := 2 + for fibArr[i] < N { + i = i + 1 + fibArr = append(fibArr, fibArr[i-1]+fibArr[i-2]) + } + return fibArr +} + +func Solution(A []int) int { + // 終點 + A = append(A, 1) + N := len(A) + fibArr := Fib(N) + // 一次就可以從 -1 跳到 N + if fibArr[len(fibArr)-1] == N { + return 1 + } + fibArr = fibArr[1 : len(fibArr)-1] + // fmt.Println(fibArr) + + // get the leafs that can be reached from the starting shore + reachable := make([]int, N) + for _, v := range fibArr { + if A[v-1] == 1 { + // 找到樹葉 + reachable[v-1] = 1 + } + } + // 一開始只能跳到 index: 4 , fib是 [1 1 2 3 5 8], 會使用到 5 + // fmt.Println("re", reachable) // [0 0 0 0 1 0 0 0 0 0 0 0] + + // iterate all the positions until you reach the other shore + for i := 0; i < N; i++ { + // 忽略不是葉子或已經找過的path + if A[i] != 1 || reachable[i] > 0 { + continue + } + + // get the optimal jump count to reach this leaf + if A[i] == 1 { + // 有樹葉 + // 遍歷斐波那契數列, 尋找最少的跳躍次數 + minJump := i + 1 + canJump := false + for _, f := range fibArr { + previousIdx := i - f + + if previousIdx < 0 || reachable[previousIdx] == 0 { + // fmt.Printf("[No] %d :previousIdx = %d reachable = %v \n", i, previousIdx, reachable) + continue + } + + if minJump > reachable[previousIdx] { + // 此 previousIdx 位置可以到達 + // fmt.Printf("%d :previousIdx = %d reachable = %v \n", i, previousIdx, reachable) + minJump = reachable[previousIdx] + canJump = true + } + } + if canJump { + reachable[i] = minJump + 1 + } + } + // fmt.Printf("i=%d , reachable = %v \n", i, reachable) + } + + if reachable[len(reachable)-1] == 0 { + return -1 + } + return reachable[len(reachable)-1] +} diff --git a/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog_test.go b/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog_test.go new file mode 100644 index 000000000..4d105d6c2 --- /dev/null +++ b/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog_test.go @@ -0,0 +1,21 @@ +package fibfrog + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0}, + 3, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/index.html b/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/index.html new file mode 100644 index 000000000..cce6bb5c7 --- /dev/null +++ b/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/index.html @@ -0,0 +1,4026 @@ + + + + + + + Fib Frog · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        +
                                                                                        + +
                                                                                        + +

                                                                                        FibFrog

                                                                                        +

                                                                                        The Fibonacci sequence is defined using the following recursive formula:

                                                                                        +
                                                                                        F(0) = 0
                                                                                        +F(1) = 1
                                                                                        +F(M) = F(M - 1) + F(M - 2) if M >= 2
                                                                                        +

                                                                                        A small frog wants to get to the other side of a river. The frog is initially located at one bank of the river (position −1) and wants to get to the other bank (position N). The frog can jump over any distance F(K), where F(K) is the K-th Fibonacci number. Luckily, there are many leaves on the river, and the frog can jump between the leaves, but only in the direction of the bank at position N.

                                                                                        +

                                                                                        The leaves on the river are represented in an array A consisting of N integers. Consecutive(連續的) elements of array A represent consecutive positions from 0 to N − 1 on the river. Array A contains only 0s and/or 1s:

                                                                                        +

                                                                                        0 represents a position without a leaf; +1 represents a position containing a leaf. +The goal is to count the minimum number of jumps in which the frog can get to the other side of the river (from position −1 to position N). The frog can jump between positions −1 and N (the banks of the river) and every position containing a leaf.

                                                                                        +

                                                                                        For example, consider array A such that:

                                                                                        +
                                                                                        A[0] = 0
                                                                                        +A[1] = 0
                                                                                        +A[2] = 0
                                                                                        +A[3] = 1
                                                                                        +A[4] = 1
                                                                                        +A[5] = 0
                                                                                        +A[6] = 1
                                                                                        +A[7] = 0
                                                                                        +A[8] = 0
                                                                                        +A[9] = 0
                                                                                        +A[10] = 0
                                                                                        +

                                                                                        The frog can make three jumps of length F(5) = 5, F(3) = 2 and F(5) = 5.

                                                                                        +

                                                                                        Write a function:

                                                                                        +

                                                                                        func Solution(A []int) int

                                                                                        +

                                                                                        that, given an array A consisting of N integers, returns the minimum number of jumps by which the frog can get to the other side of the river. If the frog cannot reach the other side of the river, the function should return −1.

                                                                                        +

                                                                                        For example, given:

                                                                                        +
                                                                                        A[0] = 0
                                                                                        +A[1] = 0
                                                                                        +A[2] = 0
                                                                                        +A[3] = 1
                                                                                        +A[4] = 1
                                                                                        +A[5] = 0
                                                                                        +A[6] = 1
                                                                                        +A[7] = 0
                                                                                        +A[8] = 0
                                                                                        +A[9] = 0
                                                                                        +A[10] = 0
                                                                                        +

                                                                                        the function should return 3, as explained above.

                                                                                        +

                                                                                        Write an efficient algorithm for the following assumptions:

                                                                                        +

                                                                                        N is an integer within the range [0..100,000]; +each element of array A is an integer that can have one of the following values: 0, 1. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                                        +

                                                                                        題目大意

                                                                                        +

                                                                                        一只小青蛙想到對岸。它開始位於河的另一邊 位置-1, 想要到對面的河岸 位置N . 青蛙可以跳任意距離 F(K). 其中F(K)是第K個斐波那契數. +且河上有許多樹葉 A[0] = 0 代表位置 0 沒有樹葉, 1 代表有樹葉 +青蛙可以在樹葉之間跳, 但只能朝河岸 N 的方向跳 +找出最小跳的次數

                                                                                        +

                                                                                        解題思路

                                                                                        +

                                                                                        廣度優先搜尋 (Breadth-First Search, BFS) 問題. +對於河上有樹葉的位置index, 則遍歷比index小的斐波那契數f, +只要 index - f 這個位置可以達到, 這index的位置就可以經過一次跳躍長度為f

                                                                                        +

                                                                                        來源

                                                                                        + +

                                                                                        解答

                                                                                        +

                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog.go

                                                                                        +
                                                                                        package fibfrog
                                                                                        +
                                                                                        +/**
                                                                                        + * @description: 產生不大於n的斐波那契數的列表
                                                                                        + * @param {int} N
                                                                                        + * @return {*}
                                                                                        + */
                                                                                        +func Fib(N int) (fibArr []int) {
                                                                                        +    fibArr = append(fibArr, 0)
                                                                                        +    fibArr = append(fibArr, 1)
                                                                                        +    fibArr = append(fibArr, 1)
                                                                                        +    i := 2
                                                                                        +    for fibArr[i] < N {
                                                                                        +        i = i + 1
                                                                                        +        fibArr = append(fibArr, fibArr[i-1]+fibArr[i-2])
                                                                                        +    }
                                                                                        +    return fibArr
                                                                                        +}
                                                                                        +
                                                                                        +func Solution(A []int) int {
                                                                                        +    // 終點
                                                                                        +    A = append(A, 1)
                                                                                        +    N := len(A)
                                                                                        +    fibArr := Fib(N)
                                                                                        +    // 一次就可以從 -1 跳到 N
                                                                                        +    if fibArr[len(fibArr)-1] == N {
                                                                                        +        return 1
                                                                                        +    }
                                                                                        +    fibArr = fibArr[1 : len(fibArr)-1]
                                                                                        +    // fmt.Println(fibArr)
                                                                                        +
                                                                                        +    // get the leafs that can be reached from the starting shore
                                                                                        +    reachable := make([]int, N)
                                                                                        +    for _, v := range fibArr {
                                                                                        +        if A[v-1] == 1 {
                                                                                        +            // 找到樹葉
                                                                                        +            reachable[v-1] = 1
                                                                                        +        }
                                                                                        +    }
                                                                                        +    // 一開始只能跳到 index: 4 , fib是 [1 1 2 3 5 8], 會使用到 5
                                                                                        +    // fmt.Println("re", reachable) // [0 0 0 0 1 0 0 0 0 0 0 0]
                                                                                        +
                                                                                        +    // iterate all the positions until you reach the other shore
                                                                                        +    for i := 0; i < N; i++ {
                                                                                        +        // 忽略不是葉子或已經找過的path
                                                                                        +        if A[i] != 1 || reachable[i] > 0 {
                                                                                        +            continue
                                                                                        +        }
                                                                                        +
                                                                                        +        // get the optimal jump count to reach this leaf
                                                                                        +        if A[i] == 1 {
                                                                                        +            // 有樹葉
                                                                                        +            // 遍歷斐波那契數列, 尋找最少的跳躍次數
                                                                                        +            minJump := i + 1
                                                                                        +            canJump := false
                                                                                        +            for _, f := range fibArr {
                                                                                        +                previousIdx := i - f
                                                                                        +
                                                                                        +                if previousIdx < 0 || reachable[previousIdx] == 0 {
                                                                                        +                    // fmt.Printf("[No] %d :previousIdx = %d reachable = %v \n", i, previousIdx, reachable)
                                                                                        +                    continue
                                                                                        +                }
                                                                                        +
                                                                                        +                if minJump > reachable[previousIdx] {
                                                                                        +                    // 此 previousIdx 位置可以到達
                                                                                        +                    // fmt.Printf("%d :previousIdx = %d reachable = %v \n", i, previousIdx, reachable)
                                                                                        +                    minJump = reachable[previousIdx]
                                                                                        +                    canJump = true
                                                                                        +                }
                                                                                        +            }
                                                                                        +            if canJump {
                                                                                        +                reachable[i] = minJump + 1
                                                                                        +            }
                                                                                        +        }
                                                                                        +        // fmt.Printf("i=%d , reachable = %v \n", i, reachable)
                                                                                        +    }
                                                                                        +
                                                                                        +    if reachable[len(reachable)-1] == 0 {
                                                                                        +        return -1
                                                                                        +    }
                                                                                        +    return reachable[len(reachable)-1]
                                                                                        +}
                                                                                        +
                                                                                        +
                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                        + + +
                                                                                        + +
                                                                                        +
                                                                                        +
                                                                                        + +

                                                                                        results matching ""

                                                                                        +
                                                                                          + +
                                                                                          +
                                                                                          + +

                                                                                          No results matching ""

                                                                                          + +
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          + +
                                                                                          + + + + + + +
                                                                                          + + +
                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct.go b/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct.go new file mode 100644 index 000000000..64fefc60a --- /dev/null +++ b/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct.go @@ -0,0 +1,8 @@ +package absdistinct + +func Solution(A []int) int { + if len(A) <= 0 { + return 0 + } + return 0 +} diff --git a/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct_test.go b/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct_test.go new file mode 100644 index 000000000..640b19bc1 --- /dev/null +++ b/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct_test.go @@ -0,0 +1,21 @@ +package absdistinct + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{-5, -3, -1, 0, 3, 6}, + 5, + }, +} + +func TestSolution(t *testing.T) { + for _, tt := range tests { + if got := Solution(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/index.html b/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/index.html new file mode 100644 index 000000000..1846fd9d4 --- /dev/null +++ b/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/index.html @@ -0,0 +1,3938 @@ + + + + + + + Abs Distinct · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                          +
                                                                                          + + + + + + + + +
                                                                                          + +
                                                                                          + +
                                                                                          + + + + + + + + +
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          + +
                                                                                          + +

                                                                                          AbsDistinct

                                                                                          +

                                                                                          A non-empty array A consisting of N numbers is given. The array is sorted in non-decreasing order. The absolute distinct count of this array is the number of distinct absolute values among the elements of the array.

                                                                                          +

                                                                                          For example, consider array A such that:

                                                                                          +

                                                                                          A[0] = -5 + A[1] = -3 + A[2] = -1 + A[3] = 0 + A[4] = 3 + A[5] = 6 +The absolute distinct count of this array is 5, because there are 5 distinct absolute values among the elements of this array, namely 0, 1, 3, 5 and 6.

                                                                                          +

                                                                                          Write a function:

                                                                                          +

                                                                                          func Solution(A []int) int

                                                                                          +

                                                                                          that, given a non-empty array A consisting of N numbers, returns absolute distinct count of array A.

                                                                                          +

                                                                                          For example, given array A such that:

                                                                                          +

                                                                                          A[0] = -5 + A[1] = -3 + A[2] = -1 + A[3] = 0 + A[4] = 3 + A[5] = 6 +the function should return 5, as explained above.

                                                                                          +

                                                                                          Write an efficient algorithm for the following assumptions:

                                                                                          +

                                                                                          N is an integer within the range [1..100,000]; +each element of array A is an integer within the range [−2,147,483,648..2,147,483,647]; +array A is sorted in non-decreasing order. +Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited.

                                                                                          +

                                                                                          "有序數組中絕對值不同的數的個數"指的是,一個已經排好序的整數數組中絕對值不相同的數字的個數,

                                                                                          +

                                                                                          例如:

                                                                                          +

                                                                                          A[0] = -5 A[1] = -3 A[2] = -1 +A[3] = 0 A[4] = 3 A[5] = 6 +絕對值不同的數的個數為 5, 因為其中有 5 個不同的絕對值: 0, 1, 3, 5, 6

                                                                                          +

                                                                                          編寫一個函數:

                                                                                          +

                                                                                          func Solution(A []int) int

                                                                                          +

                                                                                          請返回給定有序數組中絕對值不同的數的個數。

                                                                                          +

                                                                                          例如,給出數組A:

                                                                                          +

                                                                                          A[0] = -5 A[1] = -3 A[2] = -1 +A[3] = 0 A[4] = 3 A[5] = 6 +函數應返回5。

                                                                                          +

                                                                                          假定:

                                                                                          +

                                                                                          N 是 [1..100,000] 內的 整數; +數組 A 每個元素是取值範圍 [−2,147,483,648..2,147,483,647] 內的 整數 ; +數組 A 是 非-遞增 序列.

                                                                                          +

                                                                                          題目大意

                                                                                          +

                                                                                          解題思路

                                                                                          +

                                                                                          來源

                                                                                          + +

                                                                                          解答

                                                                                          +

                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct.go

                                                                                          +
                                                                                          
                                                                                          +
                                                                                          +
                                                                                          +
                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                          + + +
                                                                                          + +
                                                                                          +
                                                                                          +
                                                                                          + +

                                                                                          results matching ""

                                                                                          +
                                                                                            + +
                                                                                            +
                                                                                            + +

                                                                                            No results matching ""

                                                                                            + +
                                                                                            +
                                                                                            +
                                                                                            + +
                                                                                            +
                                                                                            + +
                                                                                            + + + + + + +
                                                                                            + + +
                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Content.html b/Content.html new file mode 100644 index 000000000..2dc22411a --- /dev/null +++ b/Content.html @@ -0,0 +1,4323 @@ + + + + + + + Content · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                            +
                                                                                            + + + + + + + + +
                                                                                            + +
                                                                                            + +
                                                                                            + + + + + + + + +
                                                                                            +
                                                                                            + +
                                                                                            +
                                                                                            + +
                                                                                            + +

                                                                                            Kimi's LeetcodeGolang Notes

                                                                                            + +
                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:14:48
                                                                                            + + +
                                                                                            + +
                                                                                            +
                                                                                            +
                                                                                            + +

                                                                                            results matching ""

                                                                                            +
                                                                                              + +
                                                                                              +
                                                                                              + +

                                                                                              No results matching ""

                                                                                              + +
                                                                                              +
                                                                                              +
                                                                                              + +
                                                                                              +
                                                                                              + +
                                                                                              + + + + + + + + + + + + + + +
                                                                                              + + +
                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements.go b/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements.go new file mode 100644 index 000000000..561e82b01 --- /dev/null +++ b/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements.go @@ -0,0 +1,72 @@ +package findminimumdifferencebetweenanytwoelements + +import ( + "math" + "sort" +) + +/* +https://yourbasic.org/golang/absolute-value-int-float/ +http://cavaliercoder.com/blog/optimized-abs-for-int64-in-go.html +fmt.Println(abs(math.MinInt64)) // Output: -9223372036854775808 + +// 似乎比較快 +func WithTwosComplement(n int64) int64 { + y := n >> 63 // y ← x ⟫ 63 + return (n ^ y) - y // (x ⨁ y) - y +} +*/ +func abs(n int) int { + if n < 0 { + return -n + } + return n +} + +func WithTwosComplement(n int64) int64 { + y := n >> 63 // y ← x ⟫ 63 + return (n ^ y) - y // (x ⨁ y) - y +} + +// O(n Log n) +func FindMinDiff(nums []int) int { + if len(nums) <= 0 { + return 0 + } + sort.Ints(nums) // O(n Log n) + + minSize := math.MaxInt32 + + // O(n) + for i := 1; i < len(nums); i++ { + tmp := int(math.Abs(float64(nums[i] - nums[i-1]))) + if minSize > tmp { + minSize = tmp + } + } + + if minSize == math.MaxInt32 { + minSize = 0 + } + return minSize +} + +func FindMinDiff2(nums []int) int { + if len(nums) <= 0 { + return 0 + } + sort.Ints(nums) + + minSize := math.MaxInt32 + for i := 1; i < len(nums); i++ { + tmp := abs(nums[i] - nums[i-1]) + if minSize > tmp { + minSize = tmp + } + } + + if minSize == math.MaxInt32 { + minSize = 0 + } + return minSize +} diff --git a/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements_test.go b/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements_test.go new file mode 100644 index 000000000..182682634 --- /dev/null +++ b/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements_test.go @@ -0,0 +1,51 @@ +package findminimumdifferencebetweenanytwoelements + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{1, 5, 3, 19, 18, 25}, + 1, + }, + { + []int{30, 5, 20, 9}, + 4, + }, + { + []int{1, 19, -4, 31, 38, 25, 100}, + 5, + }, + { + []int{1}, + 0, + }, +} + +func TestFindMinDiff(t *testing.T) { + for _, tt := range tests { + if got := FindMinDiff(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkFindMinDiff(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FindMinDiff(tests[0].arg1) + } +} + +func BenchmarkFindMinDiff2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FindMinDiff(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements -bench=. +*/ diff --git a/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/index.html b/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/index.html new file mode 100644 index 000000000..00305f70c --- /dev/null +++ b/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/index.html @@ -0,0 +1,3959 @@ + + + + + + + 0031.Find-Minimum-Difference-Between-Any-Two-Elements · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                              +
                                                                                              + + + + + + + + +
                                                                                              + +
                                                                                              + +
                                                                                              + + + + + + + + +
                                                                                              +
                                                                                              + +
                                                                                              +
                                                                                              + +
                                                                                              + +

                                                                                              0031. Find Minimum Difference Between Any Two Elements

                                                                                              +

                                                                                              題目

                                                                                              +

                                                                                              Given an unsorted array, find the minimum difference between any pair in given array. +Examples :

                                                                                              +

                                                                                              Input : {1, 5, 3, 19, 18, 25}; +Output : 1 +Minimum difference is between 18 and 19

                                                                                              +

                                                                                              Input : {30, 5, 20, 9}; +Output : 4 +Minimum difference is between 5 and 9

                                                                                              +

                                                                                              Input : {1, 19, -4, 31, 38, 25, 100}; +Output : 5 +Minimum difference is between 1 and -4

                                                                                              +

                                                                                              來源

                                                                                              + +

                                                                                              解答

                                                                                              +

                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements.go

                                                                                              +
                                                                                              package findminimumdifferencebetweenanytwoelements
                                                                                              +
                                                                                              +import (
                                                                                              +    "math"
                                                                                              +    "sort"
                                                                                              +)
                                                                                              +
                                                                                              +/*
                                                                                              +https://yourbasic.org/golang/absolute-value-int-float/
                                                                                              +http://cavaliercoder.com/blog/optimized-abs-for-int64-in-go.html
                                                                                              +fmt.Println(abs(math.MinInt64)) // Output: -9223372036854775808
                                                                                              +
                                                                                              +// 似乎比較快
                                                                                              +func WithTwosComplement(n int64) int64 {
                                                                                              +    y := n >> 63          // y ← x ⟫ 63
                                                                                              +    return (n ^ y) - y    // (x ⨁ y) - y
                                                                                              +}
                                                                                              +*/
                                                                                              +func abs(n int) int {
                                                                                              +    if n < 0 {
                                                                                              +        return -n
                                                                                              +    }
                                                                                              +    return n
                                                                                              +}
                                                                                              +
                                                                                              +func WithTwosComplement(n int64) int64 {
                                                                                              +    y := n >> 63       // y ← x ⟫ 63
                                                                                              +    return (n ^ y) - y // (x ⨁ y) - y
                                                                                              +}
                                                                                              +
                                                                                              +// O(n Log n)
                                                                                              +func FindMinDiff(nums []int) int {
                                                                                              +    if len(nums) <= 0="" {="" return="" }="" sort.ints(nums)="" o(n="" log="" n)="" minsize="" :="math.MaxInt32" o(n)="" for="" i="" <="" len(nums);="" i++="" tmp="" -="" nums[i-1])))="" if=""> tmp {
                                                                                              +            minSize = tmp
                                                                                              +        }
                                                                                              +    }
                                                                                              +
                                                                                              +    if minSize == math.MaxInt32 {
                                                                                              +        minSize = 0
                                                                                              +    }
                                                                                              +    return minSize
                                                                                              +}
                                                                                              +
                                                                                              +func FindMinDiff2(nums []int) int {
                                                                                              +    if len(nums) <= 0="" {="" return="" }="" sort.ints(nums)="" minsize="" :="math.MaxInt32" for="" i="" <="" len(nums);="" i++="" tmp="" -="" nums[i-1])="" if=""> tmp {
                                                                                              +            minSize = tmp
                                                                                              +        }
                                                                                              +    }
                                                                                              +
                                                                                              +    if minSize == math.MaxInt32 {
                                                                                              +        minSize = 0
                                                                                              +    }
                                                                                              +    return minSize
                                                                                              +}
                                                                                              +
                                                                                              +
                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                              + + +
                                                                                              + +
                                                                                              +
                                                                                              +
                                                                                              + +

                                                                                              results matching ""

                                                                                              +
                                                                                                + +
                                                                                                +
                                                                                                + +

                                                                                                No results matching ""

                                                                                                + +
                                                                                                +
                                                                                                +
                                                                                                + +
                                                                                                +
                                                                                                + +
                                                                                                + + + + + + +
                                                                                                + + +
                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..b99f59eee --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Kimi Tsai + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Leetcode/0000.xxxx/index.html b/Leetcode/0000.xxxx/index.html new file mode 100644 index 000000000..49e3a1dd1 --- /dev/null +++ b/Leetcode/0000.xxxx/index.html @@ -0,0 +1,3906 @@ + + + + + + + NUM.LEETCODETITLE · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                +
                                                                                                + + + + + + + + +
                                                                                                + +
                                                                                                + +
                                                                                                + + + + + + + + +
                                                                                                +
                                                                                                + +
                                                                                                +
                                                                                                + +
                                                                                                + +

                                                                                                NUM.LEETCODETITLE

                                                                                                題目

                                                                                                +

                                                                                                題目大意

                                                                                                +

                                                                                                解題思路

                                                                                                +

                                                                                                Big O

                                                                                                +
                                                                                                  +
                                                                                                • 時間複雜 : ``
                                                                                                • +
                                                                                                • 空間複雜 : ``
                                                                                                • +
                                                                                                +

                                                                                                來源

                                                                                                + +

                                                                                                解答

                                                                                                +

                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/NUM.FOLDERPATH/main.go

                                                                                                +
                                                                                                
                                                                                                +
                                                                                                +
                                                                                                +

                                                                                                Benchmark

                                                                                                +
                                                                                                
                                                                                                +
                                                                                                +
                                                                                                +
                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                + +
                                                                                                + +
                                                                                                +
                                                                                                +
                                                                                                + +

                                                                                                results matching ""

                                                                                                +
                                                                                                  + +
                                                                                                  +
                                                                                                  + +

                                                                                                  No results matching ""

                                                                                                  + +
                                                                                                  +
                                                                                                  +
                                                                                                  + +
                                                                                                  +
                                                                                                  + +
                                                                                                  + + + + + + +
                                                                                                  + + +
                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0000.xxxx/main.go b/Leetcode/0000.xxxx/main.go new file mode 100644 index 000000000..5d585372b --- /dev/null +++ b/Leetcode/0000.xxxx/main.go @@ -0,0 +1,2 @@ + +// 時間複雜 O(), 空間複雜 O() \ No newline at end of file diff --git a/Leetcode/0000.xxxx/main_test.go b/Leetcode/0000.xxxx/main_test.go new file mode 100644 index 000000000..0788b7309 --- /dev/null +++ b/Leetcode/0000.xxxx/main_test.go @@ -0,0 +1,34 @@ +package + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0001.Two-Sum/Merging-2-Packages/index.html b/Leetcode/0001.Two-Sum/Merging-2-Packages/index.html new file mode 100644 index 000000000..45bea3658 --- /dev/null +++ b/Leetcode/0001.Two-Sum/Merging-2-Packages/index.html @@ -0,0 +1,3897 @@ + + + + + + + Merging 2 Packages · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                  +
                                                                                                  + + + + + + + + +
                                                                                                  + +
                                                                                                  + +
                                                                                                  + + + + + + + + +
                                                                                                  +
                                                                                                  + +
                                                                                                  +
                                                                                                  + +
                                                                                                  + +

                                                                                                  Given a package with a weight limit limit and an array arr of item weights, implement a function +getIndicesOfItemWeights that finds two items whose sum of weights equals the weight limit. The function should +return a pair [i, j] of the indices of the item weights, ordered such that i > j. If such a pair doesn’t exist, return +an empty array. +input: arr = [4, 6, 10, 15, 16], lim = 21 +output: [3, 1] # since these are the indices of the weights 6 and 15 whose sum equals to 21

                                                                                                  +
                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                  + + +
                                                                                                  + +
                                                                                                  +
                                                                                                  +
                                                                                                  + +

                                                                                                  results matching ""

                                                                                                  +
                                                                                                    + +
                                                                                                    +
                                                                                                    + +

                                                                                                    No results matching ""

                                                                                                    + +
                                                                                                    +
                                                                                                    +
                                                                                                    + +
                                                                                                    +
                                                                                                    + +
                                                                                                    + + + + + + + + + + +
                                                                                                    + + +
                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0001.Two-Sum/Merging-2-Packages/main.go b/Leetcode/0001.Two-Sum/Merging-2-Packages/main.go new file mode 100644 index 000000000..a69343a3f --- /dev/null +++ b/Leetcode/0001.Two-Sum/Merging-2-Packages/main.go @@ -0,0 +1,13 @@ +package merging2packages + +func getIndicesOfItemWeights(arr []int, limit int) []int { + + m := make(map[int]int) + for i, v := range arr { + if _, ok := m[limit-v]; ok { + return []int{i, m[limit-v]} + } + m[v] = i + } + return nil +} diff --git a/Leetcode/0001.Two-Sum/Merging-2-Packages/main_test.go b/Leetcode/0001.Two-Sum/Merging-2-Packages/main_test.go new file mode 100644 index 000000000..36cc43be0 --- /dev/null +++ b/Leetcode/0001.Two-Sum/Merging-2-Packages/main_test.go @@ -0,0 +1,45 @@ +package merging2packages + +import ( + "reflect" + "testing" +) + +func TestGetIndicesOfItemWeights(t *testing.T) { + tests := []struct { + name string + arg1 []int + arg2 int + want []int + }{ + { + name: "getIndicesOfItemWeights", + arg1: []int{4, 6, 10, 15, 16}, + arg2: 21, + want: []int{3, 1}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := getIndicesOfItemWeights(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func BenchmarkGetIndicesOfItemWeights(b *testing.B) { + arg1 := []int{2, 7, 11, 15} + arg2 := 9 + b.ResetTimer() + for i := 0; i < b.N; i++ { + getIndicesOfItemWeights(arg1, arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0001.Two-Sum -bench=. +BenchmarkTwosum-8 53737875 22.04 ns/op 16 B/op 1 allocs/op +BenchmarkTwosum2-8 25733203 44.74 ns/op 16 B/op 1 allocs/op +*/ diff --git a/Leetcode/0001.Two-Sum/index.html b/Leetcode/0001.Two-Sum/index.html new file mode 100644 index 000000000..24138f05a --- /dev/null +++ b/Leetcode/0001.Two-Sum/index.html @@ -0,0 +1,3958 @@ + + + + + + + 0001.Two Sum · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                    +
                                                                                                    + + + + + + + + +
                                                                                                    + +
                                                                                                    + +
                                                                                                    + + + + + + + + +
                                                                                                    +
                                                                                                    + +
                                                                                                    +
                                                                                                    + +
                                                                                                    + +

                                                                                                    1. Two Sum

                                                                                                    题目

                                                                                                    +

                                                                                                    Given an array of integers, return indices of the two numbers such that they add up to a specific target.

                                                                                                    +

                                                                                                    You may assume that each input would have exactly one solution, and you may not use the same element twice.

                                                                                                    +

                                                                                                    Example:

                                                                                                    +

                                                                                                    Given nums = [2, 7, 11, 15], target = 9,

                                                                                                    +

                                                                                                    Because nums[0] + nums[1] = 2 + 7 = 9, +return [0, 1].

                                                                                                    +

                                                                                                    題目大意

                                                                                                    +

                                                                                                    在數組中找到 2 個數之和等於給定值的數字, 結果返回 2 個數字在數組中的下標.

                                                                                                    +

                                                                                                    解題思路

                                                                                                    +
                                                                                                      +
                                                                                                    • 暴力解: 時間複雜 O(n^2), 空間複雜 O(1)

                                                                                                      +
                                                                                                    • +
                                                                                                    • 這道題最優的做法時間複雜度是 O(n) +順序掃描數組, 對每一個元素,在 map 中找能組合給定值的另一半數字, 如果找到了, 直接返回 2 個數字的下標即可. 如果找不到, 就把這個數字存入 map 中, 等待掃到“另一半”數字的時候, 再取出來返回結果.

                                                                                                      +
                                                                                                    • +
                                                                                                    • 如果nums是有序 可以使用左右指針

                                                                                                      +
                                                                                                    • +
                                                                                                    +

                                                                                                    來源

                                                                                                    + +

                                                                                                    解答

                                                                                                    +

                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0001.Two-Sum/twosum.go

                                                                                                    +
                                                                                                    package twosum
                                                                                                    +
                                                                                                    +// 時間複雜 O(n^2), 空間複雜 O(1)
                                                                                                    +func Twosum(nums []int, target int) []int {
                                                                                                    +    for i, _ := range nums {
                                                                                                    +        for j := i + 1; j < len(nums); j++ {
                                                                                                    +            if target == nums[i]+nums[j] {
                                                                                                    +                return []int{i, j}
                                                                                                    +            }
                                                                                                    +        }
                                                                                                    +    }
                                                                                                    +    return []int{0, 0}
                                                                                                    +}
                                                                                                    +
                                                                                                    +func Twosum2(nums []int, target int) []int {
                                                                                                    +    m := make(map[int]int)
                                                                                                    +    for i, v := range nums {
                                                                                                    +        if idx, ok := m[target-v]; ok {
                                                                                                    +            return []int{idx, i}
                                                                                                    +        }
                                                                                                    +        m[v] = i
                                                                                                    +    }
                                                                                                    +    return []int{0, 0}
                                                                                                    +}
                                                                                                    +
                                                                                                    +// 如果nums是有序 可以使用左右指針
                                                                                                    +// func Twosum3(nums []int, target int) []int {
                                                                                                    +//     left, right := 0, len(nums)-1
                                                                                                    +//     sort.Ints(nums)
                                                                                                    +
                                                                                                    +//     for left < right {
                                                                                                    +//         sum := nums[left] + nums[right]
                                                                                                    +//         if sum == target {
                                                                                                    +//             return []int{left, right}
                                                                                                    +//         } else if sum < target {
                                                                                                    +//             left++
                                                                                                    +//         } else if sum > target {
                                                                                                    +//             right--
                                                                                                    +//         }
                                                                                                    +//     }
                                                                                                    +//     return []int{0, 0}
                                                                                                    +// }
                                                                                                    +
                                                                                                    +
                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                    + +
                                                                                                    + +
                                                                                                    +
                                                                                                    +
                                                                                                    + +

                                                                                                    results matching ""

                                                                                                    +
                                                                                                      + +
                                                                                                      +
                                                                                                      + +

                                                                                                      No results matching ""

                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + +
                                                                                                      + + + + + + + + + + +
                                                                                                      + + +
                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0001.Two-Sum/twosum.go b/Leetcode/0001.Two-Sum/twosum.go new file mode 100644 index 000000000..b11839dc9 --- /dev/null +++ b/Leetcode/0001.Two-Sum/twosum.go @@ -0,0 +1,42 @@ +package twosum + +// 時間複雜 O(n^2), 空間複雜 O(1) +func Twosum(nums []int, target int) []int { + for i, _ := range nums { + for j := i + 1; j < len(nums); j++ { + if target == nums[i]+nums[j] { + return []int{i, j} + } + } + } + return []int{0, 0} +} + +func Twosum2(nums []int, target int) []int { + m := make(map[int]int) + for i, v := range nums { + if idx, ok := m[target-v]; ok { + return []int{idx, i} + } + m[v] = i + } + return []int{0, 0} +} + +// 如果nums是有序 可以使用左右指針 +// func Twosum3(nums []int, target int) []int { +// left, right := 0, len(nums)-1 +// sort.Ints(nums) + +// for left < right { +// sum := nums[left] + nums[right] +// if sum == target { +// return []int{left, right} +// } else if sum < target { +// left++ +// } else if sum > target { +// right-- +// } +// } +// return []int{0, 0} +// } diff --git a/Leetcode/0001.Two-Sum/twosum_test.go b/Leetcode/0001.Two-Sum/twosum_test.go new file mode 100644 index 000000000..04788e757 --- /dev/null +++ b/Leetcode/0001.Two-Sum/twosum_test.go @@ -0,0 +1,78 @@ +package twosum + +import ( + "reflect" + "testing" +) + +func TestTwosum(t *testing.T) { + tests := []struct { + name string + arg1 []int + arg2 int + want []int + }{ + { + name: "Twosum", + arg1: []int{2, 7, 11, 15}, + arg2: 9, + want: []int{0, 1}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Twosum(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestTwosum2(t *testing.T) { + tests := []struct { + name string + arg1 []int + arg2 int + want []int + }{ + { + name: "Twosum2", + arg1: []int{2, 7, 11, 15}, + arg2: 9, + want: []int{0, 1}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Twosum2(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func BenchmarkTwosum(b *testing.B) { + arg1 := []int{2, 7, 11, 15} + arg2 := 9 + b.ResetTimer() + for i := 0; i < b.N; i++ { + Twosum(arg1, arg2) + } +} + +func BenchmarkTwosum2(b *testing.B) { + arg1 := []int{2, 7, 11, 15} + arg2 := 9 + b.ResetTimer() + for i := 0; i < b.N; i++ { + Twosum2(arg1, arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0001.Two-Sum -bench=. +BenchmarkTwosum-8 53737875 22.04 ns/op 16 B/op 1 allocs/op +BenchmarkTwosum2-8 25733203 44.74 ns/op 16 B/op 1 allocs/op +*/ diff --git a/Leetcode/0002.Add-Two-Numbers/index.html b/Leetcode/0002.Add-Two-Numbers/index.html new file mode 100644 index 000000000..32bc22cc8 --- /dev/null +++ b/Leetcode/0002.Add-Two-Numbers/index.html @@ -0,0 +1,3956 @@ + + + + + + + 0002.Add Two Numbers · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                      +
                                                                                                      + + + + + + + + +
                                                                                                      + +
                                                                                                      + +
                                                                                                      + + + + + + + + +
                                                                                                      +
                                                                                                      + +
                                                                                                      +
                                                                                                      + +
                                                                                                      + +

                                                                                                      0002.Add Two Numbers

                                                                                                      題目

                                                                                                      +

                                                                                                      題目大意

                                                                                                      +

                                                                                                      解題思路

                                                                                                      +

                                                                                                      鏈表雙指標技巧 和加法運算過程中對進位的處理。 注意這個 carry 變數的處理,在我們手動類比加法過程的時候會經常用到。

                                                                                                      +
                                                                                                        +
                                                                                                      • 遍歷 l1跟 l2. 講兩個list的val相加, 並且記錄進位的值給next使用
                                                                                                      • +
                                                                                                      • 最後如果 carry 還有的話, 需要產生一個新的節點
                                                                                                      • +
                                                                                                      +

                                                                                                      Big O

                                                                                                      +
                                                                                                        +
                                                                                                      • 時間複雜 : O(max⁡(m,n) +時間複雜度: O(max⁡(m,n)) ,其中 m 和 n 分別為兩個鏈表的長度。 我們要遍歷兩個鏈表的全部位置,而處理每個位置只需要 O(1) 的時間

                                                                                                        +
                                                                                                      • +
                                                                                                      • 空間複雜 : O(1) +O(1) 。 注意返回值不計入空間複雜度

                                                                                                        +
                                                                                                      • +
                                                                                                      +

                                                                                                      來源

                                                                                                      + +

                                                                                                      解答

                                                                                                      +

                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0002.Add-Two-Numbers/main.go

                                                                                                      +
                                                                                                      package addtwonumbers
                                                                                                      +
                                                                                                      +// 時間複雜 O(max(m,n)), 空間複雜 O(1)
                                                                                                      +/**
                                                                                                      + * Definition for singly-linked list.
                                                                                                      + * type ListNode struct {
                                                                                                      + *     Val int
                                                                                                      + *     Next *ListNode
                                                                                                      + * }
                                                                                                      + */
                                                                                                      +
                                                                                                      +// 遍歷 l1跟 l2. 講兩個list的val相加, 並且記錄進位的值給next使用
                                                                                                      +// 最後如果 carry 還有的話, 需要產生一個新的節點
                                                                                                      +func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
                                                                                                      +    var result, tail *ListNode
                                                                                                      +    carry := 0
                                                                                                      +    for l1 != nil || l2 != nil {
                                                                                                      +        n1, n2 := 0, 0
                                                                                                      +        if l1 != nil {
                                                                                                      +            n1 = l1.Val
                                                                                                      +            l1 = l1.Next
                                                                                                      +        }
                                                                                                      +        if l2 != nil {
                                                                                                      +            n2 = l2.Val
                                                                                                      +            l2 = l2.Next
                                                                                                      +        }
                                                                                                      +        sum := n1 + n2 + carry
                                                                                                      +        sum, carry = sum%10, sum/10
                                                                                                      +
                                                                                                      +        if result == nil {
                                                                                                      +            result = &ListNode{Val: sum, Next: nil}
                                                                                                      +            tail = result
                                                                                                      +        } else {
                                                                                                      +            tail.Next = &ListNode{Val: sum, Next: nil}
                                                                                                      +            tail = tail.Next
                                                                                                      +        }
                                                                                                      +    }
                                                                                                      +    // 最後如果 carry 還有的話, 需要產生一個新的節點
                                                                                                      +    if carry > 0 {
                                                                                                      +        tail.Next = &ListNode{Val: carry, Next: nil}
                                                                                                      +    }
                                                                                                      +    return result
                                                                                                      +}
                                                                                                      +
                                                                                                      +

                                                                                                      Benchmark

                                                                                                      +
                                                                                                      
                                                                                                      +
                                                                                                      +
                                                                                                      +
                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                      + +
                                                                                                      + +
                                                                                                      +
                                                                                                      +
                                                                                                      + +

                                                                                                      results matching ""

                                                                                                      +
                                                                                                        + +
                                                                                                        +
                                                                                                        + +

                                                                                                        No results matching ""

                                                                                                        + +
                                                                                                        +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        + +
                                                                                                        + + + + + + +
                                                                                                        + + +
                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0002.Add-Two-Numbers/main.go b/Leetcode/0002.Add-Two-Numbers/main.go new file mode 100644 index 000000000..a0ae04415 --- /dev/null +++ b/Leetcode/0002.Add-Two-Numbers/main.go @@ -0,0 +1,43 @@ +package addtwonumbers + +// 時間複雜 O(max(m,n)), 空間複雜 O(1) +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +// 遍歷 l1跟 l2. 講兩個list的val相加, 並且記錄進位的值給next使用 +// 最後如果 carry 還有的話, 需要產生一個新的節點 +func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { + var result, tail *ListNode + carry := 0 + for l1 != nil || l2 != nil { + n1, n2 := 0, 0 + if l1 != nil { + n1 = l1.Val + l1 = l1.Next + } + if l2 != nil { + n2 = l2.Val + l2 = l2.Next + } + sum := n1 + n2 + carry + sum, carry = sum%10, sum/10 + + if result == nil { + result = &ListNode{Val: sum, Next: nil} + tail = result + } else { + tail.Next = &ListNode{Val: sum, Next: nil} + tail = tail.Next + } + } + // 最後如果 carry 還有的話, 需要產生一個新的節點 + if carry > 0 { + tail.Next = &ListNode{Val: carry, Next: nil} + } + return result +} diff --git a/Leetcode/0002.Add-Two-Numbers/main_test.go b/Leetcode/0002.Add-Two-Numbers/main_test.go new file mode 100644 index 000000000..7edcb537d --- /dev/null +++ b/Leetcode/0002.Add-Two-Numbers/main_test.go @@ -0,0 +1,35 @@ +// TODO : 0002.Add-Two-Numbers Unit Test +package + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters.go b/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters.go new file mode 100644 index 000000000..eca9b4678 --- /dev/null +++ b/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters.go @@ -0,0 +1,94 @@ +package longestSubstringwithoutrepeatingcharacters + +// LengthOfLongestSubstring 暴力解 +func LengthOfLongestSubstring(s string) int { + slength := len(s) + if slength == 0 || slength == 1 { + return slength + } + + tmpLen := 1 + var maxLen = 1 + + for i := 1; i < slength; i++ { + // 往前找前幾個視窗 + j := i - tmpLen + + for ; j < i; j++ { + if s[j] == s[i] { // 如果相同,那麼和S[J]到S[I-1]中間的肯定不相同,所以可以直接計算得到 + tmpLen = i - j + break + } + } + + if j == i { // 都不相同 + tmpLen++ + } + + if tmpLen > maxLen { + maxLen = tmpLen + } + } + + return maxLen +} + +// LengthOfLongestSubstringMap 用map 紀錄是否重複. +func LengthOfLongestSubstringMap(s string) int { + slength := len(s) + if slength == 0 || slength == 1 { + return slength + } + + charMap := make(map[byte]bool) + maxLen, left, right := 0, 0, 0 + + for left < slength { + if ok := charMap[s[right]]; ok { + // 有找到 + charMap[s[left]] = false + left++ + } else { + charMap[s[right]] = true + right++ + } + if maxLen < right-left { + maxLen = right - left + } + if (left+maxLen) >= slength || right >= len(s) { + break + } + } + + return maxLen +} + +// LengthOfLongestSubstringBit 用map效能不好時可使用數組改善 +func LengthOfLongestSubstringBit(s string) int { + slength := len(s) + if slength == 0 || slength == 1 { + return slength + } + + // ASCII 0~255 + charMap := [256]bool{} + maxLen, left, right := 0, 0, 0 + for left < slength { + if ok := charMap[s[right]]; ok { + // 有找到 + charMap[s[left]] = false + left++ + } else { + charMap[s[right]] = true + right++ + } + + if maxLen < right-left { + maxLen = right - left + } + if left+maxLen >= slength || right >= len(s) { + break + } + } + return maxLen +} diff --git a/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters_test.go b/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters_test.go new file mode 100644 index 000000000..3c531fbbd --- /dev/null +++ b/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters_test.go @@ -0,0 +1,93 @@ +package longestSubstringwithoutrepeatingcharacters + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 string + want int +}{ + { + arg1: "abcabcbb", + want: 3, + }, + { + arg1: "bbbbbb", + want: 1, + }, + { + arg1: "pwwkew", + want: 3, + }, + { + arg1: "", + want: 0, + }, + { + arg1: "aab", + want: 2, + }, +} + +func TestLengthOfLongestSubstring(t *testing.T) { + for _, tt := range tests { + if got := LengthOfLongestSubstring(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestLengthOfLongestSubstringMap(t *testing.T) { + for _, tt := range tests { + if got := LengthOfLongestSubstringMap(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestLengthOfLongestSubstringBit(t *testing.T) { + for _, tt := range tests { + if got := LengthOfLongestSubstringBit(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLengthOfLongestSubstring(b *testing.B) { + arg1 := "abcabcbb" + b.ResetTimer() + for i := 0; i < b.N; i++ { + LengthOfLongestSubstring(arg1) + } +} + +func BenchmarkLengthOfLongestSubstringMap(b *testing.B) { + arg1 := "abcabcbb" + b.ResetTimer() + for i := 0; i < b.N; i++ { + LengthOfLongestSubstringMap(arg1) + } +} + +func BenchmarkLengthOfLongestSubstringBit(b *testing.B) { + arg1 := "abcabcbb" + b.ResetTimer() + for i := 0; i < b.N; i++ { + LengthOfLongestSubstringBit(arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkLengthOfLongestSubstring-8 67657353 19.30 ns/op 0 B/op 0 allocs/op +BenchmarkLengthOfLongestSubstringMap-8 2463084 483.5 ns/op 0 B/op 0 allocs/op +BenchmarkLengthOfLongestSubstringBit-8 53792877 21.70 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters 5.125s +*/ diff --git a/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/index.html b/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/index.html new file mode 100644 index 000000000..fc5ca853d --- /dev/null +++ b/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/index.html @@ -0,0 +1,4022 @@ + + + + + + + 0003.Longest Substring Without Repeating Characters · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                        +
                                                                                                        + + + + + + + + +
                                                                                                        + +
                                                                                                        + +
                                                                                                        + + + + + + + + +
                                                                                                        +
                                                                                                        + +
                                                                                                        +
                                                                                                        + +
                                                                                                        + +

                                                                                                        3. Longest Substring Without Repeating Characters

                                                                                                        题目

                                                                                                        +

                                                                                                        Given a string, find the length of the longest substring without repeating characters.

                                                                                                        +

                                                                                                        Example 1:

                                                                                                        +
                                                                                                        Input: "abcabcbb"
                                                                                                        +Output: 3
                                                                                                        +Explanation: The answer is "abc", with the length of 3.
                                                                                                        +
                                                                                                        +

                                                                                                        Example 2:

                                                                                                        +
                                                                                                        Input: "bbbbb"
                                                                                                        +Output: 1
                                                                                                        +Explanation: The answer is "b", with the length of 1.
                                                                                                        +
                                                                                                        +

                                                                                                        Example 3:

                                                                                                        +
                                                                                                        Input: "pwwkew"
                                                                                                        +Output: 3
                                                                                                        +Explanation: The answer is "wke", with the length of 3.
                                                                                                        +Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
                                                                                                        +
                                                                                                        +

                                                                                                        題目大意

                                                                                                        +

                                                                                                        在一個字符串重尋找沒有重複字母的最長子串。

                                                                                                        +

                                                                                                        解題思路

                                                                                                        +

                                                                                                        這一題和第 438 題,第 3 題,第 76 題,第 567 題類似,用的思想都是"滑動窗口"。

                                                                                                        +

                                                                                                        滑動窗口的右邊界不斷的右移,只要沒有重複的字符,就持續向右擴大窗口邊界。一旦出現了重複字符,就需要縮小左邊界,直到重複的字符移出了左邊界,然後繼續移動滑動窗口的右邊界。以此類推,每次移動需要計算當前長度,並判斷是否需要更新最大長度,最終最大的值就是題目中的所求。

                                                                                                        +

                                                                                                        O(n)

                                                                                                        +

                                                                                                        用空間換取時間, map紀錄已出現過的字符, 如果map效能不好時可使用數組(Slice)來改善

                                                                                                        +

                                                                                                        來源

                                                                                                        + +

                                                                                                        解答

                                                                                                        +

                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters.go

                                                                                                        +
                                                                                                        package longestSubstringwithoutrepeatingcharacters
                                                                                                        +
                                                                                                        +// LengthOfLongestSubstring 暴力解
                                                                                                        +func LengthOfLongestSubstring(s string) int {
                                                                                                        +    slength := len(s)
                                                                                                        +    if slength == 0 || slength == 1 {
                                                                                                        +        return slength
                                                                                                        +    }
                                                                                                        +
                                                                                                        +    tmpLen := 1
                                                                                                        +    var maxLen = 1
                                                                                                        +
                                                                                                        +    for i := 1; i < slength; i++ {
                                                                                                        +        // 往前找前幾個視窗
                                                                                                        +        j := i - tmpLen
                                                                                                        +
                                                                                                        +        for ; j < i; j++ {
                                                                                                        +            if s[j] == s[i] { // 如果相同,那麼和S[J]到S[I-1]中間的肯定不相同,所以可以直接計算得到
                                                                                                        +                tmpLen = i - j
                                                                                                        +                break
                                                                                                        +            }
                                                                                                        +        }
                                                                                                        +
                                                                                                        +        if j == i { // 都不相同
                                                                                                        +            tmpLen++
                                                                                                        +        }
                                                                                                        +
                                                                                                        +        if tmpLen > maxLen {
                                                                                                        +            maxLen = tmpLen
                                                                                                        +        }
                                                                                                        +    }
                                                                                                        +
                                                                                                        +    return maxLen
                                                                                                        +}
                                                                                                        +
                                                                                                        +// LengthOfLongestSubstringMap 用map 紀錄是否重複.
                                                                                                        +func LengthOfLongestSubstringMap(s string) int {
                                                                                                        +    slength := len(s)
                                                                                                        +    if slength == 0 || slength == 1 {
                                                                                                        +        return slength
                                                                                                        +    }
                                                                                                        +
                                                                                                        +    charMap := make(map[byte]bool)
                                                                                                        +    maxLen, left, right := 0, 0, 0
                                                                                                        +
                                                                                                        +    for left < slength {
                                                                                                        +        if ok := charMap[s[right]]; ok {
                                                                                                        +            // 有找到
                                                                                                        +            charMap[s[left]] = false
                                                                                                        +            left++
                                                                                                        +        } else {
                                                                                                        +            charMap[s[right]] = true
                                                                                                        +            right++
                                                                                                        +        }
                                                                                                        +        if maxLen < right-left {
                                                                                                        +            maxLen = right - left
                                                                                                        +        }
                                                                                                        +        if (left+maxLen) >= slength || right >= len(s) {
                                                                                                        +            break
                                                                                                        +        }
                                                                                                        +    }
                                                                                                        +
                                                                                                        +    return maxLen
                                                                                                        +}
                                                                                                        +
                                                                                                        +// LengthOfLongestSubstringBit 用map效能不好時可使用數組改善
                                                                                                        +func LengthOfLongestSubstringBit(s string) int {
                                                                                                        +    slength := len(s)
                                                                                                        +    if slength == 0 || slength == 1 {
                                                                                                        +        return slength
                                                                                                        +    }
                                                                                                        +
                                                                                                        +    // ASCII 0~255
                                                                                                        +    charMap := [256]bool{}
                                                                                                        +    maxLen, left, right := 0, 0, 0
                                                                                                        +    for left < slength {
                                                                                                        +        if ok := charMap[s[right]]; ok {
                                                                                                        +            // 有找到
                                                                                                        +            charMap[s[left]] = false
                                                                                                        +            left++
                                                                                                        +        } else {
                                                                                                        +            charMap[s[right]] = true
                                                                                                        +            right++
                                                                                                        +        }
                                                                                                        +
                                                                                                        +        if maxLen < right-left {
                                                                                                        +            maxLen = right - left
                                                                                                        +        }
                                                                                                        +        if left+maxLen >= slength || right >= len(s) {
                                                                                                        +            break
                                                                                                        +        }
                                                                                                        +    }
                                                                                                        +    return maxLen
                                                                                                        +}
                                                                                                        +
                                                                                                        +

                                                                                                        Benchmark

                                                                                                        +
                                                                                                        goos: darwin
                                                                                                        +goarch: amd64
                                                                                                        +pkg: LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters
                                                                                                        +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                        +BenchmarkLengthOfLongestSubstring-8             66143602                19.08 ns/op            0 B/op          0 allocs/op
                                                                                                        +BenchmarkLengthOfLongestSubstringMap-8           2524627               397.8 ns/op             0 B/op          0 allocs/op
                                                                                                        +BenchmarkLengthOfLongestSubstringBit-8          65099846                21.37 ns/op            0 B/op          0 allocs/op
                                                                                                        +PASS
                                                                                                        +ok      LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters     4.193s
                                                                                                        +
                                                                                                        +
                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                        + +
                                                                                                        + +
                                                                                                        +
                                                                                                        +
                                                                                                        + +

                                                                                                        results matching ""

                                                                                                        +
                                                                                                          + +
                                                                                                          +
                                                                                                          + +

                                                                                                          No results matching ""

                                                                                                          + +
                                                                                                          +
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          + +
                                                                                                          + + + + + + +
                                                                                                          + + +
                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0005.Longest-Palindromic-Substring/0005.LongestPalindromicString.jpg b/Leetcode/0005.Longest-Palindromic-Substring/0005.LongestPalindromicString.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eef3eb9726526cfcc1dd3ec21b1b5d2e15a2e124 GIT binary patch literal 215990 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

                                                                                                          o6^pw1?UR?NvaS!IaK<#I`$zH>4Jl;$w5La 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 z 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 Wv_BH0{o_Xy7WO}W^soKs*8dOJ$YFT^ literal 0 HcmV?d00001 diff --git a/Leetcode/0005.Longest-Palindromic-Substring/index.html b/Leetcode/0005.Longest-Palindromic-Substring/index.html new file mode 100644 index 000000000..bdb2f9362 --- /dev/null +++ b/Leetcode/0005.Longest-Palindromic-Substring/index.html @@ -0,0 +1,3932 @@ + + + + + + + 0005. Longest Palindromic Substring · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                                                                                                          +
                                                                                                          + + + + + + + + +
                                                                                                          + +
                                                                                                          + +
                                                                                                          + + + + + + + + +
                                                                                                          +
                                                                                                          + +
                                                                                                          +
                                                                                                          + +
                                                                                                          + +

                                                                                                          0005.Longest Palindromic Substring

                                                                                                          題目

                                                                                                          +

                                                                                                          Given a string s, return the longest palindromic substring in s.

                                                                                                          +

                                                                                                          A string is called a palindrome string if the reverse of that string is the same as the original string.

                                                                                                          +

                                                                                                          Example 1:

                                                                                                          +
                                                                                                          Input: s = "babad"
                                                                                                          +Output: "bab"
                                                                                                          +Explanation: "aba" is also a valid answer.
                                                                                                          +

                                                                                                          Example 2:

                                                                                                          +
                                                                                                          Input: s = "cbbd"
                                                                                                          +Output: "bb"
                                                                                                          +

                                                                                                          Constraints:

                                                                                                          +
                                                                                                            +
                                                                                                          • 1 <= s.length <= 1000
                                                                                                          • +
                                                                                                          • s consist of only digits and English letters.
                                                                                                          • +
                                                                                                          +

                                                                                                          題目大意

                                                                                                          +

                                                                                                          給你一個字符串 s,找到 s 中最長的回文子串。

                                                                                                          +

                                                                                                          解題思路

                                                                                                          +
                                                                                                            +
                                                                                                          • 每一個字符本身都是回文
                                                                                                          • +
                                                                                                          • 長度為 2, 且首尾字符相同則為回文
                                                                                                          • +
                                                                                                          • 長度>=3, 如果頭尾相同, 則去掉頭尾後可看是合是回文. 如果頭尾不同則不是回文
                                                                                                          • +
                                                                                                          +

                                                                                                          +

                                                                                                          來源

                                                                                                          + +

                                                                                                          解答

                                                                                                          +
                                                                                                          package longestpalindromicsubstring
                                                                                                          +
                                                                                                          +func longestPalindrome(s string) string {
                                                                                                          +    dp := make([][]bool, len(s))
                                                                                                          +    result := s[0:1]
                                                                                                          +
                                                                                                          +    for i := 0; i < len(s); i++ {
                                                                                                          +        dp[i] = make([]bool, len(s))
                                                                                                          +        dp[i][i] = true // 每個字符本身都是回文
                                                                                                          +    }
                                                                                                          +    for length := 2; length <= 1="" 3="" len(s);="" length++="" {="" for="" start="" :="0;" <="" len(s)-length+1;="" start++="" end="" +="" length="" -="" if="" s[start]="" !="s[end]" 字頭字尾不同,="" 不是回文="" continue="" }="" else="" 長度為2且字頭字尾相同,="" 則為回文="" dp[start][end]="true" 狀態轉移="" 去掉字頭字尾,="" 判斷是否還是回文="" &&="" (end-start+1)=""> len(result) {
                                                                                                          +                result = s[start : end+1]
                                                                                                          +            }
                                                                                                          +        }
                                                                                                          +    }
                                                                                                          +    return result
                                                                                                          +}
                                                                                                          +
                                                                                                          +
                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                          + +
                                                                                                          + +
                                                                                                          +
                                                                                                          +
                                                                                                          + +

                                                                                                          results matching ""

                                                                                                          +
                                                                                                            + +
                                                                                                            +
                                                                                                            + +

                                                                                                            No results matching ""

                                                                                                            + +
                                                                                                            +
                                                                                                            +
                                                                                                            + +
                                                                                                            +
                                                                                                            + +
                                                                                                            + + + + + + +
                                                                                                            + + +
                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0005.Longest-Palindromic-Substring/main.go b/Leetcode/0005.Longest-Palindromic-Substring/main.go new file mode 100644 index 000000000..005357236 --- /dev/null +++ b/Leetcode/0005.Longest-Palindromic-Substring/main.go @@ -0,0 +1,30 @@ +package longestpalindromicsubstring + +func longestPalindrome(s string) string { + dp := make([][]bool, len(s)) + result := s[0:1] + + for i := 0; i < len(s); i++ { + dp[i] = make([]bool, len(s)) + dp[i][i] = true // 每個字符本身都是回文 + } + for length := 2; length <= len(s); length++ { + for start := 0; start < len(s)-length+1; start++ { + end := start + length - 1 + if s[start] != s[end] { + // 字頭字尾不同, 不是回文 + continue + } else if length < 3 { + // 長度為2且字頭字尾相同, 則為回文 + dp[start][end] = true + } else { + // 狀態轉移 : 去掉字頭字尾, 判斷是否還是回文 + dp[start][end] = dp[start+1][end-1] + } + if dp[start][end] && (end-start+1) > len(result) { + result = s[start : end+1] + } + } + } + return result +} diff --git a/Leetcode/0005.Longest-Palindromic-Substring/main_test.go b/Leetcode/0005.Longest-Palindromic-Substring/main_test.go new file mode 100644 index 000000000..fa0d85bf5 --- /dev/null +++ b/Leetcode/0005.Longest-Palindromic-Substring/main_test.go @@ -0,0 +1,37 @@ +package longestpalindromicsubstring + +import "testing" + +var tests = []struct { + arg1 string + want string +}{ + { + "babad", + "bab", + }, + { + "cbbd", + "bb", + }, +} + +func TestLongestPalindromeSubstring(t *testing.T) { + for _, tt := range tests { + if got := longestPalindrome(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubstring(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + longestPalindrome(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0011.Container-With-Most-Water/index.html b/Leetcode/0011.Container-With-Most-Water/index.html new file mode 100644 index 000000000..c87431916 --- /dev/null +++ b/Leetcode/0011.Container-With-Most-Water/index.html @@ -0,0 +1,3937 @@ + + + + + + + 0011.Container With Most Water · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                            +
                                                                                                            + + + + + + + + +
                                                                                                            + +
                                                                                                            + +
                                                                                                            + + + + + + + + +
                                                                                                            +
                                                                                                            + +
                                                                                                            +
                                                                                                            + +
                                                                                                            + +

                                                                                                            0011.Container With Most Water

                                                                                                            題目

                                                                                                            +

                                                                                                            題目大意

                                                                                                            +

                                                                                                            解題思路

                                                                                                            +

                                                                                                            利用雙指針, 找出最小的高並乘上兩指針距離, 得出面積 +當左指針高度比右指針高度高時, 將右指針往左移, 反之將左指針往右移.

                                                                                                            +

                                                                                                            Big O

                                                                                                            +
                                                                                                              +
                                                                                                            • 時間複雜 : O(n)
                                                                                                            • +
                                                                                                            • 空間複雜 : O(1)
                                                                                                            • +
                                                                                                            +

                                                                                                            來源

                                                                                                            + +

                                                                                                            解答

                                                                                                            +

                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0011.Container-With-Most-Water/main.go

                                                                                                            +
                                                                                                            package containerwithmostwater
                                                                                                            +
                                                                                                            +// 時間複雜 O(n), 空間複雜 O(1)
                                                                                                            +func maxArea(height []int) int {
                                                                                                            +    left, right := 0, len(height)-1
                                                                                                            +    result := 0
                                                                                                            +    for left < right {
                                                                                                            +        tmp := (right - left) * min(height[left], height[right])
                                                                                                            +        result = max(result, tmp)
                                                                                                            +        if height[left] > height[right] {
                                                                                                            +            right--
                                                                                                            +        } else {
                                                                                                            +            left++
                                                                                                            +        }
                                                                                                            +    }
                                                                                                            +    return result
                                                                                                            +}
                                                                                                            +
                                                                                                            +func min(a, b int) int {
                                                                                                            +    if a < b {
                                                                                                            +        return a
                                                                                                            +    }
                                                                                                            +    return b
                                                                                                            +}
                                                                                                            +
                                                                                                            +func max(a, b int) int {
                                                                                                            +    if a > b {
                                                                                                            +        return a
                                                                                                            +    }
                                                                                                            +    return b
                                                                                                            +}
                                                                                                            +
                                                                                                            +

                                                                                                            Benchmark

                                                                                                            +
                                                                                                            
                                                                                                            +
                                                                                                            +
                                                                                                            +
                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                            + +
                                                                                                            + +
                                                                                                            +
                                                                                                            +
                                                                                                            + +

                                                                                                            results matching ""

                                                                                                            +
                                                                                                              + +
                                                                                                              +
                                                                                                              + +

                                                                                                              No results matching ""

                                                                                                              + +
                                                                                                              +
                                                                                                              +
                                                                                                              + +
                                                                                                              +
                                                                                                              + +
                                                                                                              + + + + + + +
                                                                                                              + + +
                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0011.Container-With-Most-Water/main.go b/Leetcode/0011.Container-With-Most-Water/main.go new file mode 100644 index 000000000..56f7301fc --- /dev/null +++ b/Leetcode/0011.Container-With-Most-Water/main.go @@ -0,0 +1,31 @@ +package containerwithmostwater + +// 時間複雜 O(n), 空間複雜 O(1) +func maxArea(height []int) int { + left, right := 0, len(height)-1 + result := 0 + for left < right { + tmp := (right - left) * min(height[left], height[right]) + result = max(result, tmp) + if height[left] > height[right] { + right-- + } else { + left++ + } + } + return result +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/Leetcode/0011.Container-With-Most-Water/main_test.go b/Leetcode/0011.Container-With-Most-Water/main_test.go new file mode 100644 index 000000000..4dfb1fb9e --- /dev/null +++ b/Leetcode/0011.Container-With-Most-Water/main_test.go @@ -0,0 +1,39 @@ +package containerwithmostwater + +import "testing" + +var tests = []struct { + height []int + want int +}{ + { + []int{1, 8, 6, 2, 5, 4, 8, 3, 7}, + 49, + }, + { + []int{4, 3, 2, 1, 4}, + 16, + }, + { + []int{1, 2, 1}, + 2, + }, + { + []int{1, 1}, + 1, + }, +} + +func TestMaxArea(t *testing.T) { + for _, tt := range tests { + if got := maxArea(tt.height); got != tt.want { + t.Errorf("maxArea(%v) = %v, want %v", tt.height, got, tt.want) + } + } +} + +func BenchmarkMaxArea(b *testing.B) { + for i := 0; i < b.N; i++ { + maxArea(tests[0].height) + } +} diff --git a/Leetcode/0015.3Sum/3Sum.go b/Leetcode/0015.3Sum/3Sum.go new file mode 100644 index 000000000..0a5c986b1 --- /dev/null +++ b/Leetcode/0015.3Sum/3Sum.go @@ -0,0 +1,141 @@ +package threesum + +import ( + "sort" +) + +// ThreeSumBurst : 暴力解 : O(n^3) +func ThreeSumBurst(nums []int) [][]int { + result := [][]int{} + sort.Ints(nums) // O(n log n) + for i := 0; i < len(nums); i++ { + // 需要跟上一次不同 + if i > 0 && nums[i] == nums[i-1] { + continue + } + for j := i + 1; j < len(nums); j++ { + // 需要跟上一次不同 + if j > i+1 && nums[j] == nums[j-1] { + continue + } + for k := j + 1; k < len(nums); k++ { + if nums[i]+nums[j]+nums[k] == 0 { + result = append(result, []int{nums[i], nums[j], nums[k]}) + } + } + } + } + return result +} + +/* +ThreeSumDoublePoint : 最佳解, 排序 + 雙指針法 (滑動視窗) O(n^2) +1. 特判,對於數組長度 n,如果數組為 null 或者數組長度小於 3,返回 []。 +2. 對數組進行排序。 +3. 遍歷排序後數組: + - 對於重複元素:跳過,避免出現重複解 + - 令左指針 L=i+1,右指針 R=n−1,當 L 1 && nums[i] == nums[i-1] { + // 去掉重複 + start = i - 1 + } + for start < i && end > i { + if start > 0 && nums[start] == nums[start-1] { + // 去掉重複 + start++ + continue + } + if end < (len(nums)-1) && nums[end] == nums[end+1] { + // 去掉重複 + end-- + continue + } + addNum = nums[start] + nums[end] + nums[i] + if addNum == 0 { + result = append(result, []int{nums[start], nums[i], nums[end]}) + start++ + end-- + } else if addNum > 0 { + end-- + } else { + start++ + } + } + } + return result +} + +func ThreeSumHashTable(nums []int) [][]int { + result := [][]int{} + if len(nums) < 3 { + return result + } + sort.Ints(nums) // O(n log n) + + for i := 0; i < len(nums)-2; i++ { + // 避免重複的起始元素 + if i > 0 && nums[i] == nums[i-1] { + continue + } + + seen := make(map[int]bool) + target := -nums[i] // 目標值為當前元素的相反數 + for j := i + 1; j < len(nums); j++ { + complement := target - nums[j] // 找到與當前元素配對的目標元素 + if seen[complement] { + result = append(result, []int{nums[i], complement, nums[j]}) + // 避免重複的配對元素 + for j < len(nums)-1 && nums[j] == nums[j+1] { + j++ + } + } + seen[nums[j]] = true + } + } + return result +} + +func ThreeSumTwoPointer(nums []int) [][]int { + result := [][]int{} + sort.Ints(nums) + + for i := 0; i < len(nums)-2; i++ { + if i > 0 && nums[i] == nums[i-1] { + continue + } + target, l, r := -nums[i], i+1, len(nums)-1 + for l < r { + sum := nums[l] + nums[r] + if sum == target { + result = append(result, []int{nums[i], nums[l], nums[r]}) + l++ + r-- + for l < r && nums[l] == nums[l-1] { + l++ + } + for l < r && nums[r] == nums[r+1] { + r-- + } + } else if sum > target { + r-- + } else if sum < target { + l++ + } + } + } + return result +} diff --git a/Leetcode/0015.3Sum/3Sum_test.go b/Leetcode/0015.3Sum/3Sum_test.go new file mode 100644 index 000000000..6a6537695 --- /dev/null +++ b/Leetcode/0015.3Sum/3Sum_test.go @@ -0,0 +1,126 @@ +package threesum + +import ( + "reflect" + "sort" + "testing" +) + +var tests = []struct { + arg1 []int + want [][]int +}{ + { + []int{0, 0, 0}, + [][]int{{0, 0, 0}}, + }, + { + []int{0, 0, 0, 0}, + [][]int{{0, 0, 0}}, + }, + { + []int{-1, 0, 1, 2, -1, -4}, + [][]int{{-1, -1, 2}, {-1, 0, 1}}, + }, + { + []int{}, + [][]int{}, + }, + { + []int{0}, + [][]int{}, + }, +} + +func TestThreeSumBurst(t *testing.T) { + for _, tt := range tests { + if got := ThreeSumBurst(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestThreeSumDoublePoint(t *testing.T) { + for _, tt := range tests { + if got := ThreeSumDoublePoint(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +// 判断切片在词典序上的大小关系 +func lexicographicLess(a, b []int) bool { + for i := 0; i < len(a) && i < len(b); i++ { + if a[i] < b[i] { + return true + } else if a[i] > b[i] { + return false + } + } + return len(a) < len(b) +} + +// 对切片的切片进行排序 +func sortSliceOfSlices(s [][]int) [][]int { + sort.Slice(s, func(i, j int) bool { + return lexicographicLess(s[i], s[j]) + }) + return s +} + +func TestThreeSumHashTable(t *testing.T) { + for _, tt := range tests { + if got := ThreeSumHashTable(tt.arg1); !reflect.DeepEqual(sortSliceOfSlices(got), tt.want) { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestThreeSumTwoPointer(t *testing.T) { + for _, tt := range tests { + if got := ThreeSumTwoPointer(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func BenchmarkThreeSumBurst(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ThreeSumBurst(tests[0].arg1) + } +} + +func BenchmarkThreeSumDoublePoint(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ThreeSumDoublePoint(tests[0].arg1) + } +} + +func BenchmarkThreeSumHashTable(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ThreeSumHashTable(tests[0].arg1) + } +} + +func BenchmarkThreeSumTwoPointer(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ThreeSumTwoPointer(tests[0].arg1) + } +} + +/* +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0015.3Sum +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkThreeSumBurst-4 9838000 121.4 ns/op 48 B/op 2 allocs/op +BenchmarkThreeSumDoublePoint-4 9069201 112.8 ns/op 48 B/op 2 allocs/op +BenchmarkThreeSumHashTable-4 7935907 147.1 ns/op 48 B/op 2 allocs/op +BenchmarkThreeSumTwoPointer-4 10888315 103.5 ns/op 48 B/op 2 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0015.3Sum 5.055s +*/ diff --git a/Leetcode/0015.3Sum/index.html b/Leetcode/0015.3Sum/index.html new file mode 100644 index 000000000..950853318 --- /dev/null +++ b/Leetcode/0015.3Sum/index.html @@ -0,0 +1,4047 @@ + + + + + + + 0015. 3Sum · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                              +
                                                                                                              + + + + + + + + +
                                                                                                              + +
                                                                                                              + +
                                                                                                              + + + + + + + + +
                                                                                                              +
                                                                                                              + +
                                                                                                              +
                                                                                                              + +
                                                                                                              + +

                                                                                                              15. 3Sum

                                                                                                              題目

                                                                                                              +

                                                                                                              Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

                                                                                                              +

                                                                                                              Note:

                                                                                                              +

                                                                                                              The solution set must not contain duplicate triplets.

                                                                                                              +

                                                                                                              Example:

                                                                                                              +
                                                                                                              Given array nums = [-1, 0, 1, 2, -1, -4],
                                                                                                              +
                                                                                                              +A solution set is:
                                                                                                              +[
                                                                                                              +  [-1, 0, 1],
                                                                                                              +  [-1, -1, 2]
                                                                                                              +]
                                                                                                              +
                                                                                                              +

                                                                                                              題目大意

                                                                                                              +

                                                                                                              給定一個數組,要求在這個數組中找出 3 個數之和為 0 的所有組合。

                                                                                                              +

                                                                                                              解題思路

                                                                                                              +

                                                                                                              用 map 提前計算好任意 2 個數字之和,保存起來,可以將時間複雜度降到 O(n^2)。這一題比較麻煩的一點在於,最後輸出解的時候,要求輸出不重複的解。數組中同一個數字可能出現多次,同一個數字也可能使用多次,但是最後輸出解的時候,不能重複。例如[-1,-1,2] 和[2, -1, -1]、[-1, 2, -1] 這3 個解是重複的,即使-1 可能出現100 次,每次使用的-1 的數組下標都是不同的。

                                                                                                              +

                                                                                                              這裡就需要去重和排序了。 map 記錄每個數字出現的次數,然後對 map 的 key 數組進行排序,最後在這個排序以後的數組裡面掃,找到另外 2 個數字能和自己組成 0 的組合。

                                                                                                              +

                                                                                                              來源

                                                                                                              + +

                                                                                                              解答

                                                                                                              +

                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0015.3Sum/3Sum.go

                                                                                                              +
                                                                                                              package threesum
                                                                                                              +
                                                                                                              +import (
                                                                                                              +    "sort"
                                                                                                              +)
                                                                                                              +
                                                                                                              +// ThreeSumBurst : 暴力解 : O(n^3)
                                                                                                              +func ThreeSumBurst(nums []int) [][]int {
                                                                                                              +    result := [][]int{}
                                                                                                              +    sort.Ints(nums) // O(n log n)
                                                                                                              +    for i := 0; i < len(nums); i++ {
                                                                                                              +        // 需要跟上一次不同
                                                                                                              +        if i > 0 && nums[i] == nums[i-1] {
                                                                                                              +            continue
                                                                                                              +        }
                                                                                                              +        for j := i + 1; j < len(nums); j++ {
                                                                                                              +            // 需要跟上一次不同
                                                                                                              +            if j > i+1 && nums[j] == nums[j-1] {
                                                                                                              +                continue
                                                                                                              +            }
                                                                                                              +            for k := j + 1; k < len(nums); k++ {
                                                                                                              +                if nums[i]+nums[j]+nums[k] == 0 {
                                                                                                              +                    result = append(result, []int{nums[i], nums[j], nums[k]})
                                                                                                              +                }
                                                                                                              +            }
                                                                                                              +        }
                                                                                                              +    }
                                                                                                              +    return result
                                                                                                              +}
                                                                                                              +
                                                                                                              +/*
                                                                                                              +ThreeSumDoublePoint : 最佳解, 排序 + 雙指針法 (滑動視窗) O(n^2)
                                                                                                              +1. 特判,對於數組長度 n,如果數組為 null 或者數組長度小於 3,返回 []。
                                                                                                              +2. 對數組進行排序。
                                                                                                              +3. 遍歷排序後數組:
                                                                                                              +  - 對於重複元素:跳過,避免出現重複解
                                                                                                              +  - 令左指針 L=i+1,右指針 R=n−1,當 L 1 && nums[i] == nums[i-1] {
                                                                                                              +            // 去掉重複
                                                                                                              +            start = i - 1
                                                                                                              +        }
                                                                                                              +        for start < i && end > i {
                                                                                                              +            if start > 0 && nums[start] == nums[start-1] {
                                                                                                              +                // 去掉重複
                                                                                                              +                start++
                                                                                                              +                continue
                                                                                                              +            }
                                                                                                              +            if end < (len(nums)-1) && nums[end] == nums[end+1] {
                                                                                                              +                // 去掉重複
                                                                                                              +                end--
                                                                                                              +                continue
                                                                                                              +            }
                                                                                                              +            addNum = nums[start] + nums[end] + nums[i]
                                                                                                              +            if addNum == 0 {
                                                                                                              +                result = append(result, []int{nums[start], nums[i], nums[end]})
                                                                                                              +                start++
                                                                                                              +                end--
                                                                                                              +            } else if addNum > 0 {
                                                                                                              +                end--
                                                                                                              +            } else {
                                                                                                              +                start++
                                                                                                              +            }
                                                                                                              +        }
                                                                                                              +    }
                                                                                                              +    return result
                                                                                                              +}
                                                                                                              +
                                                                                                              +func ThreeSumHashTable(nums []int) [][]int {
                                                                                                              +    result := [][]int{}
                                                                                                              +    if len(nums) < 3 {
                                                                                                              +        return result
                                                                                                              +    }
                                                                                                              +    sort.Ints(nums) // O(n log n)
                                                                                                              +
                                                                                                              +    for i := 0; i < len(nums)-2; i++ {
                                                                                                              +        // 避免重複的起始元素
                                                                                                              +        if i > 0 && nums[i] == nums[i-1] {
                                                                                                              +            continue
                                                                                                              +        }
                                                                                                              +
                                                                                                              +        seen := make(map[int]bool)
                                                                                                              +        target := -nums[i] // 目標值為當前元素的相反數
                                                                                                              +        for j := i + 1; j < len(nums); j++ {
                                                                                                              +            complement := target - nums[j] // 找到與當前元素配對的目標元素
                                                                                                              +            if seen[complement] {
                                                                                                              +                result = append(result, []int{nums[i], complement, nums[j]})
                                                                                                              +                // 避免重複的配對元素
                                                                                                              +                for j < len(nums)-1 && nums[j] == nums[j+1] {
                                                                                                              +                    j++
                                                                                                              +                }
                                                                                                              +            }
                                                                                                              +            seen[nums[j]] = true
                                                                                                              +        }
                                                                                                              +    }
                                                                                                              +    return result
                                                                                                              +}
                                                                                                              +
                                                                                                              +func ThreeSumTwoPointer(nums []int) [][]int {
                                                                                                              +    result := [][]int{}
                                                                                                              +    sort.Ints(nums)
                                                                                                              +
                                                                                                              +    for i := 0; i < len(nums)-2; i++ {
                                                                                                              +        if i > 0 && nums[i] == nums[i-1] {
                                                                                                              +            continue
                                                                                                              +        }
                                                                                                              +        target, l, r := -nums[i], i+1, len(nums)-1
                                                                                                              +        for l < r {
                                                                                                              +            sum := nums[l] + nums[r]
                                                                                                              +            if sum == target {
                                                                                                              +                result = append(result, []int{nums[i], nums[l], nums[r]})
                                                                                                              +                l++
                                                                                                              +                r--
                                                                                                              +                for l < r && nums[l] == nums[l-1] {
                                                                                                              +                    l++
                                                                                                              +                }
                                                                                                              +                for l < r && nums[r] == nums[r+1] {
                                                                                                              +                    r--
                                                                                                              +                }
                                                                                                              +            } else if sum > target {
                                                                                                              +                r--
                                                                                                              +            } else if sum < target {
                                                                                                              +                l++
                                                                                                              +            }
                                                                                                              +        }
                                                                                                              +    }
                                                                                                              +    return result
                                                                                                              +}
                                                                                                              +
                                                                                                              +
                                                                                                              goos: darwin
                                                                                                              +goarch: amd64
                                                                                                              +pkg: LeetcodeGolang/Leetcode/0015.3Sum
                                                                                                              +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
                                                                                                              +BenchmarkThreeSumBurst-4                 9838000               121.4 ns/op            48 B/op          2 allocs/op
                                                                                                              +BenchmarkThreeSumDoublePoint-4           9069201               112.8 ns/op            48 B/op          2 allocs/op
                                                                                                              +BenchmarkThreeSumHashTable-4             7935907               147.1 ns/op            48 B/op          2 allocs/op
                                                                                                              +BenchmarkThreeSumTwoPointer-4           10888315               103.5 ns/op            48 B/op          2 allocs/op
                                                                                                              +PASS
                                                                                                              +ok      LeetcodeGolang/Leetcode/0015.3Sum       5.055s
                                                                                                              +
                                                                                                              +
                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                              + +
                                                                                                              + +
                                                                                                              +
                                                                                                              +
                                                                                                              + +

                                                                                                              results matching ""

                                                                                                              +
                                                                                                                + +
                                                                                                                +
                                                                                                                + +

                                                                                                                No results matching ""

                                                                                                                + +
                                                                                                                +
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                + +
                                                                                                                + + + + + + +
                                                                                                                + + +
                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0019.Remove-Nth-Node-From-End-of-List/index.html b/Leetcode/0019.Remove-Nth-Node-From-End-of-List/index.html new file mode 100644 index 000000000..2e306cc4e --- /dev/null +++ b/Leetcode/0019.Remove-Nth-Node-From-End-of-List/index.html @@ -0,0 +1,3940 @@ + + + + + + + 0019. Remove Nth Node From End of List · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                +
                                                                                                                + + + + + + + + +
                                                                                                                + +
                                                                                                                + +
                                                                                                                + + + + + + + + +
                                                                                                                +
                                                                                                                + +
                                                                                                                +
                                                                                                                + +
                                                                                                                + +

                                                                                                                19. Remove Nth Node From End of List

                                                                                                                題目

                                                                                                                +

                                                                                                                Given the head of a linked list, remove the nth node from the end of the list and return its head.

                                                                                                                +

                                                                                                                Example 1: +

                                                                                                                +
                                                                                                                Input: head = [1,2,3,4,5], n = 2
                                                                                                                +Output: [1,2,3,5]
                                                                                                                +

                                                                                                                Example 2:

                                                                                                                +
                                                                                                                Input: head = [1], n = 1
                                                                                                                +Output: []
                                                                                                                +

                                                                                                                Example 3:

                                                                                                                +
                                                                                                                Input: head = [1,2], n = 1
                                                                                                                +Output: [1]
                                                                                                                +

                                                                                                                Constraints:

                                                                                                                +
                                                                                                                  +
                                                                                                                • The number of nodes in the list is sz.
                                                                                                                • +
                                                                                                                • 1 <= sz <= 30
                                                                                                                • +
                                                                                                                • 0 <= Node.val <= 100
                                                                                                                • +
                                                                                                                • 1 <= n <= sz
                                                                                                                • +
                                                                                                                +

                                                                                                                題目大意

                                                                                                                +

                                                                                                                找尋單linked list的 倒數第 n 個元素並刪除. +返回該 linked list的頭節點

                                                                                                                +

                                                                                                                解題思路

                                                                                                                +

                                                                                                                先讓 fast走 k 步, 然後 fast slow 同速前進 +這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點

                                                                                                                +

                                                                                                                來源

                                                                                                                + +

                                                                                                                解答

                                                                                                                +

                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main.go

                                                                                                                +
                                                                                                                package removenthnodefromendoflist
                                                                                                                +
                                                                                                                +/**
                                                                                                                + * Definition for singly-linked list.
                                                                                                                + * type ListNode struct {
                                                                                                                + *     Val int
                                                                                                                + *     Next *ListNode
                                                                                                                + * }
                                                                                                                + */
                                                                                                                +
                                                                                                                +type ListNode struct {
                                                                                                                +    Val  int
                                                                                                                +    Next *ListNode
                                                                                                                +}
                                                                                                                +
                                                                                                                +// 產生 dummyHead,跟 preslow
                                                                                                                +// 使用雙指針, 先讓 fast走 `k` 步, 然後 `fast slow 同速前進`
                                                                                                                +// 這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點
                                                                                                                +// 將 slow的前一步(preslow)的next 指向 slow.Next
                                                                                                                +func RemoveNthFromEnd(head *ListNode, n int) *ListNode {
                                                                                                                +    dummyHead := &ListNode{Next: head}
                                                                                                                +    preSlow, slow, fast := dummyHead, head, head
                                                                                                                +    for fast != nil {
                                                                                                                +        if n 
                                                                                                                +
                                                                                                                tags: Medium Leetcode Two Pointers
                                                                                                                +
                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                + +
                                                                                                                + +
                                                                                                                +
                                                                                                                +
                                                                                                                + +

                                                                                                                results matching ""

                                                                                                                +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  + +

                                                                                                                  No results matching ""

                                                                                                                  + +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  + + + + + + +
                                                                                                                  + + +
                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main.go b/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main.go new file mode 100644 index 000000000..65fef229e --- /dev/null +++ b/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main.go @@ -0,0 +1,35 @@ +package removenthnodefromendoflist + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +type ListNode struct { + Val int + Next *ListNode +} + +// 產生 dummyHead,跟 preslow +// 使用雙指針, 先讓 fast走 `k` 步, 然後 `fast slow 同速前進` +// 這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點 +// 將 slow的前一步(preslow)的next 指向 slow.Next +func RemoveNthFromEnd(head *ListNode, n int) *ListNode { + dummyHead := &ListNode{Next: head} + preSlow, slow, fast := dummyHead, head, head + for fast != nil { + if n <= 0 { + // 先讓 fast走 `k` 步, 然後 `fast slow 同速前進` + // 這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點 + preSlow = slow + slow = slow.Next + } + n-- + fast = fast.Next + } + preSlow.Next = slow.Next + return dummyHead.Next +} diff --git a/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main_test.go b/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main_test.go new file mode 100644 index 000000000..3e306a9b1 --- /dev/null +++ b/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main_test.go @@ -0,0 +1,45 @@ +package removenthnodefromendoflist + +import ( + "reflect" + "testing" +) + +func TestRemoveNthFromEnd(t *testing.T) { + a := &ListNode{1, nil} + b := &ListNode{2, nil} + c := &ListNode{3, nil} + d := &ListNode{4, nil} + e := &ListNode{5, nil} + + a.Next = b + b.Next = c + c.Next = d + d.Next = e + e.Next = nil + + tests := []struct { + arg1 *ListNode + arg2 int + want []int + }{ + { + arg1: a, + arg2: 2, + want: []int{1, 2, 3, 5}, + }, + } + + for _, tt := range tests { + got := RemoveNthFromEnd(tt.arg1, tt.arg2) + + gotArr := []int{} + for got != nil { + gotArr = append(gotArr, got.Val) + got = got.Next + } + if !reflect.DeepEqual(gotArr, tt.want) { + t.Errorf("got = %v, want = %v", gotArr, tt.want) + } + } +} diff --git a/Leetcode/0020.Valid-Parentheses/index.html b/Leetcode/0020.Valid-Parentheses/index.html new file mode 100644 index 000000000..94f15eed1 --- /dev/null +++ b/Leetcode/0020.Valid-Parentheses/index.html @@ -0,0 +1,3953 @@ + + + + + + + 0020. Valid Parentheses · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                  +
                                                                                                                  + + + + + + + + +
                                                                                                                  + +
                                                                                                                  + +
                                                                                                                  + + + + + + + + +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  + +
                                                                                                                  + +

                                                                                                                  0020. Valid Parentheses

                                                                                                                  題目

                                                                                                                  +

                                                                                                                  Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

                                                                                                                  +

                                                                                                                  An input string is valid if:

                                                                                                                  +

                                                                                                                  Open brackets must be closed by the same type of brackets. +Open brackets must be closed in the correct order. +Every close bracket has a corresponding open bracket of the same type.

                                                                                                                  +

                                                                                                                  Example 1:

                                                                                                                  +

                                                                                                                  Input: s = "()" +Output: true +Example 2:

                                                                                                                  +

                                                                                                                  Input: s = "()[]{}" +Output: true +Example 3:

                                                                                                                  +

                                                                                                                  Input: s = "(]" +Output: false

                                                                                                                  +

                                                                                                                  Constraints:

                                                                                                                  +

                                                                                                                  1 <= s.length <= 104 +s consists of parentheses only '()[]{}'.

                                                                                                                  +

                                                                                                                  題目大意

                                                                                                                  +

                                                                                                                  解題思路

                                                                                                                  +

                                                                                                                  Big O

                                                                                                                  +

                                                                                                                  時間複雜 : 空間複雜 :

                                                                                                                  +

                                                                                                                  來源

                                                                                                                  + +

                                                                                                                  解答

                                                                                                                  +

                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0020.Valid-Parentheses/main.go

                                                                                                                  +
                                                                                                                  package validparentheses
                                                                                                                  +
                                                                                                                  +type Stack struct {
                                                                                                                  +    runes []rune
                                                                                                                  +}
                                                                                                                  +
                                                                                                                  +func NewStack() *Stack {
                                                                                                                  +    return &Stack{runes: []rune{}}
                                                                                                                  +}
                                                                                                                  +
                                                                                                                  +func (s *Stack) Push(str rune) {
                                                                                                                  +    s.runes = append(s.runes, str)
                                                                                                                  +}
                                                                                                                  +
                                                                                                                  +func (s *Stack) Pop() rune {
                                                                                                                  +    str := s.runes[len(s.runes)-1]
                                                                                                                  +    s.runes = s.runes[:len(s.runes)-1]
                                                                                                                  +    return str
                                                                                                                  +}
                                                                                                                  +
                                                                                                                  +// 時間複雜 O(n), 空間複雜 O(n)
                                                                                                                  +func IsValid(s string) bool {
                                                                                                                  +    runeStack := NewStack()
                                                                                                                  +    for _, v := range s {
                                                                                                                  +        // fmt.Println(string(v))
                                                                                                                  +        if v == '(' || v == '[' || v == '{' {
                                                                                                                  +            runeStack.Push(v)
                                                                                                                  +        } else if (v == ')' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '(') || (v == ']' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '[') || (v == '}' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '{') {
                                                                                                                  +            runeStack.Pop()
                                                                                                                  +        } else {
                                                                                                                  +            return false
                                                                                                                  +        }
                                                                                                                  +    }
                                                                                                                  +    return len(runeStack.runes) == 0
                                                                                                                  +}
                                                                                                                  +
                                                                                                                  +

                                                                                                                  Benchmark

                                                                                                                  +
                                                                                                                  
                                                                                                                  +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                  + +
                                                                                                                  + +
                                                                                                                  +
                                                                                                                  +
                                                                                                                  + +

                                                                                                                  results matching ""

                                                                                                                  +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + +

                                                                                                                    No results matching ""

                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + + + + + + +
                                                                                                                    + + +
                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0020.Valid-Parentheses/main.go b/Leetcode/0020.Valid-Parentheses/main.go new file mode 100644 index 000000000..4a51f1b86 --- /dev/null +++ b/Leetcode/0020.Valid-Parentheses/main.go @@ -0,0 +1,35 @@ +package validparentheses + +type Stack struct { + runes []rune +} + +func NewStack() *Stack { + return &Stack{runes: []rune{}} +} + +func (s *Stack) Push(str rune) { + s.runes = append(s.runes, str) +} + +func (s *Stack) Pop() rune { + str := s.runes[len(s.runes)-1] + s.runes = s.runes[:len(s.runes)-1] + return str +} + +// 時間複雜 O(n), 空間複雜 O(n) +func IsValid(s string) bool { + runeStack := NewStack() + for _, v := range s { + // fmt.Println(string(v)) + if v == '(' || v == '[' || v == '{' { + runeStack.Push(v) + } else if (v == ')' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '(') || (v == ']' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '[') || (v == '}' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '{') { + runeStack.Pop() + } else { + return false + } + } + return len(runeStack.runes) == 0 +} diff --git a/Leetcode/0020.Valid-Parentheses/main_test.go b/Leetcode/0020.Valid-Parentheses/main_test.go new file mode 100644 index 000000000..3e8261805 --- /dev/null +++ b/Leetcode/0020.Valid-Parentheses/main_test.go @@ -0,0 +1,46 @@ +package validparentheses + +import "testing" + +var tests = []struct { + arg1 string + want bool +}{ + { + "()", + true, + }, + { + "()[]{}", + true, + }, + { + "(]", + false, + }, + { + "[", + false, + }, +} + +func TestIsValid(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := IsValid(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkIsValid(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + IsValid(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0021.Merge-Two-Sorted-Lists/index.html b/Leetcode/0021.Merge-Two-Sorted-Lists/index.html new file mode 100644 index 000000000..e3afc2b17 --- /dev/null +++ b/Leetcode/0021.Merge-Two-Sorted-Lists/index.html @@ -0,0 +1,3933 @@ + + + + + + + 0021. Merge Two Sorted Lists · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                    +
                                                                                                                    + + + + + + + + +
                                                                                                                    + +
                                                                                                                    + +
                                                                                                                    + + + + + + + + +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    + +
                                                                                                                    + +

                                                                                                                    0021. Merge Two Sorted Lists

                                                                                                                    題目

                                                                                                                    +

                                                                                                                    題目大意

                                                                                                                    +

                                                                                                                    解題思路

                                                                                                                    +

                                                                                                                    Big O

                                                                                                                    +

                                                                                                                    時間複雜 : O( log n) +空間複雜 : O(1)

                                                                                                                    +

                                                                                                                    來源

                                                                                                                    + +

                                                                                                                    解答

                                                                                                                    +

                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0021.Merge-Two-Sorted-Lists/main.go

                                                                                                                    +
                                                                                                                    package mergetwosortedlists
                                                                                                                    +
                                                                                                                    +type ListNode struct {
                                                                                                                    +    Val  int
                                                                                                                    +    Next *ListNode
                                                                                                                    +}
                                                                                                                    +
                                                                                                                    +// 時間複雜 O(log n), 空間複雜 O(1)
                                                                                                                    +func MergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
                                                                                                                    +    head := &ListNode{Next: nil}
                                                                                                                    +    cur := head
                                                                                                                    +
                                                                                                                    +    for list1 != nil && list2 != nil {
                                                                                                                    +        if list1.Val < list2.Val {
                                                                                                                    +            cur.Next = list1
                                                                                                                    +            list1 = list1.Next
                                                                                                                    +        } else {
                                                                                                                    +            cur.Next = list2
                                                                                                                    +            list2 = list2.Next
                                                                                                                    +        }
                                                                                                                    +        cur = cur.Next
                                                                                                                    +    }
                                                                                                                    +
                                                                                                                    +    if list1 != nil {
                                                                                                                    +        cur.Next = list1
                                                                                                                    +    }
                                                                                                                    +    if list2 != nil {
                                                                                                                    +        cur.Next = list2
                                                                                                                    +    }
                                                                                                                    +    return head.Next
                                                                                                                    +}
                                                                                                                    +
                                                                                                                    +

                                                                                                                    Benchmark

                                                                                                                    +
                                                                                                                    
                                                                                                                    +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                    + +
                                                                                                                    + +
                                                                                                                    +
                                                                                                                    +
                                                                                                                    + +

                                                                                                                    results matching ""

                                                                                                                    +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + +

                                                                                                                      No results matching ""

                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + + + + + + +
                                                                                                                      + + +
                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0021.Merge-Two-Sorted-Lists/main.go b/Leetcode/0021.Merge-Two-Sorted-Lists/main.go new file mode 100644 index 000000000..1d367cb86 --- /dev/null +++ b/Leetcode/0021.Merge-Two-Sorted-Lists/main.go @@ -0,0 +1,31 @@ +package mergetwosortedlists + +type ListNode struct { + Val int + Next *ListNode +} + +// 時間複雜 O(log n), 空間複雜 O(1) +func MergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode { + head := &ListNode{Next: nil} + cur := head + + for list1 != nil && list2 != nil { + if list1.Val < list2.Val { + cur.Next = list1 + list1 = list1.Next + } else { + cur.Next = list2 + list2 = list2.Next + } + cur = cur.Next + } + + if list1 != nil { + cur.Next = list1 + } + if list2 != nil { + cur.Next = list2 + } + return head.Next +} diff --git a/Leetcode/0021.Merge-Two-Sorted-Lists/main_test.go b/Leetcode/0021.Merge-Two-Sorted-Lists/main_test.go new file mode 100644 index 000000000..816ad9c46 --- /dev/null +++ b/Leetcode/0021.Merge-Two-Sorted-Lists/main_test.go @@ -0,0 +1,78 @@ +package mergetwosortedlists + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + arg2 []int + want []int +}{ + { + []int{1, 2, 4}, + []int{1, 3, 4}, + []int{1, 1, 2, 3, 4, 4}, + }, +} + +func TestMergeTwoLists(t *testing.T) { + for _, tt := range tests { + arg1 := &ListNode{} + arg1Cur := arg1 + for _, v := range tt.arg1 { + tmp := &ListNode{Val: v} + arg1Cur.Next = tmp + arg1Cur = arg1Cur.Next + } + + arg2 := &ListNode{} + arg2Cur := arg2 + for _, v := range tt.arg2 { + tmp := &ListNode{Val: v} + arg2Cur.Next = tmp + arg2Cur = arg2Cur.Next + } + + wantNode := &ListNode{} + wantNodeCur := wantNode + for _, v := range tt.want { + tmp := &ListNode{Val: v} + wantNodeCur.Next = tmp + wantNodeCur = wantNodeCur.Next + } + + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MergeTwoLists(arg1.Next, arg2.Next); !reflect.DeepEqual(got, wantNode.Next) { + t.Errorf("got = %v, want = %v", got, wantNode.Next) + } + } +} + +func BenchmarkMergeTwoLists(b *testing.B) { + b.ResetTimer() + arg1 := &ListNode{} + arg1Cur := arg1 + for _, v := range tests[0].arg1 { + tmp := &ListNode{Val: v} + arg1Cur.Next = tmp + arg1Cur = arg1Cur.Next + } + + arg2 := &ListNode{} + arg2Cur := arg2 + for _, v := range tests[0].arg2 { + tmp := &ListNode{Val: v} + arg2Cur.Next = tmp + arg2Cur = arg2Cur.Next + } + for i := 0; i < b.N; i++ { + MergeTwoLists(arg1.Next, arg2.Next) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0027.Remove-Element/Remove-Element.go b/Leetcode/0027.Remove-Element/Remove-Element.go new file mode 100644 index 000000000..b8fd61b5e --- /dev/null +++ b/Leetcode/0027.Remove-Element/Remove-Element.go @@ -0,0 +1,39 @@ +package removeelement + +/* +雙指針法 +雙指針法(快慢指針法)在數組和鍊錶的操作中是非常常見的,很多考察數組和鍊錶操作的面試題,都使用雙指針法 +*/ +func RemoveElementDoublePoint(nums []int, val int) int { + if len(nums) <= 0 { + return 0 + } + slowIndex := 0 + for fastIndex := 0; fastIndex < len(nums); fastIndex++ { + if nums[fastIndex] != val { + if fastIndex != slowIndex { + nums[fastIndex], nums[slowIndex] = nums[slowIndex], nums[fastIndex] + } + slowIndex++ + } + } + return slowIndex +} + +/* +RemoveElement : +*/ +func RemoveElement(nums []int, val int) int { + size := len(nums) + i := 0 + for i < size { + if nums[i] == val { + nums = append(nums[:i], nums[i+1:]...) + size-- + // fmt.Println(nums) + } else { + i++ + } + } + return len(nums) +} diff --git a/Leetcode/0027.Remove-Element/Remove-Element_test.go b/Leetcode/0027.Remove-Element/Remove-Element_test.go new file mode 100644 index 000000000..f30f75b0f --- /dev/null +++ b/Leetcode/0027.Remove-Element/Remove-Element_test.go @@ -0,0 +1,79 @@ +package removeelement + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{1, 0, 1}, + 1, + 1, + }, + { + []int{0, 1, 0, 3, 0, 12}, + 0, + 3, + }, + { + []int{0, 1, 0, 3, 0, 0, 0, 0, 1, 12}, + 0, + 4, + }, + { + []int{0, 0, 0, 0, 0}, + 0, + 0, + }, + + { + []int{1}, + 1, + 0, + }, + { + []int{0, 1, 2, 2, 3, 0, 4, 2}, + 2, + 5, + }, +} + +func TestRemoveElementDoublePoint(t *testing.T) { + for _, tt := range tests { + if got := RemoveElementDoublePoint(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestRemoveElement(t *testing.T) { + for _, tt := range tests { + if got := RemoveElement(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func BenchmarkRemoveElement(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + RemoveElement(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkRemoveElementDoublePoint(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + RemoveElementDoublePoint(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0027.Remove-Element -bench=. +BenchmarkRemoveElement-8 100000000 10.66 ns/op 0 B/op 0 allocs/op +BenchmarkRemoveElementDoublePoint-8 285200671 5.456 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0027.Remove-Element/index.html b/Leetcode/0027.Remove-Element/index.html new file mode 100644 index 000000000..e2e90fde6 --- /dev/null +++ b/Leetcode/0027.Remove-Element/index.html @@ -0,0 +1,3938 @@ + + + + + + + 0027.Remove Element · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                      +
                                                                                                                      + + + + + + + + +
                                                                                                                      + +
                                                                                                                      + +
                                                                                                                      + + + + + + + + +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      + +
                                                                                                                      + +

                                                                                                                      27. Remove Element

                                                                                                                      題目

                                                                                                                      +

                                                                                                                      Given an array nums and a value val, remove all instances of that value in-place and return the new length.

                                                                                                                      +

                                                                                                                      Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

                                                                                                                      +

                                                                                                                      The order of elements can be changed. It doesn't matter what you leave beyond the new length.

                                                                                                                      +

                                                                                                                      Example 1:

                                                                                                                      +
                                                                                                                      Given nums = [3,2,2,3], val = 3,
                                                                                                                      +
                                                                                                                      +Your function should return length = 2, with the first two elements of nums being 2.
                                                                                                                      +
                                                                                                                      +It doesn't matter what you leave beyond the returned length.
                                                                                                                      +
                                                                                                                      +

                                                                                                                      Example 2:

                                                                                                                      +
                                                                                                                      Given nums = [0,1,2,2,3,0,4,2], val = 2,
                                                                                                                      +
                                                                                                                      +Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4.
                                                                                                                      +
                                                                                                                      +Note that the order of those five elements can be arbitrary.
                                                                                                                      +
                                                                                                                      +It doesn't matter what values are set beyond the returned length.
                                                                                                                      +
                                                                                                                      +

                                                                                                                      Clarification:

                                                                                                                      +

                                                                                                                      Confused why the returned value is an integer but your answer is an array?

                                                                                                                      +

                                                                                                                      Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

                                                                                                                      +

                                                                                                                      Internally you can think of this:

                                                                                                                      +
                                                                                                                      // nums is passed in by reference. (i.e., without making a copy)
                                                                                                                      +int len = removeElement(nums, val);
                                                                                                                      +
                                                                                                                      +// any modification to nums in your function would be known by the caller.
                                                                                                                      +// using the length returned by your function, it prints the first len elements.
                                                                                                                      +for (int i = 0; i < len; i++) {
                                                                                                                      +    print(nums[i]);
                                                                                                                      +}
                                                                                                                      +
                                                                                                                      +

                                                                                                                      題目大意

                                                                                                                      +

                                                                                                                      給定一個數組 nums 和一個數值 val,將數組中所有等於 val 的元素刪除,並返回剩餘的元素個數。

                                                                                                                      +

                                                                                                                      解題思路

                                                                                                                      +

                                                                                                                      這道題和第 283 題很像。這道題和第 283 題基本一致,283 題是刪除 0,這一題是給定的一個 val,實質是一樣的。

                                                                                                                      +

                                                                                                                      這里數組的刪除並不是真的刪除,只是將刪除的元素移動到數組後面的空間內,然後返回數組實際剩餘的元素個數,OJ 最終判斷題目的時候會讀取數組剩餘個數的元素進行輸出。

                                                                                                                      +

                                                                                                                      來源

                                                                                                                      + +

                                                                                                                      解答

                                                                                                                      +

                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0027.Remove-Element/Remove-Element.go

                                                                                                                      +
                                                                                                                      package removeelement
                                                                                                                      +
                                                                                                                      +/*
                                                                                                                      +雙指針法
                                                                                                                      +雙指針法(快慢指針法)在數組和鍊錶的操作中是非常常見的,很多考察數組和鍊錶操作的面試題,都使用雙指針法
                                                                                                                      +*/
                                                                                                                      +func RemoveElementDoublePoint(nums []int, val int) int {
                                                                                                                      +    if len(nums) 
                                                                                                                      +
                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                      + +
                                                                                                                      + +
                                                                                                                      +
                                                                                                                      +
                                                                                                                      + +

                                                                                                                      results matching ""

                                                                                                                      +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + +

                                                                                                                        No results matching ""

                                                                                                                        + +
                                                                                                                        +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + + + + + + +
                                                                                                                        + + +
                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/index.html b/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/index.html new file mode 100644 index 000000000..379076995 --- /dev/null +++ b/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/index.html @@ -0,0 +1,3906 @@ + + + + + + + 0028. Find the Index of the First Occurrence in a String · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                        +
                                                                                                                        + + + + + + + + +
                                                                                                                        + +
                                                                                                                        + +
                                                                                                                        + + + + + + + + +
                                                                                                                        +
                                                                                                                        + +
                                                                                                                        + +
                                                                                                                        +
                                                                                                                        + +

                                                                                                                        results matching ""

                                                                                                                        +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + +

                                                                                                                          No results matching ""

                                                                                                                          + +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + + + + + + +
                                                                                                                          + + +
                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main.go b/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main.go new file mode 100644 index 000000000..38ad805b0 --- /dev/null +++ b/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main.go @@ -0,0 +1,41 @@ +package findtheindexofthefirstoccurrenceinastring + +// 暴力解 +// 時間複雜 O(M*N), 空間複雜 O() +func strStr(haystack string, needle string) int { + haystackLen := len(haystack) + needleLen := len(needle) + index := 0 + for i := 0; i <= (haystackLen - needleLen); i++ { + j := 0 + for j = 0; j < needleLen; j++ { + if haystack[i+j] == needle[j] { + index = i + } else { + break + } + } + if j == needleLen { + return index + } + } + return -1 +} + +// Slice 解法 +func strStrSlice(haystack string, needle string) int { + haystackLen := len(haystack) + needleLen := len(needle) + if haystackLen == 0 || haystackLen < needleLen { + return -1 + } + if needleLen == 0 { + return 0 + } + for i := 0; i <= (haystackLen - needleLen); i++ { + if haystack[i:i+needleLen] == needle { + return i + } + } + return -1 +} diff --git a/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main_test.go b/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main_test.go new file mode 100644 index 000000000..0788b7309 --- /dev/null +++ b/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main_test.go @@ -0,0 +1,34 @@ +package + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0035.Search-Insert-Position/Search-Insert-Position.go b/Leetcode/0035.Search-Insert-Position/Search-Insert-Position.go new file mode 100644 index 000000000..67f5f1653 --- /dev/null +++ b/Leetcode/0035.Search-Insert-Position/Search-Insert-Position.go @@ -0,0 +1,48 @@ +package searchinsertposition + +// 暴力解 時間複雜 O(n) 空間複雜 O(1) +func SearchInsertBurst(nums []int, target int) int { + for i := 0; i < len(nums); i++ { + if nums[i] >= target { + return i + } + } + return len(nums) +} + +//二分法 時間複雜 O(log n) 空間複雜 O(1) +func SearchInsertBisection(nums []int, target int) int { + left, right := 0, len(nums)-1 + for left <= right { + // / 防止溢出 同(left + right)/2 + mid := left + (right-left)>>1 + if nums[mid] >= target { + right = mid - 1 + } else if nums[mid] < target { + left = mid + 1 + } else { + return mid + } + } + // 分別處理如下四種情況 + // targe在所有元素之前 [0, -1] + // targe等於數組中某一個元素 return middle; + // targe在數組中的位置 [left, right],return right + 1 + // targe在數組所有元素之後的情況 [left, right], return right + 1 + return right + 1 +} + +//二分法 時間複雜 O(log n) 空間複雜 O(1) +func SearchInsertBisection2(nums []int, target int) int { + left, right := 0, len(nums)-1 + for left <= right { + // / 防止溢出 同(left + right)/2 + mid := left + (right-left)>>1 + if nums[mid] >= target { + right = mid - 1 + } else { + left = mid + 1 + } + } + return left +} diff --git a/Leetcode/0035.Search-Insert-Position/Search-Insert-Position_test.go b/Leetcode/0035.Search-Insert-Position/Search-Insert-Position_test.go new file mode 100644 index 000000000..0c08cbcc4 --- /dev/null +++ b/Leetcode/0035.Search-Insert-Position/Search-Insert-Position_test.go @@ -0,0 +1,83 @@ +package searchinsertposition + +import "testing" + +var tests = []struct { + arg1 []int + arg2 int + want int +}{ + { + arg1: []int{1, 3, 5, 6}, + arg2: 5, + want: 2, + }, + { + arg1: []int{1, 3, 5, 6}, + arg2: 2, + want: 1, + }, + { + arg1: []int{1, 3, 5, 6}, + arg2: 7, + want: 4, + }, + { + arg1: []int{1, 3, 5, 6}, + arg2: 0, + want: 0, + }, +} + +func TestSearchInsertBurst(t *testing.T) { + for _, tt := range tests { + if got := SearchInsertBurst(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSearchInsertBisection(t *testing.T) { + for _, tt := range tests { + if got := SearchInsertBisection(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSearchInsertBisection2(t *testing.T) { + for _, tt := range tests { + if got := SearchInsertBisection2(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSearchInsertBurst(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SearchInsertBurst(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkSearchInsertBisection(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SearchInsertBisection(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkSearchInsertBisection2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SearchInsertBisection2(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0035.Search-Insert-Position -bench=. +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkSearchInsertBurst-8 742931880 1.891 ns/op 0 B/op 0 allocs/op +BenchmarkSearchInsertBisection-8 328495410 3.576 ns/op 0 B/op 0 allocs/op +BenchmarkSearchInsertBisection2-8 470675948 2.811 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0035.Search-Insert-Position/index.html b/Leetcode/0035.Search-Insert-Position/index.html new file mode 100644 index 000000000..dcab59d4e --- /dev/null +++ b/Leetcode/0035.Search-Insert-Position/index.html @@ -0,0 +1,3967 @@ + + + + + + + 0035.Search Insert Position · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                          +
                                                                                                                          + + + + + + + + +
                                                                                                                          + +
                                                                                                                          + +
                                                                                                                          + + + + + + + + +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          + +
                                                                                                                          + +

                                                                                                                          35. Search Insert Position

                                                                                                                          題目

                                                                                                                          +

                                                                                                                          Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.

                                                                                                                          +

                                                                                                                          You may assume no duplicates in the array.

                                                                                                                          +

                                                                                                                          Example 1:

                                                                                                                          +
                                                                                                                          Input: [1,3,5,6], 5
                                                                                                                          +Output: 2
                                                                                                                          +

                                                                                                                          Example 2:

                                                                                                                          +
                                                                                                                          Input: [1,3,5,6], 2
                                                                                                                          +Output: 1
                                                                                                                          +

                                                                                                                          Example 3:

                                                                                                                          +
                                                                                                                          Input: [1,3,5,6], 7
                                                                                                                          +Output: 4
                                                                                                                          +

                                                                                                                          Example 4:

                                                                                                                          +
                                                                                                                          Input: [1,3,5,6], 0
                                                                                                                          +Output: 0
                                                                                                                          +

                                                                                                                          題目大意

                                                                                                                          +

                                                                                                                          給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。

                                                                                                                          +

                                                                                                                          你可以假設數組中無重複元素。

                                                                                                                          +

                                                                                                                          解題思路

                                                                                                                          +
                                                                                                                            +
                                                                                                                          • 給出一個已經從小到大排序後的數組,要求在數組中找到插入 target 元素的位置。
                                                                                                                          • +
                                                                                                                          • 這一題是經典的二分搜索的變種題,在有序數組中找到最後一個比 target 小的元素。 +- 只要看到面試題裡給出的數組是有序數組,都可以想一想是否可以使用二分法
                                                                                                                          • +
                                                                                                                          +

                                                                                                                          來源

                                                                                                                          + +

                                                                                                                          解答

                                                                                                                          +

                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0035.Search-Insert-Position/Search-Insert-Position.go

                                                                                                                          +
                                                                                                                          package searchinsertposition
                                                                                                                          +
                                                                                                                          +// 暴力解 時間複雜  O(n) 空間複雜 O(1)
                                                                                                                          +func SearchInsertBurst(nums []int, target int) int {
                                                                                                                          +    for i := 0; i < len(nums); i++ {
                                                                                                                          +        if nums[i] >= target {
                                                                                                                          +            return i
                                                                                                                          +        }
                                                                                                                          +    }
                                                                                                                          +    return len(nums)
                                                                                                                          +}
                                                                                                                          +
                                                                                                                          +//二分法 時間複雜 O(log n) 空間複雜 O(1)
                                                                                                                          +func SearchInsertBisection(nums []int, target int) int {
                                                                                                                          +    left, right := 0, len(nums)-1
                                                                                                                          +    for left <= 2="" right="" {="" 防止溢出="" 同(left="" +="" right)="" mid="" :="left" (right-left)="">>1
                                                                                                                          +        if nums[mid] >= target {
                                                                                                                          +            right = mid - 1
                                                                                                                          +        } else if nums[mid] < target {
                                                                                                                          +            left = mid + 1
                                                                                                                          +        } else {
                                                                                                                          +            return mid
                                                                                                                          +        }
                                                                                                                          +    }
                                                                                                                          +    // 分別處理如下四種情況
                                                                                                                          +    // targe在所有元素之前 [0, -1]
                                                                                                                          +    // targe等於數組中某一個元素 return middle;
                                                                                                                          +    // targe在數組中的位置 [left, right],return right + 1
                                                                                                                          +    // targe在數組所有元素之後的情況 [left, right], return right + 1
                                                                                                                          +    return right + 1
                                                                                                                          +}
                                                                                                                          +
                                                                                                                          +//二分法 時間複雜 O(log n) 空間複雜 O(1)
                                                                                                                          +func SearchInsertBisection2(nums []int, target int) int {
                                                                                                                          +    left, right := 0, len(nums)-1
                                                                                                                          +    for left <= 2="" right="" {="" 防止溢出="" 同(left="" +="" right)="" mid="" :="left" (right-left)="">>1
                                                                                                                          +        if nums[mid] >= target {
                                                                                                                          +            right = mid - 1
                                                                                                                          +        } else {
                                                                                                                          +            left = mid + 1
                                                                                                                          +        }
                                                                                                                          +    }
                                                                                                                          +    return left
                                                                                                                          +}
                                                                                                                          +
                                                                                                                          +
                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                          + +
                                                                                                                          + +
                                                                                                                          +
                                                                                                                          +
                                                                                                                          + +

                                                                                                                          results matching ""

                                                                                                                          +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + +

                                                                                                                            No results matching ""

                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + + + + + + + + + + +
                                                                                                                            + + +
                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0046.Permutations/Permutations.go b/Leetcode/0046.Permutations/Permutations.go new file mode 100644 index 000000000..68cca64e2 --- /dev/null +++ b/Leetcode/0046.Permutations/Permutations.go @@ -0,0 +1,39 @@ +package permutations + +func Permute(nums []int) [][]int { + numsLen := len(nums) + if numsLen == 0 { + return [][]int{} + } + used, path, res := make([]bool, numsLen), []int{}, [][]int{} + dfs(nums, numsLen, 0, path, &used, &res) + return res +} + +/* +generatePermutation: (輸入數組, 數組長度, 遞迴到第幾層depth, path, 使用過的, 結果) +找最短路徑用**BFS**, 其他時用**DFS**用得多一些, 因為遞迴較好寫 +假設有棵滿的二叉樹,節點數為 N. 對DFS來說空間複雜度就是遞迴, 最壞的情況就是樹的高度 O(log N) +BFS算法, Queue每次都會存二叉樹一層的節點, 最壞的情況下空間複雜度應該就是樹的最下層的數量, 也就是 N/2. 空間複雜度 O(N) +DFS(深度優先搜索)通常使用堆棧(Stack)來實現。在DFS中,您首先處理一個節點,然後將其子節點按某種順序推入堆棧中,接著繼續處理堆棧頂部的節點,直到堆棧為空。 +*/ +func generatePermutation(nums []int, numsLen int, depth int, path []int, used *[]bool, res *[][]int) { + if depth == numsLen { + temp := make([]int, len(path)) + copy(temp, path) + *res = append(*res, temp) + return + } + + for i := 0; i < numsLen; i++ { + if !(*used)[i] { + // 沒使用過, 將其紀錄走過 + (*used)[i] = true + path = append(path, nums[i]) + generatePermutation(nums, numsLen, depth+1, path, used, res) + path = path[:len(path)-1] + // 回朔 + (*used)[i] = false + } + } +} diff --git a/Leetcode/0046.Permutations/Permutations_test.go b/Leetcode/0046.Permutations/Permutations_test.go new file mode 100644 index 000000000..370bf3356 --- /dev/null +++ b/Leetcode/0046.Permutations/Permutations_test.go @@ -0,0 +1,31 @@ +package permutations + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want [][]int +}{ + { + arg1: []int{1, 2, 3}, + want: [][]int{ + {1, 2, 3}, + {1, 3, 2}, + {2, 1, 3}, + {2, 3, 1}, + {3, 1, 2}, + {3, 2, 1}, + }, + }, +} + +func TestPermutations(t *testing.T) { + for _, tt := range tests { + if got := Permute(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Leetcode/0046.Permutations/index.html b/Leetcode/0046.Permutations/index.html new file mode 100644 index 000000000..b9a5e2614 --- /dev/null +++ b/Leetcode/0046.Permutations/index.html @@ -0,0 +1,3992 @@ + + + + + + + 0046.Permutations · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                            +
                                                                                                                            + + + + + + + + +
                                                                                                                            + +
                                                                                                                            + +
                                                                                                                            + + + + + + + + +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            + +
                                                                                                                            + +

                                                                                                                            46. Permutations

                                                                                                                            題目

                                                                                                                            +

                                                                                                                            Given a collection of distinct integers, return all possible permutations(排列). +Example: + Input: [1,2,3] + Output: + [ + [1,2,3], + [1,3,2], + [2,1,3], + [2,3,1], + [3,1,2], + [3,2,1] + ]

                                                                                                                            +

                                                                                                                            題目大意

                                                                                                                            +

                                                                                                                            給定一個沒有重複數字的序列,返回其所有可能的全排列。

                                                                                                                            +

                                                                                                                            解題思路

                                                                                                                            +

                                                                                                                            解決回朔問題可用一個決策樹的遍歷過程

                                                                                                                            +
                                                                                                                              +
                                                                                                                            1. 路徑: 也就是已經做的選擇
                                                                                                                            2. +
                                                                                                                            3. 選擇列表: 也就是當前可以做的選擇
                                                                                                                            4. +
                                                                                                                            5. 結束條件: 也就是達到決策樹底層, 無法再做選擇的條件
                                                                                                                            6. +
                                                                                                                            +
                                                                                                                            result = []
                                                                                                                            +def backtrack(路徑, 選擇列表):
                                                                                                                            +    if 滿足結束條件:
                                                                                                                            +        result.add(路徑)
                                                                                                                            +        return
                                                                                                                            +
                                                                                                                            +    for 選擇 in 選擇列表:
                                                                                                                            +        做選擇
                                                                                                                            +        backtrack(路徑, 選擇列表)
                                                                                                                            +        撤銷選擇
                                                                                                                            +
                                                                                                                            +
                                                                                                                                                   選擇:[1,2,3]
                                                                                                                            +                            []
                                                                                                                            +          [1]/              |[2]            \[3]
                                                                                                                            +        [2]/  \[3]      [1]/  \[3]       [1]/  \[2]
                                                                                                                            +        |[3]   |[2]     |[3]   |[1]      |[2]    |[1]   
                                                                                                                            +結果  [1,2,3]  [1,3,2] [2,1,3] [2,3,1]  [3,1,2]  [3,2,1]
                                                                                                                            +
                                                                                                                            +

                                                                                                                            +
                                                                                                                              +
                                                                                                                            • 求出一個數組的排列組合中的所有排列,用 DFS 深搜即可。 +這個問題可以看作有 ñ 個排列成一行的空格,我們需要從左往右依此填入題目給定的 ñ個數,每個數只能使用一次。 +那麼很直接的可以想到一種窮舉的算法,即從左往右每一個位置都依此嘗試填入一個數, +看能不能填完這ñ 個空格,在程序中我們可以用「回溯法」來模擬這個過程 +回溯法: +一種通過探索所有可能的候選解來找出所有的解的算法。如果候選解被確認不是一個解(或者至少不是最後一個解), +回溯算法會通過在上一步進行一些變化拋棄該解,即回溯並且再次嘗試。
                                                                                                                            • +
                                                                                                                            +

                                                                                                                            作者:LeetCode-Solution +链接:https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-by-leetcode-solution-2/ +来源:力扣(LeetCode) +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

                                                                                                                            +

                                                                                                                            來源

                                                                                                                            + +

                                                                                                                            解答

                                                                                                                            +

                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0046.Permutations/Permutations.go

                                                                                                                            +

                                                                                                                            時間複雜 O(n)

                                                                                                                            +
                                                                                                                            package permutations
                                                                                                                            +
                                                                                                                            +func Permute(nums []int) [][]int {
                                                                                                                            +    numsLen := len(nums)
                                                                                                                            +    if numsLen == 0 {
                                                                                                                            +        return [][]int{}
                                                                                                                            +    }
                                                                                                                            +    used, path, res := make([]bool, numsLen), []int{}, [][]int{}
                                                                                                                            +    dfs(nums, numsLen, 0, path, &used, &res)
                                                                                                                            +    return res
                                                                                                                            +}
                                                                                                                            +
                                                                                                                            +/*
                                                                                                                            +generatePermutation: (輸入數組, 數組長度, 遞迴到第幾層depth, path, 使用過的, 結果)
                                                                                                                            +找最短路徑用**BFS**, 其他時用**DFS**用得多一些, 因為遞迴較好寫
                                                                                                                            +假設有棵滿的二叉樹,節點數為 N. 對DFS來說空間複雜度就是遞迴, 最壞的情況就是樹的高度 O(log N)
                                                                                                                            +BFS算法, Queue每次都會存二叉樹一層的節點, 最壞的情況下空間複雜度應該就是樹的最下層的數量, 也就是 N/2. 空間複雜度 O(N)
                                                                                                                            +DFS(深度優先搜索)通常使用堆棧(Stack)來實現。在DFS中,您首先處理一個節點,然後將其子節點按某種順序推入堆棧中,接著繼續處理堆棧頂部的節點,直到堆棧為空。
                                                                                                                            +*/
                                                                                                                            +func generatePermutation(nums []int, numsLen int, depth int, path []int, used *[]bool, res *[][]int) {
                                                                                                                            +    if depth == numsLen {
                                                                                                                            +        temp := make([]int, len(path))
                                                                                                                            +        copy(temp, path)
                                                                                                                            +        *res = append(*res, temp)
                                                                                                                            +        return
                                                                                                                            +    }
                                                                                                                            +
                                                                                                                            +    for i := 0; i < numsLen; i++ {
                                                                                                                            +        if !(*used)[i] {
                                                                                                                            +            // 沒使用過, 將其紀錄走過
                                                                                                                            +            (*used)[i] = true
                                                                                                                            +            path = append(path, nums[i])
                                                                                                                            +            generatePermutation(nums, numsLen, depth+1, path, used, res)
                                                                                                                            +            path = path[:len(path)-1]
                                                                                                                            +            // 回朔
                                                                                                                            +            (*used)[i] = false
                                                                                                                            +        }
                                                                                                                            +    }
                                                                                                                            +}
                                                                                                                            +
                                                                                                                            +
                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                            + +
                                                                                                                            + +
                                                                                                                            +
                                                                                                                            +
                                                                                                                            + +

                                                                                                                            results matching ""

                                                                                                                            +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              + +

                                                                                                                              No results matching ""

                                                                                                                              + +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              + + + + + + + + + + +
                                                                                                                              + + +
                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0049.Group-Anagrams/index.html b/Leetcode/0049.Group-Anagrams/index.html new file mode 100644 index 000000000..d1f89d427 --- /dev/null +++ b/Leetcode/0049.Group-Anagrams/index.html @@ -0,0 +1,4065 @@ + + + + + + + 0049.Group Anagrams · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                              +
                                                                                                                              + + + + + + + + +
                                                                                                                              + +
                                                                                                                              + +
                                                                                                                              + + + + + + + + +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              + +
                                                                                                                              + +

                                                                                                                              0049.Grop Anagrams

                                                                                                                              題目

                                                                                                                              +

                                                                                                                              Given an array of strings strs, group the anagrams together. You can 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: strs = ["eat","tea","tan","ate","nat","bat"] +Output: [["bat"],["nat","tan"],["ate","eat","tea"]]

                                                                                                                              +

                                                                                                                              Example 2:

                                                                                                                              +

                                                                                                                              Input: strs = [""] +Output: [[""]]

                                                                                                                              +

                                                                                                                              Example 3:

                                                                                                                              +

                                                                                                                              Input: strs = ["a"] +Output: [["a"]]

                                                                                                                              +

                                                                                                                              Constraints:

                                                                                                                              +
                                                                                                                                +
                                                                                                                              • 1 <= strs.length <= 104
                                                                                                                              • +
                                                                                                                              • 0 <= strs[i].length <= 100
                                                                                                                              • +
                                                                                                                              • strs[i] consists of lowercase English letters.
                                                                                                                              • +
                                                                                                                              +

                                                                                                                              題目大意

                                                                                                                              +

                                                                                                                              分組出只用同樣字符產生的的單字

                                                                                                                              +

                                                                                                                              解題思路

                                                                                                                              +

                                                                                                                              方法一: 計數 +由於互為字母異位詞的兩個字串包含的字母相同,因此兩個字串中的相同字母出現的次數一定是相同的,故可以將每個字母出現的次數使用字串表示,作為哈希表的鍵。

                                                                                                                              +

                                                                                                                              方法二: 排序 +由於互為字母異位詞的兩個字串包含的字母相同,因此對兩個字串分別進行排序之後得到的字串一定是相同的,故可以將排序之後的字串作為哈希表的鍵。

                                                                                                                              +

                                                                                                                              來源

                                                                                                                              + +

                                                                                                                              解答

                                                                                                                              +

                                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0049.Group-Anagams/main.go

                                                                                                                              +
                                                                                                                              package groupanagrams
                                                                                                                              +
                                                                                                                              +import "sort"
                                                                                                                              +
                                                                                                                              +// 使用計數: 時間複雜 O(nk), 空間複雜 O(nk)
                                                                                                                              +// n 是單詞的個數 , k是單字的最大長度
                                                                                                                              +// O(n)遍歷單詞, 遍歷字符O(nk)
                                                                                                                              +func GroupAnagrams(strs []string) [][]string {
                                                                                                                              +    m := make(map[[26]int][]string, len(strs))
                                                                                                                              +
                                                                                                                              +    for _, str := range strs {
                                                                                                                              +        // 建立每一個string的特徵`count`, 藉由統計每個字母出現的次數
                                                                                                                              +        count := [26]int{}
                                                                                                                              +        for _, b := range str {
                                                                                                                              +            count[b-'a']++
                                                                                                                              +        }
                                                                                                                              +        // 將同樣的次數的string放置在 map中
                                                                                                                              +        m[count] = append(m[count], str)
                                                                                                                              +    }
                                                                                                                              +
                                                                                                                              +    // 把map中的string放入到結果的 `[][]string` array 中
                                                                                                                              +    ans := [][]string{}
                                                                                                                              +    for _, v := range m {
                                                                                                                              +        ans = append(ans, v)
                                                                                                                              +    }
                                                                                                                              +    return ans
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +// 排序: 時間複雜 O(nklog(k)), 空間複雜 O(klog(k))
                                                                                                                              +// n 是單詞的個數 , k是單字的最大長度
                                                                                                                              +// 遍歷單詞 O(n)
                                                                                                                              +// 排序字符 O(klog(k))
                                                                                                                              +func GroupAnagramsBySort(strs []string) [][]string {
                                                                                                                              +    m := make(map[string][]string, len(strs))
                                                                                                                              +
                                                                                                                              +    for _, str := range strs {
                                                                                                                              +        // 建立每一個string的特徵, 藉由統計排序
                                                                                                                              +        s := []byte(str)
                                                                                                                              +        sort.Slice(s, func(i, j int) bool { return s[i] < s[j] })
                                                                                                                              +        sortedStr := string(s)
                                                                                                                              +
                                                                                                                              +        // 將同樣的特徵的string放置在 map中
                                                                                                                              +        m[sortedStr] = append(m[sortedStr], str)
                                                                                                                              +    }
                                                                                                                              +
                                                                                                                              +    // 把map中的string放入到結果的 `[][]string` array 中
                                                                                                                              +    ans := [][]string{}
                                                                                                                              +    for _, v := range m {
                                                                                                                              +        ans = append(ans, v)
                                                                                                                              +    }
                                                                                                                              +    return ans
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +

                                                                                                                              Benchmark

                                                                                                                              +
                                                                                                                              go test -benchmem -run=none LeetcodeGolang/Leetcode/0049.Group-Anagrams -bench=.
                                                                                                                              +goos: darwin
                                                                                                                              +goarch: amd64
                                                                                                                              +pkg: LeetcodeGolang/Leetcode/0049.Group-Anagrams
                                                                                                                              +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                              +BenchmarkGroupAnagrams-8                  899431              1615 ns/op             968 B/op         12 allocs/op
                                                                                                                              +BenchmarkGroupAnagramsBySort-8            592148              3566 ns/op             776 B/op         33 allocs/op
                                                                                                                              +PASS
                                                                                                                              +ok      LeetcodeGolang/Leetcode/0049.Group-Anagrams     3.611s
                                                                                                                              +
                                                                                                                              +
                                                                                                                              package groupanagrams
                                                                                                                              +
                                                                                                                              +import (
                                                                                                                              +    "reflect"
                                                                                                                              +    "sort"
                                                                                                                              +    "testing"
                                                                                                                              +)
                                                                                                                              +
                                                                                                                              +var tests = []struct {
                                                                                                                              +    arg1 []string
                                                                                                                              +    want [][]string
                                                                                                                              +}{
                                                                                                                              +    {
                                                                                                                              +        []string{"eat", "tea", "tan", "ate", "nat", "bat"},
                                                                                                                              +        [][]string{
                                                                                                                              +            {"bat"}, {"nat", "tan"}, {"ate", "eat", "tea"}},
                                                                                                                              +    },
                                                                                                                              +    {
                                                                                                                              +        []string{},
                                                                                                                              +        [][]string{},
                                                                                                                              +    }, {
                                                                                                                              +        []string{"a"},
                                                                                                                              +        [][]string{
                                                                                                                              +            {"a"}},
                                                                                                                              +    },
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +// 創建一個輔助函數,將字符串數組排序,以便比較
                                                                                                                              +func sortSubStrings(groups [][]string) {
                                                                                                                              +    for _, group := range groups {
                                                                                                                              +        sort.Strings(group)
                                                                                                                              +    }
                                                                                                                              +    // 排序整個切片
                                                                                                                              +    sort.Slice(groups, func(i, j int) bool {
                                                                                                                              +        return groups[i][0] < groups[j][0]
                                                                                                                              +    })
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +func TestGroupAnagrams(t *testing.T) {
                                                                                                                              +    for _, tt := range tests {
                                                                                                                              +        result := GroupAnagrams(tt.arg1)
                                                                                                                              +        // 對結果進行排序,以便比較
                                                                                                                              +        sortSubStrings(result)
                                                                                                                              +
                                                                                                                              +        // 對期望結果進行排序,以便比較
                                                                                                                              +        sortSubStrings(tt.want)
                                                                                                                              +
                                                                                                                              +        // 使用反射檢查結果和期望是否相同
                                                                                                                              +        if !reflect.DeepEqual(result, tt.want) {
                                                                                                                              +            t.Errorf("got = %v, want = %v", result, tt.want)
                                                                                                                              +        }
                                                                                                                              +    }
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +func TestGroupAnagramsBySort(t *testing.T) {
                                                                                                                              +    for _, tt := range tests {
                                                                                                                              +        result := GroupAnagramsBySort(tt.arg1)
                                                                                                                              +        // 對結果進行排序,以便比較
                                                                                                                              +        sortSubStrings(result)
                                                                                                                              +
                                                                                                                              +        // 對期望結果進行排序,以便比較
                                                                                                                              +        sortSubStrings(tt.want)
                                                                                                                              +
                                                                                                                              +        // 使用反射檢查結果和期望是否相同
                                                                                                                              +        if !reflect.DeepEqual(result, tt.want) {
                                                                                                                              +            t.Errorf("got = %v, want = %v", result, tt.want)
                                                                                                                              +        }
                                                                                                                              +    }
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +func BenchmarkGroupAnagrams(b *testing.B) {
                                                                                                                              +    b.ResetTimer()
                                                                                                                              +    for i := 0; i < b.N; i++ {
                                                                                                                              +        GroupAnagrams(tests[0].arg1)
                                                                                                                              +    }
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +func BenchmarkGroupAnagramsBySort(b *testing.B) {
                                                                                                                              +    b.ResetTimer()
                                                                                                                              +    for i := 0; i < b.N; i++ {
                                                                                                                              +        GroupAnagramsBySort(tests[0].arg1)
                                                                                                                              +    }
                                                                                                                              +}
                                                                                                                              +
                                                                                                                              +
                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                              + +
                                                                                                                              + +
                                                                                                                              +
                                                                                                                              +
                                                                                                                              + +

                                                                                                                              results matching ""

                                                                                                                              +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + +

                                                                                                                                No results matching ""

                                                                                                                                + +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                + + + + + + +
                                                                                                                                + + +
                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0049.Group-Anagrams/main.go b/Leetcode/0049.Group-Anagrams/main.go new file mode 100644 index 000000000..e602fbe20 --- /dev/null +++ b/Leetcode/0049.Group-Anagrams/main.go @@ -0,0 +1,52 @@ +package groupanagrams + +import "sort" + +// 使用計數: 時間複雜 O(nk), 空間複雜 O(nk) +// n 是單詞的個數 , k是單字的最大長度 +// O(n)遍歷單詞, 遍歷字符O(nk) +func GroupAnagrams(strs []string) [][]string { + m := make(map[[26]int][]string, len(strs)) + + for _, str := range strs { + // 建立每一個string的特徵`count`, 藉由統計每個字母出現的次數 + count := [26]int{} + for _, b := range str { + count[b-'a']++ + } + // 將同樣的次數的string放置在 map中 + m[count] = append(m[count], str) + } + + // 把map中的string放入到結果的 `[][]string` array 中 + ans := [][]string{} + for _, v := range m { + ans = append(ans, v) + } + return ans +} + +// 排序: 時間複雜 O(nklog(k)), 空間複雜 O(klog(k)) +// n 是單詞的個數 , k是單字的最大長度 +// 遍歷單詞 O(n) +// 排序字符 O(klog(k)) +func GroupAnagramsBySort(strs []string) [][]string { + m := make(map[string][]string, len(strs)) + + for _, str := range strs { + // 建立每一個string的特徵, 藉由統計排序 + s := []byte(str) + sort.Slice(s, func(i, j int) bool { return s[i] < s[j] }) + sortedStr := string(s) + + // 將同樣的特徵的string放置在 map中 + m[sortedStr] = append(m[sortedStr], str) + } + + // 把map中的string放入到結果的 `[][]string` array 中 + ans := [][]string{} + for _, v := range m { + ans = append(ans, v) + } + return ans +} diff --git a/Leetcode/0049.Group-Anagrams/main_test.go b/Leetcode/0049.Group-Anagrams/main_test.go new file mode 100644 index 000000000..d226e303f --- /dev/null +++ b/Leetcode/0049.Group-Anagrams/main_test.go @@ -0,0 +1,95 @@ +package groupanagrams + +import ( + "reflect" + "sort" + "testing" +) + +var tests = []struct { + arg1 []string + want [][]string +}{ + { + []string{"eat", "tea", "tan", "ate", "nat", "bat"}, + [][]string{ + {"bat"}, {"nat", "tan"}, {"ate", "eat", "tea"}}, + }, + { + []string{}, + [][]string{}, + }, { + []string{"a"}, + [][]string{ + {"a"}}, + }, +} + +// 創建一個輔助函數,將字符串數組排序,以便比較 +func sortSubStrings(groups [][]string) { + for _, group := range groups { + sort.Strings(group) + } + // 排序整個切片 + sort.Slice(groups, func(i, j int) bool { + return groups[i][0] < groups[j][0] + }) +} + +func TestGroupAnagrams(t *testing.T) { + for _, tt := range tests { + result := GroupAnagrams(tt.arg1) + // 對結果進行排序,以便比較 + sortSubStrings(result) + + // 對期望結果進行排序,以便比較 + sortSubStrings(tt.want) + + // 使用反射檢查結果和期望是否相同 + if !reflect.DeepEqual(result, tt.want) { + t.Errorf("got = %v, want = %v", result, tt.want) + } + } +} + +func TestGroupAnagramsBySort(t *testing.T) { + for _, tt := range tests { + result := GroupAnagramsBySort(tt.arg1) + // 對結果進行排序,以便比較 + sortSubStrings(result) + + // 對期望結果進行排序,以便比較 + sortSubStrings(tt.want) + + // 使用反射檢查結果和期望是否相同 + if !reflect.DeepEqual(result, tt.want) { + t.Errorf("got = %v, want = %v", result, tt.want) + } + } +} + +func BenchmarkGroupAnagrams(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + GroupAnagrams(tests[0].arg1) + } +} + +func BenchmarkGroupAnagramsBySort(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + GroupAnagramsBySort(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0049.Group-Anagrams -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0049.Group-Anagrams +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkGroupAnagrams-8 899431 1615 ns/op 968 B/op 12 allocs/op +BenchmarkGroupAnagramsBySort-8 592148 3566 ns/op 776 B/op 33 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0049.Group-Anagrams 3.611s +*/ diff --git a/Leetcode/0053.Maximum-Subarray/Maximum-Subarray.go b/Leetcode/0053.Maximum-Subarray/Maximum-Subarray.go new file mode 100644 index 000000000..737df2757 --- /dev/null +++ b/Leetcode/0053.Maximum-Subarray/Maximum-Subarray.go @@ -0,0 +1,56 @@ +package maximumsubarray + +// MaxSubArrayDP : DP (dynamic programming) +func MaxSubArrayDP(nums []int) int { + if len(nums) == 0 { + return 0 + } + + if len(nums) == 1 { + return nums[0] + } + + dp, res := make([]int, len(nums)), nums[0] + dp[0] = nums[0] + + for i := 1; i < len(nums); i++ { + if dp[i-1] > 0 { + // 前一個和是正的 繼續加下去 + dp[i] = nums[i] + dp[i-1] + } else { + // 前一個和是小於等於0 直接拿現在值取代 + dp[i] = nums[i] + } + res = max(res, dp[i]) + } + return res +} + +// MaxSubArray1 : 模擬, 比DP快 +func MaxSubArray1(nums []int) int { + if len(nums) == 1 { + return nums[0] + } + + maxSum := 0 + tmp := 0 + for i := 0; i < len(nums); i++ { + tmp += nums[i] + if tmp > maxSum { + maxSum = tmp + } + if tmp < 0 { + tmp = 0 + } + } + return maxSum +} + +func max(a int, b int) int { + if a > b { + return a + } + return b +} + +//TODO: 分治法, 這個分治方法類似於「線段樹求解最長公共上升子序列問題」的pushUp操作 diff --git a/Leetcode/0053.Maximum-Subarray/Maximum-Subarray_test.go b/Leetcode/0053.Maximum-Subarray/Maximum-Subarray_test.go new file mode 100644 index 000000000..0f0c5cf31 --- /dev/null +++ b/Leetcode/0053.Maximum-Subarray/Maximum-Subarray_test.go @@ -0,0 +1,51 @@ +package maximumsubarray + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + arg1: []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}, + want: 6, + }, +} + +func TestMaxSubArrayDP(t *testing.T) { + for _, tt := range tests { + if got := MaxSubArrayDP(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMaxSubArray1(t *testing.T) { + + for _, tt := range tests { + if got := MaxSubArray1(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +var benchArg1 = []int{-2, 1, -3, 4, -1, 2, 1, -5, 4} + +func BenchmarkMaxSubArrayDP(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxSubArrayDP(benchArg1) + } +} +func BenchmarkMaxSubArray1(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxSubArray1(benchArg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0053.Maximum-Subarray -bench=. +BenchmarkMaxSubArrayDP-8 22077684 48.19 ns/op 80 B/op 1 allocs/op +BenchmarkMaxSubArray1-8 94770036 10.74 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0053.Maximum-Subarray/index.html b/Leetcode/0053.Maximum-Subarray/index.html new file mode 100644 index 000000000..c00cd8161 --- /dev/null +++ b/Leetcode/0053.Maximum-Subarray/index.html @@ -0,0 +1,3963 @@ + + + + + + + 0053.Maximum Subarray · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                +
                                                                                                                                + + + + + + + + +
                                                                                                                                + +
                                                                                                                                + +
                                                                                                                                + + + + + + + + +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                + +
                                                                                                                                + +

                                                                                                                                53. Maximum Subarray

                                                                                                                                題目

                                                                                                                                +

                                                                                                                                Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

                                                                                                                                +

                                                                                                                                Example: + Input: [-2,1,-3,4,-1,2,1,-5,4], + Output: 6 + Explanation: [4,-1,2,1] has the largest sum = 6.

                                                                                                                                +

                                                                                                                                Follow up: +If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

                                                                                                                                +

                                                                                                                                題目大意

                                                                                                                                +

                                                                                                                                給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

                                                                                                                                +

                                                                                                                                解題思路

                                                                                                                                +
                                                                                                                                  +
                                                                                                                                • 這一題可以用 DP 求解也可以不用 DP。
                                                                                                                                • +
                                                                                                                                • 題目要求輸出數組中某個區間內數字之和最大的那個值。 dp[i] 表示[0,i] 區間內各個子區間和的最大值,狀態轉移方程是dp[i] = nums[i] + dp[i-1] (dp[i- 1] > 0)dp[i] = nums[i] (dp[i-1] ≤ 0)
                                                                                                                                • +
                                                                                                                                +

                                                                                                                                來源

                                                                                                                                + +

                                                                                                                                解答

                                                                                                                                +

                                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0053.Maximum-Subarray/Maximum-Subarray.go

                                                                                                                                +
                                                                                                                                package maximumsubarray
                                                                                                                                +
                                                                                                                                +// MaxSubArrayDP : DP (dynamic programming)
                                                                                                                                +func MaxSubArrayDP(nums []int) int {
                                                                                                                                +    if len(nums) == 0 {
                                                                                                                                +        return 0
                                                                                                                                +    }
                                                                                                                                +
                                                                                                                                +    if len(nums) == 1 {
                                                                                                                                +        return nums[0]
                                                                                                                                +    }
                                                                                                                                +
                                                                                                                                +    dp, res := make([]int, len(nums)), nums[0]
                                                                                                                                +    dp[0] = nums[0]
                                                                                                                                +
                                                                                                                                +    for i := 1; i < len(nums); i++ {
                                                                                                                                +        if dp[i-1] > 0 {
                                                                                                                                +            // 前一個和是正的 繼續加下去
                                                                                                                                +            dp[i] = nums[i] + dp[i-1]
                                                                                                                                +        } else {
                                                                                                                                +            // 前一個和是小於等於0 直接拿現在值取代
                                                                                                                                +            dp[i] = nums[i]
                                                                                                                                +        }
                                                                                                                                +        res = max(res, dp[i])
                                                                                                                                +    }
                                                                                                                                +    return res
                                                                                                                                +}
                                                                                                                                +
                                                                                                                                +// MaxSubArray1 : 模擬, 比DP快
                                                                                                                                +func MaxSubArray1(nums []int) int {
                                                                                                                                +    if len(nums) == 1 {
                                                                                                                                +        return nums[0]
                                                                                                                                +    }
                                                                                                                                +
                                                                                                                                +    maxSum := 0
                                                                                                                                +    tmp := 0
                                                                                                                                +    for i := 0; i < len(nums); i++ {
                                                                                                                                +        tmp += nums[i]
                                                                                                                                +        if tmp > maxSum {
                                                                                                                                +            maxSum = tmp
                                                                                                                                +        }
                                                                                                                                +        if tmp < 0 {
                                                                                                                                +            tmp = 0
                                                                                                                                +        }
                                                                                                                                +    }
                                                                                                                                +    return maxSum
                                                                                                                                +}
                                                                                                                                +
                                                                                                                                +func max(a int, b int) int {
                                                                                                                                +    if a > b {
                                                                                                                                +        return a
                                                                                                                                +    }
                                                                                                                                +    return b
                                                                                                                                +}
                                                                                                                                +
                                                                                                                                +//TODO: 分治法, 這個分治方法類似於「線段樹求解最長公共上升子序列問題」的pushUp操作
                                                                                                                                +
                                                                                                                                +
                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                + +
                                                                                                                                + +
                                                                                                                                +
                                                                                                                                +
                                                                                                                                + +

                                                                                                                                results matching ""

                                                                                                                                +
                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  + +

                                                                                                                                  No results matching ""

                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  + +
                                                                                                                                  + + + + + + +
                                                                                                                                  + + +
                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II.go b/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II.go new file mode 100644 index 000000000..e52ea8f76 --- /dev/null +++ b/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II.go @@ -0,0 +1,75 @@ +package spiralmatrixii + +// GenerateMatrix : 按層模擬, 時間複雜 O(n^2) 空間複雜 O(1) +func GenerateMatrix(n int) [][]int { + result := make([][]int, n) + for i := range result { + result[i] = make([]int, n) + } + + left, right, top, botton := 0, n-1, 0, n-1 + num := 1 + target := n * n + + for num <= target { + // 上層 left to right, 上層邊界++ + for i := left; i <= right; i++ { + result[top][i] = num + num++ + } + top++ + + // 右層 top to botton , 右層邊界-- + for i := top; i <= botton; i++ { + result[i][right] = num + num++ + } + right-- + + // 下層 right to left , 下層邊界-- + for i := right; i >= left; i-- { + result[botton][i] = num + num++ + } + botton-- + + // 左層 botton to top, 左層邊界++ + for i := botton; i >= top; i-- { + result[i][left] = num + num++ + } + left++ + } + + return result +} + +// 模擬 : O(n) +// https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0059.Spiral-Matrix-II/ +func GenerateMatrix2(n int) [][]int { + if n == 0 { + return [][]int{} + } + if n == 1 { + return [][]int{{1}} + } + result, visit, round, x, y, spDir := make([][]int, n), make([][]int, n), 0, 0, 0, [][]int{ + {0, 1}, // 朝右 + {1, 0}, // 朝下 + {0, -1}, // 朝左 + {-1, 0}, // 朝上 + } + for i := 0; i < n; i++ { + visit[i] = make([]int, n) + result[i] = make([]int, n) + } + visit[x][y] = 1 + result[x][y] = 1 + + for i := 0; i < n*n; i++ { + x += spDir[round%4][0] + y += spDir[round%4][1] + } + + return result +} diff --git a/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II_test.go b/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II_test.go new file mode 100644 index 000000000..ffad304e9 --- /dev/null +++ b/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II_test.go @@ -0,0 +1,32 @@ +package spiralmatrixii + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + want [][]int +}{ + { + 2, + [][]int{{1, 2}, {4, 3}}, + }, + { + 3, + [][]int{{1, 2, 3}, {8, 9, 4}, {7, 6, 5}}, + }, + { + 4, + [][]int{{1, 2, 3, 4}, {12, 13, 14, 5}, {11, 16, 15, 6}, {10, 9, 8, 7}}, + }, +} + +func TestGenerateMatrix(t *testing.T) { + for _, tt := range tests { + if got := GenerateMatrix(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Leetcode/0059.Spiral-Matrix-II/index.html b/Leetcode/0059.Spiral-Matrix-II/index.html new file mode 100644 index 000000000..3fe7e9429 --- /dev/null +++ b/Leetcode/0059.Spiral-Matrix-II/index.html @@ -0,0 +1,3969 @@ + + + + + + + 0059.Spiral Matrix II · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                  +
                                                                                                                                  + + + + + + + + +
                                                                                                                                  + +
                                                                                                                                  + +
                                                                                                                                  + + + + + + + + +
                                                                                                                                  +
                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  + +
                                                                                                                                  + +

                                                                                                                                  59. Spiral Matrix II

                                                                                                                                  題目

                                                                                                                                  +

                                                                                                                                  Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

                                                                                                                                  +

                                                                                                                                  Example:

                                                                                                                                  +
                                                                                                                                  Input: 3
                                                                                                                                  +Output:
                                                                                                                                  +[
                                                                                                                                  + [ 1, 2, 3 ],
                                                                                                                                  + [ 8, 9, 4 ],
                                                                                                                                  + [ 7, 6, 5 ]
                                                                                                                                  +]
                                                                                                                                  +

                                                                                                                                  題目大意

                                                                                                                                  +

                                                                                                                                  給定一個正整數 n,生成一個包含 1 到 n^2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。

                                                                                                                                  +

                                                                                                                                  解題思路

                                                                                                                                  +
                                                                                                                                    +
                                                                                                                                  • 給出一個數組 n,要求輸出一個 n n 的二維數組,裡面元素是 1 - nn,且數組排列順序是螺旋排列的
                                                                                                                                  • +
                                                                                                                                  • 這一題是第 54 題的加強版,沒有需要注意的特殊情況,直接模擬即可。
                                                                                                                                  • +
                                                                                                                                  +

                                                                                                                                  來源

                                                                                                                                  + +

                                                                                                                                  解答

                                                                                                                                  +

                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II.go

                                                                                                                                  +
                                                                                                                                  package spiralmatrixii
                                                                                                                                  +
                                                                                                                                  +// GenerateMatrix : 按層模擬, 時間複雜 O(n^2) 空間複雜 O(1)
                                                                                                                                  +func GenerateMatrix(n int) [][]int {
                                                                                                                                  +    result := make([][]int, n)
                                                                                                                                  +    for i := range result {
                                                                                                                                  +        result[i] = make([]int, n)
                                                                                                                                  +    }
                                                                                                                                  +
                                                                                                                                  +    left, right, top, botton := 0, n-1, 0, n-1
                                                                                                                                  +    num := 1
                                                                                                                                  +    target := n * n
                                                                                                                                  +
                                                                                                                                  +    for num <= target="" {="" 上層="" left="" to="" right,="" 上層邊界++="" for="" i="" :="left;" <="right;" i++="" result[top][i]="num" num++="" }="" top++="" 右層="" top="" botton="" ,="" 右層邊界--="" result[i][right]="num" right--="" 下層="" right="" 下層邊界--="">= left; i-- {
                                                                                                                                  +            result[botton][i] = num
                                                                                                                                  +            num++
                                                                                                                                  +        }
                                                                                                                                  +        botton--
                                                                                                                                  +
                                                                                                                                  +        // 左層  botton to top, 左層邊界++
                                                                                                                                  +        for i := botton; i >= top; i-- {
                                                                                                                                  +            result[i][left] = num
                                                                                                                                  +            num++
                                                                                                                                  +        }
                                                                                                                                  +        left++
                                                                                                                                  +    }
                                                                                                                                  +
                                                                                                                                  +    return result
                                                                                                                                  +}
                                                                                                                                  +
                                                                                                                                  +// 模擬 : O(n)
                                                                                                                                  +// https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0059.Spiral-Matrix-II/
                                                                                                                                  +func GenerateMatrix2(n int) [][]int {
                                                                                                                                  +    if n == 0 {
                                                                                                                                  +        return [][]int{}
                                                                                                                                  +    }
                                                                                                                                  +    if n == 1 {
                                                                                                                                  +        return [][]int{{1}}
                                                                                                                                  +    }
                                                                                                                                  +    result, visit, round, x, y, spDir := make([][]int, n), make([][]int, n), 0, 0, 0, [][]int{
                                                                                                                                  +        {0, 1},  // 朝右
                                                                                                                                  +        {1, 0},  // 朝下
                                                                                                                                  +        {0, -1}, // 朝左
                                                                                                                                  +        {-1, 0}, // 朝上
                                                                                                                                  +    }
                                                                                                                                  +    for i := 0; i < n; i++ {
                                                                                                                                  +        visit[i] = make([]int, n)
                                                                                                                                  +        result[i] = make([]int, n)
                                                                                                                                  +    }
                                                                                                                                  +    visit[x][y] = 1
                                                                                                                                  +    result[x][y] = 1
                                                                                                                                  +
                                                                                                                                  +    for i := 0; i < n*n; i++ {
                                                                                                                                  +        x += spDir[round%4][0]
                                                                                                                                  +        y += spDir[round%4][1]
                                                                                                                                  +    }
                                                                                                                                  +
                                                                                                                                  +    return result
                                                                                                                                  +}
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                  + +
                                                                                                                                  + +
                                                                                                                                  +
                                                                                                                                  +
                                                                                                                                  + +

                                                                                                                                  results matching ""

                                                                                                                                  +
                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    + +

                                                                                                                                    No results matching ""

                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    + +
                                                                                                                                    + + + + + + +
                                                                                                                                    + + +
                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0070.Climbing-Stairs/index.html b/Leetcode/0070.Climbing-Stairs/index.html new file mode 100644 index 000000000..8ea133737 --- /dev/null +++ b/Leetcode/0070.Climbing-Stairs/index.html @@ -0,0 +1,3948 @@ + + + + + + + 0070.Climbing Stairs · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                    +
                                                                                                                                    + + + + + + + + +
                                                                                                                                    + +
                                                                                                                                    + +
                                                                                                                                    + + + + + + + + +
                                                                                                                                    +
                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    + +
                                                                                                                                    + +

                                                                                                                                    0070.Climbing Stairs

                                                                                                                                    題目

                                                                                                                                    +

                                                                                                                                    You are climbing a staircase. It takes n steps to reach the top.

                                                                                                                                    +

                                                                                                                                    Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

                                                                                                                                    +

                                                                                                                                    Example 1:

                                                                                                                                    +

                                                                                                                                    Input: n = 2 +Output: 2 +Explanation: There are two ways to climb to the top.

                                                                                                                                    +
                                                                                                                                      +
                                                                                                                                    1. 1 step + 1 step
                                                                                                                                    2. +
                                                                                                                                    3. 2 steps +Example 2:
                                                                                                                                    4. +
                                                                                                                                    +

                                                                                                                                    Input: n = 3 +Output: 3 +Explanation: There are three ways to climb to the top.

                                                                                                                                    +
                                                                                                                                      +
                                                                                                                                    1. 1 step + 1 step + 1 step
                                                                                                                                    2. +
                                                                                                                                    3. 1 step + 2 steps
                                                                                                                                    4. +
                                                                                                                                    5. 2 steps + 1 step
                                                                                                                                    6. +
                                                                                                                                    +

                                                                                                                                    Constraints:

                                                                                                                                    +

                                                                                                                                    1 <= n <= 45

                                                                                                                                    +
                                                                                                                                      +
                                                                                                                                    • Accepted: 2.8M
                                                                                                                                    • +
                                                                                                                                    • Submissions: 5.4M
                                                                                                                                    • +
                                                                                                                                    • Acceptance Rate: 52.3%
                                                                                                                                    • +
                                                                                                                                    +

                                                                                                                                    題目大意

                                                                                                                                    +

                                                                                                                                    類似 Fibonacci Number

                                                                                                                                    +

                                                                                                                                    解題思路

                                                                                                                                    +
                                                                                                                                      +
                                                                                                                                    • 簡單的 DP,經典的爬樓梯問題. 一個樓梯可以由 n-1 和 n-2 的樓梯爬上來。
                                                                                                                                    • +
                                                                                                                                    • 這一題求解的值就是斐波那契數列。
                                                                                                                                    • +
                                                                                                                                    +

                                                                                                                                    Big O

                                                                                                                                    +

                                                                                                                                    時間複雜 : 空間複雜 :

                                                                                                                                    +

                                                                                                                                    來源

                                                                                                                                    + +

                                                                                                                                    解答

                                                                                                                                    +

                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0070.Climbing-Stairs/main.go

                                                                                                                                    +
                                                                                                                                    
                                                                                                                                    +package climbingstairs
                                                                                                                                    +
                                                                                                                                    +// 時間複雜 O(n), 空間複雜 O(n)
                                                                                                                                    +func ClimbStairs(n int) int {
                                                                                                                                    +    dp := make([]int, n+1)
                                                                                                                                    +    dp[0], dp[1] = 1, 1
                                                                                                                                    +
                                                                                                                                    +    for i := 2; i 
                                                                                                                                    +

                                                                                                                                    Benchmark

                                                                                                                                    +
                                                                                                                                    goos: darwin
                                                                                                                                    +goarch: amd64
                                                                                                                                    +pkg: LeetcodeGolang/Leetcode/0070.Climbing-Stairs
                                                                                                                                    +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                    +BenchmarkClimbStairs-8                  10386211               112.1 ns/op           320 B/op          1 allocs/op
                                                                                                                                    +BenchmarkClimbStairsCache-8             10184984               118.8 ns/op           320 B/op          1 allocs/op
                                                                                                                                    +BenchmarkClimbStairsRecursive-8                4         281980486 ns/op             320 B/op          1 allocs/op
                                                                                                                                    +PASS
                                                                                                                                    +ok      LeetcodeGolang/Leetcode/0070.Climbing-Stairs    5.591s
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                    + +
                                                                                                                                    + +
                                                                                                                                    +
                                                                                                                                    +
                                                                                                                                    + +

                                                                                                                                    results matching ""

                                                                                                                                    +
                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      + +

                                                                                                                                      No results matching ""

                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      + +
                                                                                                                                      + + + + + + +
                                                                                                                                      + + +
                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0070.Climbing-Stairs/main.go b/Leetcode/0070.Climbing-Stairs/main.go new file mode 100644 index 000000000..d3b513bca --- /dev/null +++ b/Leetcode/0070.Climbing-Stairs/main.go @@ -0,0 +1,39 @@ +package climbingstairs + +// 時間複雜 O(n), 空間複雜 O(n) +func ClimbStairs(n int) int { + dp := make([]int, n+1) + dp[0], dp[1] = 1, 1 + + for i := 2; i <= n; i++ { + dp[i] = dp[i-1] + dp[i-2] + } + return dp[n] +} + +func ClimbStairsCache(n int) int { + dp := make([]int, n+1) + dp[0], dp[1] = 1, 1 + + for i := 2; i <= n; i++ { + if val := dp[i]; val == 0 { + dp[i] = dp[i-1] + dp[i-2] + } + } + return dp[n] +} + +func ClimbStairsRecursive(n int) int { + dp := make([]int, n+1) + // dp[0], dp[1] = 1, 1 + + var climbClosure func(n int) int + climbClosure = func(n int) int { + if n <= 2 { + return n + } + dp[n] = climbClosure(n-1) + climbClosure(n-2) + return dp[n] + } + return climbClosure(n) +} diff --git a/Leetcode/0070.Climbing-Stairs/main_test.go b/Leetcode/0070.Climbing-Stairs/main_test.go new file mode 100644 index 000000000..df556bc7e --- /dev/null +++ b/Leetcode/0070.Climbing-Stairs/main_test.go @@ -0,0 +1,82 @@ +package climbingstairs + +import "testing" + +var tests = []struct { + arg1 int + want int +}{ + { + 2, + 2, + }, + { + 3, + 3, + }, + { + 39, + 63245986, + }, +} + +func TestClimbStairs(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := ClimbStairs(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestClimbStairsCache(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := ClimbStairsCache(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestClimbStairsRecursive(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := ClimbStairsRecursive(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkClimbStairs(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ClimbStairs(tests[2].arg1) + } +} + +func BenchmarkClimbStairsCache(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ClimbStairsCache(tests[2].arg1) + } +} + +func BenchmarkClimbStairsRecursive(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ClimbStairsRecursive(tests[2].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0070.Climbing-Stairs -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0070.Climbing-Stairs +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkClimbStairs-8 10386211 112.1 ns/op 320 B/op 1 allocs/op +BenchmarkClimbStairsCache-8 10184984 118.8 ns/op 320 B/op 1 allocs/op +BenchmarkClimbStairsRecursive-8 4 281980486 ns/op 320 B/op 1 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0070.Climbing-Stairs 5.591s +*/ diff --git a/Leetcode/0072.Edit-Distance/index.html b/Leetcode/0072.Edit-Distance/index.html new file mode 100644 index 000000000..77f98e90b --- /dev/null +++ b/Leetcode/0072.Edit-Distance/index.html @@ -0,0 +1,4117 @@ + + + + + + + 0072. Edit Distance · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                      +
                                                                                                                                      + + + + + + + + +
                                                                                                                                      + +
                                                                                                                                      + +
                                                                                                                                      + + + + + + + + +
                                                                                                                                      +
                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      + +
                                                                                                                                      + +

                                                                                                                                      0072. Edit Distance

                                                                                                                                      题目

                                                                                                                                      +

                                                                                                                                      Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2.

                                                                                                                                      +

                                                                                                                                      You have the following three operations permitted on a word:

                                                                                                                                      +
                                                                                                                                        +
                                                                                                                                      • Insert a character
                                                                                                                                      • +
                                                                                                                                      • Delete a character
                                                                                                                                      • +
                                                                                                                                      • Replace a character
                                                                                                                                      • +
                                                                                                                                      +

                                                                                                                                      Example 1:

                                                                                                                                      +
                                                                                                                                      Input: word1 = "horse", word2 = "ros"
                                                                                                                                      +Output: 3
                                                                                                                                      +Explanation: 
                                                                                                                                      +horse -> rorse (replace 'h' with 'r')
                                                                                                                                      +rorse -> rose (remove 'r')
                                                                                                                                      +rose -> ros (remove 'e')
                                                                                                                                      +

                                                                                                                                      Example 2:

                                                                                                                                      +
                                                                                                                                      Input: word1 = "intention", word2 = "execution"
                                                                                                                                      +Output: 5
                                                                                                                                      +Explanation: 
                                                                                                                                      +intention -> inention (remove 't')
                                                                                                                                      +inention -> enention (replace 'i' with 'e')
                                                                                                                                      +enention -> exention (replace 'n' with 'x')
                                                                                                                                      +exention -> exection (replace 'n' with 'c')
                                                                                                                                      +exection -> execution (insert 'u')
                                                                                                                                      +

                                                                                                                                      Constraints:

                                                                                                                                      +
                                                                                                                                        +
                                                                                                                                      • 0 <= word1.length, word2.length <= 500
                                                                                                                                      • +
                                                                                                                                      • word1 and word2 consist of lowercase English letters.
                                                                                                                                      • +
                                                                                                                                      +

                                                                                                                                      題目大意

                                                                                                                                      +

                                                                                                                                      可以對一個字符串進行三種操作, 插入, 刪除, 替換 +現在給你兩個字符串word1,word2, 計算出word1轉換成word2最少需要多少次操作

                                                                                                                                      +

                                                                                                                                      解題思路

                                                                                                                                      +

                                                                                                                                      https://mp.weixin.qq.com/s/ShoZRjM8OyvDbZwoXh6ygg +解決兩個字符串的動態規劃問題, 一班都是用兩個指針 i, j 分別指向兩個字符串的最後, 然後一步步往前走, 縮小問題的規模

                                                                                                                                      +
                                                                                                                                      if word1[i] == word2[j]:
                                                                                                                                      +    skip
                                                                                                                                      +    i,j同時往前
                                                                                                                                      +else:
                                                                                                                                      +    # insert
                                                                                                                                      +    # delete
                                                                                                                                      +    # replace
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      dp = [
                                                                                                                                      +    [0,1,2,3,4,5],
                                                                                                                                      +    [1,1,2,2,3,4],
                                                                                                                                      +    [2,2,1,2,3,4],
                                                                                                                                      +    [3,3,2,2,2,3]
                                                                                                                                      +]
                                                                                                                                      +
                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                      word1 \ word2""horse
                                                                                                                                      ""012345
                                                                                                                                      r112234
                                                                                                                                      o221234
                                                                                                                                      s332223
                                                                                                                                      +

                                                                                                                                      dp(i,j) 返回值, 就是 word1[0..i] 和 word2[0..j]的最小編輯距離 +dp(1,0) "ro" , "h" 最小編輯距離 2

                                                                                                                                      + + + + + + + + + + + + + +
                                                                                                                                      dp[i-1][j-1]dp[i-1][j]
                                                                                                                                      dp[i][j-1]dp[i][j]
                                                                                                                                      + + + + + + + + + + + + +
                                                                                                                                      替換/跳過刪除
                                                                                                                                      插入
                                                                                                                                      +

                                                                                                                                      來源

                                                                                                                                      + +

                                                                                                                                      解答

                                                                                                                                      +

                                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0072.Edit-Distance/main.go

                                                                                                                                      +
                                                                                                                                      package editdistance
                                                                                                                                      +
                                                                                                                                      +import "fmt"
                                                                                                                                      +
                                                                                                                                      +// 遞迴 (暴力解)
                                                                                                                                      +func MinDistance(word1 string, word2 string) int {
                                                                                                                                      +    var dp func(int, int) int
                                                                                                                                      +    dp = func(i, j int) int {
                                                                                                                                      +        // base case
                                                                                                                                      +        if i == -1 {
                                                                                                                                      +            return j + 1
                                                                                                                                      +        }
                                                                                                                                      +        if j == -1 {
                                                                                                                                      +            return i + 1
                                                                                                                                      +        }
                                                                                                                                      +        if word1[i] == word2[j] {
                                                                                                                                      +            // word1[0..i] 和 word2[0..j]的最小編輯距離等於 word1[0..i-1] 和 word2[0..j-1]
                                                                                                                                      +            // 本來就相等所以不需要任何操作
                                                                                                                                      +            // 也就是說 dp(i,j)等於 dp(i-1,j-1)
                                                                                                                                      +            return dp(i-1, j-1)
                                                                                                                                      +        } else {
                                                                                                                                      +            return min(
                                                                                                                                      +                dp(i, j-1)+1,   // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1
                                                                                                                                      +                dp(i-1, j)+1,   // delete: 直接把 word1[i] 這個字符串刪除, 往前 i 繼續和 j 對比, 操作次數+1
                                                                                                                                      +                dp(i-1, j-1)+1, // replace: 直接把 word1[i] 替換成 word2[j], 這樣他們就匹配了, 同時往前 i, j 繼續對比, 操作次數+1
                                                                                                                                      +            )
                                                                                                                                      +        }
                                                                                                                                      +    }
                                                                                                                                      +
                                                                                                                                      +    return dp(len(word1)-1, len(word2)-1)
                                                                                                                                      +}
                                                                                                                                      +
                                                                                                                                      +// Memo優化
                                                                                                                                      +func MinDistanceMemo(word1 string, word2 string) int {
                                                                                                                                      +    var dp func(int, int) int
                                                                                                                                      +    memo := map[string]int{}
                                                                                                                                      +    dp = func(i, j int) int {
                                                                                                                                      +        key := fmt.Sprintf("%d,%d", i, j)
                                                                                                                                      +        // 查詢備忘錄 避免重複
                                                                                                                                      +        if _, ok := memo[key]; ok == true {
                                                                                                                                      +            return memo[key]
                                                                                                                                      +        }
                                                                                                                                      +
                                                                                                                                      +        // base case
                                                                                                                                      +        if i == -1 {
                                                                                                                                      +            return j + 1
                                                                                                                                      +        }
                                                                                                                                      +        if j == -1 {
                                                                                                                                      +            return i + 1
                                                                                                                                      +        }
                                                                                                                                      +        if word1[i] == word2[j] {
                                                                                                                                      +            // word1[0..i] 和 word2[0..j]的最小編輯距離等於 word1[0..i-1] 和 word2[0..j-1]
                                                                                                                                      +            // 本來就相等所以不需要任何操作
                                                                                                                                      +            // 也就是說 dp(i,j)等於 dp(i-1,j-1)
                                                                                                                                      +            memo[key] = dp(i-1, j-1)
                                                                                                                                      +        } else {
                                                                                                                                      +            memo[key] = min(
                                                                                                                                      +                dp(i, j-1)+1,   // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1
                                                                                                                                      +                dp(i-1, j)+1,   // delete: 直接把 word1[i] 這個字符串刪除, 往前 i 繼續和 j 對比, 操作次數+1
                                                                                                                                      +                dp(i-1, j-1)+1, // replace: 直接把 word1[i] 替換成 word2[j], 這樣他們就匹配了, 同時往前 i, j 繼續對比, 操作次數+1
                                                                                                                                      +            )
                                                                                                                                      +        }
                                                                                                                                      +        return memo[key]
                                                                                                                                      +    }
                                                                                                                                      +
                                                                                                                                      +    return dp(len(word1)-1, len(word2)-1)
                                                                                                                                      +}
                                                                                                                                      +
                                                                                                                                      +// DP table 優化, DP table 是自底向上求解, 遞迴是自頂向下求解
                                                                                                                                      +func MinDistanceDP(word1 string, word2 string) int {
                                                                                                                                      +    m, n := len(word1), len(word2)
                                                                                                                                      +    // 初始化  dp table : [][]int{}
                                                                                                                                      +    dp := make([][]int, m+1)
                                                                                                                                      +    for i := 0; i < m+1; i++ {
                                                                                                                                      +        dp[i] = make([]int, n+1)
                                                                                                                                      +    }
                                                                                                                                      +
                                                                                                                                      +    // base case
                                                                                                                                      +    for i := 1; i <= m;="" i++="" {="" dp[i][0]="i" }="" for="" j="" :="1;" <="n;" j++="" dp[0][j]="j" 向上求解="" i="" if="" word1[i-1]="=" word2[j-1]="" dp[i][j]="dp[i-1][j-1]" else="" dp[i][j-1]+1,="" insert="" dp[i-1][j]+1,="" delete="" dp[i-1][j-1]+1,="" replace="" )="" return="" dp[m][n]="" type="" number="" interface="" int="" |="" int64="" float64="" func="" min[t="" number](vars="" ...t)="" t="" min="" _,="" vars=""> i {
                                                                                                                                      +            min = i
                                                                                                                                      +        }
                                                                                                                                      +    }
                                                                                                                                      +
                                                                                                                                      +    return min
                                                                                                                                      +}
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      go test -benchmem -run=none LeetcodeGolang/Leetcode/0072.Edit-Distance -bench=.
                                                                                                                                      +goos: darwin
                                                                                                                                      +goarch: amd64
                                                                                                                                      +pkg: LeetcodeGolang/Leetcode/0072.Edit-Distance
                                                                                                                                      +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                      +BenchmarkMinDistance-8            398260              3748 ns/op               0 B/op          0 allocs/op
                                                                                                                                      +BenchmarkMinDistanceMemo-8        102272             10796 ns/op            2211 B/op         69 allocs/op
                                                                                                                                      +BenchmarkMinDistanceDP-8         1944886               794.2 ns/op           688 B/op          9 allocs/op
                                                                                                                                      +PASS
                                                                                                                                      +ok      LeetcodeGolang/Leetcode/0072.Edit-Distance      5.717s
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                      + +
                                                                                                                                      + +
                                                                                                                                      +
                                                                                                                                      +
                                                                                                                                      + +

                                                                                                                                      results matching ""

                                                                                                                                      +
                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        + +

                                                                                                                                        No results matching ""

                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        + +
                                                                                                                                        + + + + + + +
                                                                                                                                        + + +
                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0072.Edit-Distance/main.go b/Leetcode/0072.Edit-Distance/main.go new file mode 100644 index 000000000..8588faa4f --- /dev/null +++ b/Leetcode/0072.Edit-Distance/main.go @@ -0,0 +1,117 @@ +package editdistance + +import "fmt" + +// 遞迴 (暴力解) +func MinDistance(word1 string, word2 string) int { + var dp func(int, int) int + dp = func(i, j int) int { + // base case + if i == -1 { + return j + 1 + } + if j == -1 { + return i + 1 + } + if word1[i] == word2[j] { + // word1[0..i] 和 word2[0..j]的最小編輯距離等於 word1[0..i-1] 和 word2[0..j-1] + // 本來就相等所以不需要任何操作 + // 也就是說 dp(i,j)等於 dp(i-1,j-1) + return dp(i-1, j-1) + } else { + return min( + dp(i, j-1)+1, // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1 + dp(i-1, j)+1, // delete: 直接把 word1[i] 這個字符串刪除, 往前 i 繼續和 j 對比, 操作次數+1 + dp(i-1, j-1)+1, // replace: 直接把 word1[i] 替換成 word2[j], 這樣他們就匹配了, 同時往前 i, j 繼續對比, 操作次數+1 + ) + } + } + + return dp(len(word1)-1, len(word2)-1) +} + +// Memo優化 +func MinDistanceMemo(word1 string, word2 string) int { + var dp func(int, int) int + memo := map[string]int{} + dp = func(i, j int) int { + key := fmt.Sprintf("%d,%d", i, j) + // 查詢備忘錄 避免重複 + if _, ok := memo[key]; ok == true { + return memo[key] + } + + // base case + if i == -1 { + return j + 1 + } + if j == -1 { + return i + 1 + } + if word1[i] == word2[j] { + // word1[0..i] 和 word2[0..j]的最小編輯距離等於 word1[0..i-1] 和 word2[0..j-1] + // 本來就相等所以不需要任何操作 + // 也就是說 dp(i,j)等於 dp(i-1,j-1) + memo[key] = dp(i-1, j-1) + } else { + memo[key] = min( + dp(i, j-1)+1, // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1 + dp(i-1, j)+1, // delete: 直接把 word1[i] 這個字符串刪除, 往前 i 繼續和 j 對比, 操作次數+1 + dp(i-1, j-1)+1, // replace: 直接把 word1[i] 替換成 word2[j], 這樣他們就匹配了, 同時往前 i, j 繼續對比, 操作次數+1 + ) + } + return memo[key] + } + + return dp(len(word1)-1, len(word2)-1) +} + +// DP table 優化, DP table 是自底向上求解, 遞迴是自頂向下求解 +func MinDistanceDP(word1 string, word2 string) int { + m, n := len(word1), len(word2) + // 初始化 dp table : [][]int{} + dp := make([][]int, m+1) + for i := 0; i < m+1; i++ { + dp[i] = make([]int, n+1) + } + + // base case + for i := 1; i <= m; i++ { + dp[i][0] = i + } + for j := 1; j <= n; j++ { + dp[0][j] = j + } + + // 向上求解 + for i := 1; i <= m; i++ { + for j := 1; j <= n; j++ { + if word1[i-1] == word2[j-1] { + dp[i][j] = dp[i-1][j-1] + } else { + dp[i][j] = min( + dp[i][j-1]+1, // insert + dp[i-1][j]+1, // delete + dp[i-1][j-1]+1, // replace + ) + } + } + } + return dp[m][n] +} + +type Number interface { + int | int64 | float64 +} + +func min[T Number](vars ...T) T { + min := vars[0] + + for _, i := range vars { + if min > i { + min = i + } + } + + return min +} diff --git a/Leetcode/0072.Edit-Distance/main_test.go b/Leetcode/0072.Edit-Distance/main_test.go new file mode 100644 index 000000000..378c1821c --- /dev/null +++ b/Leetcode/0072.Edit-Distance/main_test.go @@ -0,0 +1,78 @@ +package editdistance + +import "testing" + +var tests = []struct { + arg1 string + arg2 string + want int +}{ + { + "horse", + "ros", + 3, + }, + { + "intention", + "execution", + 5, + }, +} + +func TestMinDistance(t *testing.T) { + for _, tt := range tests { + if got := MinDistance(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMinDistanceMemo(t *testing.T) { + for _, tt := range tests { + if got := MinDistanceMemo(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMinDistanceDP(t *testing.T) { + for _, tt := range tests { + if got := MinDistanceDP(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkMinDistance(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinDistance(tests[i%2].arg1, tests[i%2].arg2) + } +} + +func BenchmarkMinDistanceMemo(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinDistanceMemo(tests[i%2].arg1, tests[i%2].arg2) + } +} + +func BenchmarkMinDistanceDP(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinDistanceDP(tests[i%2].arg1, tests[i%2].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0072.Edit-Distance -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0072.Edit-Distance +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkMinDistance-8 398260 3748 ns/op 0 B/op 0 allocs/op +BenchmarkMinDistanceMemo-8 102272 10796 ns/op 2211 B/op 69 allocs/op +BenchmarkMinDistanceDP-8 1944886 794.2 ns/op 688 B/op 9 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0072.Edit-Distance 5.717s +*/ diff --git a/Leetcode/0074.Search-a-2D-Matrix/index.html b/Leetcode/0074.Search-a-2D-Matrix/index.html new file mode 100644 index 000000000..5475a43d7 --- /dev/null +++ b/Leetcode/0074.Search-a-2D-Matrix/index.html @@ -0,0 +1,3934 @@ + + + + + + + 74. Search a 2D Matrix · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                        +
                                                                                                                                        + + + + + + + + +
                                                                                                                                        + +
                                                                                                                                        + +
                                                                                                                                        + + + + + + + + +
                                                                                                                                        +
                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        + +
                                                                                                                                        + +

                                                                                                                                        74. Search a 2D Matrix

                                                                                                                                        題目

                                                                                                                                        +

                                                                                                                                        題目大意

                                                                                                                                        +

                                                                                                                                        編寫一個高效的演算法來判斷 m x n 矩陣中,是否存在一個目標值。 該矩陣具有如下特性:

                                                                                                                                        +
                                                                                                                                          +
                                                                                                                                        • 每行中的整數從左到右按升序排列。
                                                                                                                                        • +
                                                                                                                                        • 每行的第一个整数大于前一行的最后一个整数。
                                                                                                                                        • +
                                                                                                                                        +

                                                                                                                                        解題思路

                                                                                                                                        +

                                                                                                                                        可以將二維轉成一維矩陣

                                                                                                                                        +

                                                                                                                                        Big O

                                                                                                                                        +
                                                                                                                                          +
                                                                                                                                        • 時間複雜 : O(log⁡mn) 其中 m 和 n 分別是矩陣的行數和列數
                                                                                                                                        • +
                                                                                                                                        • 空間複雜 : O(1)
                                                                                                                                        • +
                                                                                                                                        +

                                                                                                                                        來源

                                                                                                                                        + +

                                                                                                                                        解答

                                                                                                                                        +

                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0074.Search-a-2D-Matrix/main.go

                                                                                                                                        +
                                                                                                                                        package searcha2dmatrix
                                                                                                                                        +
                                                                                                                                        +// 時間複雜 O(logmn), 空間複雜 O(1)
                                                                                                                                        +func searchMatrix(matrix [][]int, target int) bool {
                                                                                                                                        +    m := len(matrix)
                                                                                                                                        +    if m <= 0="" {="" return="" false="" }="" n="" :="len(matrix[0])" left,="" right="" m*n-1="" for="" left="" <="right" mid="">> 1) //left + (right-left)/2
                                                                                                                                        +        val := getMatrix(matrix, mid)
                                                                                                                                        +        if val == target {
                                                                                                                                        +            return true
                                                                                                                                        +        } else if val < target {
                                                                                                                                        +            left = mid + 1
                                                                                                                                        +        } else {
                                                                                                                                        +            right = mid - 1
                                                                                                                                        +        }
                                                                                                                                        +    }
                                                                                                                                        +    return false
                                                                                                                                        +}
                                                                                                                                        +
                                                                                                                                        +// 將 mxn的二維陣列 映射成一維陣列
                                                                                                                                        +func getMatrix(matrix [][]int, index int) int {
                                                                                                                                        +    n := len(matrix[0])
                                                                                                                                        +    i, j := index/n, index%n
                                                                                                                                        +    return matrix[i][j]
                                                                                                                                        +}
                                                                                                                                        +
                                                                                                                                        +

                                                                                                                                        Benchmark

                                                                                                                                        +
                                                                                                                                        
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                        + +
                                                                                                                                        + +
                                                                                                                                        +
                                                                                                                                        +
                                                                                                                                        + +

                                                                                                                                        results matching ""

                                                                                                                                        +
                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          + +

                                                                                                                                          No results matching ""

                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          + +
                                                                                                                                          + + + + + + +
                                                                                                                                          + + +
                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0074.Search-a-2D-Matrix/main.go b/Leetcode/0074.Search-a-2D-Matrix/main.go new file mode 100644 index 000000000..2654384f7 --- /dev/null +++ b/Leetcode/0074.Search-a-2D-Matrix/main.go @@ -0,0 +1,31 @@ +package searcha2dmatrix + +// 時間複雜 O(logmn), 空間複雜 O(1) +func searchMatrix(matrix [][]int, target int) bool { + m := len(matrix) + if m <= 0 { + return false + } + n := len(matrix[0]) + + left, right := 0, m*n-1 + for left <= right { + mid := int(uint(right+left) >> 1) //left + (right-left)/2 + val := getMatrix(matrix, mid) + if val == target { + return true + } else if val < target { + left = mid + 1 + } else { + right = mid - 1 + } + } + return false +} + +// 將 mxn的二維陣列 映射成一維陣列 +func getMatrix(matrix [][]int, index int) int { + n := len(matrix[0]) + i, j := index/n, index%n + return matrix[i][j] +} diff --git a/Leetcode/0074.Search-a-2D-Matrix/main_test.go b/Leetcode/0074.Search-a-2D-Matrix/main_test.go new file mode 100644 index 000000000..ec552aa78 --- /dev/null +++ b/Leetcode/0074.Search-a-2D-Matrix/main_test.go @@ -0,0 +1,47 @@ +package searcha2dmatrix + +import "testing" + +var tests = []struct { + matrix [][]int + target int + want bool +}{ + { + [][]int{ + {1, 3, 5, 7}, + {10, 11, 16, 20}, + {23, 30, 34, 60}, + }, + 3, + true, + }, + { + [][]int{ + {1, 3, 5, 7}, + {10, 11, 16, 20}, + {23, 30, 34, 60}, + }, + 13, + false, + }, + { + [][]int{}, + 5, + false, + }, +} + +func TestSearchMatrix(t *testing.T) { + for _, tt := range tests { + if got := searchMatrix(tt.matrix, tt.target); got != tt.want { + t.Errorf("searchMatrix(%v, %v) = %v, want %v", tt.matrix, tt.target, got, tt.want) + } + } +} + +func BenchmarkSearchMatrix(b *testing.B) { + for i := 0; i < b.N; i++ { + searchMatrix(tests[0].matrix, tests[0].target) + } +} diff --git a/Leetcode/0075.Sort-Colors/0075.Sort-Colors.go b/Leetcode/0075.Sort-Colors/0075.Sort-Colors.go new file mode 100644 index 000000000..31ca4f4ab --- /dev/null +++ b/Leetcode/0075.Sort-Colors/0075.Sort-Colors.go @@ -0,0 +1,73 @@ +package sortcolors + +func sortColors(nums []int) { + if len(nums) == 0 { + return + } + + var index0, index1, index2 = 0, 0, 0 + for _, num := range nums { + switch num { + case 0: + nums[index2] = 2 + index2++ + nums[index1] = 1 + index1++ + nums[index0] = 0 + index0++ + case 1: + nums[index2] = 2 + index2++ + nums[index1] = 1 + index1++ + case 2: + index2++ + } + } +} + +/* +二路快排與三路快排 +先掌握二路快排, https://leetcode-cn.com/problems/sort-an-array/solution/golang-er-lu-kuai-pai-by-rqb-2/ +三路快排稍微改下即可 + +區別: +二路快排,分兩部分:小於等於、大於二部分。 +三路快排分為,小於、等於、大於三部分。 + +三路快排: +相比二路快排增加一個變量記錄相等的起始元素。 +假設選擇數組第一個元素作為參考元素。則起始下邊為0,即為equalHead + +作者:hibrq +链接:https://leetcode-cn.com/problems/sort-an-array/solution/golang-san-lu-kuai-pai-by-rqb-2/ +来源:力扣(LeetCode) +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 +*/ +func sortColorsQuickSort(nums []int) { + if len(nums) < 2 { + return + } + + pivot := nums[0] + + head, tail := 0, len(nums)-1 + i := 1 + equalHead := 0 + for head < tail { + if nums[i] < pivot { + nums[i], nums[equalHead] = nums[equalHead], nums[i] + head++ + i++ + equalHead++ + } else if nums[i] == pivot { + i++ + head++ + } else { + nums[i], nums[tail] = nums[tail], nums[i] + tail-- + } + } + sortColorsQuickSort(nums[:equalHead]) + sortColorsQuickSort(nums[tail+1:]) +} diff --git a/Leetcode/0075.Sort-Colors/0075.Sort-Colors_test.go b/Leetcode/0075.Sort-Colors/0075.Sort-Colors_test.go new file mode 100644 index 000000000..65d0bc307 --- /dev/null +++ b/Leetcode/0075.Sort-Colors/0075.Sort-Colors_test.go @@ -0,0 +1,70 @@ +package sortcolors + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want []int +}{ + { + []int{2, 0, 2, 1, 1, 0}, + []int{0, 0, 1, 1, 2, 2}, + }, + { + []int{2, 0, 1}, + []int{0, 1, 2}, + }, + { + []int{0}, + []int{0}, + }, + { + []int{1}, + []int{1}, + }, +} + +func TestSortColors(t *testing.T) { + + for _, tt := range tests { + sortColors(tt.arg1) + if !reflect.DeepEqual(tt.arg1, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } +} + +func TestSortColorsQuickSort(t *testing.T) { + + for _, tt := range tests { + sortColorsQuickSort(tt.arg1) + if !reflect.DeepEqual(tt.arg1, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } +} + +func BenchmarkSortColors(b *testing.B) { + arg1 := []int{2, 7, 11, 15} + b.ResetTimer() + for i := 0; i < b.N; i++ { + sortColors(arg1) + } +} + +func BenchmarkSortColorsQuickSort(b *testing.B) { + arg1 := []int{2, 7, 11, 15} + b.ResetTimer() + for i := 0; i < b.N; i++ { + sortColorsQuickSort(arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0075.Sort-Colors -bench=. +BenchmarkSortColors-8 157253976 8.111 ns/op 0 B/op 0 allocs/op +BenchmarkSortColorsQuickSort-8 63078445 20.91 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0075.Sort-Colors/index.html b/Leetcode/0075.Sort-Colors/index.html new file mode 100644 index 000000000..b0c96dd5d --- /dev/null +++ b/Leetcode/0075.Sort-Colors/index.html @@ -0,0 +1,4012 @@ + + + + + + + 0075.Sort Colors · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                          +
                                                                                                                                          + + + + + + + + +
                                                                                                                                          + +
                                                                                                                                          + +
                                                                                                                                          + + + + + + + + +
                                                                                                                                          +
                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          + +
                                                                                                                                          + +

                                                                                                                                          75. Sort Colors

                                                                                                                                          题目

                                                                                                                                          +

                                                                                                                                          Given an array with n objects colored red, white or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white and blue.

                                                                                                                                          +

                                                                                                                                          Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

                                                                                                                                          +

                                                                                                                                          Note: You are not suppose to use the library's sort function for this problem.

                                                                                                                                          +

                                                                                                                                          Example 1:

                                                                                                                                          +
                                                                                                                                          Input: [2,0,2,1,1,0]
                                                                                                                                          +Output: [0,0,1,1,2,2]
                                                                                                                                          +

                                                                                                                                          Follow up:

                                                                                                                                          +
                                                                                                                                            +
                                                                                                                                          • A rather straight forward solution is a two-pass algorithm using counting sort.
                                                                                                                                            First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's.
                                                                                                                                          • +
                                                                                                                                          • Could you come up with a one-pass algorithm using only constant space?
                                                                                                                                          • +
                                                                                                                                          +
                                                                                                                                          +

                                                                                                                                          給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。

                                                                                                                                          +

                                                                                                                                          此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。

                                                                                                                                          +

                                                                                                                                          範例 1:

                                                                                                                                          +
                                                                                                                                          輸入:nums = [2,0,2,1,1,0]
                                                                                                                                          +輸出:[0,0,1,1,2,2]
                                                                                                                                          +

                                                                                                                                          範例 2:

                                                                                                                                          +
                                                                                                                                          輸入:nums = [2,0,1]
                                                                                                                                          +輸出:[0,1,2]
                                                                                                                                          +

                                                                                                                                          範例 3:

                                                                                                                                          +
                                                                                                                                          輸入:nums = [0]
                                                                                                                                          +輸出:[0]
                                                                                                                                          +

                                                                                                                                          範例 4:

                                                                                                                                          +
                                                                                                                                          輸入:nums = [1]
                                                                                                                                          +輸出:[1]
                                                                                                                                          +

                                                                                                                                          提示:

                                                                                                                                          +
                                                                                                                                            +
                                                                                                                                          • n == nums.length
                                                                                                                                          • +
                                                                                                                                          • 1 <= n <= 300
                                                                                                                                          • +
                                                                                                                                          • nums[i] 為 0、1 或 2
                                                                                                                                          • +
                                                                                                                                          +

                                                                                                                                          進階:

                                                                                                                                          +
                                                                                                                                            +
                                                                                                                                          • 你可以不使用代碼庫中的排序函數來解決這道題嗎?
                                                                                                                                          • +
                                                                                                                                          • 你能想出一個僅使用常數空間的一趟掃描算法嗎?
                                                                                                                                          • +
                                                                                                                                          +

                                                                                                                                          來源:力扣(LeetCode) +鏈接:https://leetcode-cn.com/problems/sort-colors +著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

                                                                                                                                          +

                                                                                                                                          題目大意

                                                                                                                                          +

                                                                                                                                          抽象題意其實就是排序。這題可以用快排一次通過。

                                                                                                                                          +

                                                                                                                                          解題思路

                                                                                                                                          +

                                                                                                                                          題目末尾的 Follow up 提出了一個更高的要求,能否用一次循環解決問題?這題由於數字只會出現 0,1,2 這三個數字,所以用游標移動來控制順序也是可以的。具體做法:0 是排在最前面的,所以只要添加一個 0,就需要放置 1 和 2。1 排在 2 前面,所以添加 1 的時候也需要放置 2 。至於最後的 2,只用移動游標即可。

                                                                                                                                          +

                                                                                                                                          這道題可以用計數排序,適合待排序數字很少的題目。用一個 3 個容量的數組分別計數,記錄 0,1,2 出現的個數。然後再根據個數排列 0,1,2 即可。時間複雜度 O(n),空間複雜度 O(K)。這一題 K = 3。

                                                                                                                                          +

                                                                                                                                          這道題也可以用一次三路快排。數組分為 3 部分,第一個部分都是 0,中間部分都是 1,最後部分都是 2 。

                                                                                                                                          +

                                                                                                                                          來源

                                                                                                                                          + +

                                                                                                                                          解答

                                                                                                                                          +

                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0075.Sort-Colors/0075.Sort-Colors.go

                                                                                                                                          +
                                                                                                                                          package sortcolors
                                                                                                                                          +
                                                                                                                                          +func sortColors(nums []int) {
                                                                                                                                          +    if len(nums) == 0 {
                                                                                                                                          +        return
                                                                                                                                          +    }
                                                                                                                                          +
                                                                                                                                          +    var index0, index1, index2 = 0, 0, 0
                                                                                                                                          +    for _, num := range nums {
                                                                                                                                          +        switch num {
                                                                                                                                          +        case 0:
                                                                                                                                          +            nums[index2] = 2
                                                                                                                                          +            index2++
                                                                                                                                          +            nums[index1] = 1
                                                                                                                                          +            index1++
                                                                                                                                          +            nums[index0] = 0
                                                                                                                                          +            index0++
                                                                                                                                          +        case 1:
                                                                                                                                          +            nums[index2] = 2
                                                                                                                                          +            index2++
                                                                                                                                          +            nums[index1] = 1
                                                                                                                                          +            index1++
                                                                                                                                          +        case 2:
                                                                                                                                          +            index2++
                                                                                                                                          +        }
                                                                                                                                          +    }
                                                                                                                                          +}
                                                                                                                                          +
                                                                                                                                          +/*
                                                                                                                                          +二路快排與三路快排
                                                                                                                                          +先掌握二路快排, https://leetcode-cn.com/problems/sort-an-array/solution/golang-er-lu-kuai-pai-by-rqb-2/
                                                                                                                                          +三路快排稍微改下即可
                                                                                                                                          +
                                                                                                                                          +區別:
                                                                                                                                          +二路快排,分兩部分:小於等於、大於二部分。
                                                                                                                                          +三路快排分為,小於、等於、大於三部分。
                                                                                                                                          +
                                                                                                                                          +三路快排:
                                                                                                                                          +相比二路快排增加一個變量記錄相等的起始元素。
                                                                                                                                          +假設選擇數組第一個元素作為參考元素。則起始下邊為0,即為equalHead
                                                                                                                                          +
                                                                                                                                          +作者:hibrq
                                                                                                                                          +链接:https://leetcode-cn.com/problems/sort-an-array/solution/golang-san-lu-kuai-pai-by-rqb-2/
                                                                                                                                          +来源:力扣(LeetCode)
                                                                                                                                          +著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
                                                                                                                                          +*/
                                                                                                                                          +func sortColorsQuickSort(nums []int) {
                                                                                                                                          +    if len(nums) < 2 {
                                                                                                                                          +        return
                                                                                                                                          +    }
                                                                                                                                          +
                                                                                                                                          +    pivot := nums[0]
                                                                                                                                          +
                                                                                                                                          +    head, tail := 0, len(nums)-1
                                                                                                                                          +    i := 1
                                                                                                                                          +    equalHead := 0
                                                                                                                                          +    for head < tail {
                                                                                                                                          +        if nums[i] < pivot {
                                                                                                                                          +            nums[i], nums[equalHead] = nums[equalHead], nums[i]
                                                                                                                                          +            head++
                                                                                                                                          +            i++
                                                                                                                                          +            equalHead++
                                                                                                                                          +        } else if nums[i] == pivot {
                                                                                                                                          +            i++
                                                                                                                                          +            head++
                                                                                                                                          +        } else {
                                                                                                                                          +            nums[i], nums[tail] = nums[tail], nums[i]
                                                                                                                                          +            tail--
                                                                                                                                          +        }
                                                                                                                                          +    }
                                                                                                                                          +    sortColorsQuickSort(nums[:equalHead])
                                                                                                                                          +    sortColorsQuickSort(nums[tail+1:])
                                                                                                                                          +}
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                          + +
                                                                                                                                          + +
                                                                                                                                          +
                                                                                                                                          +
                                                                                                                                          + +

                                                                                                                                          results matching ""

                                                                                                                                          +
                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            + +

                                                                                                                                            No results matching ""

                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            + +
                                                                                                                                            + + + + + + +
                                                                                                                                            + + +
                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0078.Subsets/index.html b/Leetcode/0078.Subsets/index.html new file mode 100644 index 000000000..50d92a5f2 --- /dev/null +++ b/Leetcode/0078.Subsets/index.html @@ -0,0 +1,3934 @@ + + + + + + + 0078. Subsets · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                            +
                                                                                                                                            + + + + + + + + +
                                                                                                                                            + +
                                                                                                                                            + +
                                                                                                                                            + + + + + + + + +
                                                                                                                                            +
                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            + +
                                                                                                                                            + +

                                                                                                                                            0078. Subsets

                                                                                                                                            題目

                                                                                                                                            +

                                                                                                                                            Given an integer array nums of unique elements, return all possible +subsets + (the power set).

                                                                                                                                            +

                                                                                                                                            The solution set must not contain duplicate subsets. Return the solution in any order.

                                                                                                                                            +

                                                                                                                                            Example 1:

                                                                                                                                            +

                                                                                                                                            Input: nums = [1,2,3] +Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] +Example 2:

                                                                                                                                            +

                                                                                                                                            Input: nums = [0] +Output: [[],[0]]

                                                                                                                                            +

                                                                                                                                            Constraints:

                                                                                                                                            +

                                                                                                                                            1 <= nums.length <= 10 +-10 <= nums[i] <= 10 +All the numbers of nums are unique.

                                                                                                                                            +

                                                                                                                                            題目大意

                                                                                                                                            +

                                                                                                                                            給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。 說明:解集不能包含重複的子集。

                                                                                                                                            +

                                                                                                                                            解題思路

                                                                                                                                            +

                                                                                                                                            找出一個集合中的所有子集,空集也算是子集。 且陣列中的數位不會出現重複。 用 DFS 暴力枚舉即可。 +這一題和第 90 題,第 491 題類似,可以一起解答和複習

                                                                                                                                            +

                                                                                                                                            Big O

                                                                                                                                            +

                                                                                                                                            時間複雜 : O(n^2) +空間複雜 : O(n)

                                                                                                                                            +

                                                                                                                                            來源

                                                                                                                                            + +

                                                                                                                                            解答

                                                                                                                                            +

                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0078.Subsets/main.go

                                                                                                                                            +
                                                                                                                                            package subsets
                                                                                                                                            +
                                                                                                                                            +// 時間複雜 O(n^2)    , 空間複雜 O(n)
                                                                                                                                            +func Subsets(nums []int) [][]int {
                                                                                                                                            +    path, result := []int{}, [][]int{}
                                                                                                                                            +    for i := 0; i 
                                                                                                                                            +

                                                                                                                                            Benchmark

                                                                                                                                            +
                                                                                                                                            go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. -cover
                                                                                                                                            +goos: darwin
                                                                                                                                            +goarch: amd64
                                                                                                                                            +pkg: LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes
                                                                                                                                            +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                            +BenchmarkMaxEnvelopes-8          7799131               160.3 ns/op            88 B/op          3 allocs/op
                                                                                                                                            +BenchmarkMaxEnvelopes2-8         5800399               195.6 ns/op            80 B/op          4 allocs/op
                                                                                                                                            +PASS
                                                                                                                                            +coverage: 96.0% of statements
                                                                                                                                            +ok      LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes     3.726s
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                            + +
                                                                                                                                            + +
                                                                                                                                            +
                                                                                                                                            +
                                                                                                                                            + +

                                                                                                                                            results matching ""

                                                                                                                                            +
                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              + +

                                                                                                                                              No results matching ""

                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              + +
                                                                                                                                              + + + + + + +
                                                                                                                                              + + +
                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0078.Subsets/main.go b/Leetcode/0078.Subsets/main.go new file mode 100644 index 000000000..001eeb191 --- /dev/null +++ b/Leetcode/0078.Subsets/main.go @@ -0,0 +1,42 @@ +package subsets + +// 時間複雜 O(n^2) , 空間複雜 O(n) +func Subsets(nums []int) [][]int { + path, result := []int{}, [][]int{} + for i := 0; i <= len(nums); i++ { + genSubsets(nums, i, 0, path, &result) + } + return result +} + +func genSubsets(nums []int, elemSize, start int, path []int, result *[][]int) { + if len(path) == elemSize { + b := make([]int, len(path)) + copy(b, path) + *result = append(*result, b) + return + } + + for k := start; k < len(nums); k++ { + path = append(path, nums[k]) + genSubsets(nums, elemSize, k+1, path, result) + path = path[:len(path)-1] + } +} + +// 時間複雜 O(n^2) , 空間複雜 O(n) +func SubsetsDFS(nums []int) [][]int { + path, result := []int{}, [][]int{} + genSubsetsDFS(nums, path, &result) + return result +} + +func genSubsetsDFS(nums []int, path []int, result *[][]int) { + b := make([]int, len(path)) + copy(b, path) + *result = append(*result, b) + for i := 0; i < len(nums); i++ { + // n個 element 在slice中 + genSubsetsDFS(nums[i+1:], append(path, nums[i]), result) + } +} diff --git a/Leetcode/0078.Subsets/main_test.go b/Leetcode/0078.Subsets/main_test.go new file mode 100644 index 000000000..507c8a880 --- /dev/null +++ b/Leetcode/0078.Subsets/main_test.go @@ -0,0 +1,97 @@ +package subsets + +import ( + "reflect" + "sort" + "testing" +) + +var tests = []struct { + arg1 []int + want [][]int +}{ + { + []int{1, 2, 3}, + [][]int{ + {}, {1}, {1, 2}, {1, 2, 3}, {1, 3}, {2}, {2, 3}, {3}, + }, + }, + { + []int{0}, + [][]int{ + {}, {0}, + }, + }, +} + +func TestSubsets(t *testing.T) { + for _, tt := range tests { + got := Subsets(tt.arg1) + sortOutput(&got) + if !reflect.DeepEqual(got, tt.want) { + // // if got := Subsets(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +//go:cover +func TestSubsetsDFS(t *testing.T) { + for _, tt := range tests { + got := SubsetsDFS(tt.arg1) + sortOutput(&got) + + if !reflect.DeepEqual(got, tt.want) { + // // if got := Subsets(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSubsets(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Subsets(tests[0].arg1) + } +} + +func BenchmarkSubsetsDFS(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + SubsetsDFS(tests[0].arg1) + } +} + +// sorting [][]int{} +func sortOutput(output *[][]int) { + for i := range *output { + sort.Ints((*output)[i]) + } + sort.Slice(*output, func(i, j int) bool { + return lexicoOrder(&(*output)[i], &(*output)[j]) + }) +} + +func lexicoOrder(a, b *[]int) bool { + for i := 0; i < len(*a) && i < len(*b); i++ { + if (*a)[i] < (*b)[i] { + return true + } else if (*a)[i] > (*b)[i] { + return false + } + } + return len((*a)) < len((*b)) +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. -cover +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkMaxEnvelopes-8 7799131 160.3 ns/op 88 B/op 3 allocs/op +BenchmarkMaxEnvelopes2-8 5800399 195.6 ns/op 80 B/op 4 allocs/op +PASS +coverage: 96.0% of statements +ok LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes 3.726s +*/ diff --git a/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array.go b/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array.go new file mode 100644 index 000000000..60502bafe --- /dev/null +++ b/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array.go @@ -0,0 +1,26 @@ +package mergesortedarray + +func Merge(nums1 []int, m int, nums2 []int, n int) { + if m == 0 { + copy(nums1, nums2) + return + } + + num1Idx, num2Idx, tail := m-1, n-1, m+n-1 + // 從每一個array的後面開始比較, 並放入最後面的位子. 這樣只要跑一次 + for ; num1Idx >= 0 && num2Idx >= 0; tail-- { + if nums1[num1Idx] > nums2[num2Idx] { + nums1[tail] = nums1[num1Idx] + num1Idx-- + } else { + nums1[tail] = nums2[num2Idx] + num2Idx-- + } + } + + // 將尚未跑完的補齊 + for ; num2Idx > 0; tail-- { + nums1[tail] = nums2[num2Idx] + num2Idx-- + } +} diff --git a/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array_test.go b/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array_test.go new file mode 100644 index 000000000..40cad741e --- /dev/null +++ b/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array_test.go @@ -0,0 +1,33 @@ +package mergesortedarray + +import ( + "reflect" + "testing" +) + +func TestMerge(t *testing.T) { + + tests := []struct { + arg1 []int + arg2 int + arg3 []int + arg4 int + want []int + }{ + { + []int{1, 2, 3, 0, 0, 0}, + 3, + []int{2, 5, 6}, + 3, + []int{1, 2, 2, 3, 5, 6}, + }, + } + + for _, tt := range tests { + Merge(tt.arg1, tt.arg2, tt.arg3, tt.arg4) + if !reflect.DeepEqual(tt.arg1, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } + +} diff --git a/Leetcode/0088.Merge-Sorted-Array/index.html b/Leetcode/0088.Merge-Sorted-Array/index.html new file mode 100644 index 000000000..bbe7764ef --- /dev/null +++ b/Leetcode/0088.Merge-Sorted-Array/index.html @@ -0,0 +1,3935 @@ + + + + + + + 0088.Merge Sorted Array · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                              +
                                                                                                                                              + + + + + + + + +
                                                                                                                                              + +
                                                                                                                                              + +
                                                                                                                                              + + + + + + + + +
                                                                                                                                              +
                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              + +
                                                                                                                                              + +

                                                                                                                                              88. Merge Sorted Array

                                                                                                                                              題目

                                                                                                                                              +

                                                                                                                                              Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.

                                                                                                                                              +

                                                                                                                                              Note:

                                                                                                                                              +

                                                                                                                                              You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

                                                                                                                                              +

                                                                                                                                              Example:

                                                                                                                                              +

                                                                                                                                              Input: +nums1 = [1,2,3,0,0,0], m = 3 +nums2 = [2,5,6], n = 3

                                                                                                                                              +

                                                                                                                                              Output: [1,2,2,3,5,6] +Constraints:

                                                                                                                                              +

                                                                                                                                              -10^9 <= nums1[i], nums2[i] <= 10^9 +nums1.length == m + n +nums2.length == n

                                                                                                                                              +

                                                                                                                                              題目大意

                                                                                                                                              +

                                                                                                                                              合併兩個已經有序的數組,結果放在第一個數組中,第一個數組假設空間足夠大。要求算法時間複雜度足夠低。

                                                                                                                                              +

                                                                                                                                              解題思路

                                                                                                                                              +

                                                                                                                                              為了不大量移動元素,就要從2個數組長度之和的最後一個位置開始,依次選取兩個數組中大的數,從第一個數組的尾巴開始往頭放,只要循環一次以後,就生成了合併以後的數組了。

                                                                                                                                              +

                                                                                                                                              來源

                                                                                                                                              + +

                                                                                                                                              解答

                                                                                                                                              +

                                                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array.go

                                                                                                                                              +
                                                                                                                                              package mergesortedarray
                                                                                                                                              +
                                                                                                                                              +func Merge(nums1 []int, m int, nums2 []int, n int) {
                                                                                                                                              +    if m == 0 {
                                                                                                                                              +        copy(nums1, nums2)
                                                                                                                                              +        return
                                                                                                                                              +    }
                                                                                                                                              +
                                                                                                                                              +    num1Idx, num2Idx, tail := m-1, n-1, m+n-1
                                                                                                                                              +    // 從每一個array的後面開始比較, 並放入最後面的位子. 這樣只要跑一次
                                                                                                                                              +    for ; num1Idx >= 0 && num2Idx >= 0; tail-- {
                                                                                                                                              +        if nums1[num1Idx] > nums2[num2Idx] {
                                                                                                                                              +            nums1[tail] = nums1[num1Idx]
                                                                                                                                              +            num1Idx--
                                                                                                                                              +        } else {
                                                                                                                                              +            nums1[tail] = nums2[num2Idx]
                                                                                                                                              +            num2Idx--
                                                                                                                                              +        }
                                                                                                                                              +    }
                                                                                                                                              +
                                                                                                                                              +    // 將尚未跑完的補齊
                                                                                                                                              +    for ; num2Idx > 0; tail-- {
                                                                                                                                              +        nums1[tail] = nums2[num2Idx]
                                                                                                                                              +        num2Idx--
                                                                                                                                              +    }
                                                                                                                                              +}
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                              + +
                                                                                                                                              + +
                                                                                                                                              +
                                                                                                                                              +
                                                                                                                                              + +

                                                                                                                                              results matching ""

                                                                                                                                              +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +

                                                                                                                                                No results matching ""

                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + + + + + + +
                                                                                                                                                + + +
                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal.go b/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal.go new file mode 100644 index 000000000..efec72dcc --- /dev/null +++ b/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal.go @@ -0,0 +1,45 @@ +package binarytreeinordertraversal + +import ( + "LeetcodeGolang/Utility/structures" +) + +type TreeNode = structures.TreeNode + +func InorderTraversalStack(root *TreeNode) []int { + var result []int + inorderStack(root, &result) + return result +} + +func InorderTraversalRecursion(root *TreeNode) []int { + var result []int + inorderRecursion(root, &result) + return result +} + +func inorderRecursion(root *TreeNode, r *[]int) { + if root != nil { + inorderRecursion(root.Left, r) + *r = append(*r, root.Val) + inorderRecursion(root.Right, r) + } +} + +func inorderStack(root *TreeNode, r *[]int) { + s := structures.NewArrayStack() + p := root + + for !s.IsEmpty() || p != nil { + if p != nil { + // 把中間放入stack, 往左節點繼續往下找 + s.Push(p) + p = p.Left + } else { + // 找不到時,印出 + tmp := s.Pop().(*TreeNode) + *r = append(*r, tmp.Val) + p = tmp.Right + } + } +} diff --git a/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal_test.go b/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal_test.go new file mode 100644 index 000000000..27f58c303 --- /dev/null +++ b/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal_test.go @@ -0,0 +1,71 @@ +package binarytreeinordertraversal + +import ( + "LeetcodeGolang/Utility/structures" + "reflect" + "testing" +) + +func TestInorderTraversalStack(t *testing.T) { + + tests := []struct { + arg1 []int + want []int + }{ + { + arg1: []int{1, structures.NULL, 2, 3}, + want: []int{1, 3, 2}, + }, + } + + for _, tt := range tests { + root := structures.Ints2TreeNode(tt.arg1) + if got := InorderTraversalStack(root); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } +} + +func TestInorderTraversalRecursion(t *testing.T) { + + tests := []struct { + arg1 []int + want []int + }{ + { + arg1: []int{1, structures.NULL, 2, 3}, + want: []int{1, 3, 2}, + }, + } + + for _, tt := range tests { + root := structures.Ints2TreeNode(tt.arg1) + if got := InorderTraversalRecursion(root); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } +} + +func BenchmarkInorderTraversalStack(b *testing.B) { + arg1 := []int{1, structures.NULL, 2, 3} + root := structures.Ints2TreeNode(arg1) + b.ResetTimer() + for i := 0; i < b.N; i++ { + InorderTraversalStack(root) + } +} + +func BenchmarkInorderTraversalRecursion(b *testing.B) { + arg1 := []int{1, structures.NULL, 2, 3} + root := structures.Ints2TreeNode(arg1) + b.ResetTimer() + for i := 0; i < b.N; i++ { + InorderTraversalRecursion(root) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0094.Binary-Tree-Inorder-Traversal -bench=. +BenchmarkInorderTraversalStack-8 4469162 267.9 ns/op 568 B/op 4 allocs/op +BenchmarkInorderTraversalRecursion-8 11604469 103.4 ns/op 56 B/op 3 allocs/op +*/ diff --git a/Leetcode/0094.Binary-Tree-Inorder-Traversal/index.html b/Leetcode/0094.Binary-Tree-Inorder-Traversal/index.html new file mode 100644 index 000000000..6e47596e5 --- /dev/null +++ b/Leetcode/0094.Binary-Tree-Inorder-Traversal/index.html @@ -0,0 +1,3959 @@ + + + + + + + 0094.Binary Tree Inorder Traversal · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                +
                                                                                                                                                + + + + + + + + +
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                + + + + + + + + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                + +
                                                                                                                                                + +

                                                                                                                                                94. Binary Tree Inorder Traversal

                                                                                                                                                題目

                                                                                                                                                +

                                                                                                                                                Given a binary tree, return the inorder traversal of its nodes' values.

                                                                                                                                                +

                                                                                                                                                Example :

                                                                                                                                                +
                                                                                                                                                Input: [1,null,2,3]
                                                                                                                                                +   1
                                                                                                                                                +    \
                                                                                                                                                +     2
                                                                                                                                                +    /
                                                                                                                                                +   3
                                                                                                                                                +
                                                                                                                                                +Output: [1,3,2]
                                                                                                                                                +
                                                                                                                                                +

                                                                                                                                                Follow up: Recursive solution is trivial, could you do it iteratively?

                                                                                                                                                +

                                                                                                                                                題目大意

                                                                                                                                                +

                                                                                                                                                中序遍歷一顆樹

                                                                                                                                                +

                                                                                                                                                解題思路

                                                                                                                                                +

                                                                                                                                                深度優先 中序遍歷 + 若二元樹為空回傳空, 否則從根結點開始, 先走訪根節點的左子樹 -> 根節點 -> 右子樹 +深度優先, 前序遍歷 + 若二元樹為空回傳空, 否則先根節點-> 左子樹 -> 右子樹 +深度優先, 後序遍歷 + 若二元樹為空回傳空, 否則從左到右誒並從葉子節點後續走訪左子樹到右子樹, 最後是拜訪根節點

                                                                                                                                                +

                                                                                                                                                來源

                                                                                                                                                + +

                                                                                                                                                解答

                                                                                                                                                +

                                                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal.go

                                                                                                                                                +
                                                                                                                                                package binarytreeinordertraversal
                                                                                                                                                +
                                                                                                                                                +import (
                                                                                                                                                +    "LeetcodeGolang/Utility/structures"
                                                                                                                                                +)
                                                                                                                                                +
                                                                                                                                                +type TreeNode = structures.TreeNode
                                                                                                                                                +
                                                                                                                                                +func InorderTraversalStack(root *TreeNode) []int {
                                                                                                                                                +    var result []int
                                                                                                                                                +    inorderStack(root, &result)
                                                                                                                                                +    return result
                                                                                                                                                +}
                                                                                                                                                +
                                                                                                                                                +func InorderTraversalRecursion(root *TreeNode) []int {
                                                                                                                                                +    var result []int
                                                                                                                                                +    inorderRecursion(root, &result)
                                                                                                                                                +    return result
                                                                                                                                                +}
                                                                                                                                                +
                                                                                                                                                +func inorderRecursion(root *TreeNode, r *[]int) {
                                                                                                                                                +    if root != nil {
                                                                                                                                                +        inorderRecursion(root.Left, r)
                                                                                                                                                +        *r = append(*r, root.Val)
                                                                                                                                                +        inorderRecursion(root.Right, r)
                                                                                                                                                +    }
                                                                                                                                                +}
                                                                                                                                                +
                                                                                                                                                +func inorderStack(root *TreeNode, r *[]int) {
                                                                                                                                                +    s := structures.NewArrayStack()
                                                                                                                                                +    p := root
                                                                                                                                                +
                                                                                                                                                +    for !s.IsEmpty() || p != nil {
                                                                                                                                                +        if p != nil {
                                                                                                                                                +            // 把中間放入stack, 往左節點繼續往下找
                                                                                                                                                +            s.Push(p)
                                                                                                                                                +            p = p.Left
                                                                                                                                                +        } else {
                                                                                                                                                +            // 找不到時,印出
                                                                                                                                                +            tmp := s.Pop().(*TreeNode)
                                                                                                                                                +            *r = append(*r, tmp.Val)
                                                                                                                                                +            p = tmp.Right
                                                                                                                                                +        }
                                                                                                                                                +    }
                                                                                                                                                +}
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                + +
                                                                                                                                                + +
                                                                                                                                                +
                                                                                                                                                +
                                                                                                                                                + +

                                                                                                                                                results matching ""

                                                                                                                                                +
                                                                                                                                                  + +
                                                                                                                                                  +
                                                                                                                                                  + +

                                                                                                                                                  No results matching ""

                                                                                                                                                  + +
                                                                                                                                                  +
                                                                                                                                                  +
                                                                                                                                                  + +
                                                                                                                                                  +
                                                                                                                                                  + +
                                                                                                                                                  + + + + + + +
                                                                                                                                                  + + +
                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0100.Same-Tree/ex1.jpg b/Leetcode/0100.Same-Tree/ex1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6d9d16f36d10f1c5aa4c81f681be8fce85c6464a GIT binary patch literal 13336 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 literal 0 HcmV?d00001 diff --git a/Leetcode/0100.Same-Tree/ex2.jpg b/Leetcode/0100.Same-Tree/ex2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aff121eb5de4d9351129beac3886b9d57e97e935 GIT binary patch literal 8285 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 NHnNPXVj_=*{{u$gLoWaT literal 0 HcmV?d00001 diff --git a/Leetcode/0100.Same-Tree/index.html b/Leetcode/0100.Same-Tree/index.html new file mode 100644 index 000000000..a5ede160b --- /dev/null +++ b/Leetcode/0100.Same-Tree/index.html @@ -0,0 +1,3955 @@ + + + + + + + 100. Same Tree · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                  +
                                                                                                                                                  + + + + + + + + +
                                                                                                                                                  + +
                                                                                                                                                  + +
                                                                                                                                                  + + + + + + + + +
                                                                                                                                                  +
                                                                                                                                                  + +
                                                                                                                                                  +
                                                                                                                                                  + +
                                                                                                                                                  + +

                                                                                                                                                  100. Same Tree

                                                                                                                                                  題目

                                                                                                                                                  +

                                                                                                                                                  Given the roots of two binary trees p and q, write a function to check if they are the same or not.

                                                                                                                                                  +

                                                                                                                                                  Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.

                                                                                                                                                  +

                                                                                                                                                  Example 1: +

                                                                                                                                                  +

                                                                                                                                                  Input: p = [1,2,3], q = [1,2,3] +Output: true

                                                                                                                                                  +

                                                                                                                                                  Example 2: +

                                                                                                                                                  +

                                                                                                                                                  Input: p = [1,2], q = [1,null,2] +Output: false

                                                                                                                                                  +

                                                                                                                                                  Example 3: +

                                                                                                                                                  +

                                                                                                                                                  Input: p = [1,2,1], q = [1,1,2] +Output: false

                                                                                                                                                  +

                                                                                                                                                  Constraints:

                                                                                                                                                  +

                                                                                                                                                  The number of nodes in both trees is in the range [0, 100]. +-104 <= Node.val <= 104

                                                                                                                                                  +
                                                                                                                                                    +
                                                                                                                                                  • Accepted: 1.8M
                                                                                                                                                  • +
                                                                                                                                                  • Submissions: 3.1M
                                                                                                                                                  • +
                                                                                                                                                  • Acceptance Rate: 60.3%
                                                                                                                                                  • +
                                                                                                                                                  +

                                                                                                                                                  題目大意

                                                                                                                                                  +

                                                                                                                                                  判斷 2 顆樹是否是完全相等的

                                                                                                                                                  +

                                                                                                                                                  解題思路

                                                                                                                                                  +

                                                                                                                                                  遞歸判斷即可

                                                                                                                                                  +

                                                                                                                                                  Big O

                                                                                                                                                  +

                                                                                                                                                  時間複雜 : O(n) +空間複雜 : O(1)

                                                                                                                                                  +

                                                                                                                                                  來源

                                                                                                                                                  + +

                                                                                                                                                  解答

                                                                                                                                                  +

                                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0100.Same-Tree/main.go

                                                                                                                                                  +
                                                                                                                                                  package sametree
                                                                                                                                                  +
                                                                                                                                                  +import "LeetcodeGolang/structures"
                                                                                                                                                  +
                                                                                                                                                  +/**
                                                                                                                                                  + * Definition for a binary tree node.
                                                                                                                                                  + * type TreeNode struct {
                                                                                                                                                  + *     Val int
                                                                                                                                                  + *     Left *TreeNode
                                                                                                                                                  + *     Right *TreeNode
                                                                                                                                                  + * }
                                                                                                                                                  + */
                                                                                                                                                  +
                                                                                                                                                  +type TreeNode = structures.TreeNode
                                                                                                                                                  +
                                                                                                                                                  +// 時間複雜 O(n), 空間複雜 O(1)
                                                                                                                                                  +func IsSameTree(p *TreeNode, q *TreeNode) bool {
                                                                                                                                                  +    if p == nil && q == nil {
                                                                                                                                                  +        return true
                                                                                                                                                  +    } else if p != nil && q != nil {
                                                                                                                                                  +        if p.Val == q.Val {
                                                                                                                                                  +            return IsSameTree(p.Left, q.Left) && IsSameTree(p.Right, q.Right)
                                                                                                                                                  +        }
                                                                                                                                                  +        return false
                                                                                                                                                  +    } else {
                                                                                                                                                  +        return false
                                                                                                                                                  +    }
                                                                                                                                                  +}
                                                                                                                                                  +
                                                                                                                                                  +

                                                                                                                                                  Benchmark

                                                                                                                                                  +
                                                                                                                                                  
                                                                                                                                                  +
                                                                                                                                                  +
                                                                                                                                                  +
                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                  + +
                                                                                                                                                  + +
                                                                                                                                                  +
                                                                                                                                                  +
                                                                                                                                                  + +

                                                                                                                                                  results matching ""

                                                                                                                                                  +
                                                                                                                                                    + +
                                                                                                                                                    +
                                                                                                                                                    + +

                                                                                                                                                    No results matching ""

                                                                                                                                                    + +
                                                                                                                                                    +
                                                                                                                                                    +
                                                                                                                                                    + +
                                                                                                                                                    +
                                                                                                                                                    + +
                                                                                                                                                    + + + + + + +
                                                                                                                                                    + + +
                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0100.Same-Tree/main.go b/Leetcode/0100.Same-Tree/main.go new file mode 100644 index 000000000..17296b01a --- /dev/null +++ b/Leetcode/0100.Same-Tree/main.go @@ -0,0 +1,28 @@ +package sametree + +import "LeetcodeGolang/structures" + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + +type TreeNode = structures.TreeNode + +// 時間複雜 O(n), 空間複雜 O(1) +func IsSameTree(p *TreeNode, q *TreeNode) bool { + if p == nil && q == nil { + return true + } else if p != nil && q != nil { + if p.Val == q.Val { + return IsSameTree(p.Left, q.Left) && IsSameTree(p.Right, q.Right) + } + return false + } else { + return false + } +} diff --git a/Leetcode/0100.Same-Tree/main_test.go b/Leetcode/0100.Same-Tree/main_test.go new file mode 100644 index 000000000..1af502ede --- /dev/null +++ b/Leetcode/0100.Same-Tree/main_test.go @@ -0,0 +1,54 @@ +package sametree + +import ( + "LeetcodeGolang/structures" + "testing" +) + +var tests = []struct { + arg1 []int + arg2 []int + want bool +}{ + { + []int{1, 2, 3}, + []int{1, 2, 3}, + true, + }, + { + []int{1, 2}, + []int{1, structures.NULL, 2}, + false, + }, + { + []int{1, 2, 1}, + []int{1, 1, 2}, + false, + }, +} + +func TestIsSameTree(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + p := structures.Ints2TreeNode(tt.arg1) + q := structures.Ints2TreeNode(tt.arg2) + + if got := IsSameTree(p, q); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkIsSameTree(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + p := structures.Ints2TreeNode(tests[0].arg1) + q := structures.Ints2TreeNode(tests[0].arg2) + IsSameTree(p, q) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0104.Maximum-Depth-of-Binary-Tree/index.html b/Leetcode/0104.Maximum-Depth-of-Binary-Tree/index.html new file mode 100644 index 000000000..f028a580e --- /dev/null +++ b/Leetcode/0104.Maximum-Depth-of-Binary-Tree/index.html @@ -0,0 +1,3916 @@ + + + + + + + 0104.Maximum Depth of Binary Tree · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                    +
                                                                                                                                                    + + + + + + + + +
                                                                                                                                                    + +
                                                                                                                                                    + +
                                                                                                                                                    + + + + + + + + +
                                                                                                                                                    +
                                                                                                                                                    + +
                                                                                                                                                    +
                                                                                                                                                    + +
                                                                                                                                                    + +

                                                                                                                                                    0104.Maximum Depth of Binary Tree

                                                                                                                                                    題目

                                                                                                                                                    +

                                                                                                                                                    Given the root of a binary tree, return its maximum depth.

                                                                                                                                                    +

                                                                                                                                                    A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

                                                                                                                                                    +

                                                                                                                                                    Example 1: +

                                                                                                                                                    +

                                                                                                                                                    Input: root = [3,9,20,null,null,15,7] +Output: 3 +Example 2:

                                                                                                                                                    +

                                                                                                                                                    Input: root = [1,null,2] +Output: 2

                                                                                                                                                    +

                                                                                                                                                    Constraints:

                                                                                                                                                    +

                                                                                                                                                    The number of nodes in the tree is in the range [0, 104]. +-100 <= Node.val <= 100

                                                                                                                                                    +

                                                                                                                                                    Accepted 2.7M Submissions 3.6M Acceptance Rate 74.7%

                                                                                                                                                    +

                                                                                                                                                    題目大意

                                                                                                                                                    +

                                                                                                                                                    解題思路

                                                                                                                                                    +

                                                                                                                                                    Big O

                                                                                                                                                    +

                                                                                                                                                    時間複雜 : 空間複雜 :

                                                                                                                                                    +

                                                                                                                                                    來源

                                                                                                                                                    + +

                                                                                                                                                    解答

                                                                                                                                                    +

                                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main.go

                                                                                                                                                    +
                                                                                                                                                    
                                                                                                                                                    +
                                                                                                                                                    +
                                                                                                                                                    +

                                                                                                                                                    Benchmark

                                                                                                                                                    +
                                                                                                                                                    
                                                                                                                                                    +
                                                                                                                                                    +
                                                                                                                                                    +
                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                    + +
                                                                                                                                                    + +
                                                                                                                                                    +
                                                                                                                                                    +
                                                                                                                                                    + +

                                                                                                                                                    results matching ""

                                                                                                                                                    +
                                                                                                                                                      + +
                                                                                                                                                      +
                                                                                                                                                      + +

                                                                                                                                                      No results matching ""

                                                                                                                                                      + +
                                                                                                                                                      +
                                                                                                                                                      +
                                                                                                                                                      + +
                                                                                                                                                      +
                                                                                                                                                      + +
                                                                                                                                                      + + + + + + +
                                                                                                                                                      + + +
                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main.go b/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main.go new file mode 100644 index 000000000..064dd40f1 --- /dev/null +++ b/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main.go @@ -0,0 +1,47 @@ +package maximumdepthofbinarytree + +import ( + "LeetcodeGolang/structures" + "math" +) + +type TreeNode = structures.TreeNode + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + +// 時間複雜 O(n), 空間複雜 O(1) +func MaxDepth(root *TreeNode) int { + if root == nil { + return 0 + } + return int(math.Max(float64(MaxDepth(root.Left)), float64(MaxDepth(root.Right)))) + 1 + +} + +// 時間複雜 O(n), 空間複雜 O(1) +func MaxDepthKimi(root *TreeNode) int { + count := 0 + return depth(root, count) + +} + +func depth(root *TreeNode, count int) int { + if root != nil { + count++ + countL := depth(root.Left, count) + countR := depth(root.Right, count) + if countL > countR { + count = countL + } else { + count = countR + } + } + return count +} diff --git a/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main_test.go b/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main_test.go new file mode 100644 index 000000000..97a5e3a87 --- /dev/null +++ b/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main_test.go @@ -0,0 +1,49 @@ +package maximumdepthofbinarytree + +import ( + "LeetcodeGolang/structures" + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{3, 9, 20, 0, 0, 15, 7}, + 3, + }, +} + +func TestMaxDepth(t *testing.T) { + for _, tt := range tests { + root := structures.Ints2TreeNode(tt.arg1) + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MaxDepth(root); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMaxDepthKimi(t *testing.T) { + for _, tt := range tests { + root := structures.Ints2TreeNode(tt.arg1) + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MaxDepthKimi(root); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkMaxDepth(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + root := structures.Ints2TreeNode(tests[0].arg1) + MaxDepth(root) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/105.construct Binary Tree From Preorder And In order Traversal-2.jpg b/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/105.construct Binary Tree From Preorder And In order Traversal-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1b8d717e154ffa54f6999c80f74c310ff792ac0 GIT binary patch literal 127150 zcmb@t1yEc~v@W`_puvKBkl+y9J$P{U;BLX)e%yiwC%BUUgS$HfcXtVc5B?_qx%b?< zr|zwH>ecI+n%y%!d++{wtzP~0T5G>9zHS1Ta#FHV01ONO$UtAf>lUCb>1k~N0165K z0{{R>04xkP00*tXKwm((H30u_9RNN+j{pFd2lKyL^I-pHD;#Ma-2be@=KTHR>lwhS zY~|?c=wjvQM8U!G5#SY;I4qdgK7btBBLtX#%fF{VKVV?t;1S*+A|a!oLjM55gmxVc4i+8`0pag$ zVEmx%06Z1~_Ioz5H}6!85hc&<54W{NW`5KIjf`?B)NJR62mX4l* zlZ%^&myciKlcbcijI5lRx`w8fwvMi;nYo3fm9>qFtDC!rrefbJ zSJyYUcaZyszqp{|`5&;LpZ|gEzu>}x;(~>Thl5A_iwg$U<1cV5c!c+CZ?MHw5RIMR zQL+ai;fN>v_|=U}#i0tuHTn7*1&^9@i{|1lw11KP_kacee?s=3!2TDm6+i-j{kOou zLZt);2bB~&v>+fN{4Iz`i2oL(|4~r>EvSFX+y5-D(2Kx8uK_*z4fOpM84>wE+y2{? z*EOhGvcE0^XmBu4WrD*3M1benf+8HPFjw3v$&FP1mA(7STry4f)5+1SyFuMLNgNp6 zld~MS*d$IO)G2Qqf92+xsCvYxK!jZK_$ zxJ#`ybq(t8SE@(?qzs_a*2~Ei==m-?BNJ=s_bxe*6HTi;*a`!`x)E}d%h7ZFNDup^ zgjRy{xSSh{D1a_M3aHGreN@kU>a4Rf$n-$wxoY*Wa~)t9$5DoN@miOE&b3OjUTPKa zFpXV2AUydb?3kQuwX%Okd~4}&>JoDmb3HCA3E&#MEZvsgdIeZ4uUmL{W!7?^4ZPt$ z;4*>U;^^;q%o^NVo^=?dH(%^oI*dIvPx`w39S+>;j-@?}UtZ>S)t_1$PKVZFJO-7# zp(6-rm^~UT7jEo5XPTU@G|6^mue6#Lv;75AkU4Q_bo%(IRdIZ2rIo~CkatoyF$#zy z=NVC|x4&|aedK6#=Ns@E@U|#~!mEA->>ky91Uu{O9XSNr#+QiQci>1}GJZjC;#xkR ze?BT=fB7^%8P6!-Zn-z%vs0y$ABa-rb~{Pu7d^__{*`8}(L(Cfw1eMgE`tupkD`OE z^{Y8kb-a8T|K)DKO1&|0w)Sg=;4d7k@dGc`TfcmR5{uKbwKyKrEXyj)`wmsV0>{jH z$EEDnUlSY?95Y-rP<$Sbmdgc8P<*yt>1+EALo1C01SeT@QFH)Qx0DfVRXp}`8}9ur z4hB=QTRAQdgf8YQe@g&@7IR_dtS*)~Xpj-k?m(MUQAut^F?yS0z5 zbJ+Uu;^A->_r3ow7+Z&BcT;y{{pZ!4n4Jta92kVgW&cTnwxt96z8ph$hucZshuLeW zGjqYT6ZXCVh5f-dGTgpx2JC6fF6^H?} zup;>5mX)dFW+=^lEuHvR9OUTyub86f@=%6vJ3+FYqmSJEON~xR0RoNggP%?QqTp(@ z7hr3JulE1rJm5SoX@8qrH^9p6wc<>hmYvyNHz5oXf)0__+k@rzm!JKm#}6FVI!i_y zN!(7LaszN&p>nOVVR@>%-C!MCg62i$^gUP$U?yQ_r*cQT$-h!K)gyL!#<9 z_80=Q_~ekGW8M;VyxS?=A8~8&He(ZA9u|BbO7h;cGTAl{X$%q4!qJxKx`{d4JGur7 ze4m#@s|q8X4HjX@2}BVc(JrN^-J!rr$Vn%ylUJ6ub;P+`9VDu(v%eyNNu~SPeABfZ zNLy&3t~w!JN=OX`Zi-4RgNaKG*SFvknwCerF?~GpkV}ip%jrG=41oYCfO8BejF3pl zpmlxY7>4WMzbh&wT3)NhJ{>4FQ!R(=!g`U%-`_#+ZPUU#^3ga^SQUe+bUS+?_>D-m zn4>*HIly?Lcc*sD4nQ6T7!ti8?;s{GAL{bF7*2$fEI@4Ao^G z@?m}yY_A0U*TCQr7zPXqvMjd}O~2lw4BuRbR!{qNkEm5yMh36Avj$FtU#S*f$_o+| z5xIUS^cRiI2dirBDXAc%AUgnr)Yq_q62Qn;42n4G#D0?BZS19HZVX*9yI3LeI4ZqF z5-9)3%rcZ7;-JAmP$bA@nFI%b48G5fMQIq31S(NoyaK|T z?|w^?dQzC)Pr+&Y9#9EEOSt^zMJkPR9K61as?N5O7ps%Lh<-XqJ$nr-n8$kXp)|u$ zZ<<}7D3-D?SN-`W?Lsv4Bjsmr%QxvgwJ8_{w4xDMR66)l!9Z{4`D|roP|K>&^gzBP zjLyX{Y8Kj~1yoYhbTmzXS<)1WZk%>O22Yp{WnW_7DO1AHAQUiQ+5pG*=!v)(9dTqI#1`R}jV- zhKrO?s-ZGPM*s)L0UrJv3Md!|?ZQbn9Qj1x&pB7;})G=0B{AHWGOK{b^cU3PFGNRo=7CE2-I8?)=0VhWauvDEc_N|+ctW&nem zgd@D>&qBOIY)*snf?@_6KzsyARg`(kGAUkcJvA?Jd0i*JIg!iy%i7*AlIpFHkT`bU zvj5+tf@tDRmml=@|5eRO@|fU*hIt>r^ra)mq)6t*-^Ad_M^aJ@V%l*JQa96|)MywR^g@Tv2ccTK32@igAT!57M5QG>PV8*rr-=xxmI@>cF~f8 zl4h#-^O_nOTf|7mY$?Mud(n@@$WxR=5jfe?=#ZH5u=6fqjs|tzL>uN$obKd_BC`-I z2dP<{ILEIg2u;jwp@TF5FC9{c(_e)%@0< zRIYctD3ftA`kR(3Q2h*e{rz`oVC?0GjjFQcSbd+UZHOjNy)Yo77U)S^rIQEOA@EzH zx;S;6`9l0EafJH=I}eFvA}^_e4s>N^Xj7B9dnZ1{&!opK(`TRLG`uq5Z+H(I$fP1E z=Ek_PGAyVfI2PTk@(~ql(JW{>kTyS~ur`cAIU%v6^!AB<7Esa1utu15@4+{7wXhZ= zRu7rF%AKy9f|114owsa~p#IrL;9*b`^Q{B`E9nAt%7f019K$541#JqTIc@ApDJRig z60-0{AqJZ(1&@Ay>F_6|QZH|w+yKiTuYk3|#;0FQx#rllg_1+-y=<*mS#JyGTR&>^ znV4*7OFnf_4@Uc7?EG-oG;+ zz0bY_Xr)wqYOQe)rx&&bZEF@CAvbSF$FZGMw|{QQwPR{X>sN;$LDef8zKUSPUPu;a zt)c$Of(;*|y|E)hZxh+1)A8slpg->8X-*v|MzOhhfVffRYp|u@ZEw4+k=9o+>Vcn@ zLvle@`BP*gm{I4nDzAV)^Ci}onwv(@=!D!k|IZo{M@X<4X$=3-+6`Xi4KMWmCkzm z8X8w8}4nixf?=zf1#>)jy{jgFh5gFrn)h+JxhJ zBB`lUWLw7kl%_7J`hj=3za?nG^SmE`vb;D;tNcVssc+?}NF@jngk8hOKFaXP>Q1e) zC^Cm87Rvp^<%xWVtFC2GDqq1ljaqv456jTu*mN*=8RCxvk)nU+2dHw=DNNSb^W&dZ zBf|HJFq=8`Fcxu;b4ksX40+Fxe$)y1^3%^|4!mo_B`aIOIkJ>$`6@QW-$@K7-ALT8F`YlGnC^_q$>+Cm7r+dH9XeO7C zM;)ENj3u^L?c#t1n!{)^A2#MpMmIA#PYD}aR z>ov?XG+PokhTT4CP@2Y8>Xnil#62k^WY87=Vkj(6qj*>E#(O4;o}br{e$W_aO=+bw z`;K_$YpxYSz znb&si&7vd;jEAR?>%+Zug44ixAW*_iR)KzoZMgr)GHf==_K^YjNZuq#Yak!fKd} zB;3T74iXfkACYYo!Zt91jQL`JElEU|sqSal^4zk3{$us@8`KNegRfWrGj1$D-|Cb=0{agPt){$tYkT2IlH7MHeKdj8xr9W z3-qc&V)_mB3#e#RS@`_JE|1zB?zRjWMsdP`zp3B^JO;fPK(o^;{T+0MUv;GV2Bdak zE~VkhpiL?>Rk%79Db@s1Jsb~#-pXc_8A?Jy`^rU%W9kFtc64#q0KVr87V$A}$2 z+^mXVReA!y0PS7(nJ6CJdEB+@c7=fgbDQ3F=mAZ#-Cuh&N$td+0YLpH$}ssL&7P+oJr2-ff$y zG$C3GOU-{6S>&P)cPra4wxTgGj{NaKwOB_F94o_SQKw||%yGNlWRSk@9=N=_3j4Bz zCbkdC4P&$IV97P?oGs)xSl02Yki%jbO`BPk3NlO1`VJ?flfM%7g$KLv#|;BxZH|3Z z36CmATlU?8-;2lWUPbCwxtO@}Z$0qhj-wz};i_k*(uH}!XvxN6)tIVZ@~1M7w@d$w zl5FjK?an}o+hceISa`l97_c8Ld+Ri0lh(^y9S=>xs}O1peNjgHa*!}}SCP#pL|4hM zQ!yJAs?(4y{E$&%i8CTn3Z9kJ8At?bYp*9Jo*k)XNnG56M+*D~^ zxt{b7llW@?rdL3yysGFX<;k8owoeNw&eS4uZq7iFP!KiExu|`W2J4?_n&fv3*n4TFn7s}%yFu(_1WR=V7-=T9!#&9?^Cvai z-eq&wMY9W^Y)73-+eEDNM7Vsf(BjS7Z<~vj&(&Z-`@19I6APbM& zej>f88PC`AGe$qcZuhsRSFLSPR(@W63BzoBOOZ@b)soP0 zmeJ49;ZoipJM##tlDMFFhVH@nD3J-PqJ05`e^qwgRVDQc+X8KohP||sBH2F8LlgPf zg5WP#s>0%qYilB0b8!E2|H$aPo2?&q-!YHz7*-2YWyrHCAJF<$SYwFEt821I;kl$3 zO5kTj?k)lb3fkmJH3xhMNk4?`(?)ht1jl`pp2?kWz93lkA2A%r->++^aPj7~E>F1q z>D%sl=+f{))!vTJU#ZfK7i-JWH$5`GFPFeQY^Lv99wA{r;bA`s>^Cyqtg*jL`#kFC z%ADO1N~fMM*c+@4bO}3&!8uX{^HMgmzJ<7NJ_)`8|L7?*!=E9HSMWXdvK-g?>|*vL zNj1*h$e$d{+U@>KRN!VL4yVRVbhGxi8ltW(wF~3rwZlXg1zVY3IK^_QT=6k>8jjXV zS7;%J=ZbuYVpZbW*#GLCT2~`kbn?!+W%SeghUN|#N7p0OtpYv~>Uhdv7<2tl0Wtl! zlw(8Usm&?QSx}s1lRJuesw(?fc`1N`tD&LJ5DGX?WhEW#^a{V9ul!TRWwlk8_!dur zVOcV1OxEmM^^w0(y7IkspuceFy?^}0GGcFFzXRX&Mg1HNQEiNGk}eq@ zBeJmjQJDyL`V5)3^TTf)r;`lkq4D6vimL)A65dTTd1p?;#!6 zU!OG_FGZTuJo9VK7Ov^yXlCu-k$NbGkY{R`Zr7mJtk0by&hN9m0(B}kry@^J@#~>C zy05^{%f939LGOcCV2c@C^Zds36?j64eg&c`ZZkTP0&;(@udMFWBry!X0(nW&3r>$d zl6QHYx}#c%cN|i2UWFq$|ByVWE_|Xc0=K5~f?Cj#ub-`o)BgG$1cP#wUI7Em)RzH_ zn>#G&m&fu~fJ0{zR|>HC0KdGtQ50OuNr&d)UO z*r3JkSy@g?+p^6-z2Fi=p@0IVXkVIyR_&Q4ilE!?tpQz~lUMgqi%cAD=5qB~911qA zIyXYgo>8|YXY|9D6?TtnuDs*A8@e;T%F9KeRiops_OOC*zSvUe!zNjlyUXa;zG&|j z%5$Ro?ifu=54}UXjI9yI@~v?R`z&M(lpCgG;IkYKk-MvdC$*j<&bqDnaPc9c1WA%D0Z8;tf7uvK{8|ZNbA=nIIfe+ev%Q> zbWKqw87c<3taz1KxP=Dq8C4{z>_4WFc-HRW3F>d`+gP;GvfQuF47`eUZjPNxR1Px& zoWtNqz_nkCL7>j+1IBzCJa(%Z%dHCax@J&B=&u|O#3cF&_^6N0traX1Zt!=zZCdDQ z0oz{8T(_xfnj_21{Cg$|siX`C!j?_(zg(A;a zAo9s&Yh0~sZ~QsSDs4=>mvC~Vwu5vZG@#jQ!ZuJKKy<<%x~k!tFlFFxJXX5$Zo8A;{*c} zCw{T$`X6z^yu|JIBx;=S>BFr#J@JDG}3n*VL|J_aP@$T~sM`5e`fG8^2?~q0~ z5gxUSI%rT5VOCYik(zB}sT6P)Ix#APLFa>yu~^CdL7+&A z172Fn4#(#TVJ@3j0Iq|ue;Wg}8)3e)^f)z@n@u0Bj|$C!WnC1BS5L+q#hXx<>sZP^ z{h;%n^YqLKql$bYZt2OY5aIs}De5zd$9(Z628G;j*zWJ8YRzJMGG9C$#9lz)n(hP@pdkS`5`upr{@5?feeouw0K#%BBsD72($S&Ex7Rv%16L+(G0Z)*lxNX$IWiYG=p$=?$iQEV!1&tN=y=8}fZYpf)@^g` zU)Jh6X58pIX8a1*4;#e=@5j?K2u%{C&(kO5*gNLCZZs}fPdgD~$hTo3;oZ)VD48+) zQmA862YHC$9p9DzZ5L((4-T>HAZ`JEztR%aaQ^X?MT`-AYhPg~^>cM2R!LF5tl+b~ z?1wA3mg+Y!yrjQW(5SbsEgg8GoW4h?h1dFDYnh)j3-7Jzv@#~VOkAcv!39v|u9M?> z){WhuFYjFl-yh6sl^=P(q->kbQT}F$>0DY+vz{4?a36HRrgw_dGW|YkZ&DcQG~_hW zd);zDvSa?3lDt~x!~#Mo+ompBv6J#D_IE1dYC$=B`l^|Qm2{7(tOWYj|bI; zC{PVdQiUWRL>8&Yju$6BGS=|q%KJY12YcXYGSiHv;Y}q`b!s9tGdZt5YB8F>0>}+T zrj8yo`?=-^eTf9~)3T&Ir2-zDn`V~e?rj?y&jpzYjCc(LSmUvT57kX1qU%TWfTpyr+F zDiqgSMXlqSA180OHZb+&sGBcHr&*Bb?cuRPW?Bn#cNB%uYBOI%&Tr%=RcNkDOOAiB z(?3aiVLWj)p5DGTypcqZT6 z=(7$un~{MMB59l73!lG^pzx@tv|}X=%sZ??7qc@FaD=D)OJGaD3vB-@&^PY}b+*0& zNb7m()0JndA5Fk312Lj}RPTN64sAz7wtPI>o;QMxu#}zT z2oZAhfXjzS^I4)7qQ`F?jXDBXoqac^n;2*@_sXjhXK&Z~BrauvXL^w>*r|Yn;(~ak zGsa1!hciQUVSY$wXSYa12pD|vqPtb}3WOf*z&ho^zfiIXAwH>%J~T8T9%#$c_6QwS z;MI{x9ot>sKz#C0!&0T%QV8g1-_iZ_OC|N054w@@tycN4KEenjdz(`~pNhR5o0+QU`vfK8<^rAFtwt;vP5 zPzT>HuRuQGcEA&iaw;nr&&8W|58cGUo6s2MBkR7r8+Tu3+<)L4lRZ6+Y9;~UjB`6k$Y=d z=x;nbZBM$s_$?tbj}maqg$fzX>pF8(kv&0s% zuKj8xmq~hJ?C#uhcrt|!J^r?1uO4_``XC``cOh&jD+f6!`5&}19!VvIgZS|Op0A$;&^Cw>ml&W?&_Dw*1 zOqL|;2km;B%L|^-*&F^RLbaFks7j2h7)>f)Wyt830{`W$QLt{b-hHisENN~;ec4)J zcBFYMkxVp4t8Y1v?L*($}sZ)Z7Hl%|qiiHtF8c6$&2;s`n@hgDXL1oR( zui#kvJ@4n${InWjDpKa7IPaD4c!#ws8%DaA>E(k8WbH!gV1Gs!&U63MP0OqxhfTnF z>H@(_N)9=Fbhhk#u>HvK!=benxv-2>R)(xyuG;cS_Y0{`e(GD{X`E>H!|7$_S_cB+ zpUwB)F(x(f7*-Tttmku;K8S#8;6w<7xrZ-To)9mHcubvZJl*gw*pAgcl1p+uq_E!CR06{+46# z&LnZ>Adem5ENi%ng1yUaU$TSJ8(*GA^0lP?jQZI7>OcfjEt(!BE%HbE~ z0aQ?;RB+q=b9C*AABv9K*Xa`d;j-oFAK zXDUlCO_hey@|LQKLe1H+c$Qq?0s6bz=2Mj?VeoY#GRWAuQm*7Zh%jSI>=mfCfBXfZ z!Gzu*nJEAG+tR6d0NWSzo+Y!RCUNw!os}9P+d+&o)E!bz`wOLRjED>$)(s!t`dGvF z*W5&f)8vnLFE|?z+nRqgsmK@`FDyfinihPis+Ob>YjW&j2=1=f)GyJ{vt~`ss>{zW znwU25GWSa7uH7xCM8NUZ_HHzNsot ziPR4%@0BAisTa{icif2y2mDUP?L=&AmONBU5}q`{p>0u4ChhagcIJpvMPmscg%`&a zb4fbjS0S~eHZ$8sA(lb)_x5_D3#SC(S5&TD?=F#;XQnhg$6BybXyr0m65A7X-5610 zGBv0)9VS?-ZVvrmyK287tBL_}c{wjx>YBd<@h*Cqsst!Ehk6m>%lb_Yg;~M5Q3cj* zY*p6FJrt|s#vZuSrNYG@zA*l%F;W{h)+h>=WqF@&VW!>a5Cdo`^ujq)iLj~!LvtdL z=w4i*d2&_8sq5^CV>1o6UnT$wwjo0S^c3i31Qs-lt^bKC$|5jKb2Shfy7+#RLfZaI z{c&|D5*!MfI5?=vOCy3nG7~agh_qbL{5kqcRC<`GEKCCE&K4S2SBA&?ulNB0<+ zg%YcuLsWv%K@^#SBw>gO-uXW>^WdZ1Xu8wWNi{xwdRs2_RSMwa`@7L1f1QOUw>AV! z;;6j%r)*`zs8O7gaeVb2{QAy=miZ!;sfQXIK&xlyqI943Cemd7BXFV5U7) zTgu!uN&*AP$jKO~{@8`}&B+HV&UzM5$6C`H+lQFE%HDiEbfh+opxhrw zXy+i@babx_JIjNQx!iMyk4_cGmTIvHqxLsNLyI^WEVc_>8EQn4Dyx4?g=rGPyHfm3 zgQc*oaBG(5PWUuUZ!Yd67gtiK5vX{lL+{bZCMXn?0Lq*s?9dkb!l&QkmDq<>v-`Jzz^ZLjfcc<8#r!C z_c%rcU@W=XTlV==g8MRD>q@epb6yzgGL^7#DG;sRDKo+7bFd(F_uKkUy#ko_BIcc; z-Xh_?gkI(2+pI(~!_JlSTAB72|jOVZE?o)163WIl5|w=$|t2_9%jZ&{H|C6Y1!=BBmmh$IE`OWizTnt}R&;_iu`=xbD=Rcsb zYf{J08QaVIdh&<31VJ=~GlSH2z3mSCFTpHkMfav=v=v-Q#EDE&opKS{L=g9i?iwb=Fia`r7n z^-^d@x561$+Fdt)g4noHh#bZ@F8MAzBc=+E#|>EL7U$!;I*=m#PkNVCeVCJ>48^RJ ziyRrEyP(wE+%Q$2%g&pfVBQeLNh2k-kM#>RVHoBoA8=hgkWTl8R&B_fB3^eV$-P#< zY6TkB(D=Q%0fP`9BaGwe)8~DgTcU51hAES#HfW84{2^E?@;kgF9F3AF;~MiBbJaWZ zN|nCOwOH8rArvs{l5^+wl+GY@9JuWLF@@lDLEEO6xYsPu?Z(1O2Ppf^8kfh^`NWZU zj&MCiWpj2SWBVA^Doq8iPPWb*ayLV}(pJW=$r`2UwhVF-+Xs;tD)1{1S08P_K5#as zYY0LZ9d>kK%uQSi3iY4lK=ZAB)Zct>+I5pNcVy~>>-2}Ecv?$ApycWq1NCieiNUZ$ zaV(eR9ht#JvXnoWQDK3rl5pZWjy?ipU*Rrro;HJ|FpqbK$?Nsd&9#)s$RsFVMEZ zJkm;Ymhcc%5Ok{ZJ;Uagnv5GElOz<9-T5()RqN&479^hxf2!}mO9+?+C9Uw{UKxe9 z8CM?*f4Crz>)b+GaFe%f4V|u}Zbk|Ahr%*2g*e8E+Ti@g?TTV!j$dNJ_ViZE66yY9^}U=HSjTn7~2#|o@!g{j&z=*-JfQL6`|19#8+uzsxYn9JRy?QOPbY;>PKDVIhB0ssj^Pz*XiHg{;j zXXfPkgI?~^qeYK3SC2%;Us$_5DJnLd4MV4hNj5r)RN~C>0gBokZSP4g23+YdC65E}aR^+HD@k?A1EG1Q;B0lmnBmR3o zdG#_QDW#5D*eI_*wBuo*db-c3N9)$kRGm5IM-RQzD@mNhJR&|F{2u+paF60ez!U89CYry8{z7u$ZmceHP}vbwVNK5eLBvbu)mpm#3iz;t z&LeXWz!QZJitUwp%LY=B)KM!@eYJls`{MG-IWv_~DV92I22-VRSY zMOR(Dh)!}{;b^S>x0}MD%S`{yYS~=XNb+vI+790UXMMc{ zTysxl=dyb%K~57I3@_o}$?1mfC2MSMJJ`JHJE83)Cd3`#p`pSi;2YQ8u58;te9f-M z0m~x&gMUe--X!iUy&%Rub##jJs*khk4dG6lbyQRY7N8CX&~@p1L%CKJmCih8H+lGt zwX2`hx|mSgaWv=WV~jrskq}QK5%%Cp{tEhCre^#@08!~40(YqDf z-bR){q9x74RqEke;OJ;rm{()k+cxoHBZj)A?o$G1FB-|-E)1U)8|FGcrcKHnzD#DZ zIrq%1)wh9s9tiy$IC|x=Ai<6;(pCcRCsrNM&D`3Z0T^Z%!gh-!46FxX^oY0YCSlz#R({&lR-30>x#fZYJP&$EMaB z)`P@x{26yv<`8RR)s*Lgm=d3(5_zvXLAj-{_alGH)GCW+ zL6A~t=93)lj~gVa5k{1wlQvxw8e?AI#!1hr2ljU1CCi&8F+u^GpKU3M|J`yJwYVVm34kseGyXU|{v}&y9m)mQ?I2lLf z4^_936|?O$Wr__ByS_tx>55*bHtCQ^u0H`=q~P!f)?MR9-+5Do7?>FsqxRM_^3w`3 zPf}}Pv<*XISrl$$xa*t_Y#4(ZDLoCI;m23mAi6^ZzdF~RYgo`sCV8oI9S&N1TEfA@LWt_v26~c$n$trSOpk5#v}w!ii#J`nv)7^O z-}>H;-YFG(zXCaoY|+wo&?8;J(=#0`s?T?psbRZqNli0qcXM7UFqaS)uCg%>s~S|z zAJj@=|L&J%`Wo4ptaQ}zHqGOJCj})1b1i}|NJG3r5rdq^00TlxqfdCfEY3Jl1v^|S zOkJ>lQ`u3g)OMF~1kmV`N+pr<7@(PT z1H#G2Kn>Siduu<*Gy~^Z?MEf1_25cXTvc`G0|`_@@tpO5hNnZ-AHhjV$p8ka$lI(l zx8sskjVPP)YWKiqKHeSLIRExim^p<0x%NU6y>vWIrgBs#_Cdh^LrHOMMa)NdGZL~s z(+t23M@1Bqd9HO;C|{=7YEI`H$ zRtX(U5>2}ZtX()`9FDk#Q0M~9{UVQ+ky}#LVe1X`>kEz0zc!w)78=2P(no~HETAd z+~xbC=n-J6@Jhy+Qhde=IBvRtgss*dnn1VUOD1fisVdM~PHW z_xncPdS4y*V%HdZO9#h`BA@}K#b_NAkQzfUZJ$vnPsS%hdNAG(KNow;ZH#)BOdrRx zrD02Fl0-emah#}XG9Gou?_YwEYw{@1)Iikoii?{g`i4+ghyObgcOxuV*VCZRN)1RE3azs+oZL z&n1~SPq|FKIO2kfS3d1WI&0X(s6n8Ccldf7GhG+QdX_p=%uVeZF-f3Lpw)q~neW`A zgeS&;|NBOW<}2{l)z;@~igE49Fy~=FfsyOHBxA9 zs_SfwoNkU=?-;>*Y-2qmOJQz!6@R+Xwid=>SDg2Y*E6QB+NDwsq)lrr&;E= z&KT?MSKN#GonWtuxG{_>#*r7wZ!c6356879#k2TZlW8|RS}=tsQ$T%57aaeJ!IK#H zHkUINL^bQU{nNuyQZF^;*DV~^bcLtmHhNwD$+A?9W$7}+f3N1uZ065SlPpcfx{n3M z&!5X>Y{rw+9=M0*ZUqwWh(O%3FZ2Z=>;?RbUTR@~HZp`hWNf%ThA5Wqvsbbc;0Oj0 z@#^g1htz;T$^hCGdx^~lYRx8NUmrL{l921fLKdilF zR8$S$#ybc|Dk0qslF~J#QX<{0bO?yl&?QJCARw)DhjcecHwZ{K2+R<}0K<5;_xr4M z&RXyNe0kUTz!%nH*t2K$-v79+-!&i6wN*)s>OB&P_Io4nE1hJYc{IT@7=i>}t zL=Xv*$)EXc>wa_vo|309AZWO*DLfhY^0_c`l3E%jI7mXu z7NyWGoiXY9TJne(Cz;7}@Wr+TGI_N5BeJ1$CJ*E-V6nnLU+G&dcR16Yy!~RDFG8r? zXH}ak;R(cz)mBV1rgTO5*X2R(%PUF6R{MnIY36|6py$nh@4nkj4Q^IX;>{Ea^FQbA z#8-$k->%LiY*o2+iY#_*(q{IhEk3zV(?~Wnak?2^p;C~l>{Zyy2{GR3{hA|6db^nJ zDB8EFYUHr?WHE34bxVt3r9Y4RcfTehQx`IKg{aSLs>xz0AT0NIp}n;N zqlBl^_P!Vkk#g3$`c;ZsIIZisGShfjm^TDDywo>#s$BH*SR6ZU7DMUn22s8TlO$co zm_jeRt_Le^*JnDk+b6e>iW+EU+sU+h>3mZP0qDsHE8)K6;Q-&vCDY?^ho-PBZ?Ajx z3%!~8dw2Eb8DV9Gf$SNIy{IU(&pGK7%+PAu+WTx2wY_mx#^Q%>ozT;7yxzYYuHU=J zKq<#c#J17guBsgr+eFo?sUjczb01~j!>}qe+MkK#b&l;3SHja8kUVJ`f5^Oa3tj}1u&8*Oyp0wW`x`+UvTc6!G!^-ta0zxQsY3P0OK`slsejldC`n2}1B zhpx30tp(H>!KCvmo%MAi>?;|9$xuvHcrgI5vSv6Q4KsJHJ$vS16nHuj0dn%_w==hbE3zDK)!*mi+`RA?&9>6Wy# zzG~1G_>m2ZqfnJdyFC8H#NfM93gS~3>|+loXo}B5ChYpt*3oBhzYuUEl>AK}HHgS%f8lK{d0XI&H37@LB!>HrOIlp4|%SA@b z_AQWV^v@9QEuwSS5xHA&fs=RCaybh_uV!avwHk9ZQ@PytR~gu-V>FYxGVsepgXM#V zs1wQ#a+qP2xv`b))LZj2XH*yJZF9`6GYj_q-yFD!Qc`h@O>ywonQ?r}@jV%VaWB%Q z7*X~IG$4)9Ih!XjMh3H3cKkHT9q3$Q6A#ItBno@$TosG$T=x9wgg2ORn1uukxaIo$5c8?GsMl4jipE0VPK4E^~_ z)gZy4Q7A=*a6rcUE{uj}OZBe-7+f zc6|7PC$nMbTT;E}QDqMBr9U7?DS@S*fpqrOFBUwc1TE_0hx9*AhH_>4)qF^KXkw&q zAJs#N$Hes->h?o;7Z4ek9|dsr-|iMTuw)d+czU_=N7Ct44*k@<1V^5HB>g>qx}QSJ z-BaeesbYazRfaouE64lL@h zD;C~f$CRGu3+HuZRX9Iu$bNq@_DfZ8yv!_%DE2i2dZk^ce|jL3tJfxdN8=w56YM48 zhzQuBAPL@7vmhGo))CLSgZ7UHS}jnjK4~(=iMhQUF6|$;7@ZQR{l#iEsj22q)@HlM zJJTTLxy~~QfIixQp!1c7Ej&8;4`|r1ZmzRX?7C?$!F$VvJUrHUndOt=q_}MEN2dZs^}?^WV%M0UIbCIt7=?)G%X=HV7vv1hD_!?z*C zULcYCU^uNfC219mr6Csr!;*mpBhpYks4I9gM2FoclI|ryCkKL`bRlpe;R{kmI`#Rq@lO**NWS ze;)vf+_>mHJNVXU=F-+PgY$ntBwZrD5WG=5wd!4qBxyC6)Osw~iY^nzcop{5zSSbK zXoflLRrn*MNRqioy3qMAbvD^S*{UD4ZwLdnw%=XZBIq|WE7jKx=RJdn9mz%D7bfMS zRptuk>aeziOCKhNC&bxh@;Rapdr$V;U7_oP8V*~u%-xk%BFS5g4yVqpwtil-)dif^ ztszO`=tImL-jU%Laz+oF$cdc}f12 zJalOtr%lpUyu;f%L|WUgSEg6j7SF+|TOT8Yx^R&cu!f>f*B{Is$oVbLZ;$RCu{cw# zz|(D(1#TGKa*A1SuQ?L6Sz-xN^knJ!Xgs7-cDtwpT|bJ#Tj&qde4TTpQ1bz2~uC}JG9rRuqUUT^k|Lq)E^wU65@cveDcoK? z<2YTnTr`{)qGS|q67UOk==I(8cUAb5%I_vKP{J^n`vzXln$Wy%t{1ek#p31TrRoeB zdt!Kw5Q4hANM;(vOJ%rc`y#Gqo}_>6yh- zoN@<3nJES(+-1oeo;p+*KK+R<@)&J{SV9vW78W+ZD)-ifYE7g~K_xow=tBzDk?bLW zCpl9v$gcYE2@f(ool9KDkEui73zDfcobdUJ80cs-6aC_nuMA_xhVx72qlgtB;vCsO z7y#_vMXiQCb#W}81a>3|A0%JUq3zRhJQydT`r9ybnFW+7c*wbwwbAhZGQ8hV+w)S))%I7OO;B?5n zxXMSO{;IkE@`%t6m1YtS6+m=ze@%{Vv%v5E@|@6~+5?v|cv=?g{4)RNHeK#M@R!=r z_SnTu5l7^W%~7_|at+gS0yR?6IoR+agu!0rS%1P3`cQ8DGLo(p>K!V~BSI^p5cEVN z&*VoEB=Pix+u_IZ8ear^ z7jJ)JfGtL@V$Fy*P+HN4E-GvV5g`cRo(N~stAWn1tz@~LcE!d^MumgrkXc9X#1)es zjJGptY_{2Y%-UXGv7;Y^(}i#5J~^NhoO%oNnob7|Qe4`RYR;ZGzmlG^(92g;;C`>c zufVOr$A047C3gVnL7;KVoZ}bvOa#%)(1+zd;R)Iyh4l>vd#N51 zJX)>3zZ5boWIkpTzT_cs?+mfp%_TYLq5z|99;S+weP--i7NNFbx)FX$LaeRx9>*N(*E&a9%NnHRs&qJM!$}qb ztP>a`3G<3zSGWl z$Kp8Se=#J8J9C`+TVK-5ybu0){%iE2F%%dfdU5$h@@}gLtLb<9z)xA?U~s$|+-8i& zN>xrKDB|j6FK!l~>29YLk!Wa&t9~4GcJ?v9`m4IcK2t3IA5h%m`dw12?<;$(>bUBv z-dzX&0A~TG`h+njkQ@T|T-vtDWhRyAE7_6k^!0$EHN)szZgH&OBnmfNbYQ*SH3Ccz zGnR=UUsf-5Cn0OK8LX~aQ6kB(jlP|`FmV|6eU+z6F3`R0J2*_I*`jONcVI4qzxC}v z>tg?(7u-Q|PQy;NV1Ga(BcW#l>-3&@cJ*Bd)%lbA(_a+5dp(lJD($4NaB_NQ}Esu}$$|Fwt$W(skFvD{){4EWHem zNBa3R5iT|v9^I;!v+hWkopkJEc#aya@wAt7nV6QbL{Q2nS$$Gs5*Y-Y*ogIz<_|3- zCv^-az5D^pbWmj1{Rl-DX)MU_M|bB^h`GiOm8us*=S4xi=P+;(>>BF6^{A`*^imvn z6T!FrU4;Qy2!f%%H;Y45&`aK&1HS|R>;Ra?^Hx|<@^*k-w+vCm>7^gn3WpUPP0kV6 zyq-0?bI=8clZgQ>@xl-HnBYVbIzt4={$WK~s{{KX{%XYc-hV*06q6hCmpoX2xY*)m zz}0|MqKva>THjo?Hd}(^utkh7YBg69kZtSx<7gmmV3^~jm#x5r%j!ne{_{up_xqfW zYp}T1KcEh0kFE)-TlV7&F1-G!n^_dqDBMrReE`~W89xIXMv^^nklCz|#uUBHc0p|~ zuglE?QsrqcH46pUA|Repp9D?{Tg-qXS?AC=P&zgc^f=k@A0BSm%AYWjog-$I^A?nnXhKT11RsMN^bSUOC?9O6rUQgTKjJW zIa)-lUp|B#P8J7)0mI!$>&0X^@C^$QBEU2{BySasv&o^3*=DQ*rrs`FV`=Wv;GaU* z@*6Y~`+x&C*oFb(ebTj69Z&ZZD%y_#V@elqy5c~{de_w*Dy<;Z?FLmxC$89yjW%@l zb@kB)Pwhw2Pa_k!6KiB%1rA+{`Zo2fvK!1bEH$VZwI5p$8iCE98y$aA*1y!ih}mCR z6GUEX*2mFj{e}ged~Pb0uOtmERrG7jxG~+Rlz%^z`+5rFbrKRZ^>O8<$l1np8GX7>8 z6ijhp;bNV08I*f*W*$gQ%1I3WT<_(yGm&x0Xbet9RRE{TL5*7d4=Ay&JD0E>Tzr_{N_Vm7>*ihmh4CHV78 zb^PMP$P~^LY+=DPbmM!cv2Q_zG=Wt|ArT{!hYkB_*Rm3UIFQd4|Y zG-Z5976xq~Uy?`~haU?}7s*yy-L-Hgt~%O@DHfQr*6H7kWDpF}he~5Wy^`~eyGZ=m zwv}s|>imx5EC-it@4!xU=au5PCN6HxS7(Or1AlhaJx$4*?PPGsXbY92dX}p%PW$m^ zUam~I@4(02pzsXSQTIZGXdnE2>5cjN%Z8{Bx^Sz9Z9k@&VwH%?n1UZvsGEOun(gf>)QJb< zs&KaPc{D6(@X}J5$UmQ^5siUZDbFNuu8Y8`F`8DUZ=L9hB2Ph10z%OL{S24CCHrz? zOha3Ptut$AD&gWx6{tK?Jaq?0AdtW!JcFq+nr&jPW&Lo8+6 zFw(R21a(A(vqoPa?LuZ?U7?Xh%?5QQq==a={4*+L7y_3Fv>RF{mzE5iq?2l#t`Opj z6p@I}-%KDrSVn4mT`_}1Ji84T8RmZM(OmUz)+C*YLR|5+G6P{?8?-4}sG8EAERbzl zANJNYC5NcQaMfW^QZIV<#FZ&x3w*-j8mG!jVNIyskew2r?U-sD(5}A#3oRw#s2%(Y z*8_1NWpag`#K8gfDUGrufx23nXaL9J!9T@ZUNFHfz!3#phBMJJg&_Ku5`d_d1gPTZ z_y1uC1@Ql+b|5?cQwS0i(!Z1`BtiSL_@Al~cVXd^QU9Apv&e~aqNG4OajVHv zUmqwZzqT|*oUf^xgs+p7H!QMP)4PQM3{6dREj<#ZSWFPw@27KsPP{ZPmI=G~1TX1gqXldoLpBBC2pN*Z*knqe4X3pT)4?o$X z&QE+iUG^*Cu- z2CPJp_48{wG^ck`#HR~uaK=Y7X9_m&1QaQ;8Fq-W2*s|;r6z*@K9H^qwoeo9Ec|`b zx^IR5fI_a$FcEiJF}m|nQ}y560=Dof3FO<`jd*zrR35bxX}G@a)ay?i+M~3x;T_Y; zhPe-}aUl}!q>!Spj;-N}!*x=mLz!tuQK?sBhF-?Hk)y~OO;f7_tyT2I%!|4lYs!l% zCR^MK<+9~gjgqRsaMY|c|3V-g5(nlTcZru)-#Ptu=3G3PQZL?qEE}kz3_b|)|1(3Dnx%hHo3Fen9wAf?|Mt_Hn8GolcPJbPQ&W6bi z(xx0@)kEx%W+3vW3N>BA8Y9rnD!*kiXt}>P-lKsPusHOH`Ds$oa#vc&jXz0p1e$V@eBVN%8weB(tHFY)-7kQehbX{ zbTD7(iX)YGOuNy>I49mH<;>Rd(V`{{^Mej%s(`lg?#D4jwCEHTkK=Wu8Dbc^4flg4 zAX#!mT2j}zT6Uv*dly8SJLX(*!D|ZbK7)JM?@y=uC~gWoG%`AAr%v~PI=PSj0aExr z>lHomDHv}{N^($|0Y-D7QUD3O)``DWQ{P+0tHT&5Zf;L0B#dwWl$gepGn4VnY zEND>N{vvbj3Q#|-hL1gcx=ClM?J&{`Y5I=TE!C$RDGgj4XRMI?q%oh=3uBY|;9wl; zZMz?>VU*Cm?fu?KV*lreyK2Ps3mCAEMXChkIT(k`A*D*?oQr>&*e^g;ALk3omO8$; ze)6EIC;0Voij6y5rYAS5lLoPn!?EDOl{v2QqHZ2FR5Sr!e74lkk#H-0z*`VUe9$l^ zsC-705cD`6P_$R>>}wDhXnO6c$2lRPR3L=6kFG~Qu#M7Qt_q}3wP`!atjcM zJSAZW62(^KK##GgQ;KOgu$t>6bD|@LVaDg@ALnp)&H>04@`jnkljW1$`Mi~1sx@Yr znSSA)g_|MMf_nnBn*DR;-HlR4f?#FA;LWen&*TiN8S8b^kh66*bR(9=w*#svD$XBRh*m?F_bRX3N=vj?(> z-LvxxgKzxcxX`A^cK*%k=x2x(O*4xD0vNNQ!~oJS^=Wm+OwZ|yml~tQ6BEoEgu(ca zQ?A4P3GRdtLtA_io_yr?(n5&m+h$bT1D#R}p7kB}mrM0`CeDf;hRDPGIXwEOgs%46 zo(wj4u?FiTWiHt9_W3#FO&{H^=k^ohSIL9!s2Sp}N=d2i25$$~0E&o1@2~%P?m?C0IVW|-X@T0tX+KVK8}qdC zPV1N+z2XBw(SbBx!=h^eu0P_6dSxM6EXD=I(WJ$Q`QAG$heNB`wBb%2B05ATg^=;t zoct&P_x8P6080iqJ-Y1FE3ZngFtT{X;)bNt#W%#S!w(;3Fep0c#Doq;RUb+7)y-B~ z!X7qZ)=M^KyrSTRty27)NY_Y9_*PKU(~o^Dt+G&Mapi!^XMTZ=bww|D|odrB%BH zAq{eW_5}uLLS(&~mFeP(>r}OJ<8|}n1LEJSgNuYO^@4FT*)(`a^`4b{m0c(8lt7T& zSdes5j8_{Ko4IzAbCve5pQsd?Q#&C#W(XQK0LSXMS697Ke}K-WOphxm-;9l`_ zxq#}GPHg{e3UYec=p#C2@`<2Qv)w1R8q z5V`t&qoFW;wS->rX1exkNlZdaCqL5EFx z+Q|r={0KHGQq4nDzpP#GxPc_iYBfb4t=^}z>dQ-i-JlwpLect5K?f?x%&DP+aRngb>#WeRlo{BNx2hpY+-0c^O)l-VK8auq5t=; z2F&@%@nR$mqS&Jt5g&qC6@=IJli=`q;H>c&`d9~o6{fz%cwIoHp8ZZYXi+ji-N@vi zL@huKsO^k7+7+yJ8t!XQ4-T8&Yitd{=syUPE2uES2*R(*v2fFe#^AQZXzVHOxxRJ4 zsH^AhDZy1Pk;l&t|AQ*ap+$eLgu%}89|wV5FU{2zr0rvGhScw?Wo(>naF>zBQ2WRH zjR7t*OOeb)Y$*hX8SC};-@5F$oa|33rP&eBo>PU(f}g+sY5pty+-bH!1{VTohnFW3 zijOFd;hBbe!_sZ@t+$JSa~~^^SXm{l8%6W}eV{YjRBq6X&F!pzNAND&eX)$~sMnGk z%&HqEnvY0O)4BbHdxqrOCII=%hf4YN7z1PmRX=S#m-o@sr4Du%LSGn%Gn+P3f z>ynoVLPj>yqt_v|Ooox7nh;TaCxCc=yBrirkHO8|P6Sg@j;itquuu-?PJ-Kay4jQ} zJpOT7ar%ro(H37*WQQTz{22XcnQOEY&tGE}CE(8oSRDGDu&Kry{7hGuRB{DIP*~5* zmOEu7Pfm%p!R}4MN5aJVum4M5k@tzT>V)SkpKz7;62I!9avvk`?K@B~Iv&mkK*2ye zVxsENnsj6EWF$KFM#fVxBtFZwVtTd`M6#fHq}PIvE%SWvA9v!y)Y8h3lS`Xrlo#ht z7TT##=>b4I8F#`s?-MF-Ia&9&V|i1f_)aRp|36gxmvH#G28o6s)2Z&O2mM}@3?8Kix0>j>shR^Xi3N18=+?s}5`f0isOXcK z(pyF^B}LoML=DPP1mgFc<1_((`#0mUYi#RO^03Fp4X`AV4LTekf#WYa@o#JQFR;cs zC7^Nri=p`!cqFN9Jn-QVjh&EaE0@fWYWI+A)S?4Kat%jDuOyPhss6EV(V}`R?+Ka@ zwS#UCfdBAsKwE%7_)n{>-;jPvILyuWkap2&o8@UY_{l;=yo|<}rqAKfu>#0Pw2vUd zSEJ{zhO1XNzqjdx_gj#+n>z_nkI)~`vS{6E;5Ei6KMveFM|K1BPW19D!h*n~`hgs@ zbER+DKZm%ni7fG8@fpv2+9zu7)M>R2v*+*8(I>cCx1y_TACgBP`8IPO9zYR(y;KVE z9}8Ekd#s996dauCwhT|AS#?coSvEY8PO4)LF4hfx?z?&UI22D6E#12JQ@T%%^$)f? zcx|yTVO*O-5hyN*y2e99g~oj@>uGkNT7Br#54ScuqBSQ0l_7iG--2nXlqko&B;qG%L zSBQHf`;Zy8ivw>KJ$~N1cy7nq?+=LY<=2HHE>L&sA`bi{vz zV(rX<*r>emoDK_vk zDSrllq%5z!e*hsgZfnuh55%+cqE$$#CTli!M6I$t#Au3`YkT(Na|^bNLiyfmP@ja&*@@leBVYK)+LkgHbBi>>$kG5( z_)%wiL_iR~oFg47_v7(eQGJ-|JMgygJlLTGH6cx2gNSqGLWB*hG0xWWNg6gZpr-0) zJu3|rXzG+`RB$Z@3dIb#s5pPcttj%F7jBxkMg-vovIg~*AY3;p3HnmcHm9qdGQvM= z9h*@7k2`9&tj;Ee$UvGKHPMNS=qWQi&S98CsuZs~TpV7!SXS&R zb(jk3@7yu{b|>7?{|?9S)B>!?CcC7BUoyJ0T>Lv}F_&a#o&kpWdkwT8#6>IEZ>(Qk zdgQxMT$(L$y0;5Bno3N63Hb)}G;6sNH_|fmW8w)#lpTJRbX^wRc8!##I9Qg4;2)fn zI(oI{)Uv{B>ePx&>~Fz%JYxeqh4CuJMr=)?QgK7sUBu2rU3>c>(rkzejV?qntg8nK zIBM}Ew;m^KNJ&iKY}q!|EVk=aI_i7DlWs~L#PKdr@O&A0P`47-$4l0wm4BawqFZ&y zea!8zL_1N<*GG;0R;ZLUdpmxU!9=a-l;m~tmJ_u@Z|6qci|Pq})A-6ep+gi4&`fe;v9(xI1t|_Yt_sng}vQ<*)4w6TY%3i+J-I1EZ*;&3R4a+nHQQQBm{EL zqQuMtClU$|o1{708pBMds|#E1Xk!pQc{o!2hpk3yr(8ewVoemg+G7hc6Uh|mPPP(g zAW@OZn{RHHd-^sb2n zu1^}D#c8x-%w%uEhUgpEL#26<;xL&IfBs@eH`T3#4|J@s_oF_9A54s~i7A*8^)j!U zh*nv9 zvBryVzf(s{ZqV-cR6bXL(x~`-eO`bUzUT>pePL3-oI2!9a#?B!wxPM|-ZvP{ll3p( z2BrbC^dv~(jS!zwM35ddH#U$FVm`94x7Vx8oUBvZoS^&Jkb+WeB90{WyX^OunzDNrn-oitw4(OfK&LLhXT1g|3wh!(?CYUjlK_s1}*H0s;;cBCOGN@LpvJl{CqfjoF9dEoLh|U{rFv$r~;RxK4l)&Ha5IvU?n9)-wqFnlf?T6Ia809*+Iv}B{>W-@lv)_{OHaUS5Tf`<93S$t={5oaHCE5K);COl50FUnaMFX{{E>r)~OtzqWaxzZ(ju59|AgvgAheo6W#!)3i8^)h6T znCH=kx|~81=J`_f458}QL`*JkU*|xoH2Q)X40?lzk!l?X3(~Px&oO~j6NlE+uM6;H zuR6~+qDyBCvpWv$OFN-9kRSXU?leWr3~?jKzB{hKIg1BEL1EsazWeb)W?cP&%!~dy zTSm^Fk|CCr(v@Xqt8!Gs@0erTiIaG-JN;CV$ zG>OJ+2@^*xd;QdMcQ;o{_&E+0Ub0Y=&M!&MHq&7Sb0Rfi%;w3r_qkyH5=fXi?BfY- zzGK3p#YlheEozgWr*>X-b4bwwQ(C5Z5n^p|XSIY(X9oHKZng85MpFB7_ur7{TM5y* z&=P+^E+?vihEMHtD;iv$u0^T%TD%3Z-(M)3(*7=}8!Vwo#}A~xqeJon&;0eDcfHFI zg_|8bc`&~4O5rX-E@K5Iiwc*Kf5U3?Iy$oZyFgdL+C*V%KzK@wt^FzhZ)(vakd^Gxb%-#TF+*k3Xs(j$SM)^-?1l`Kl% zKiJs>rw{i}gZk~>m;3?Qzc7!`c&KuGA(Au_M8i>C$qCH9{x#<1Vm4tRI+*LfG!{Uc zmFi%8q#DFJPox_aFH-CB)jdZNrfT|d@^ zc^_{&0%rqWP6BMf5mRWh|0TYI=6@DV{}$|^mjOUQ|0mn#c$_9EXD+}V<++)Swg6<@ z{2Lb(;PhAhD;E?{gZ(!yD5y@U>1HoF^yn#jQxe6lz1duNB4}j4OB_gRDk|aprot@? zN}juesegSC-#%{}s@N94J@JN$`DqNg6S3TcGCNbny*+3f3C{BY{! zd$K^XR-f9v{*kijIhC+9M=Ftwqv2P!fLMaxD>1|p{S!~Z0XiH$RM1yuF)8K6ANz4s z#>C*PEtvESZFn3A?EwJj(b4wHh6QmngJwq0ODMG!(I~MJRdIzh3taXT6>!aJ0bU&d zzrOm4!vVyX5DWkErgO)hrhH{c4G`zv%ZZbq*;Na6dKQf@4gE;7dpRV7 ztbV5IP2Km_wx}^dH7?W8skhv;q_3&d4RceV*pn}JEsUXEk!HN@3Xdjo{qP;Xo13VB zl}RK^R=HVU4w_j!e1$eCF1%~$ek*i>jWjDP-tyKOaeR56x@KHA$1;ENrlloRn}~)5zq8$}AuN%IUUar7oPNaHtg)P7NGYBtQRKFw_@^3L$=wbE#t zR0pQ-0N@$S`_}A6k@O-;aCJvaYp4{-<)2S)^5pq3X_CrG0^&drO+^>>@!1y7!$<0y`dkSalHr*l=3X<%MfN~$7ERtoj z^Iv2f#iZN&>Az|yKZs{Iu9b z{TdgPqZF8YVse7}J>E8|k@lfoo8EV_r8xp*6`XJz9d}FGd(+2P&AHV}JOr zj(b{HSW3N5Vb-M~K;NUWt~OLPGrd5}@LQCsWbJQ~2P*J&CcH2^TNPD?!8)uts3`tp@VfYf|w9oEFC^bjeWG6DMwmw5M z62Y*OurPLLtoHNch`^4p zP7GNtQ>K&-wo9J!1f!e&qT_2J{v!wA)K4~#m*2C3M4{bTNJeWao&s^Eo z*IaQL_43>@SNBX{nFmd}1WY*fb=j?hjsg4-dD%}yhERh30@!3L+iQQ+^WAaTF}b(M zDQ zd6;olvLHQKk#G<`{%fn~f@QY&g|t+9%OFrHv)Rw)#*Xdpc4J z>JlWDrDSVw+hqTJvoRUw&9>d=TO4^su~AE9o9$eAY+xK$m0Zll#Z&oNpev2UYBcu2 zbCm{C?-Pn@kJm=Z`ke1%-^@K(hn7@YLU^_#jEub$dJ-e>=yjqOeuw%>9hA-Vu%r== z)d_H$G%13(*fv9&6LZr_dPo`kOQE9oT=0ndyau@uAV*1Vvm8@;p%pVT5g{~gVQlTY z80F7{05&(wLx81FqioWNrzsw+;#~fd8-JX|Ys$e(F;GYW(LZw6^%%<1T*%t;WA^fAPLpz;Kf=sxmvY5EUzr$ik`YYqrw)%u5j!1=$> z2Y;RSy8l8r{3p)zL3D^q<=W;6v4Wst*;w#y@Y{{tDo!BFsbn`*%*w~+btzS% zoncrQ4@t5&lu-Vb7_#~KlHryL6!5=~V+!N)e~triC46ma2|d9F9*26i@=CTkp)%-z z;X>u2Byr5`G_5H?74(-Dhgr74rUoTpW%alPOpuATF;z^PVKhA8l-G zgR2O@VTN7HYvO5<9(eY3NC4@Bbq{-ztflI@o%v;1^aHfE)`c^3)Uv@_DMe zjcQpSh0WCxdgxKA$Z+wsFT_)MSeHp8#+Z8}H_)B1B*U#gePJ zAgrbW#0QUiK?i#xrdKT+RlP{QM2VaJ*MR4P%&<&iVB zMv-uc_DjyXrlhkATBnU;KW9smKcGfsxU(C)zos`bX(wF!=BV5GR~f`WvUMYVxL?}} zqTlmN^z}wU^~E0$`v=zt5Ly@F@k-eo1@1DtG*%^@>myf$LEw|2QCEosIq!G*=fr4w z;eA^*P`F3Q0Q>!x)8aSdm!6y|4S>%O<2SDh&qmZvj$Yg|IosFy#ii9b?WE3j-gfTA zE5lZMMIjb_uAw|ecTf)Onbt&SJu z=PPb4BCawa3npBWKb&KfC?MJjvDKKmq}vn+AXLg|+(>QnGPGY!?!6gndBEAg#4f0)LKKI*o}#C4x@AChd%$^Ci^ zU$>fPZ0z{(>~&K3JL)-KE2-L?6t(sz8(YsjXoc=#l)DfaldVvLV4m6W*6I3#&)=(F zVduNkpmm=*m8GJSz7z=kz{Bp{S-tlLY)0AK>A+4)Hl+5(p~%52@ux%Wb7xnI-T~rp zt=u<5;QfSsgRtt7DlsG&Y5+Ze52Lo;q6`ZFK)BB){budZ-S-ihLn4NBKRJ(5RUAEk-r87OCws$~NQbzfWzE|Qqm5m)SRzPRnX9OmEzBabWg1kV(i z6#8X~lIp;)8=;;}dyk6Fz4*O&MAd^|kOM`RN?|EJJw31I)GI1)Rr&BSLRCa^%Ltw9 zRABTg)zm6;6-BecqzPl^w#&nu576ujwDo$E&<^^T8EmUk?Qqm|O3BIKt<%UKIgcHA zJ$4Gx>~3+kHE<4dB%xKsn~&bAz@@ZTD|hTIMpFa?s;Lv24}RK6eL=V2@Rvb^ZPQa9 zW*GE1IV%Psl!Z)Uj_Jvc`Nhcz9d4!OQr%j+^jha)ooXW}4aO6dZFDT`ewnT;GbHWF zQIYA6x+M*Ptd7k^p)s2c>mkBH^vA}Z$wK!Bq}f~MEi-i#z{%U>d`hBbyRqBIwr}7c-_o8}4PTVbPWm^HnG)EGV4$!8_kxDbdEthIC z-PdWpo)O_v0J_^>=)T$ME;INVe~~%@LxY-unfo_RRl@cQiH@tLC}}o-Y1l+z;qf}b zWo9XR{T*w^#3#ZY+FuJ}wvFN$x)A~|$0o6DSmm1^l~yBpVdIODSFQxZK85VTSL=kv zh#1Z0R38H^y(U9C6U>jJ=dtb@E)_HBAw+FOV;c*Kwa~7iK;|xB1yFD1s*v1`;+06p7(hN3QwJVg%wrXxYD?O9melrh*neSAK)8l4>bFxqRZ)` z&y_NvG}}ec&bl2(e679E9=>*yOUhjm5XXyN@0^Dru^Yh0E7bQ)nAtyel zVW*20td$3R#8J?`{v6iCipxhL&URxhgu^UuzogRAFd%V;H%SlOs6tYAaIg422J*wa zG-upGzBTbBlTWB{ z|LkGZLp2*!ruBOp3Q`jB!fPQwzlwBT*M?zdV~7k+uf@Ua~NiME>q%B3;QSU)MKQxy+pB11vj`~ zso-TVVX-x*~2DB008gon?Cd#&6PCtV$j1*cp z#kJ>)zI-w&?3Y@A)`pU!M? zCA)Ph&fsvNI;2!)v^M+7JN35Q=$HzdLR9Npc#9auVNlaqUWM$praimLRIak@ln?v1u2 zj>M|hjc=H%dgU-)(6~st*X&c82MkVMMin)-H@2&$J8wY9OssnaB!Rk&6? zyK*<)9KwxxKWBKxXR%nf`0)0Ra`9)wt=p@!hP%Y~nHhZ1Or_4^goSJ8+V#_>d)^eU zOQke?iLyAcWCNvIU0@|=hbZHUGr-T%UI1$YahKnzdeP&yIb#10W$zsgSNryFk03;i z-c6!}sL}fj5iKG@^cpQX(FcQs=q(5mHF_PQccKSD^ca1#=rag|;r{JB&sy*MeSYhH z)_UJREz8WFZT8;Rd7Yp0IF#%1-E@sO8hxu-c~{xrlAMs{QW&YNDNrkUNGy%zpV6ZQ z5}0{AC%>P3N>bcov`N+=c|>uCXza&k?3aS)$vT^c6PMh3ul-)pks!v3HvL=;D?-8> z#H(<|>|yJIhA!k@5(|zs`(#AvOvCMkCq18OU-<|qe4qchJ|`i}?8JafUF6Hq^DrTH zMSTmAAS>DO?6VI@LyA7FzITgk7D8Q<*|&VZeR?Coeww^Gm0D`-!{g{s&)avB0&U+= zcztUL`~r)aGj5-TOZYj{24wUJ8Ei5kA99$7s-Jye{5UwgXs0G24X3aoHR$KzEn7(q zcJFMBDdr*NpUj_3iO&oX?4tGa)}y-L(D)=nHDy?l+4vEuD~R3&BpQ$v!si1}!k+xU z7_=jr);5Sf!karkCRDS+p(F-rOlOztm-hbnO4XFTnKi?j=MqRoj9=_s9ASu7)uP3_ z*x*u=?wtbI?H7rC5Si9y>ZK(UEw=Jsj?4)q&aA%Y^mQiU6XvFzoQ%E~>T2m7@ZoFX zN^|$#R^h1RQJ)I^7UrOX&H|@C0AFK(XqBP*7(w7!iPxKF`$}hCOXU}Z@?aM^0&*Yw zw6`bVtiW@}KBUNr`ngSb=e%UP7u|5|r$&Ea*4ihe15}0zpl{Wp*PlwHE}?x2#$B5y zD9hN7U>&>QvwN7E(MJAX?dEG0;3x~GmY)npGv1}esZtid4JRGXzrXq*#$l!sskq?V zDO<+b1(t@(Uw>-%M@NjAT1HwjO01J1i%ZIetWYd0TFzQY4W#o`H+CF==|b%Mizdg4 zaP~b>SKS4b;ua&Y)r9_bOXwJP+M!CkhTbBK@YAYI^-BYONx*?+*>ND|t#Ycby>HcqW+h3clx#>c?&L~I0^94?V|L3%aJmFIc@Cfock&8WZ>;JX3aDI{3Orst>I0c}-gaDh%KL@j-d(+8 z;%=h6y}_SzKf3CP`c`OQa{VF15HOZw)3w2p4K_PFyC+ik{Z*3l zheGQ5|9}*IxUy`l#-B@+u+)g1TBkT2QYbFsfzG?{p@1HzB^VG5Db69hDapr6<(zz* zq+0biXFvNnT9q#tf134oakGz+uF{d8mizEww|jl@v(^5O-6H)c!m$~G)s)aTVk@BB zFQdxOY=GVr^eJx{-hUwUvz69?GY}WEP9{Ybme9<}dJ}?x{{wQrQob2)WasUe`~zj& zSq9GvvFRMNE80%5Zx0VwEL0Vy0c|c-u&;VkK@~|dF;645Yh6ooZM%2rW&fpqN5{-) zim8Byc^jA3Sv2bH@!J~Ckl}VWH!0q#BfUv)gy%%1L>qt5tsgUqgE*0?`k@tf|$MKBNAUUy-}O7tqgj(4(>i6H(58v3`W#r5;HUr zCS!L&<9?|yu*pE{bvD#~;at=b{s`?lk}{(8#pr3@)z&TNp+n&=+Yr1JWgs;JiHJWimj8ke@w5@r(=-r5i^pL03s|{R(bj>FmgzBO7>jE!C z+jVu9-Ia4hQzXhg;;6`?tk|MBzZYG9qGbpqioca9(YHplmEMvyhP~`#co!+t9roNK z(bDPYR5%8R^=vx;T=b>YI>LnIDeV>z&F?Z|P(V&thY@xr#IG1Gj3He5IBELymC^eo zkpvZETlE#^hh&I`1mb&P-#HsU4DVjStaeofKQHL=e40EHLui!@C(2nOGuKXIpmpss z7?MA-_(X5v8chr7Qy)oEfoWAfckBr^2*VCP9e;m>_y=^F$8qiaJ602h5VWcfNhqz4TW%zv1EO7 z>59F)8Ittk;wv*W7;BkP|ATpOjj~U(7*qHNx-iJ|AYr{JpAN{1!Ng&HM{TPTm(*Qp*oNwFy|NA9QkY`v8mFVX zx5mR%A+cEQ6*u|OBJQGRZ=I;WO&QdJRSSIWR%~>SA%}Cq%8~n(di<@$p_cCi;bzHr z{pOZYV0KU+n7AOyHg_4DG3u`nydiAb#gg9?sra+usK@vZEiBNlIXI>mUa)?54)6s!Vas|=Cm5BJS}tN!HTV?RhJWg)w5vG zl*Vb0_KU$AIs4qn8k`FBfM~7bftGt8L=G*PZpZrd@d0I+kLLD@51-Oq^VUmh6E)zJ z8w703O*U+TnTHbB{`9Tim^UaeZvTOP2nbJIu*UIF7R3R(vKNInL z+prtVZg0aq-nS$~y?V<9&X>gM6&I9$vw>NVDU0lNj|I}%gMAG`sj~95*k>(CGvwGO9 z0cCqL$scWMY^D-AI1$o@lKZ}2d4OqE+x7ytMimGg4u-1`enR6(Y_E{XTcZ8}fk#WR z`8UgK{JkjD*5LE0qVTSIO_PyL4Z*4O1(rLU-pBf)Ef=4X%uhXks5}$L#G7OVbO^1e zEM@6?@!joHyAwEO&Y*2E;Ev-<1cyx6W4dneu)yBY=SyH)hy*5u>WcD-_prq_q2AX_ z`mn@Hup#6n-TWSNzA;vd>`6`WJ!JCu*6RZ{GE9L(psz8xeXhd!Rc+4j+`}cuG=S%@ zj;X2m_L!11$}`4O!*s}Ee9JzrLK@{zcs;vxFsDTpf;9ls08b2kOjuua;>BLE19|S% zx@JNm)-Z&@MkW?D_GLZnbG?=zS~i4$>L1Y4LjV_TB>zCrabJ4kPAIFor0ypt)8mAmNZ^TWpPlXws zq115h63606xp~`Zd7eiJgm#7y8*)zxLa(sz+cBHszSk9iFy zR`qZ}FZEa>3Anjsh9^*W`4rFJ2Vl9Hz2GP4;5dkYg$Ygr!{?4ZrM}b7Q;-xJa^Gvy z$?wjj#y0+sCNknsjzYYL){wWWWE22chJUPILbrXt#mdjU>lhLfTarE*$NUmu=le&; z_jhaO!OlFGVem>8r@ANv*9=+>VO}a5&qbM2>U9JymkTw-Hm_}Ct>bBZU+{GnpiNN? zDZpbCCfp0b|LFruKQ~E?l#n|j|Dpc-L4tzlC27>jtjv0nLM>i(G0w8enc25x%^a+j z%xG#f{W``kLyY%Px1;@xH`C;~$W!7T#h&M4pAueVK8u&$eIFjzerro!#k=alEWhHKqgZ?u~x6tF%eatVruZ zJ)`5mei*}WZ!q(3sT^jEV7|r9`NVz(&+27_0aE)$!&tySv1cZr18Ibe&%*&9xn zU%%n@%b9vXU*xx??;;YTg#ke|^%)ie#`hPtlDbp;8OQj|y5?0Sf;y{~j{-Aai@;hv z`qqNx7>))Dv|qP5x9&_02}2#n!z2%YiQGG8Irq_-#+qBDbL}FPj&I6-?ff{W*K{$Y z@HZyL@pq!<4)D=D19FBvxm5D}<=+?m4Kn((lEZ%682go-adZS$hYSK!{3aMMyUER1 z#%v)H+BafJFQT+4C5!A%!Z{#k$zM*Gj(}G&7~y!gBNS>448=G z?gn03*9t#CANDjI8xszF|6I_`bG>`4(PeiuUwo*nu+rm>zxZ^qZe(p#W+}1k!Agfw zFZs78S?peNpB8ctOyd8p~0~e+oo>k-k&})-bExa0(>LLB;rMn`L7h*BmzAT2s};N zdPz0T<2)n=z7G*>lroM0s}my}BVJ?U)CNYa)LB?h;udN)JlP_*z<8VyGde zU%VoRPu~6-3o!HtUa=0XAMC6preBkSwfl;pZ?G4o`dRtGQgt=aTEq;SL)kO-QA9#` z#5cYD)S*>g%|gP-YNsJk$d$n|X(!eSbNd0egchImo5~|Aju!k6kD9>o!e;=wLhevr z^=rkB6HmXqfRvrbc*jjANMNZyu( zmbYWU8B?5{ky`bUdMz=>f9}P*x!sTbp5Pez_ArSdWyJ8+)8cca^rA;fF%hM1ys*8_ z^60|Uml~h@x+U^-RjJnj>18Bk_oG zoAo;IW$Bk&|3ixQUm-Yr-}wHwy?624uuLUE0J;MDU-C8FwZq@Kw%Tb|Ov zAe=JeZjXOmenQAiH}pa~?;dkb49MvaDHV@+_krR~kl1rT&0RU_bJjd#qwJ;=+hWc5 zNdA=#7-3wH@Ci5-H^B`SGgTR4XZ7kUf$zR1lY|}TDDLw0bAtq7onh5Z6&PqAggVIL zACT#^i_1ZS1_BprY7Tx@GwoKaDSbEpx?Hn3VOH%!+xHd&uT6m@HH!%gJoJjnTxBpX z+!o_jR$``dJFn7FvQ<+(6EbgC;xPNZ-n7~F%5099^6_wQO+~1=A|^2|x1s+i;)Zoc z_Pm!|XhmnXfi(KCDz9CT8xav*?BrZxVe!<4cYEwpl%U$M`Np!6QI=r?4tAa2PJX4Z zlc8`F>+&ba;HZz`^@!G#x2Aq;dvg*9-4s6g5sms(8Q+X}F&f|y4(wp}0INska zn$M^!!QRL4taB|3&UGrNPpSK7oR^juKfn%-#m2a`Wgo`DY?}T+r2{8t{)?BM10GI-2OO6+jl5=zRBA%-Z0+? z7n#22M43`$9*F?aQhPJK2T3-Pz zJ@V7*$Al4Q11v?x4`zg1v#8u9mii?3SSj)fLYLtEi{WD&@gx(PIT`mK5V$XMimn zQI#k{N2XP7uHmuCYeCY(s#XEBNvPttqtw7H3LM_$YrnXd&hX|AK%t_?0XYRFu!0^#^e^WOU2OvEL&>zU-Pw%-O@iHU zvs)O>$|yfh;m3D~qUPiUG42D15))V`l-x1N@iM+DkM2)glb_$4A?JJWo?4Y#1+o$G z(VmiWw-~7@f7w9|^lWF0dNWvSXD79MG|K}azb~E*8TxP(X^f;9KAnp-&)l(D4q%;2 zgu{n%V2oU~(E;7Ja}BDlqCm=>%elnhpG087cI)}8472f__%Glc3kq$?6B4trn`4Ez zVG?P+7(S%foZydmg4eI;AIF$I{7#;rDDRPR;?4%Q!UmzYb_M17WmA*`<*gkMt_NE! z*-5dya#m^sPqXaV_$Sxp3Jh37@d&)0bIxVN_&6vtJhZmnq+O1lKU&c(BAMz@vD)}p z*${9F5k(L7$IA*wRhPnOdY1Vjdrh)lj#Ttt$G@4aUCv^x610xD97%gdC32ryQTc4)q2=tlJ105x%p9()LJ4ueX65I0KdiC8_U@aQVpU{TnO+9a2g}4;~TI_?}}>eI2cYoRZ9r|DGz7Cs0?CEkb;w#@6P_ZFG9qt zjcWtT?l1X9v!uBYaKAIdm3)wmIRPhR1l?4i!}?oar@9JmE{%Pb_b^?^OEYFnh>0N; z`Su%6V)xAn2~`#yn-WpU8&#Dzv&m`t+NKRM!Rk9DOajBswx}+#o-PM4%}$0?gm*mi zsfNdcmMX`uq%1mH7UoKX!`h^{S)HdpRiX0!O%tX5~E~lIL%5g5g z8hjxd+VQ+GXoyg^b+SmsbsG=#+#(HC}$4sL!@EPETA<8LExl zIUW^~-glk{h8K1{wI6HaUr?UJVB%@6q3d%oZY+uW)f5hm4hoPdg^m3c?C#Cu4l;TX zg9_8TGany{r@PV`ZjF(-G5ne=Qa#@)%?$eEj!U#?a4w0KaS2;YU_nRCNcNK~*O zY_5DaM|xTS@yWB=y_oR5XwK?)TU^DD_xWYd1)Yn!UhaPN-rVQc`<-klIn%|7gxudV z>5N`wIe0uVJFepsI{)BhyQzks_#6L%H{Bw4q~hY>9fRhYU}CJFBD%ekwWc9jz=FxZ zU25AAseipuCr54PPoY^yZ5+)tCxbCHY}6vUx!X5oX*}Jo&w57hOLFtH`FJSJ@pboI z6_V`!ZvuDllqCuMSKhX>FAGUs8V<1Rw5wGArV;Fz{VeA?*`6$AYF1QEsQEtow&qyv zqYtv=Z6cPY=~h{uzfkrNeI|<$RPyhGc?F?U2);=5cp?m@{JD8vs^0RV!?rze!)~qWJB^pfb5%39^49=(_&?_6N}ZE#B^+FOstFM&Cf$27<|8b8PjR zlThMMK{}=Vbh? zO0Z4JT|fW)dezdWoVUmcb;-@8_BW74PhQQ*`gQL<^b=_)+F zIx2#KI*(9+4q%MPD#W`-Xjj0XCS6!_RM68Cy)>j)sYCjC6*qv#TD)5T`8nWhOl*u# z|J~N=?SkRFTgCzBD4-p9m(I7ZNTU5C;IENJ9&7AQAB$n09Z~!Y4glnOp>T1C!_{a8|i*m*L zH;z>XliKDA0hc+-nCT?+?)u!-OJ#h_j9|z>M+kfB2AEat^D0a*aB=U3?LDPA5|KCf z+j&NKJ;#|P%GF3su9sr~NPH;u1{2J&t`@!R?Qt6#w#=6;(@tlJDosUdYNyD%D}M#k z!Zkfm2f+lb=;ag-!Rp8Z?u)#%KtG3)u4G9<^UpKMw>+sOmJ5Var?C2t6uJKE@v^fb zukk=n&nrP zr;1wEZjcz5VzLu#zHLq6dlIwN$>Mk;ITtK~%`}>=p3|xi*t<~+ss+>`BmNisc^V_S&3|X zr@gaVYtyewHH+rtaph?tASQ22UU1}>gGMR1yvMj7x<dfV9#Pt@vbRL zL{og#gsyc#KpwZ!_NL_7 zHNSqo1D_!#qQzG?^*}s)T3>~@08bGVNCITb^?e)O9Tv3P{g~kAkW}xfA&B$dRrs5I zunoy^DE~JIDL}pl2p+%7=X}%7C!*Za18y7Qb6I@|r6lm?cq{0E^+)l^xB4ihMr<0_t1I;P{`U3+{sX<&ws@aW(l(C)!FTgX7lj?O5p zSI^lA`Na1kBYP$TM$QCPmAn0{R9sYKTuxMKW`vAvL8Z5z^8PC??eB-qe@m8lGD>HH zoFtWwlN_mGT7E35{bO6e{|_|W_zQ*DU)`Vr<$_UT7C4knWdm zkoJAu?J1Kep046z%UR&RvswKW{sE0wujysi<8L)#2QfM8TT{XKux!0;XD8;lNWr>4 zMh%*2;M6C<9KlmfW=3%4Nx|;lK2WA!Vz6cH&RlSIeBgGByhb5b4j4>{_1Q6DlTxe8 zIop{qQN6oRpngT?IrfWy5L72ZBJ-_!M2_?bDY>Y(`b-FQ>yK@YJX@G|bD+Z*}`db6_oMDv6C*R{fT9B?A&IZcD#b+9ml zPLDqeg{G9>XML-SgXb*nO$pVzT92&xjK=S~682GRRLTyq#L>AY!8mu~4BN2`1D7F* z^ z5#6k>jvuO47I3W>JkZfKNN$DL>s{AIk$~6Y6e&d50l&+YsP1*_*>L)e4U`Pgbx2cb z7IOHQ`O<>1Ae1Zg{`>gHynAm8@T(g%bhj2<4<%@mHS%yyq>qCCUN@p z`Z>!1v@yJtzz8lpLv$VDEb9y0XWuq8kFT5MCIn00OoWiMi}|fnMg@b=+{N+M69VUZ z>zSq2201D*kLa~PEyA4TU{=EG}f#J@Qf(7C8vSFX0NsntY1s8Aa0uZ|ZA9 z_31Y4$oBE>k!9TqxTQ9b%h>q{#|*S#EyGqw<(W_i3}($KC{~l43dbT#wK5IRq)T4!G=F25R`+ROjGSDB^q>F zxut4s)1u0vT1VdpR z!tbY0lOBv<`hg#+i_*!0ai(1gJ+*IwsGRk?1--jRf|B`JKa|!O(mnJKx%=}*%M^1?+( zM|br3H{?vmM=I0)GhwEcei3y&UI9060kOL>7cCNBAVR@E4W5KJ;fSZ*K)c={G!AoS z6m2Stvt%LJffDC&H|)P}?%j+`w<{OUI~zXWB`oU4i7d9b|8cnQk5BFQ=GMlBPu0ke z_rtH2+s-0*)dlO(6te4KV{$qMh2_z!Y? zv>ReFAfU>96EHz0qC~AkeV{(g_ZQeqB!7Bdd69pvQe^J~?6zKfx|!`FOSyrFTY?`4 zM#~eS6hlrIok!a_ue5OwCvaBluI`4~v`Q3prSl_BhCQ;lA72-Knf5#xqR8d^hElQF z9Hu(^fJF{#FAipuyBuWfxId+oq5CMQtvUciiN_{}2+$(tSTh%1oeB-Lb&a60ZFbH( z2hK0cLc*KQ3${YAE-UlHQ0xsxVKzIVMCa$9KoF#OYxo|N)sSb+5(zzXbdP4ghjFbQ z&?dM}G_U*Gbj3DX=I-p7PH$ly%I?3;^0bY-O|1D3=+$-hG|-BHZsSfY$kFL2=sT!G z2j z!d_3Y4*DOtp|ytzwS()1-5oklGTam8#e7Q&lq!vfDN(fgo6fbkK39w8L6CNqJ! z|5GA-#`Z~9qs<%YWf;8j^P{}>qfhIp-x;Mjo!sAA;tMqe)vaxZS83MCvBWcvz2;8P z7JWQ;K{5`lv)un3fa6E&`~zwU1aSWAv|nK@R^{dOnYxAtGe+g7HWos3&oTh$pqi7(XwOAi_9p&1U-ONmC|O^@gS}LqIw~<0Z)-$Pveh=rDQnt0jZy@P z(J|e_&oa!y(yTG`EWI8*3I;iYDckMx27EKMOf_p~H|n7$KP-^#e*8^WO^+R=2Qc5* zJ)cv)p3@dSfh3g7)ZAPphg&pZ?Y1)J&pWddi@#vI&^$(6O|1=>>i5;vu6?oYTmgvp zb*iQwEM!z`p(KHtWbEV6CN951t=4pVMn>Ih%0W}?W8eLxlw-t`Ok@(Ffc^9@_ErXYB&aeE$z@6VzTV8(y zHo{)>YXL|O^$OLo<$b# zYyyYu5Eo){3;+UcZPVRbSEEdCdl~DdRUy-eXnN8r{P}QM7#&_6D{%19Y@}q@#2a<= zd|I$(8)?Rux`;PiTU!I5rVJk|u@SGi)I+0EuzOGD8e+9XIZJwd>`R>_4XItaYLiG+ zbM0WUY8;D|Zg{CZ4?pmK*kHd6{WZ0!k{>>C0M{&}TYH|pPI(s@KA2xzNRwD3(`CCt zq!wnk9ul4Q%KI+%#GHSyKHZJncdgFpqr(*&bKTS31Iys9cdIDTR{ioTbG@p@$umg7 zrEfJqc1sLxKk#dtneGC5zFD!|bq7a__Disxc9W;U#G+D~BLB#BaG;b?OvQJX7w*>O zvs^hUhjZN;Y0>ztG?6`b%mBuJJJ3JVmw;{~C%vs3Bio$GN$L+v$E!ADrB_3xZs)sb%_8s7=)KOfe zctn(@bR~zq9AiA#2UsnNG1B_FT*va#I&`YH!f*OOAn99Qny{Rhk=`ar!y5+dX5~sy z@@Cb8sdlw|hjRml^3}tbmsXA?OAm~;1GJJ7+mNk1iCO&9W#O4IDZz~$GxLLFwA_zr z_lkIEJFlFA)Eph1ZCu&1<3tv^?=G;uDUH92_m<8O@Ky91$;huCR}-X|T$hNS)MGWj zT~1P7I5R{ykc*5@(oeX}E(l6+f>=kvKyE{eUrMvPDJ*z2jZ4<-*rdi=}NcG*wweV9-HJ~%6BDOA?bb< z7L6l;yxc9R9h}jcO>C4T+715c-p>gSU}h|) z?03KuUx)zKb-hBe@pUv|S{OHuYC+YvhZZScD{?$dfBmbM`nDp$AKj-iPZqgaiX=kB z(=r0GW@!8iO=C9!-ysm&<6OMqYKdK&i?L-hRGBskrk@1wn5}$MnMVt+P1+n{wUrq! zje0Hos)8rMgc3pYKo}e2j7@*iH0}DjzSZ2aC*v$VszjOP=4@SCeQR`yuVJaELR|sQo3XpQKZQK(%2X=wk&7rvp}m^ zW5~5i={2gYNJwYlY{ZksRAfHxcC{|UNggWpZa;9V5{Ng@SuD?zYD?|!HH{?|1#65n zy&Ma<-w!g%k3swk9~&rxX?->T1>0$UgdoXKV=0>CDr>}Q{D_Mj0Ia<+wngU=Db+9Acav{<@-qr+ zBlunbg89-j+{0-AHI(5bMUj zAhfm#02zY&0s9R9!g~eP{neOEA?W@c_zL{1{=c9(dH)veqvD~va#p0ZvSQ+2;>(qO z`;YGckRITxz+3)rWL%KkdIz1!p}!!Cl2%wosG`9mDJ66<>D!S(l*|BS$mCm^?IC&X4lRbJ_^3|!5XG9Ta zYw%cq26;CPTLY%=;}(QgFg{Cq97Ux0PY4$*QWv8Z?%l!k=Nj7AT1vfSs^XC6L(0GK z9^fkXzi#kjx2+lCviJL7oDq>unyWdX=iN3{wv(2T)R^;QNttzEc~ib+?Sxix=e7l{SjEKgVR_yt7*gy+w0}sgE%&q|^ad}@fbiMuZ&s?42Zo$7 zB@C~LdUNZmBLKeQStR;1W-wY}iS(Ne%u+v08^ZdtO8C&Wt1}I`eE7qxn{cn!!^5ev zOu$1;v}dwVfU#|^7@Gu#x?ZWmL6fJ>A^RPCbG?v9Ew%MI4E3;{-a->4rid5Gg`skx zZHz>0lrn?!{tAINJ|pHZ`(6m=^yxUY^CfxqKt-OW$91Z|zboyWfvQ!lVPk4)4h>%^ z*^5v`rX7>kY(ks$BP4Y7s23sE&rXUtOG2w@VX{YHY3n+3rm8>dcYI8TG6wdMv7d{K zq7yXFBQ#zo^*mIxmF8maI{ScO7!alm{^8ep7F(*eCd`z(|ED=!wJyklh4`?lAV$xS zzr#9I>c?CxsklQtpK@|3qz$^wO1Y>EO=(@2;g&2Br|_~VUC_gseoe^dF<4wvH<`o zTu)@gK`~D-qlLe7z%fT=Ib-(6N2YqM4OeU(^}BIHo85$?BhRE##fWQ~A4=?9pWG+` z70PfNR2527pK;hDEk?gQ&Lxc3yfsh z+Lg>7@P0RUS;_&kPuy&cT1ZGEo*ZgXPQ(uC1Sh@D!D$r1x_U$C;MU%s8#IGNwH{xY zh39NrU?^%3rh{iG{$kzKNXOaC41P^U3x~$2Tu;WH+&u5`Q1I>3&+RIX`8WvrCN1Yd zUB;Ag&d9Td2G^&gqa)&C?YznAiOp$bZ!~xiu;mmq!}>~Zn-NY9ow&}?yXLH7RDU4c z-^s2Ou&w=0m7cL0)n1dKUH}$wew37|XpW^b+o`y3bVaG)F(x}Z;t_u;R^LXpfx?XbF8w*o#;!8ZWaI4%p_PG!XVk6QuE-?gR~>PJ4{gKwtF+3u1&L;QG}nf}?Zq-Gto5 zo1eW0m{(qR!VW0!URXHf+Z%nZ+q_6n93t>%*gp>kzP6tt@gQ8wRKPg?q6raUO}&bf$sitt~k%9Z0Y|j-$FUU=iXlxOeAZ*~o~FZ{tz5 zarx}jhzC`&y2UM~X@O5eByT8`eh18?+;{;qi8^geCzVj}A+*sdRu2u1s!yaebH-qu z6axO7V(=};A2o)Dw;Otz`BR&T_HcCoouDlf20XCD%V9R0JMC~j^5Q2N*I z{_Nz(#u`OxOf`}vfyw9wCQcQCMonmoDJqL;v!J0{YS8k$<|JOQ-^&VvIGX2J!c zE3sjgK|F)(qOk+I7J_?h2FT-w0zw{VE$v4V%e#X=96w8?!l}&(B5hGs(atZw)Lxgt zCA`q%gTc_7;Wpt_|JeyaJpCJF+AcABkLfMakb+%NGcMnQ2aFr^AXdX(Xgy^gklw*L z0R!U|YYZ{<_-jGh-B6l#38`2Fq9m}5saojp!_MQ$&HVS{WS6jx7OpS6nD?A~T0z;E z-qqy-XPY8eoR~w71O*u#nZt`J@22_i78C&XDW*&mqz+wTQkMayHGwt5yq-@Ypp!yXE(y8Lr6EpF@95BFsECOt zQ!A2C`Kb?=;IG+#1Gu@I*pc-_daMJ?M4KGDZQ3$d?f#%H3!B7__D`O_lR8V|(qy+4 z>-+Sgl7!~O@IBVD7fOv&!pLr)?Vu4Umj8epmo(S*Lddvu5CeJW8zyS$qkFz21J~P8 zyHpR|mlwXiW$Slv5(vmGT9U5fM+ucxJKT`W9Ki)0=2}lfFB@tDcYC=rNC#cJ0XBE8=EU$1=^Q(i^_gT8MLD-?4FY`i-o;iCsGKQt2AJA zdV06!z~h09fSag(=JT`QbVKKjLt5aLu!{?raW*c@Ci{zBKWwvPy8j$+HK*Yx{K6g_ z&LlHv>E-~y)-~Pfv3dSOb}TeZED2&mtQ5tu6#YOC%x@4-YBKfHu6)RSO$6@G(plNL z3EHh434tz8d&1~|6UX)WIL3Ph$DQsyOMXK%AX9f7&X0+ z8E311QLw4#rnGlun=;U`c z-y*++cEG`S0I;HnaTfmQe4mG@u(?_WS52z=AZd+BuwbR(rNCx90K{y-Wa-j#y>{!xBH{R^U8 zoDQb1ivmtr3hQB!t~TjMbjJjSIaBcDNc*)%)AbcT!0pG}De}Cf#?nS8vVc>X@*Z&& zog1W{2QV*rCCj_jj`)jaO61vZl@)qN1RLs9SRJ`ck+6K^(dO~5QQ>%t+tUy(xF8TX zJvCl$m=P9CbCvY3wT^vJmn7uM{EY0v8a5RyGoR&UDG~fLm;{@+E*u46o;uAYIn?4G z%%N{ZM@G51E?EdtBe!*?4v$8ALm|ee*h5tG-2GxbOB7w94MVe7`*p>ic;P;9EjSTp zxOP=~n??ZQHRJFKw<^kj-*XWt)LeyPxk2)f1&LICQ?cceyL=p0o=shJ&QM(DSf1s7` zAT^hfmfV!FSc{ml6d#fITKIL~fOzIgWAxSMyI`c818jV?YY<_2rrUy5@`Q_(!NP#a zyfY+sW7fH3+KI~A-kw~f6oVl*dX8!VUjBh^z*9=2jej4AZb2A;-4vAN+jh=6)5+6B zcI-=oDYynX(pb}{V5oe)pUbo7Y|CL=vbJ)v6yo%~fIKTs|AfEd4(FUa)0zVG+YM6< zdf>A}|FnVA{<&fDMUx>g>aC^FH~Gpf!#}$yDfF%J7%dszv|$ol96jETfNULEU>i_- z3QjkNBDAswktHGa4vl;z+yyimUjE|aI9*N1PighJm9V-8^8rY`PcdoBy$N^DgmPj@bflqZ!32m2^0EL9oKX=Sy-cm;eVm; zeLvl&@pI9Fx~M3`n8Ob8-UbmQIBj1Q)C^$DHPDSCYm%Q)Y_h|rDUBU*b$e(^|}-}%|&I+<50A4@0IW^3vBJ-z^-X3 z#xUvuh9K!Xi2iud)Kn33pY26MOA1d`3tMdvU~qR^B?88+vUCP7_6C79jXZ$L;widE zseBW1ZMlv7z^hO41sFNO2YJNVOwrcAob9!E6tWNoZ z)5#3do5o8NmexZnf0j814&64ieaS(MFq$0TrY$}MR*mB};O-fxx%BDP0&?o-hJN*y zmZq2ghqJc~i>hzme+NlP=?>}cZd4dTB$O_tLqNJikQy2U6zN8~yQI58haRK_hID{| z`@gvF-?4wsvmc+m_px920uM&lnzg=lUFZ2Z>3*Czz!ZUaw;=dnkEG&I$U(p4`JQJO zX-um}VL`2Gwq%l!&=Xhwcl=lw9jR+(Q(RtSmcHzsidtd7pH@BQf?U~Z2QgaAjd{Jwf^-wW{Lr0lwpDiYluozs$ zu`l6d;Ik<=oD_Y@M@S8rVyEx#z}(f#fd-DFq?%XT9B(DwQSIWaD*Wp57W^teE$d^I&Fet+$1(tc~U|C+gz zKdpOOI>~cGoX=j<~84(^T zt`ctUH`RC3aX8|Y6-YoWN3<+GQJz>$^zrq0!)LBWkFBHAq9gw}V#eN)OdptoqH22J zafjau?`pu^mS<CtQ)M2mN_sM(CN7jA+b-&e?Rv z@Qn^j9ZjV4gUQgPiMe38Yi_-%26vmW!k<63wm*r#nWxiez#6`8i=f^8n=x6lg(>|H z7yL7Qku8dCUOWIi%!`wovF}o;#lf;2f*x7<$5Xt*x zS8nnO3Cu3oz#0zx1Hf8-tVk;%!=6KMpYL=%joiIALH(Kg4d{#h%>4#tvj4{Yu2Te& zqR(k-I5P{3OtqEbFruVP2D-hRmdDf7d6J|bjKWs>8~qfJlqLqW1bpS6 zgdyT(!hi2L&@Dp%j_>-|SlrhfX{$$ z?*H*i5>ejvR&8zk*~5&Q)E*k_H(!3|Q;-)MjEPEr>wMRst8Z!4!b@ds>7jE^8KxYj z0R7x92kNlE0bQ;_QP`20k4hpo6FWjvups7vP?n;aA_)ASIPy|p`^NPL966~Cpg{u# zN&fi~?_X|&Wz=ruXYH~VIK1Cs!uCGy{l89-o{pYd- z2^dpJY;%=Y#$q5OZ5G_}124pf547)Nmc5xBN{*zr3G+y8gQ<>W&9CR@b|Ad4F(w+<@Pq}vZpj?||h44@QVzcKuVaG_f6U^RKQV!0m zu(!uMtfz{`ak^OFQGa~$vtnND4tRJEgZ`7w zk@r>%0xv^Q@pFLwP1u_QI`%1d>RYDg^T$N1$EIx#w4y|mS=$?rQ#TSHgaqopNgNgj z@fmMQ%^^dFMp|chJZPyL3H0fm8(W+F98x~vs?$Jp=7TqJ9|DW9+^73WL&Pee^_8Qr zcfBpTJ_Davw^&%P9F8?HE^z!**%IK6c{0lJ@iWWdXEr5s@v3tBu+)^Iy($mZOb5KO zwHHp6h7|L-vne`)vY_QHEd@5_U>Wo`lAJnBVpEs=1|82u@jJ=zpv8PZ>Z5jLZmu0P zv+FY8=cCc$q1uY^kBQ8wzq$CYK9r0oQ0`Fdut`+N)fwS^io#6&LXM3wf46&1LjZ>r z<<i)W!Qq-GN1pqG6r*%IrGuNA#`@)b!$3*UM&LMA#N?=^@ktHCPgj?{ z`O1DOu?4*~wLW*&Hs24rH zv|j_5D-HFTlVFso){4=dyWQxP%lu+QLZ=rLjKJK0PCo%*fAB}NIdGEFZ4FV2{NVC@ z>e0wj!UJVYW>>5pK#>X@QU5=_i;@sf$O2o)s<>53v86F3#p{|2@xN0BHPC8@(Gtg| zv9jGbgP(<>z5Z!Q08GEY{MgV=^mO|wS$Ng5{Ggp6(TGAJSe&-*pEz{|mcA$AMYdR0 zjzcKG94LYIIt~ba|0i>gAx^PeyW@P`Te>!t8w=IGcMxN(w!{lq7O6?-L6Dzyf=9 z{%`0jP@I89xLB$#c4DcuMK_9)N+CplCyF&JbdWJzmliuQ0X+9I5{*!+Hv>x`s-F7bb%fDA;d3!9^Yie7+5VXGhDC*&sA3 z?DU|0oOg7c)pOIj!sBz-eK;fwo;69`)<8$XmSJlS9|gwwN;6(KZn=xEBDTC5;o&2b z7NjAxba>==G&StVIF$QYi-BC8j#_WG z=QZD>d`gsSjC#5}+DF>8B<@ep_T00`~Dk%4I~9H z!8MJRdpyI{Y=}7P9y8T(^w7UA1!TW7>5vkB2zlxHYs*`9lzDU@oTI?p=rfrx_g9>E zf`gzy*5ZGqw1GTGwB#T0%(pGeZZZf#0?5Mv`=#*b@RDpdqf7E^mjd` zn}T?k1#hv9w7837N;`UzK%oO)>#7o4-P+=a`b?q;H4`z7^dp%x^0?V?;n`Ic915+d zXAoA8XWYMbtgJ}-=bYnJf}k%qm@!$%l}=K+O?#%@OL_yIj08#UUmQnYJ4f8HiuK;K z$#Kr~_PTlJ8!lM4#Nn7o_E@GeTjQOHTZgFkJ$l5>#*o>*1_`qHLjTBLF%*`X0(9NH zy^I?mFbcAPYv|<&N&BOUZ@qS3q4tmDYoooRxj7*QULcAj?_=t~iNMDvlY{C)1FZuc zBzM?!)U(1BZqHNs&Tq{Rz#T2^jVdv=2{;l~%?3_{pff7c=+{xpr1>i`%X4yeGF&DI zjSc6>poiz1RcqeA^`f7^=fm^Hi@BSsn7=8tI`i7ShOAN>>?9M`{fZ23iyZ8uC%j`- zym^XryUp~Fl9F)WMe@OnG!8R))_kf@&}Z#g9aL!0*H{v#oJbNdM+I9@T_G2IXnUp- z@WJ3fJnt+yjDz%_omeM)F_!c7(OmA3JE^6UuSQElOzlZ4RDz4#MX&oG4AD!8@ozZG z(mK$i2QmOUM7@5Km*CmS*gz(SJBfw6LGmA))5q5Ef#RK|FF9*_kCr}YaGI3-+E$X_ z7APlq$&ytFH-qi;5kzN`h*S~V$#Qv2SxsNG$kqLfW1Vr&t~cv<+(>y{Qy%N%;^^oR zC;>Ccm98@p>*kB=qPUYq@a_ykDd9(H#RylHS>9hxf4R1(}ncvoZBut6DGW!v|(G~mljs)ShF7i8sR~ltw9P@==5RK_Fx8|~U^2amTj4?B!j9N>X_iTL=>Z*ITH)`;u{jv%vZcosWXaAt*ytoHfuHpm-pNPhc)E4w3}Q=vZX?D*zas`K7RZ`4GN7 zkO^=ND=s>ujz$S*c(4K&dU37!K!}sWlYuiP`8&!&ep428iMF2?0ZpiD^{%4oJ70+X zzfe+u|MZW1)_=bT5YPQRQ}Tb_$oZU(!UxR`4OCRNy%#xHe~O0qH~1&0Hp9MIE{Z_+(} zcNxX_IbX+G-nCowoyH=mjF|1RKCS?W?D&1U*9-uRnYo?IgUC%T0JRc;Q2O<I$z}xfy66Y-ZY#SYqL0e0IootX&_H!OF*OOSu4+$l_UtLix z5(wVmfmGD~%S8cQCOAD5+&gm+M8GiT_?BL)1%A|$caW$+L`hQ-b}sl_N1og0*PZQV z2G#F<$$#YO*RNiMWEdMPrCAh*_Vp5Lc-M_|^6bhoF0}L51#C#Ux6QlDycpDPs!7sd zHVuI2`0(^aY=Ki{hGGJBTnnp(Oj%%fY=d&-?K%Xp=R6oUy{-r~b*;jF7{$!8nZ2Ny zq3Jkkfd&`1lrUmba6Q;+g~Bo8*3EuVgHkN9z_}yjgJX9I8)kxJyfeJgqVM{4HMtaF zqgMNhuhM?a+%tjfbOSQ8efS-ux6QcrnvKC}7fkx9_R5^|RAK+(CS?LDt$u+`?mpWv z6Yw$X>x%Pr-H7yK=S_N2q+aOYbyrwr`(wvqTQNy>sF|_hsBEE|G+d3Y$4+?vbv@y5 ztqOLFP_+)Kr_0+wMty(&ljFF0ITE|;@}?|?g~JOIA}$_T*ujk|rSKB9dZM(w1rb=J zuB<%nJ-I^-mY3eFn8x4FSo!9E9IFaDS(|`&%iuER=V<_#en)OcB)-PZlxWdSFY{#? z2j^VJASp?*ufd8vP-b5D4EFfN?nWQoylYmMQ{i&so=12PBxC9gwgFsq4DCcA${_NsUgXx}D{Kvrr2=8)$ zlQF4*;lZIcS00Xs&i9Qt*x>O4ff$Qok$VNEMEf-HClcZJDvB1tMl_b!){+1BixNfw z0Fj3lc@BXrx9LExb5O4*IaN_HAWGM6Y^be^Dr(NMdu*k@8H-|L%@&NpypDabhHi2I zjredLy+*tjowr{Heaf{H0qJQ+w26Im<0A*m#T9N6tL^|O| zoTXsAGcq}E!Z-}6?eeJyFKa?W`vs!Wr9jp_-O>-hs*vx?BJGZzkYrNo`G=eYbAKyN zA^*kBdp|AS(|ADA9(iTZhFPV+g(&LdccMfJnt?BeXchH~Ut@D+o`56YBKZn=D@r64 zQCjO8)>uz-k9O4DC;BbMk{BlVg_559TvP<|-iayr_6gZz0Q*)r6rsHvOxyy&K^ zen$XGoC&6np`qj8#Ibm{aMA$feE!P$6?2K4Hl}J;Fo7>;`=L8?u+czV3?k)oBy|&Zq8tKq0-bx?sn06mm`mHhN{F-QaPe{eZ<}oux zVJh4E@2}UlIVgQFt17XMMo$QH^`Po@)}80m{h!{f`0{3$wgy_~9?Zt8vga?m8SB11 zbk@w@1D~De3rD=Z);d%q!TP)1vG@MIOQNEt1isn^x*>q?`tNoD$~o}M=LO8{EO7$E zlN6}wATxXReLh zVP}{RPeHBsanFJnD;du-{*x)ARiMsb?hdhnB%| z@YjdTSs+vi+3Z;V;*z_WYrU9;QG$nelj(z@?Jp}#WWGBDxaoGzylFMk#G#e+c3&Dg zZhSL(rQV?9^+4&}l@sePbN?5J{LN#Wz?o~h&xK~}aHY_VPa=Gz-zny{@tieN2XLkz zUnTz%G`gyEt2eqD429g#$9<4_c462a6GR}zHdY99)KT?X z=C;FLM{CZ(AQP+VqAOL*%{Q)?O15amgxjg#&Y?SpEMBn5$U7={Y9GqcB%FyY0|ST;;QhUYiMadRFej$1xC5W74-n?%xd z4%M`n>S0~>iGtGgLu*PJ;vNY+m?NIQI(cX;^e@oc(KoC`jqmlV>mkp=3avqT@q+SS zDc=Wuv3+br5wiloBd3iAW7{n@jw3oBEl7L7mU6A~ZAD-1lh3AbYvXuu|KtoA`%a+) zN_qhrrbOhgXZOp+$Psthj`A4wwSJH^3vI{-nRrL2!YlHh%KdP3YQWJKJ}5gV8I9uO zC6Y>Yj~&xw*YB}DqpVQcUkADyL6Okqzd*$PFX8cn@0NPX_tp=5aW8vPdDME-v_Eb7 z3%oTpP``_J?RY4l3L*x{GSX--r%BWc>n*_Hks1`ORQl zSYGy>qCdc7G3#8-M4p4g`=U~6po>r%1-_&nuaAg=nK1Q|5v%p8-uM(HA&kiJy9$ML3@`>x(k}ZDitse`legrC zALZs$W5vd#<&`Q6hE>wKLA`>%{%>cdvUE9;U!-ZQW zm^@Pn_Xq);fm)P|{%oRJ~JBIPU?A6v=*|~ zl$j;D9n1hiJaG>d0SI%OKkUgX_W4Z zz2kJu@jF0Td*F9b#kc71SFq+!Gk?dtEB4kMAjX5MJd7N2a2>Y*e>r!k3_m%;*}k~Q zdiwDplLtKe(iP#gDMtjYiUiQ*8ui+JveecW8O#u%C!qnMMxgvx3k zV_(&k2fSmQC9Sq)bwo9axk!I(Q~ zf0p^5Cmj>94pj)X{?5mt8UYy4W6f#DVs(~EZd8=Uz3!INe6J=O1v>1JF?CN zd=&P*8(GPY6~_ABe9vZ)vS;dr%S%QIe#H;(rdj5i2%ki8J$akRFbNf_k1@w8AI;bp z)so%4nEz@O-)<9>Y_=WW4lMED^CBN^*^eH15Hu2CiKpKYzF+7A1nzeM$d3QnBoGwR ztI8FUpxo0||K3qx{|U?iG>J6P9sW$9usx1D2b$Ngh7jtg%6wxr*)@UM7l)xZ1Mm1{ z1ayHNMovpp`01*e5fJfN*09KIN$(PRJ$J5&s-;817=sQ%`Nc5@h!~&?n5}UqX+qD+ zBY!Yq_Yn!qmYkOX1#9&Gf-V7CXn#bP0K&=~)GAhBYlHmXB~-(b;C9 z&E~buA(x^@Tco4$B^>ZR!`+i!&OC-!OMLut?MGAO7huXG^ zip4U`q6;%Ljw-t@+PTeH_a>$Ckmor6(F*T5ZY73t?_(hPV^`7TjuRes*WiQSlH-up zN>}AT2;pFKmYlF!Y33O(Lnc+a3KlY>#4VC8{~q+^;^yV7qzjx$z4N0o=Z9Bez9<@u z|Bh5^o8rrz3gj{X=d4V?xE!^~`SML`*3mM99eni9Apz~kk{JuO`I#9M_uoTZT`4*^ zKTpdtn<)nan~UtJ0>Ue-M8AABQuMKV7cTKS6D?7>qDNN=jbApr{Vf7KV1}piWuq*<_>~as21D6yTF$LbXhhjhXVRy$E$_1 zfHvIsw^`H?txw4|L}J6wCw%v(cDYbY87|=<6Jz`2GepmNfSG2*lg`#;g@v6rRC|VV z>Tf(P#Zj0H?1f^9KVV=Q!=j zYA}BLy^xse-a$C*TNd>ba1bV+7P$-nLYj-JaOnUbhyIYqV$<)?(5@no5FyB8IshHu zpdyAi2WRcxn-H@(i>+l|`{SwcI# zYr3=(qWv4Klkg5)x4%F(c9J4vVGYcUsp<2h6Zq9%kXh79^8RH~8m5xF@Dk?d=P zqIyjU5@-=_Po3)jv7*y91C&a7p z#m1~gn3k0X^XY88xOM85@PRT9kzcCdBxiRB|EYwWP&K8+a+114VGsj&EUl~2?3)Z< zPa4p^aP$Wk>@}u}kxxyQ+Ui|idOca8Y;Ugmz-P7H#_>$)laK@mcLDrOhQJ6Rb|ZUW zMhPSVYE&YhEWB;tqxB9Mn1?JcudOOxrp#`xWbo8KBrR|V?~ebet&bXX+1t?6j&R&C zdmwB_mj-ZMWFJjkuqU7sSb3BwaPRHiOw%oFZZ9iLC|6am#9_XNWxnbg85!v&;RG|p zeL6fZE=&n6h3kcM*>=Sl0*t9UYJanZ^GVF!_2bCa&e)=!{2yuovJDR$T(6XYH~%9T zE#5Jid58yYp@LnFDx%$c8HR`_?=y>$WQ(kX(qgVl`!+>-lvY%{Ht;Z_9-`KoE=Tc5 zV0>!LYEU50nwZ4Y;l^MW^ky=Yj+!1_mfT-`fltK5MlJ`LoV5)Gs)% zls98n$$o4%CuznE(Qxt0$s@ehGdrsK=woD=PB;zrsrdRI7xeO^O&C;^*Vhzlkam9y zVWzGo{jw#U;QiGV;)p7ZdC762*EdPO>>w+$*l??61YgZB*h?N}*(zz6jfgy2_4|Sl zwiEyhRM&(n^TfnVuzofPCBt=?{|jWFdZU{LAC<>s(?jHMkPf=0k_SPxgEmtgvz>h1 zjJIQNr2ReN*4YH1{^%z&r@cLmwmkJW>T12IhLtsMtn(kDNoFK7cBOW4Ysl1>e+5Z3 zLUxfZH@tgy{Il(-IZNK7ed)5<>zUfehN-aClfnfLnJ3$;wrHpO+Nnume}R-g)jZo{ z{f^8ji}G)WKH$1r`b}OPIJzpTM&0%6%sbsP+a(~}s;+iU1jk5iDHS?=s^Gv~D>v4x z!(4k&iTOqLK)@;VgY~EQ^1eaYy1Uq~jR4_M&6qqBvaN?9~Zfsb7^TNhYpqSh807x)QSz zCyf7n3S<*4bPgf6J_snyBhm|?JHh@q8(nz&dhFBcJ_UB7sbWM*eF92JScxM^C=3~v zS`$gNltB6JS3ZoEuisSUHb*3q#qI(PksDNOBKC2ENQU*>$Ty0k(7 zR&II&+2ozHNYdLPf2|6Codrjvj72F@X39u8{Sb27Y9ghzKy|q~t)$*RL{3&b6iG=T zxbec_fDaGI>ZHSO>Zpe|es(DAE!ihGtbiIld!!NI_c#^iBk;Q*ahO}>7p6RDu47hs zTrnp=X$B|Rkv$z%*x_-U&P`?5duVSRKG@Ls;ENWWPMOMy#o!u&dw^ND-ojrXe38*J zysbW}yOi4+X3-h0AOMT3=UGNOKxuHo6vp`y^LTNHp5UAS8liWaC(G7`IP0m~r=m;S z$i&z`J@}RukDGc-yPXq--tIfcDvANWDj0!jB%_G>uN6EE1!z_~#+AwI*?7Bw?2AZ? zLMVlZGjX)sp~|yb!DZ2G!f?#fA5dYdm@sZg`A7-1lpdPBfiSKajvdu}M7ZO*Glj|C zb;r3&yB@K={_q6{#bJEEK4$FT%s|HuuI5X*@68QN2q?3HOR{ z)KMbi532Wgs0jjr0*V+x7l-`;^ssDP+brQJXK4YLINgqVmyQZ7&d%{iNNsapLaTC@ zV2Ee+izugVj-6S1o*127;z@L5I-=$=2MX^n_W{#JSCCiNcSuEo|)d$Z}qH=qR zp+1!F=Y^R0PbCSUpWiGXHQ;L9mtF1i7aCDix}~`GFScsnrz&4f)#JYC4Mjb?NWe!9 zp5*HzqBp8&g}XKaQ3k|bV|(#)idhbQf4|A8}dn~4WClsYYN zy$x_|rL@a^&=IUNr3m44I;doZhmh;JeiiLzw~yVS?Q%vx(~md>*L7mP{l^wbL0<^hB@i6>(iob##?CKRJ$8 zVp$_bFLx0x9(mrTJDY3a!X)!mNXmkaW$jY4M%&+#9?*RO({3vUk@_5U=O8TRVKhjO zzGD4dY*1Eb*Un#{3NwyCD0E~gaAK7O9$OZF7*9_fguXikGB|Q>*dv=`L|J^R&K*08 z6}$Hmqoop67W+vjE23kQ57J2ipUB;Cet6)E@xD0E-q&r9*uFKTU~y*DlY2{f3oF66 z7c-NQBh87NgMuvyj`?0zdJSM$RQ2&uegEODp?-pq*JS7wQNa@bs$-5?eFj$3n5DMm zp=|C(G{T_oKaLdsfiz&jaC#9yE+TMzEO z_)+>FM(cz9@nOHa@B^6ZUa%NI)i0P@PsYh%`BUG>AsK7$`r*3OQD4E820zps z>Ea9Rk}%_phy@4l(gK9IU1}!3IGv5DabReaBQ4;w83Q z%rK}6a-1tod@lJuNS_+l=&BTJcgjn*_B%3yGf8rjRz15nD55o>upu@(+&wakE(d2RW|7( z0*T=n*Pg-YFXBtp3J&NPjh0x|Xh$FPdZIm26nX$#{QY|5Mk_3^C2QrjRr^*+BXDh` zK?eYXIn(U^CI{HgRlU@sWzQ@c5e%?nHG?CmtUX_i_IzFVt z6(g>{gLn;^^&+=hR`_})J>x45s4hN#)TmTJYf>JQ?h;&mj9nXJNf!I0QROCowPky` zDBEJX*W3bE#!&D^w`q8JsnH>#F{+A5xtP63f76YVDe;W6m&rS+|T4e59}*_dzEeU~PbCeeSCdx<+d5tw~pU#3PWHD>)CL z_i-84<cC<|EfRK$$X<^30v=NJ@mH>6UPkkolpPUO_78BCm(A0bUy$}^)5<0 zVhzi2*Kd5A7`eo{k=&Gl>^Mc&&(TEDG*P|0Jk=o45Mn%f_54AfCnbY>>F%{A>Z?@E zepMpDR~K|^VUqDc4aA@*!36yFu_su``Xgb3vJ8R5E$293`vOW0hGW06EK|ut@edkK zl1SF+9s;e=dvoM{72*$IlREJKh-$4_Dlk5NPT0u5HTHQSAym}?V#)3&Bg1NF-E>lY}NfqV!VW* zBvSgQ)7AI{omj~JC$qzsC5In)r(1<6?=dXh0CS^?QmQ!YaoNUo2fM z)V|m`=G8TGO*5y8rVGW8>xaA5i5wu^)(U;ae|746JyaCUczM_rbYKyU9v=qi>Bp;@ z`_1reIjZC!O4*LLH7u>rhLc$J!GwZD3V%yp6>*A5e^_JJP#$EX)X+_9C*@ap2mX+D z4Btpaz^&?^h%0|T!txQW|MGPK#gZL{ZFJ|fhVR{Bnb zVeizIR415-lu%?}RvicKT8U2E|E!ITiisVh{27P&Qr8ytcUO^%d!}J7^-k?8 zV<|C>qxp*bj*!!3)STe~;Jx-rWlnk~P*-9e z`}QbC*zQcjo=f#Xz;MPYE%jlV$Q zR=XE?nh}H~;^-=dG*#HDFb^-dxXGPQ+q7{Ae-3bpp4=nsY}M_4N_s9R zI1_5@-#-m4yJRV^dx%)av0u+rqw5+JI+XH^@qUFAsJb*nzx(@vv_D;E>!S^V$;8Kr z(AsS#0kRv@$5ZZgR9HPVGi+p|83AY81)rTRj_LU}z5~d!()xvUk_DDmDcV0Dc*Yge zmaa%nPXbQ|YLm4pQ4p1Dqxsx9b|gTYwfNu=SgA?gX%ru*qyuqg1!|Gz`gG5dJ@-(k z&7l}#HrZc_ACzkXb7t*$Ls4b5dZ|8#gH*Ceb@Q{tJU|IlJD}`X)euMdPM+C@bR0oG z2mmT8M4~e#DPQ09FN(-uxPNhaer5v{Z3-dGbYCc8tJYCUn6MtUs*$97fs?LiQtE2%++$UZkX;O>UhwfRj zzfw}TGQNeoVo2R`Z3jgYF6{@^r}a2uTry{^lmk_BX6@kJ1Jaa=+>tCSF5eOG6Y64- z1%&TaAhy5Uv_E~hf?J6(xO5zNQ*iZ-TGhP*>}w~k{Z+^Ib9#!wp9>N{aw;&#&ZgTE zcx^V2k`M?dfLXp_ZCRpEiLRG}$56T_2q?QJ4bzwwin{-KV#u^tirTE=(Eir<6W+)D z28Dx6NLYf~?0EsIeu}n^TEau9WQJ!+MUl_pX1a1ZnFrbcV!3!W#NOG|&%ID40CN%P zA`jXDT4@>ccC0D9kHg-0sdzajDlgGZ4;;Cjxl>@K1BY;Oqyin;NmnqEZXxf@ruvh+ z!3o}1-EZp;zTEb>oH?Chdr(X`%;1AJXOXvd-%-U6`hCQJbAD_V2(goEiip^_SY8xu zB%jeA<9+RChr@tJQxb>b%?30xEse`^fAyr;-A$YF2Z4~Ni0Dmr%hTd%q`=qZB~h2? zl!oLXRGO_qPC*%mGz2ZY$T@;4=tI%~#o?i&KT58*pC&`_sfiuaZ}c>p6ygar52I~4|`TU5XM$Eg)h=*seV%73Tc(KI%+osc5c zDMD2th^8c~)e*C|wzJR6QXzPiy*uiwRhqN%y8mV16x=U2hWlzkEc1k~qT)nroO0Z< zq)v2gfvw8Fje|Krzwrm+!#}Q16jQr`aAnfRKDq{?bsQ85amCE9HVgRx@q*6bcG4TZ z&p5rcx-m{nJ2=zf57#ftNP@D@5K}0#kO~js#uH}XF7})vE@c3G&^xfopitw3JSXCz8#Fy1ZB+y*xq?;WTGqps0-Z2laHy^ znN4*V?@&FnmaWNLSR!a-r%NK| z;cih0XRZo25U4VDbMgWZjkM2OhbXnhZBD$QV&aHKbsz#Nk8F(PfG%efd6{29KT&4b z%hPVf^10aYS5F2=-XfvhllGo#r{hq<+#Cre8ArjbXaO+?yMh^F2>U^RbBP^v&!W&( zW;QD2#T^^k|H{bVs4bMlk1{-NfGQ(#YfGhv4MPTPOcHo!_qy5Ladc#B%;tMEr^0X+ ztAA|m9FN3gvq^`z%r;ZZ0yg=2GaOs;^wkbuZtjhk@U*g{pcGw^9zG@-H2K2MaUjQSq)J74`8fUdB6{EK=$xve@6PO&p=TMHm^Vm)4FPH9 zgHWbGlGtZhK(A;|?h!#aQg;u%sJP=CrzHGw>$h+}gHu_xPmnrRe3t0Ma6QthMIl@- znXeKCrsMmIR=eQ&clxqsE=os>YE{{#`@$}Fep-VFt!pYc{pVk6)qry94^M}4oB=>1 z&Jh_uV}e)*hwCl}6Uj?3B`9IR038_kg@!6;tpekU$~$Xou#OfXs(oTcVle&-yUK4? zSs7kcobd2muT2dy`#}B>m_qK}w*X?5D2m9+6=t(WldK8p?|uAP-^AYZeJ((xmG65! znA}(kXS4O_BEpQVe3?3X{{7^#Y*Nt*Z>vA6PBIJPvSw#Umz}e#yGlDv{L9l*chuo+ zO^lCA-Y;!I2?mSg2_Nb7%MJB6{IW9+Yo&Ro@p@-J=$;pyi1)wXTMn-pKR4qo8k}jC zBSm0O_UQ>Y_mFh~+_OVYtNo@N}Ny6b4 ztp9#)GbTN$eVLcHlB&2q4?tN6P4&I8(~GG4T6OJ9C*^!Xt^?2P^VRDw6R)55($86} z5Tm90nS2^W8Rf@8eN#tFDa{<`U1b*cEL9{`R1b`j@-YNE>jU8cXXg9|ud2qMSE=K~ z{XBJF>$M+B9^vA9AFhe-EslKI*zQ;###{Rq@Pvy?Tdgaif$`LiCpr1j(|FXf@BH-l zGXiAov1vuM{+gevPS7d%FVN5(IK8v!!z?1)tyc4>+?a`kEmISK7dDs-Eh^R z+8aR2n=FPS6acW1WJLoe6PM=jwWmmVBzdr) zGle15pfI@I{&%Wj@~|+R)Ii)7G4R26r6*KS|w7UW~4wf80X}#XSJUF$OM5u zLk*~d6be^I^9_x~A(R(rVdM3#Ql!}Nyz|z~poh%w#{=K`KMoySeRNxZbcFYAyxsl_ zWVV15+Q2g#2xLDI0@9jqE*!Ng)BVJGHK`8@o15aGPzh~{*Yd6wQG|DJprYqYkMQd; z@7*v>WG#iQ5tatnKYjk9f2bqcz^)Q2Y|AJ-lQ}kfD_lpv=XBmS6k-@E zyE$t<_jvX&cislFeepQf$tHv~gwh%twe{JI>U6%SYHs34Xvla>7Aio3qP!#a=WLlh zlx0D5DZ$%YOA^ZmDtt&keR}dr;w2aRw`1dM-y>lakdGl&%wy86wQ}KX=Yv9zOQ?#GC)-TfMr= z+gG8>5}Pp|?R zhW_Cl<)>K~U(7iHu8QC>M8@c4V_lNs&PM>G>C$tPb1ss*PC$T&?llC>N^6wbK?~PY z)()vmQ-ve3Me$`P*jlKYEK}De0BsS{=VVxx-k<8W@QwnhJy&@?iT}gDe4T8km7(MvpZ&tQTC7-O; zD4_ox;ks2G`Ylf`)vl5;-G^=RQ_sBETjhDrPFxKj!rQE`3bIBaOQPWDw{fVaHUq@@ zomyO~OZ7=EBtc{9OqpvGnWz;m%ltGNn6-Vf)M_zbJ-;%h#|^TJMZGjY6t8Exfv3oR z_eloDU9i7Bcep7#R9-%qF*E6RCb*V%ks|-3R6tYB6x{dTztqI|OWk>l`{iFC)=r=k z9A1XtOkZuupDZ&r3VOY?zsMKlV&#JI#akHkqNGu;mT_rC#VWRr*-15F{oJ>u7A_#Tq9=)1kFG$Py|4C`y0OSRiLt!gkRijw|f z$CU06-PU$sB;~Gamj0B9wx-&-5P`C54gg&#$ZmzQAi(uu{Ti;f;o+hz z$+U57Qh3-W#c~rt?%7G2n3G3|Ou-*?)KX#3ufZFWaY%zr^0xSXS&Vsq3X71{{b>=( zilgW7WlDLlXssHJp1{@9@d&@S29J)IGn~DD!w5deQXo7v$PfpbccatmN#e!r-qxw? z&x^5VK531)?3Blmk~1+|+I&VBtHQ?#HkAa%TPEZ6{y@($w^J3jb(~+@Cs>n~ zhxxEf*Jr5$zuugy#yZgalcn{^Z(o844ZO#Z^f_uUN15oJicHRV4-!x9@`HCwXQYt; z2sdcb3`YOneGO2w(vdH)Byl}0wWEsu6g-;Aq}en_CX~IAQqku)@uY?+{ly9>-rxkF zL`bv298tTW{c{Os2MfL_^U;#+i4?-_VMkeZ6T1A-g0wUIxNgHT?nuf_vxmrM@cFcu zc7m@<4!(2+%noWdVnho3QBXE$Z>gS=F0Fz#*UlQ0?J{7oQ_Q=n+Y1`lM3$Vld-!$l zjx{*qMkzmcfAp=B<6|o{j%Lwl+z%;zf-RWuGy^c#Cwnv1HbM}SPn_#2qe>8E|A)D^ z?22pa)^>{!LI@VzB}i}x?iL(^yAud*!CeA@;4Z=4-QA^-5FA3`g}akN*O{y>Z9RME z`EX8a=WXvFpeA$n(Z?9Q_xrk)=Q*gGc+M+0)uZ;^Q{REaNG_Iw)JGEN-KmP(B)c69 z>yQbUd})`^OyZ$_VcvC%7z(k%TNFG(Yx6Ppim;utd9WctWhb)lk6X3IGnkI9MY|$Y zUr}DzsIem@NwKz0AOBk-P8rho?s&P+pCXOVr=9!eg@_-2>YVg3$y5pm1CmZh%O=l( zk!S zhg=v;9R{Z{MHK*!@r&=ruG@%0vrX)=KM&b%MSD^_%n_Abh<~`rGJvr&W;N0Ta72oM zAGv0k#=i=vmzR!}=40yGbxj#tyVKMMtT+eAZ#dorb-8{wRT7;#6Yeu4vtF&=2?nZt z0Lw~lLEBwSZ$3MfUmh2E_d}B_E)%wDUtzZX#L&Lk`TZv1CeY}5P%gixs-6?#fH`f* zStU3A?j)Jy6vVK3^TxI^cP2kT#Z1`atL@7-e7KM$Y=T}`+o|LRl&dQnw$Yo(JS%_< zJwfYpGqo+Z{0v#DZ}qtetz@zzZx7Qljm*SfW@C$L`=*+FgoP9uNFh zO-*~Wgd!#|<y}8q8 z6uKUT(MPDRvLh5)y@PT*&YOT3-7nk_)0gXBkl)Tmyax5TqHm(w{)DXM~4bCtzE#zZQsUTdG zu}1Vr$Oa+lv3)g1kW@g&*%F4o%z_XBpcciE_3ibptAozIFIDRdV*@fl zzQi*qv`?WrMqc2zikZl~+0q;8e9UV4KI>$Wnai$-^6|5~YoEsG(t}RwCsV2q8>d(I zpB~^pZoh%Xl||Xh%6uH!IJ67y&xEJV|2=@WdY1iDr7gy8-)pkXtb8-8GUVZ z2J%Z6*+ebOtK(48&&7>0+1#s;9_sH|&!WIvn$jeS51{M4NIY zxVP>(@-aFC9$PhJjvTKF+U8eR$fgP=E>XF~Qm;3ZeT06lOjfZFk2-vw7%ZL|*^HZ# zX>y8_p^A@}A6|eLW)n8ATKEez*oE(lYyC(+4>;%6TlisIjrq7_@G;m@$(8)l)f>*E z$#A>IViUN=Rc849;iJ@&TGh<${U%Jl@^NAnbdT9p_n3GZsBxxIS77CtYtczb7?ju* zT{an=@1AQSI5vD24Af@Lss_Ka|e6L6P$fLdz z0^Wyes4jL*bY@eusS=FE3P{Q`GnXJ`DH~vZf*#rHJM+Y_4OBwo6P2qe59R5TlK4+5 zXi#RDP~zCZ3jI_&zgzwDOc%W%?1YGBN^T7hK-zd!~U;LBPC2aG3q6285+g zv8>D42Vo2|lRz8J`cAioNv{#bO@CObjRqJ#A_j%wH}35o5ub@twTy9L|Due|;YD6;QrB23eMwOm~S zKv_>U$5Cw7_S$N#4V7b=?pJwK@kin+U;!D94+zR=H3Wc!C91S!aoN0m4?iKnu${915 z&qlH`lu3w^k=v?MkFO&xooPlaJBAnu`uzK9(a^s2EJOPIr5~!HP*$0H0FQX8;81H_ zOOhC}C>;V4<_i^^nIlsg>%idW4!V30 z!i}-cRKwBvCb4i(ku1zJUZoLoV9%xlghiTH^N+?U#xR1I#GP%`0AYC5`6N#kDWlx% z=GLbA2stN;!JtG@yBAt(=>30((_f&<_R<6BO0;FwekPd@nO>?qsan{+wJw%x;17vd zZIdQT=2tj&L?b;t@CB|$=eMvX+V%AxQ*FFw_z)gzzNv<5K6Eq~mmr?Oytkr<>upp) z#m}zJSRA2ob2M?>nlI^6xZ0un$A{obL~A|yrhY%TrCq<%*vd8&+;l1n1MASF)zK8z zRvK;BT3I%BBG7#lFHX+-D!#klfTvpP_P5U$T4I#_c2ogc7!gLepV%qvMYB3nJ_NAG zI7~(tM5ejaytA6q)tQ^5%tFva!Y*0g%($9d+AA)GCh*bsDst`N-KilHE!*~x`>~; zB2)Q1w(h=scP*QjUJaLYi!mO@0K-?SHNQj-%~Zt!MkK(WM$vi=6av@ z_D?JNbX;E$Y4v>XFOn ztVpU%5@3V2UNVBlMb(kCm!!l)VkK)Nb1*=!^8B+=K#18SU9Wt7ctI?%>D&b zv}a#D!cAzF=H_8tyaW+tS_U#w?awm?ImFa9s`I7D;SM3yCIVvB22>%idUeax6)j~; zeS6T+@tZ_3DMl6Gex&k}engrwhghu%Pvbf^)b5kkL~Sus_b4$OEHyLA43Tn85d>pj zj}AI)$5}%qoqs=3zXpX2j&Vt5n&3GtC7DsxVam`@&Fha7(A-~Rt0BAC{YJNlqf6z~ z_=Ly^Z~pwjLCp5}`K7Y-kK%$~{-tb+Mu<8hOgK30r_1l-7n|KTi4woPrw8!BCwnKW zKoDZ;>q-b{ObwMW-nG}$BtzJKU3G8%f6MTI4EHb4yn*4V(|Tf6FZ#D@U&O{P9~Eil z2IPaZ8xsr}7nhP1MK6Jf>}rBISJ01ly?W@W&y{xU(i|k7P=x}f*Axb@4 zuR37M7*;#pHu~PfCyyyw4^18fl#S*e+#l8cW5=Rfg6~vRe)Jp4&2DN5I6_JKNu_S~ zUdrt66g2@SA?n~_Z;79@EfI-KAFzZ{(@hpyvIhu_|G@0P2DUnte{fR#al^t^-0gB? zj+O)*QAhf6aF_t!V2{d*qZQiiSmh$y*Z>c+OB~~;uGQ(X?vh8Qc-W&_B-Rlx0l+bStCztZBP?TsPlBrp@NF*Hg?~b-0t#~4C#34Xfa}~3 zBtZXyOacCeNGX0bJX0iio}1XMc>lKunD`7gLGJ@W!;Kx(xo zFQJAnfjo2ij?Fh=AE1$d{z2l(I#9?B`dBzuynZji{LQ0s?~!bt^mg*ZBxXS#Ve>j> zNw$Sev=vF!IUIilg;!)-z#@FjVS>a7jrkSJj)Un+cGKYtIZR8)X9+W z*;RI4T_=nSHL@#(pQ5w~UR9y(?0K*@sbujvD4Xt(@@#B`lNh6IC-28tX^TxsxWwcb z36I{rRU+r_Su*vlK+Qhnu$vC&xO{qH1%DjQJZgpDW1|25=oaE}_J!fcIO7c*JlQ5n z9T}Mgj@zQup&Ogkms{>L`P)tM3=5T!hG%?7cl!zAJvTc2 zh|vClOM+2|9`ozNOvZJ`gJ%X?X?8D&mnK^E@>vGJXTUi}oQX8m#5a05#3L92=Gdpr z7M+O(PJK6EoO748v!d{$<41akmEQtG!Kh2&>YfeoOEE#Dx$ z!blSLmeuL3sp6QsNAzx;d89iPDr|jQ;)-o3!9ivrHd|d;KwN6v~9C7_fbQ zqp@+Pvko~wUz5&5vnyni6+6YT#d4zgg-Q$> z4eL$l;eB^BcFgfeb^NxZ=+KZivF3N{6~t6~06d3odX{)IcZCEHxz58P?TZ$D;#O&s zu6usbUQlb8$7V{An_m0p?dzO%;e}#tu=Fi_u$ycs3VE|sDqCKGQ&&v&8A;8?ycw)> zhmy=!MW3D|Q!Jy;AOm4ysN1^mE={J$tl+I+$(^q`Oqf%52nIz22L6h0QpoKTUAm3* z48m5He(_K86fjr$1{6>PbZQ0B4TOUIpZVwc^WZ;$ApU1&0#O5*36OvO3p(ly@Q(Ng z-?9k!bJ+hNS=>o@HsXU;K|BP=f!LAD{*O6U+rXQUM}jac-PHh8o3JB^;4% zkO`Tr3-c2XCHpyjehDSDf}|IzrNwXHg;|wWy85^9@@&vV`F4~5|GNCYEG!T(r2y9^ z3GMzE0&4O`neGJ6ab$n!(|%HAH7`$ar$c4m(fvyXLG(tE+y%!tF3F$a&&;VO zY6pnEUEbO5t+t6okgJCRev)@|+ULO+=pW3=ReaSz4G7bE)a{XGr56a)IKxVcIpl+bkb*xo(~{5wlYcZ!yMyCtzekR-v62^&J>QdGu{Cn5|4@ zzpj^F_4-mB_bTu_Q)HihfEvW~M|w;7Bp?k2{XMJuXYdq2PisSn9M<&sI_u>==^N?JX*WzpF0O@b==J(njfn`SyJ3B`EZNoRotdth3Og6; z&&k_!yv(-in@A(3lWfw1_g^l^Dm;YR6(fb1b|3K-vlLF98LF&!?kbA)5WgvgY~)B> zm{DfFC%hgX1qj}PUh^$cIdZ7Mc?!xMGG1d>bug3PRvtV$SJv|tJflkn`$sNq4`@W) zLIP9meg(@`ghp|6jFnq;ZB3a3y|3IGrvGicNbS+W8RKh z?Ux}e*vc<5Ev&J}zxmkQ&2MTT&c4B#Nkl6x$P#dGpAXwmh&%52)X-L+u((g?Gqm7h z;+V&TJ)DXDTgz1MV?rWt3E0STBzgXw&h&m}B}?7;AvkDIfm5g~9Cj<1keqx&A~CJc zXtXdGCr#i;5&|c46AikEO8hkS+0!Um@v(!+eT=kN-PF3OLAo-8X;#xDm_MAX{UwlF z0m8aag8%=9F69FR77>hIQw!xHr8pdfSp^XrN4R6Szxm~Vgh6c-A^-sMtP0Hr>msr1 zejuViualm_oM%u%E59_nNtq*a*PwmYy0BHNr!JBzhHaDo^|Sa3Qn(!w`Y|Bd^NlQ? z!nMNXx&&tup|$kzGuXl8_ZR#@)@fiieJZ*D^uLf*lSqjx2dRlIE0#JYj?;I z&Rcr!QcN|n68Hi|fD5c6*^2kNTsiOkV*5O!*ju6F$%)OYp8)>eSMC3=wMh66&Xa_V z9pMUBn}keQDAu=$^6!F#FB` z@UtYGMeR!4h*_7k9@ZpTBb)(Z{$=*Ff6}M;_W)~^fd55#Dgr{GieDdz9QQ0QPl(#g z_*J3sSCF4hP5On@4M3$<_i}Buf43|d3zft;GTj-xg15RZkTG)C`; z$SH!Q0x*OncY%gQStMEH2ZbZV%4XyT2E6+$B`ck)>#l-LRc=+vO!;1@4C$U5VzJ{>(MhZB+DGrgc*NU+nzSe?`B2Qw@$*1v z!(adW>DG9xwG(lPW4-qmXij*PELum4*hP;?LM83oC-rb%+2oz`8OIHMmDDVI_^EJ& z>Y$EZ-MFbxV#zNBn=2-vP2cmmJshpdHC76?YKu+1Z|{ksL=N{GX3O0iLh_lPwRRo< zDq;La$@BY2gAFuZbOXF2A8UaRdoyKplhO1(EM9~k*Hy4*`Qo;%i|haNk(|rVhaV!luFbikk%digj2Z{zT>fju3hiY7|8N zAu;lOB-o)h!cmdxZsK`@vN{C9)fRP{j80e!!awSJ?WkGkH(m&0R9+<9 z(rzLZlvfl%yg8T)tD-JE0C)SV0gZ-+ zsGnS66#eXV8AokNyc>cDAniN|VApI-viY7st{9~v!LewIJSwC3?;ZpIJ7hAED`D<& zJf|-~_&M3c)BD8zM5KZ5Ae&3wr;?PUdV!$8!y^=&+t4H@=YEvS2z*Oqt_^SrFkSmp z8lP0(Y>3hgvD0dH=eB*dNw@OOjds0xFEatoI0|;PCxI9neGmrvf1j#y%c#pOU8sLC z8%U^=w?Mdd@C^Y=W|7S`x7>euE`O2-i()3*si_ryi*TIC_W@(gX8?;F@K3&gfE}nX zhxCZtR&w2Sw%l!Yg1hXIU~=`A?WJK*6wenonToX-;;lz)Ajd=PPN#N3tS^@G7yK@ zdGhQ3m};&>EjL!A*RI`9Gu9uwc+DOW^}<6a5r9h4mYywnBxC8`sL;eW?U?oot!Kpm z;1LiouZZvi==U|nZH&elGRfJ5y78M-lh!}+TWv>(5FFup@F|7z<}v_crG6#XvXt$X ztXmoP_py~56S8Y6imj*7 zlH<}>wUKM-G=AX_+dWP*^F<95om zgCpG!63HqteWr!|_vOjIYXRVXQ|V1@iT$;ce)*KgyY@xxYdYIvwy`hia7&r9>xM+x z9W#dlxG}54xe$4%7g>YB%MEs2yI?0|-%A0jRg3cpdr7zj_d}md(%$KQGma8VNm6Z~n+rQv+W-~K-xkl_ zt|p+&+r8kqtb&_wr_O_!{eB-PKGWb;g|)ih_?FI&Q@1VDv@rn6%aW<}qf`2;E}{mh z4me2-#7CX!D0?`tuiv6_C zx@z+RekC%+9v>?+83cKaF`Is@!|T+%EPCUyH&^LRKId|R;VyRPq}ypL$v=89I9*8< z#`7s&QRai|IbVNiN}}cu1d$s(v{{xx#nZeTuGnf$GMl{@w&uSI8nZ{aUVKJ$^ioF2be3VBliw$@j$qp~ zf9^`z0g{pU^KzqoHUKO)kwZW#pqo|SZ+e~|jyBw=4pEqnh-yJ>(9Xte2E+~jCJlT6 zHVM<_Wf$tIMDkx@k013U7wdW(Jt&DMfYei1XRBd@+f9Q!%yWnUV7&t%e)WrBhpl!4 z^eN#bqF z>NAQ6NF1NC-P1_)8f1{_ydaIaq>*}Ql@*?6Xw5wSzdh(j9a{J04CzH{aPE7XBb&^F zY|bTlpAwq9>#y=(G!{QW!}nc3tr#pHr|n6=$yERKM1ARmKpU98y@^!4|DA`5a7NpX z`pDbKtn_QZW2{C3+e_I97~22S7tC;SvNg43+S)96{+d#TvG$#~xM-4@i9d)qP65%A zG;Bkr149reos(bNCU?e0rlTpHQvA9(QJ-p%M4E>#Fg-BBNrxuv^%f%DD0Q*2)Xnw% z!A}lgF3$kJ6P8%&P3u>$;~pqqAMilYA`!`AOG9>0q3gg#A!OnUr>VjkfrXiF@@b)w z3`wUoJ`eXseYur-=F;=OKLLE4!!LB5y3D?k&z^3a2LJgXhVj0)HA-`}{@!#7R0Rr3 z=vRfo@w?chyj5u~%Wl_&(^r-sr+}G{BiUZvP~17uQiB2dz9iO^1PG1>{fndgh)Zbu z29$fy5Mr|K7I<>+0QGy}u6f6=aPB>6TdpTV$1Yo4tj<-6K1O~lT;QmPhi{l7++r}?|0E|;twy@91J0raPlk1BflAda&6!gx+XUtfMs{q3Pg~^51I^MSmHP)y{i6i*i0Z`63I_&FDMxq2|51xQqY$eubD`i)U zpGpzX4Qgjc1EN#1K<_tHb?)ZU4bue~;*Ro|=$x@0FFy$j^(;8mllp7w&d1*#?Ua1>7$km@+pzM}nG)ifJg5D>;UDgVqzkruZ6(XZs5YsQx2!19FZP9cM` z$CgN*K@{~6Q@)V{9AYW8`iKbAoWQ7EMh_G z_W?e9fN5_Y;DvOn#E(D%Y<&-Y4^})?crd9m*#oFq!N#bi?Z<%mUSFEl(}(t0ToX3P z07h*7@ZdTnw*m-EFw8rW8!?}_@z2{_dKsbh2xN66M9B_dZp-LCBxnfDZgnEVwxC_1gj;#; zQtR85ofxSian`r>HI|E$HKDeLo68)NF^>3$L%T@O8uu_Oz2upz>Kin^3MAu1epN%u zyRt1W{TqfXDVMvV;(a=clY;}mx@|mMW2$K8m_v(&JYK0jjINRiSAx9{d#hiO!rZYu znERJBTq74B;iBz0^?Svf9GU+N_bORFJ-KE;`2@`TXf%aU`1Z!{6^KI5QUEHfc0!Qn*Ny;pc*HB$YxeLhsziLmt3D-{6z(5p`e3 zToTm}MtzZZ;(9H^&~z>}*|j4qYmlY0evh|yQ1wDoFb(!ibDk+5BP3Zfh1s;p6ot%Y z9ajVMSqmon5oH9tzGPXMB_CimTG-@eU$h{?E$84u(T8o6ZkjQq#J-fSPPgnNh{B*8 zR&uy2m*H&5>6f$}L^BoIx1dDj2S0bFq^NY5 z7f`3n7$`DtR+c~veDr(u?7yPYgbc&Nx~eFsa}i^9W%eZKyUh=#*g5t$%9C!*N($V> zU($&!m&QrTG4($5sBoAWyMtJ$vObuk>W${)Ry74unj`(=t4~8Lpm_K-(!gVNPqDA`qnkE z)O|y3hV=McBA6;zJXlFP-9Ou-nLzL}!-+nN+O*3U-=fxJWlm>JN2qyYOJl5QutoX{ zO(_+%vS%-Odn!Mm+FQ!VbSPGAL}cyrR_I{oSV$%DG4Zyj&)zL{>ET6o(gFS`_OIkO zx-cwTX;KTIa-$&|NlE~Q3D`ePK< zn9GvKF1sP?()AbXt=5~LPmh)5@FF6K?KwVDzb)^4n>Z!ES5e`km?r>tCfqHIT|eyN2eNi; zoo#5({4iz*c6Ky+T^Rw-4D_!+Q4((HJMj0n8WO=@a`xPk38T_X?5&+#VDer^DLj3!nFdmp>Y!(= z?%;h>(xX&-Xb=I^<6TK{W5tizM|=B}iPIN8!ik~)nb6OgDH6(9y+kQNAxyu!fgmj? ziul}dlPBQF+d6|5epThXPw-p}mOT)YBez-V|Avm>jq>>U9*1+^e2KX;khIqt6WYEs& zt1i=ypZx1t0Yc>WxE z{xUO&FZ(T~O$N+q$89TiJ(Zq=iW_^nWn$xuxw7xo=2!D_zz2S#3QY&r)#JGnWIuT4 zW2n$t6aRU)38R*DVb>}3dx?4hPm?R4>)|WY>|0~kqqb6;q2&9#6V_3|Ut;f8dcnsa zSIlB-+}_|o#hyD%R5JAGV~pq}Me+Xab!0Z!nz_ymCwB$tdE0%mA+W2|qEas2OfnNh z6pi}~N4dcgkVSgJq4iWrmQ%xK!}R67wts<|mmCNX z1)aLrJKy+DK9ZdY53B}%&O(RPq6&*O&vJ&h5ko|D_fctr*s5f^m8K&#+artwCg2xvTX>?cV^dUxQ8H2@rUmM6sG$}C0!3!#rhcf z^aTf^OsV$g0*Z$Nii}k%^?n{my~3V}^J~#n=)7azMR(Rhs|(=%9f6ekoSS{Fywd|i z^~Z*DzoTZ?$1x$sgug(eT+?Ky^6wYA3IyakB0317QT&D$QL-+;7eXZse}SScY94y- zOZ_fVt1SNlkxu$G(+}9Rk_!4kWjw0?)pc;-+eiAuIX5R-^q{Iu}3c+UyH0IMh+i;UFP%R`zHE0;!16qYNF+`FHKS6);ON}^m+VWpl(&aoGb2& z(z)tUdkk$ek42|<=EVNsApApqwYYH$^JZPIek%dWrlJeK-W140; zI`IHeCtH+Yj%F1QoEdTlh~~FV{@NxgZ=RRlrj||=TA9KA!M;nP&OQM%<&%nb@o%H# zA^`dG++nJG{--a~+0T}BLx@-pDSqa@q z`?T71c`Tzv5$Su=u2#$j?WIRP;K>AKJ(g%dgNe1Clz~>ZQDL?y-PD{Qij)!R@k!uF zTuFb3I3s(_@iToow4r6}Tin+d8xEXw4Swci9{e1e$DOW1S@mu5<}$&L6T`0zbs1~$BEa-W zF>G;B@C+#D<#33BfeM-D<1!6F4gAeemD5F}N)i)Hd3HwSN(DF%l0_ZC+qKUOm6BE4gN4!W`2)x@ zEpeC@bvi@yEs1N8)8x42zn-Fw65FYB&KyWEy!GBfNyE^{OO$ntu=U9tw{~l@q}=5z zpOBt+Sn~KmDQ?PYWNR$VJN$f8!|z+WRE~R{%s0c+*?YpmG{;Y`mm$@01l~m!OL>** z{w|c{F%E+gHgm&;mC>ZmJ9xv?=D&m*5%)POaA+mEBSwVGvoj5@7pEs2G=$j;r`uA^w$=?^i#H1t7wLzC6@DE5qKIuslr4el*6jm*1zEV zaK9T&weO3>wZ}V%bP|ls>>aSpQ8U9_(F5BAxnU#jB+5BWV6sUv1U@8PUQPR%M}Iq| z?T#0%YZh#27Nrv^N*>=Z;JmYP?`1$%4DNgxti;?du^~^lB5*!8rzd#{)~0<%Bx7JZ0Et}mckO|Vi~}KP9)= zctN6M6HKnP)~I!qrkh^3LiAic87@j)A+W+gEISNd9uJK;>I?h*K-e z+RkERbYlD)uC7YcY>k#1cUc#Im<&T(ej5eLH$!|OihI!+j&aq&TF{avZpJBvmDtLDy1^Mrlcrofs$alhd+Q0XD!lIKS9_Y8tt*)(j}zh%qUMEr ztL9N3c^zMx_SX!?W)C|BHh7e-VhUTVqIwI>+jH>LN6H!4;__=>Ek+6tojW&I5lewm z3X=q}DP_}$+ObBS_m4bHoe_x^WQTId7Sc|^)-f>co;dnLS)!BA-aCM2Tt{|a8 z^gMoGU?lW{`Y=Vu$us%X)6eF*cpvG#U12rF);cF4zQoqAErm!hP6P^(vdAEoxPy1&G>51-7#9jt4Q1{2mkLymGDs+3 zDyGlh{ov8W3A}B$Zt$!ec2Sfk&9t_@UfCIad=YYQ_mJ%^dWNj>%pTR7qdB=RlQgI$ zOkU651-Z6k<(&pLFC}rryQ->+kEttc@d_6;uD0V5{tEBUq7b|n??`u1b9~2zFyqYF zmaVSOt$wpLt)}X~*KA$_xAc9v#JQZ+z~ENQIKH|A5By5FKw7uldnL4~nc(c_)#jTs zUhucQbU+{bd$E!gfYw2tc=Lrgiea$JBAUoOyjvKlA=12Of~e~CQb%Q4et$N5+OjN^ zUn>m0kBuX(HxoaC6sc;QEa-hNxVQ72Uzjkix0}7kdZd;%WUsO5H=+L3X0nn5eeMEZ z8aPuoluAPXPM4@AqTypGcra02mbLAwX7BVj{5bn)shLW}DE_bnv*z35!{uagNSj~I z?X|R$+-F1;FXQ6X{Z_MN)3*gB`eK%ruTJ7TmQ6zOW>Z2ynp@yLR3~Uxzc8_-Ume*% z+Sq%EDQ@?0LytBjQeo=U^_45n#@*JCP_>Z6DkZI;08szYy;fIC2YP3lVF( zmw2OkKz-h#zwYdA)l06fSZ4zb3FP+tW{VLSl-?=uSnXdWvgiUmqK%st=!tWZVD(KG zhFS{gZ}GV_tC^|yVT)Dse?tGx>^Pc*Jt>4>@!Jq|uMQOse>>XWNpU8h52*2Gb%vQL zZE37udN+hl)I==Sdq~O$rXOwYzquadgJ@c1~FqyvX!KUd4s!+Bx}- z!^>Ko&O6G(=-04l(bId@w=E?-1!)(IT;u%ZrkOmSGOq2{62fR=Zt3HJl;0;z`paAT zbPAR%-Ow2=7biv%xqSH^cg9Gh&2A%t)dBk(KX)lRT$|lg{-ej^bQ9lBSeNl?&;U>Vk-k%M7Wr8fwb$&Jm*)`Sg% z897#bZ6)Uz63s38BdKeAvQcZQ;b~&6JRT|KPrt1xcKgBYvg!>( zslxkfmX?=t7nVB8YgdM!pY8a?W65CulzCW#Q^FmpVyomTtK6Kck*8{Cv!%S$YYO=M zd1xaj()!LbHeri;C{Gq6p|!Ko)}>B9@5B)Pafa|k&FQK>EbjZ%-_Ht%{QcJL67SLa6{{_sqb>OChkaTF zKKh*)>#u)-0=!{{N2Ks`LJU@1lVV;_hK8C(t=Cknd$(3E6HP>W5z|M;>uqTer%CE- zv_j^JzGbPqKA=bc;IXGDOWbh!L6!bdA@{3^&rNdc@l|bo+DYMH);FQoKsX3DN*36b z{6ckU7)Rj_wY75zyxy~^%AG+`MRrYg9iXF61T#dSpfQ}7!ij*4&;qA#fEhFIB6sM? z_3U)T`cG$oC!?wQL1Ya%QkGNVa+p?{Y^t;3_q}x<{L2BwL|qN<9RlMsoW~NrY1=z| zi|hTyOXPa zyrMr*DX4wFu{S+4|J?$&3u^$#Ga@+QjF4W1QmW3&yfl z4;6`KG^orMgbf34f-;rUja@DTqhkYGHg*!#gGrz+QD6&0*?`ZPv z?6&Xtdg#3zV>an~9RvLj-R4o5?Vfi&#gb~pC*bKYnA|$e*Glh?r|{5|K4gk;AHb)` zFt59o_<5!!)w|=c|zdF3f2)`)6ll zA--?C#ZJ3I>Z`DAXRJS zSC3Xv;LQs-TZJ+iH3O6nX!t6Mg+@%7UxEHf7z33H%LTg}?P`<#2olJ+S_sMeQ@Fw@ zILH@Q%Uk#iAv*Lhw|?4%AFEI>F*2?9nci~8q_W+|^^8|ZmX4(_bfeK>VgNtlwfn(! z;F()s1HZP(>F{uaS73Bg^Nf~aUkyrLj7y8t8naM(<4_QLw`(1dxnC_ZTw9*6Ahb63n%XhR| z`7HrbO-_Mv&F-UcnOEIEiu4}pv!gc9ZP%kg_17aF3vR`$_{-p&^N)+i^ehXct4gQy zfPK*EyhdGXZR=@M7$*-DYjK!ZRa^h(#o`!BL=KfE3V4eOupC-yaj8GESZz$a)I6jh z{0roNlsb?Wlq$!tAn`!`mw%OQYTO3!9(#&T-dHpBv{A zGc!Z8bX+&WF1ko8br=l@(hSaUs^^5)2`sM`wYJxgj@FYcA@3?0^aD;%8>+kQ)F~$s z&kxkAY}UH!GkcGo$LI}C%6`jZ2*@Yvo-a}nm~>sbzkt_P?th=(sHp4O*?2=n13*8Z z$&reOF{{{`LzA4#no`y6lGC3oRUk}~S^@30^mJ&|BSeY(WaPNrCO@nILejmP+nt!Z zVqfapGNz`$Bl}OM%ln`z=A4qZDQ|NaBPr2h;Ox>}T;l~9=DbBuWud>X9lBsdmcGex zg`sZ~3zzj+60*C|f8GDE2Pffjn!(c`_>Tj}e6Ka`P>vJSd*0Tz8QazVN22-7Gqfg# zq<72XrA)p1uOiCYXqgq`q(LFG(n^k1jrv_Q49<9(=ED@8UugCu8r0Fw^ArI={BPuAYS?t{I>@Oz@*_ zVi+2F8^i1?y+vzJuU3OOEjS{rdm%qO$G$eX9=TYZQ?Ud1Ai`lRoKGp8rbeRhd+OfE zr>;y`y`9w40+zl4qUG)o-IR7Q-#4!TCW1wXZaJ%@_K(kE&&nN2%(|b)CvmFp&SYrX zL3~!Xoq(3CVc;lTX%t&BcL$NzD(2in0+#On3OE*U9bB%@Lc2G=ld?LZs)B}hsA?=z zM6(If$XR}@|LXQCMk0ni@+Y{%`}YQ_*9KE^pf_i!9;_3XtX6`7t@*4{pY_huSKGI<8)lP|JUP;%-qVJ!9W_B{CgNq2rDF?XkVB192&fo$ zOW_-#GD^(=;M{(FyxShdo71}O098zFp3~#dc$#9yrDO^Uh4e1@?$4n!^W=r$2y@}U znQeu?W=;G+VyPM_%%p$&SXA&8x>TCPjS=b4vCk~syt`LmQPy^T-o|a}W^z8=r_;~p z)~AT-t}0&VmBHp?*q_ND&&J7YU&+KgEk9W?vUVcoMJ4eC!OsK>fThV&Vr4_58P`ZBWlXP5yO;ZHldx57ex_M~gMC8B%T-X2SV5Ad&j@fG>Y~3WhC0WdT|fov-5%eaU!Xwa(}KqOTP&&Kg?%zhIp-EenM+Mfl~8q{>xT=enBV1= zT76R{w4I!cL!5bz>62)uANL~5^1MGH>_@RKQCJDNIVkm<1<{=b`WRWVI1cR!aX4sv z*L1>^EDVUS?o)TZ$H^)s@3+vS1;6OOh#ae3~j=6cjtA+kJKPdp*EF~!C%%b=KCBQ z+9S=c!-qdTP9&PWG?tmgq`j^Srd zh!0>r5jJ@6LBD!%l6RJQ4JJp6c&Fy?D2Qr`!a~hrisU^mM$lh{mm>A9e=;&oR#{hu z+U&v5cW1y5u3bC#UgjZBh|YbZuSv$Q;BEYRxEz1+Pvtl-4?BF%fb#Bl3?v-Oh~@AZe=4v~S5;Tab(6gUcxWty#iyj<_IZ^J&h{+0sEY;0SIf|*%+?X}ms@6UI-;F{*SKmcgGqA+4j^}1F69P`ubmZ&Cr@W<;)~6mL{3T$Ff1!gYy~g%9Ta(CGx3|^A;`~U!gB4i zs3*9kBy&4b&S|V`^i#%jy87`riHQj1a`fMSdoJ-S6C)~P?X9#-<8RQT^4AM_G~U(v zHv}4I;kbf5mI#V9JvEaO?a4bR-+FzZWXDxY!ti8mTe{mm^D7DtV#f?Tf-f+<+vt6H z=&!le_djVyjbyT{dtg^vZE>?g&1TNZEfX+NT>m{^NdCM_mv~YsL~3<4gK?+VeT7g8 zKQBP&$UJ`4g0SV-{z|yYM;;ilv)Nj%^M-XKVWTU@p90SgJ2_02*RJ zTU1alPth*oDfpDTN^VC`aZ_eX4-|pTjLpmxh#zovZEF8P|28AQ*C|v+J(+ck4(T|= zFPmV~76VyOUv%2f`a&-|b_`3rduShA^BWWuz+QoRSYv^)2nRO>&SqRFmsmWTQ1qmI zVcK&ZHyA#Oo?XsunqB1@=~oeU)Ox?AE9H?MGv)*NHhUA*@;1eZEZk`W!=vzs(ua8U zO@Xx?%o!0@`i!IXJgW(eqQhSbPgrfuRs$mEyYSFD_R}`nXiyH8lkb{|7Y7Sze-Tvt1akZ%0`figtaw|DIdFfs0-~15H5pvr< ziO6V1Oz}?n4T6HqB}E@YYL!NnIkilT+dcj=RN;CuaQEHExsm5CK5@#^^&$)UGtm@eD$L*CY zufD}?rag>)Z~4FpbXCztcU#}axPWSYdc=_Xkj*5Ra;M32s_?mRcp0#{mnLA4A?f?- zDptBQk(Q$?yB69KOuC2Sj3p)g9Qd4JU%kY>trDy|x8(dqqfeIdj{8Rd%XH8aQ#HyD zE4_T+e3a~qWM*7jh5`u|iLjfBGPSXkm$^?~Xu$?M=My9ue{}c4W1w#X?14$13Znm;ZTGo?4~qeqAJ;IPlV{Yz9B(YCd>`FEtdjAU&TgamdXv#FwR zz1!Ggdn=!pUULcqonYJ7nWaMh<1Sb}Qf|CHCT6IRa-To602JD~o85@`Giqz%Of;ygvraFByNg&iC`JNvg9TIu@T>Cab${Ha# zbqo6%Abup}xDay@_N!uRI`8bs_rB4`E4O*1t0$r3x1`9GHN^-i_an0a^fla`h8b=~ z)s$s3ec;BeBH=ip98sXhGQjjQrJrYx`g@7_l6HdYTzhcpGeH$`?&_C(-^v-ShFh0t z-Un>7akVZ34}BYP3+TN;Y!gxs*JQ)}yoyDjMLsrzQ@zV9ZOJE6m4;(vL@7*YUn<_% zgF5QU%wWQy^{9VWvC90?&Cy%0H#L^-R8g8S;aQgPF-Su@`dlunASau6hdukCAYH z2p78kRCgsCPM({h>hmeZzqBz?vVx8Mp0K1A7J*@cMDcM~vsRqdCUSX!GJdiL=&4j! zS8jFo$W8KIFo7>*?fn8HeuLnw>outMBT-$Oc`GFAX4}aRCkVaLjjM$kDz#?<1rfU0 zxwuM#C!dNC^}a^?lDxV2GNDdiEH{Sy%hC@8EG)BRlTKMXzOZ1@wuh+14!^_h^nHfj z8}>lYqQR?gY4Rs&!m;?3J?#?5n^n6{7ov|jE9*TnEGteIrngsDY@Z844Jd_iAZqTS zg_U5lt7gYQ*(||%gRR11q=hlkV4rVY72qOC&5#PEYne22isRe|5aX^XjjYT3gsp@9 zgO>K{%T8jez=DDZC3A6Dv6OIO(Db-N3Zhry@Lh$+A-~!{{S;ry_R!cc^KX!A zePUUDB~rx&fqJ!PmkeVB+zbZhEnL%3ZSBHo3qh^cnJIfu12evQ?YQtZj2q#j{;mZx z!F8EX;K`n356+P3>Fe+53GH;zR{g@(^5wNapV2E)l{Lzc8oUs=?0l$P9YBKFjNwXY zD&k#b!_RQTm1gi@uC8oz0cZ`EPl*_sbqU@YKm&qiXrH0T5hKRWN?jSl&oJ@6Ft&od z^+0FL{w|Vl^n!m>jL+YIQ2tJqPqKkL;2j)M%}Kdvby+w|T8V44D}S{9#LbUzLE6Y3 zmwiX|N05^_mANUU`rNZOzd^(@m^b9e@us-|?=>FIs|^KX{~ad71C>6pB`NWH`EBW=_S`R=$-y$2DuXAE18>Ne=v38I zI4b;&IiwT4S5%pI4XSEtCQUS|>W|BF-}aJGtHwi6vqC1rFOv%C7hegRwd@VmaNDV?hN=`vR3 z{fc$vwG_dm1aUHfs;spT41a?zM&dixpR%~Yj^ED$9hR>yYY9IP8~vEy@v1UgHe1Tn zR#eK3eB#ziK5AIEZADHP~g3j9^dwaSw#_%7Y_n{mT$%9SSrC8X}`^jlb?+B zYQQPiH`*W6a0KvpCLSW&BY1P7eZ3?ckFl#OLGPpnE=uUuqFp74p4+tb08+=V z%Oga076B4Fv>Z~w8@$FA-L!@F&NrX~mM*GP`I{jgjx+(*aBPbd*^?~?u1ympJb z3X5)|@liisKha03z5mu$UN*FCswVO5QH@dl3#xF;7xKCvENI1|18#=7P9y{ud{Gvyqj6I{znjQr>`yIr+3)7H+dyE^E8;(G5o1B3bkzc)yJM!>QC%8&v?;bWQMwHpcNb z&Sk}Qh`(xclpZ*R8<0ld-)%yk;^>Q!ZkSVgb1RsIIR&^Lh36s0Lhqg&g~tj87w=HI z7?;w2E#%MUQI-OYyw&(x5ndu82yv=Asa)+RO`RM$O8Qx|rczkF!#d`1OCn=EE1Vf* z5w?OAgyF+`7s#%QjE#U6oafo8Xh46a1tw|uvN&NMY$kG%K|+S;h~$`8g4>{(c&Et7M~r~ZaZgspQiW|J?u8oc6c0PX#iThFNK*~Y4CqG2_Pt80#d z`$NC>&UmIDuE^9R>RxqVa)cErk-{lP0{WYKZv5uA#!jx0Z6kt5Ev5Vg?}|Te8*IN{ zPdm8!b6l0!Mm}JLy|0Ws>>(h(8?agnSC$(%w$QMr#crxkfzl%ZE*piuI>vD0QeBUf zjr^6Zd{l7I>I#J66~r3{6FERc_Na*UB1~|_5*X-W4!%BHrC=;1{@ElYO6l!lWYRB_ zQ5>PAcn$I_kJ&?deJ_AhsCPhqXB(x3*@_RPTB6GJE9-0iYFfPQT_A;TnRqZ;_{+}^_SJV-)@{$QfR8*8<#(xiZ+=YB(6S%>}J)SO`~Yf z)sGmUh$S0(lYW}aH2Y-?BwMvN!3WYrZ_$senL|q}93Z|Q6CEK6%Iscpv>Hn*G>18@ zz?dMIdzmGEkb5**R!-+cJ+VBh9rBi?;@2D7a@Q=;+oT|TpTnLx2LARbr<#466Gm{; zB+RxF9PKGk##=P(U$@lX$bxSEVYNMUg)oQ#rGL@6Of+d#Idw*!xZh}-0xnEesn+0* zo>ZC_yZpTB(XkH24=Yv4D7G&@6JD2jJaj_mNjIUJyuN;$&8Z?{KV-7!T`?E<()q{8 zdhlBdf?+WxA1h^yxIn{0WecM`IiUgL4SloSiGz?z3&ZI;T~i4 zSR^~gI^&0n>V<^|>T|6Vh3-6=(^fGxq#v?X}s)@;I%48a~$Ec?Tsp9>DxW&E3OJCALJ;?p!&9$ zS4Pm}Hp6bNjX;7M;Yx{h>$ILk|GBR(478N7>E{jOpQ#99x_OAYK(tfaFJsS2SwT_j z-3oUj>59ijObt_(DQuA&gFh|x1+Z4$-OD(3!(L#nP>{{!(fw93^7IF=;t$%EX5cK@ z4zL#1mKo8mZfdcdGA?&YGl%vQ-w+`gV{aZHzO=EdEVTFV(f&L(_I2g=HzS$o7A{Dl zA6DiY5sdbQ4Sd%V-ZGGpK{X=|!znDPYhfX0OW3^^b(KEBW-}H0)E@rQ(z?$*eaUCN z)V7~D56X)#s^dav+h5f2uCL+`^EVKIO zHLB4`op;SDBr1agP6>5!^~J~D`wx$zbdiL=Zk>+~JG{WIB2m1t-22OhYq*ft+$udS zWgqW7qsqvV6Wfj)0oKXCK?vSrq++)$u?+e1+?9gZ5Z?lmfs#cj``4aFKV{MMbTFwcOw1R29o=8~bW?_F znpP&5UMZX3O)kz|$Hhr$9HsTI@%@4!Nmc3_67^@#2nqKnuV%}|MtW~g&&RfhFWGUY zIXCt-(O8ayERSFx0}MQKZ*Wj~M~7WB*%A9Ud~4~qnES6Eki`Y?bUwPlu%AHEZg z75ij`^Dzh092=dUi?h)$=@5G`;YO!*%z_W`W1>qJ8db1wE8Zxwlw3fdNXrw*Q@NIn zFGGu}45HpkktK!Q&8!F0-j?hc`V9DRFCP=*n3xoc5t}?KdVBBbtC7TJ;pqSZlm%la zEDX-ro!m+jcdqi1VaM|L1x#p6@SECLjgy-Ua>Q?jeSFUJ$?58J%1)5&pq1dTK3k@W zVAcDL{PnsfeG9j7l!2*6Y!KP)SHQ|2ah5sqnaXy@GUYj zS}-2*TL%y1Mp*fOkcZRgYvLxGqlt^%t7%K3W5~^HPAXAmCp-23WHJD8Cs{NhPY_pF z?QrP^uCJ`=(^w%J4?VmMK_V<=hPGBr@&AyD-uW*`+CPfi@>%ztF9QJmjF1E}1}J@) zYSp64dBUWqH-&1tooyssS&uc_I|X_u)0r6Cip_ol9+cq?V4A$+_+ekq5$v9WihA03 z?G#l$zb`6cfB|uC;b+k%Oi@bT^gI<~o^y#FTqKd%0TSUEjUB7yF*KwOD*LIpfAwJM znJcpwV*Ba6ripjW8s67z4L~I=dspV0w-ZxrXXm_0kk~Eu54MIXRIQBBH%aEJOcLd^d~hfl)9!zZX;MMC z&exrd6QFxkI~IClWq)3Z`>u*ZpMzVlPg&VA-sSsF*8MBGVx~RG<7LS#eF`CKef}Qh zA`AUmyMuh1sPw0{$oE3`>@+*Z z3mu02&=dNeTRj~WSWTSh%HI6`s6f+ayyssF=Kxs}pLe>D~WIhN<}k zMAbj}*3t9tx}(N_sahep|5Aw`{}B=I{SQqnEG_S1gb-1^DNZiXnY1y&X#|Y{%y7h#dCh+_E z__7)ESNXY(oDWV}&=qrd9$dM~txg$uO|(E9@!qr6oefoCibu zv2zeRikDY2{`yUJWAF*)zyquA# z335Z9e#zlz4Etbbc;rjt3ISP=##!!2_q7cR@-}*KHsNMlAir>FaCPmX9jjfNwc{_= z=LAm_6rM_jj(FZNPL#Juf3=5WW(CBE%+e}F>{XH7e{j)JIyh(H5N}3gQc}^6=S?B& zLmX{IFJ3Av6`_$`Ugi}T)IO6!n!czuz$a23+$_hC@4iAWc&C&%?nO?wY!@+%LnD`; zTiL-AD-bC7f=xe+#`D2LO*7pMtbQhjRhsgp(HAwMNz8b&EC|BI*o5 zpi|x2M{cIcWZD7Oh&^VunMDZ%Sl9+R~=d2<=j9&Nkmr4Vf`WMwogjt z)I2IfZE2L5tiO9PVX|*Yp^r-FCCbgYAjTPCLctjmddU@SGmn~>>h;WGsSdbtja8*L)lmF1ma32=*zVaAkSL|7EapF#qA-br?ZcD~}^bl>&jb7UaB+ zo;zDD<1HHbp||O<9g^F0%{pp!o1^`WjRjKQPuTH5JDDBMsD3I+gUN zNxPA}MVemJU&=${`w*lA*Wg`?le52#VnbDYY+ld2v&zHQs8m`-f^U-!uCaq!+MB1& z&T5eo1gX4H`NsC{D@zV;CQJq`t#7~)3kl}WK1MWTAC!d5qxFK(VinZ|Z`zZ|jdv811{Abp*Nz3u`1Jr^wJ@#ycfT$aXr(C&OM~RX;o|DVm6-z5}|%x z_$|Y{A+POiNmW^U7l$xgeCViI962le5>4mc-m&>muIojoX5q|v?1O(T=y{E zcP+^kZhSU+9ecFW9TNK)XrZYM3YRKpWvdY*j9?_GX%C;hV@%ZwIk4z4XPOF-1=CsU zemSEK__pnBH!b*W_Zeb(E)O`LK*^qen49Veu9@qU4bvQGfbVLfQVwJqu34OB`xidj z{00I0!gpK&ih!TD#^HI%ldaX>kVT8nr55&X1V|H6v~F!8U0OJ#qc5V4!;yEL>S342 zSWwjHxEc;7P|2bN70Wl(PUp|13Tj;%No%OkogPlL+0mWCBHAc!T;lK_7PhJ;eA^r6c{MYM4HuqIHQeWySinssd{S;|5Vja zmG$a?EGwVaFZRCh>4I`Gu2?=%kJI<)5vor~K*}tvh625kQ*aUIGFvr7iul^lK>`wg zEVRPt^U5JnK0E#l^2jr619x0-;brp-uO-iHOX&7d?3Mj*@P! z#OgSI!*wMdn4Poz{%!3c{*!2%D)4x!GMm_Z;6pVyU83j7p|fFDv9fM-E7PJiR^Xn+ z^BeTO%*W|B=#D77(#+$9agPI-*;ptinmdG zLrvXq-gM{Wd)&qtHD`x1^&6i7?eB=ghuEMDG+}?kxKd%o1vBIG6$=xu6A23#`BppW z9o>y6Dki5OwWk>u+>FbCfz*(SaXPOejX{pa#t}=ol{Ma!j+dvct;STuYg^{|JzUH| zRCes_O}0w~JB~$o8=v)Ncg5i*XRA-v($ie`QKD7TJy~3SPF|2sN4)iNe_P<_nF66W z(+PsBFPWW#>$KkermsM?@ zOol`+5?55drauhWi(q(Gn(>$?jE;cc3~#*K9d}_-p{kcN$-}kL%5PC9xI*n`ww2p8+Wj}!Z+qe+uTbo!tHw4L2iAibeQuM8rBfvGfpNp1@lr@9$36iBj45xa&@Sn<{ z`WSj@B$ptO9{&v!`qfPIHh>7`mM+vz`G)Tb#gROTvm$MhU1NFmDy#4J+YsDYrz zf7s7ImdGC<4WwfH#~=gArWOGB4Defk$BVwBSWEVXpykhNG|~EB{%I)1Q85S9GDRu> zaWunaCLlTk*Y3jjuH7xg&ojZddUQ2e{yRoyPR5%n{gHsBYZKp-04yZI7ds8Ou)WZ& z0I1z(D9|6XDI^vupsSn8O&7nC@|uE+QiG5ufAV@P9}VN4(0mLcw@*v>*xg$SO?8EcKR&zz}vg7Ezo{? zw=uU)%huMGMhNq0XvWUif^q3(4(@axE#H5n$8(S4(UXM-wACX%V;v(hcXQ`4z+@U~ z5R*64V!tXbrCP-NMnKuS#Hl`{bsv%@hFujTybpx`;F;aH9$kc5HMc;pAOh!-t>-~w( zzaQv(K8v=-e5x50omC+3dkoc@iB9lR3+}v*Yw6rFeEf=2GwemlbeKGEl;T0@K1}2J zd(?z2EIEMhn5 zJz`!h*fG%BljW%u*xP7da1uU}jQaBC%_zYPHkDLiV@YkWKTwjw5|eDCIrPw|*B?`1 z;M9|q#~^)5Z-T`)xP!6gZaUR3wdXe|nnG&{j`G`;CR97x$O}rxye%VE_V+pBx7$om z-r%B6bd8}z&r&Q8c!p|6>_}M^`w*^ZPaKhHsDWGWneLKFoWij zb}a7Q34#r>*iioK)>Eh1*gkPR7gx)zWpMMFrj&YXcV4Ti*e4$$pSmi0Ik;WkmK>?u z5R}<F_Jh^~HF)$#Z{c&&(K&EFT$;LMf z5S`*VI5DdcMT-eF1mku zaES};y@EhQb`=!t-*CtGlMxpxVSF1bDdtA&N&Hh%4Af7H_AEK~`|(zbq$2btoPoeT zwQnis9GJ<)^(pN9=(RIfyb^9M_s4iRwZcSIO1<2@gJatTf1cp=)$u)n#tm`wXTDCY zijCoF(@*d-=XVYk+{wnhp+8FPjtjra4!L1R51ZyWP}^J@x~xx~Gq|s>8udj(KxyMx z9YhDByw}2Y_uw|yKF#*mQr@n}r!sGe+Jmp|{!AdDgkDe9rURLYuD9+Xk*8x}5*Ize z5qFPTP@(IRTr0Rf%CEpYgil+d<^8?rL#1zbiHrrF?T0_{F&lPoR6cbM%f=HTd~Z&w zf#qXq@`d|RQ*%??zB=p?ZKJv6+mal3*dUC$V5VvAE`F7)~{Qf1-({ zl_*(pX>�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 + + + + + 105. Construct Binary Tree from Preorder and Inorder Traversal · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main.go b/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main.go new file mode 100644 index 000000000..278788d7e --- /dev/null +++ b/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main.go @@ -0,0 +1,28 @@ +package constructbinarytreefrompreorderandinordertraversal + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +// 時間複雜 O(), 空間複雜 O() +func buildTree(preorder []int, inorder []int) *TreeNode { + if len(preorder) == 0 { + return nil + } + result := &TreeNode{preorder[0], nil, nil} + + i := 0 + for ; i < len(inorder); i++ { + if preorder[0] == inorder[i] { + break + } + } + result.Left = buildTree(preorder[1:i+1], inorder[:i]) + result.Right = buildTree(preorder[i+1:], inorder[i+1:]) + + return result +} diff --git a/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main_test.go b/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main_test.go new file mode 100644 index 000000000..0788b7309 --- /dev/null +++ b/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main_test.go @@ -0,0 +1,34 @@ +package + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0110.Balanced-Binary-Tree/balance_1.jpg b/Leetcode/0110.Balanced-Binary-Tree/balance_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe2734074323be69961b79f2b483ed66aea53e0f GIT binary patch literal 10768 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 M?mXF!lD?VxFDr9pHUIzs literal 0 HcmV?d00001 diff --git a/Leetcode/0110.Balanced-Binary-Tree/balance_2.jpg b/Leetcode/0110.Balanced-Binary-Tree/balance_2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3c84fb9c8b5109a93d0eb332e940e231639b83eb GIT binary patch literal 14999 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 U>fb1sFqQr%r|?#`v)s)5KmK1hX#fBK literal 0 HcmV?d00001 diff --git a/Leetcode/0110.Balanced-Binary-Tree/index.html b/Leetcode/0110.Balanced-Binary-Tree/index.html new file mode 100644 index 000000000..67ee44199 --- /dev/null +++ b/Leetcode/0110.Balanced-Binary-Tree/index.html @@ -0,0 +1,3952 @@ + + + + + + + 110. Balanced Binary Tree · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0110.Balanced-Binary-Tree/main.go b/Leetcode/0110.Balanced-Binary-Tree/main.go new file mode 100644 index 000000000..321fae47d --- /dev/null +++ b/Leetcode/0110.Balanced-Binary-Tree/main.go @@ -0,0 +1,48 @@ +package balancedbinarytree + +import "LeetcodeGolang/structures" + +// 時間複雜 O(), 空間複雜 O() + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + +type TreeNode = structures.TreeNode + +// 時間複雜 : `O(n)` ; 空間複雜 : `O(1)` +func IsBalanced(root *TreeNode) bool { + if root == nil { + return true + } + leftHight := depth(root.Left) + rightHight := depth(root.Right) + + return abs(leftHight-rightHight) <= 1 && IsBalanced(root.Left) && IsBalanced(root.Right) +} + +func depth(root *TreeNode) int { + if root == nil { + return 0 + } + return max(depth(root.Left), depth(root.Right)) + 1 +} + +func abs(n int) int { + if n < 0 { + return -n + } + return n +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/Leetcode/0110.Balanced-Binary-Tree/main_test.go b/Leetcode/0110.Balanced-Binary-Tree/main_test.go new file mode 100644 index 000000000..429fe465a --- /dev/null +++ b/Leetcode/0110.Balanced-Binary-Tree/main_test.go @@ -0,0 +1,48 @@ +package balancedbinarytree + +import ( + "LeetcodeGolang/structures" + "testing" +) + +var tests = []struct { + arg1 []int + want bool +}{ + { + []int{1, 2, 2, 3, structures.NULL, structures.NULL, 3, 4, structures.NULL, structures.NULL, 4}, + false, + }, + { + []int{1, 2, 2, 3, structures.NULL, structures.NULL, 3, 4, structures.NULL, structures.NULL, 4}, + false, + }, + { + []int{3, 9, 20, structures.NULL, structures.NULL, 15, 7}, + true, + }, +} + +func TestIsBalanced(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + root := structures.Ints2TreeNode(tt.arg1) + + if got := IsBalanced(root); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkIsBalanced(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + root := structures.Ints2TreeNode(tests[0].arg1) + IsBalanced(root) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/index.html b/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/index.html new file mode 100644 index 000000000..4e9583dfd --- /dev/null +++ b/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/index.html @@ -0,0 +1,4003 @@ + + + + + + + 0121.Best Time to Buy and Sell Stock · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                      +
                                                                                                                                                      + + + + + + + + +
                                                                                                                                                      + +
                                                                                                                                                      + +
                                                                                                                                                      + + + + + + + + +
                                                                                                                                                      +
                                                                                                                                                      + +
                                                                                                                                                      +
                                                                                                                                                      + +
                                                                                                                                                      + +

                                                                                                                                                      0121.Best Time to Buy and Sell Stock)

                                                                                                                                                      題目

                                                                                                                                                      +

                                                                                                                                                      You are given an array prices where prices[i] is the price of a given stock on the ith day.

                                                                                                                                                      +

                                                                                                                                                      You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock.

                                                                                                                                                      +

                                                                                                                                                      Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0.

                                                                                                                                                      +

                                                                                                                                                      Example 1:

                                                                                                                                                      +

                                                                                                                                                      Input: prices = [7,1,5,3,6,4] +Output: 5 +Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. +Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell. +Example 2:

                                                                                                                                                      +

                                                                                                                                                      Input: prices = [7,6,4,3,1] +Output: 0 +Explanation: In this case, no transactions are done and the max profit = 0.

                                                                                                                                                      +

                                                                                                                                                      Constraints:

                                                                                                                                                      +

                                                                                                                                                      1 <= prices.length <= 105 +0 <= prices[i] <= 104 +Accepted +3,930,287 +Submissions +7,349,138

                                                                                                                                                      +

                                                                                                                                                      題目大意

                                                                                                                                                      +

                                                                                                                                                      解題思路

                                                                                                                                                      +

                                                                                                                                                      Big O

                                                                                                                                                      +

                                                                                                                                                      時間複雜 : O(n) +空間複雜 : O(1)

                                                                                                                                                      +

                                                                                                                                                      來源

                                                                                                                                                      + +

                                                                                                                                                      解答

                                                                                                                                                      +

                                                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main.go

                                                                                                                                                      +
                                                                                                                                                      package besttimetobuyandsellstock
                                                                                                                                                      +
                                                                                                                                                      +type numbers interface {
                                                                                                                                                      +    int | int8 | int16 | int32 | int64 | float32 | float64
                                                                                                                                                      +}
                                                                                                                                                      +
                                                                                                                                                      +func max[T numbers](a T, b T) T {
                                                                                                                                                      +    if a > b {
                                                                                                                                                      +        return a
                                                                                                                                                      +    }
                                                                                                                                                      +    return b
                                                                                                                                                      +}
                                                                                                                                                      +
                                                                                                                                                      +// 時間複雜 O(n), 空間複雜 O(1)
                                                                                                                                                      +// Slide windows
                                                                                                                                                      +func MaxProfit(prices []int) int {
                                                                                                                                                      +    left, right := 0, 1
                                                                                                                                                      +    maxProfit := 0
                                                                                                                                                      +    for right < len(prices) {
                                                                                                                                                      +        if prices[left] < prices[right] {
                                                                                                                                                      +            profit := prices[right] - prices[left]
                                                                                                                                                      +            maxProfit = max(maxProfit, profit)
                                                                                                                                                      +        } else {
                                                                                                                                                      +            left = right
                                                                                                                                                      +        }
                                                                                                                                                      +        right++
                                                                                                                                                      +    }
                                                                                                                                                      +    return maxProfit
                                                                                                                                                      +}
                                                                                                                                                      +
                                                                                                                                                      +// 時間複雜 O(n), 空間複雜 O(1)
                                                                                                                                                      +// DP : 最佳解
                                                                                                                                                      +func MaxProfitDP(prices []int) int {
                                                                                                                                                      +
                                                                                                                                                      +    if len(prices) == 0 {
                                                                                                                                                      +        return 0
                                                                                                                                                      +    }
                                                                                                                                                      +
                                                                                                                                                      +    minPrice := prices[0] // 初始最低價格為第一天的價格
                                                                                                                                                      +    maxProfit := 0
                                                                                                                                                      +
                                                                                                                                                      +    for i := 1; i < len(prices); i++ {
                                                                                                                                                      +        // 如果當前價格比最低價格低,更新最低價格
                                                                                                                                                      +        if prices[i] < minPrice {
                                                                                                                                                      +            minPrice = prices[i]
                                                                                                                                                      +        } else {
                                                                                                                                                      +            // 否則計算當前價格賣出時的利潤,並更新最大利潤
                                                                                                                                                      +            profit := prices[i] - minPrice
                                                                                                                                                      +            if profit > maxProfit {
                                                                                                                                                      +                maxProfit = profit
                                                                                                                                                      +            }
                                                                                                                                                      +        }
                                                                                                                                                      +    }
                                                                                                                                                      +
                                                                                                                                                      +    return maxProfit
                                                                                                                                                      +}
                                                                                                                                                      +
                                                                                                                                                      +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                      +// DP
                                                                                                                                                      +func MaxProfitDP2(prices []int) int {
                                                                                                                                                      +    n := len(prices)
                                                                                                                                                      +    dp := make([][]int, n)
                                                                                                                                                      +    for i := 0; i < n; i++ {
                                                                                                                                                      +        dp[i] = make([]int, 2)
                                                                                                                                                      +        if i-1 == -1 {
                                                                                                                                                      +            // base case
                                                                                                                                                      +            dp[i][0] = 0
                                                                                                                                                      +            dp[i][1] = -prices[i]
                                                                                                                                                      +            continue
                                                                                                                                                      +        }
                                                                                                                                                      +        dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i])
                                                                                                                                                      +        dp[i][1] = max(dp[i-1][1], -prices[i])
                                                                                                                                                      +    }
                                                                                                                                                      +    return dp[n-1][0]
                                                                                                                                                      +}
                                                                                                                                                      +
                                                                                                                                                      +

                                                                                                                                                      Benchmark

                                                                                                                                                      +
                                                                                                                                                      goos: darwin
                                                                                                                                                      +goarch: amd64
                                                                                                                                                      +pkg: LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock
                                                                                                                                                      +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                      +BenchmarkMaxProfit-8            208734571                8.156 ns/op           0 B/op          0 allocs/op
                                                                                                                                                      +BenchmarkMaxProfitDP-8          240880467                5.720 ns/op           0 B/op          0 allocs/op
                                                                                                                                                      +BenchmarkMaxProfitDP2-8          4095866               282.6 ns/op           240 B/op          7 allocs/op
                                                                                                                                                      +PASS
                                                                                                                                                      +ok      LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock    6.732s
                                                                                                                                                      +
                                                                                                                                                      +
                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                      + +
                                                                                                                                                      + +
                                                                                                                                                      +
                                                                                                                                                      +
                                                                                                                                                      + +

                                                                                                                                                      results matching ""

                                                                                                                                                      +
                                                                                                                                                        + +
                                                                                                                                                        +
                                                                                                                                                        + +

                                                                                                                                                        No results matching ""

                                                                                                                                                        + +
                                                                                                                                                        +
                                                                                                                                                        +
                                                                                                                                                        + +
                                                                                                                                                        +
                                                                                                                                                        + +
                                                                                                                                                        + + + + + + +
                                                                                                                                                        + + +
                                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main.go b/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main.go new file mode 100644 index 000000000..7477e5f4f --- /dev/null +++ b/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main.go @@ -0,0 +1,75 @@ +package besttimetobuyandsellstock + +type numbers interface { + int | int8 | int16 | int32 | int64 | float32 | float64 +} + +func max[T numbers](a T, b T) T { + if a > b { + return a + } + return b +} + +// 時間複雜 O(n), 空間複雜 O(1) +// Slide windows +func MaxProfit(prices []int) int { + left, right := 0, 1 + maxProfit := 0 + for right < len(prices) { + if prices[left] < prices[right] { + profit := prices[right] - prices[left] + maxProfit = max(maxProfit, profit) + } else { + left = right + } + right++ + } + return maxProfit +} + +// 時間複雜 O(n), 空間複雜 O(1) +// DP : 最佳解 +func MaxProfitDP(prices []int) int { + + if len(prices) == 0 { + return 0 + } + + minPrice := prices[0] // 初始最低價格為第一天的價格 + maxProfit := 0 + + for i := 1; i < len(prices); i++ { + // 如果當前價格比最低價格低,更新最低價格 + if prices[i] < minPrice { + minPrice = prices[i] + } else { + // 否則計算當前價格賣出時的利潤,並更新最大利潤 + profit := prices[i] - minPrice + if profit > maxProfit { + maxProfit = profit + } + } + } + + return maxProfit +} + +// 時間複雜 O(), 空間複雜 O() +// DP +func MaxProfitDP2(prices []int) int { + n := len(prices) + dp := make([][]int, n) + for i := 0; i < n; i++ { + dp[i] = make([]int, 2) + if i-1 == -1 { + // base case + dp[i][0] = 0 + dp[i][1] = -prices[i] + continue + } + dp[i][0] = max(dp[i-1][0], dp[i-1][1]+prices[i]) + dp[i][1] = max(dp[i-1][1], -prices[i]) + } + return dp[n-1][0] +} diff --git a/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main_test.go b/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main_test.go new file mode 100644 index 000000000..32fcc4043 --- /dev/null +++ b/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main_test.go @@ -0,0 +1,77 @@ +package besttimetobuyandsellstock + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{7, 1, 5, 3, 6, 4}, + 5, + }, + { + []int{7, 6, 4, 3, 1}, + 0, + }, +} + +func TestMaxProfit(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MaxProfit(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMaxProfitDP(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MaxProfitDP(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMaxProfitDP2(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MaxProfitDP2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkMaxProfit(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxProfit(tests[0].arg1) + } +} + +func BenchmarkMaxProfitDP(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxProfitDP(tests[0].arg1) + } +} + +func BenchmarkMaxProfitDP2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxProfitDP2(tests[0].arg1) + } +} + +/* +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkMaxProfit-8 208734571 8.156 ns/op 0 B/op 0 allocs/op +BenchmarkMaxProfitDP-8 240880467 5.720 ns/op 0 B/op 0 allocs/op +BenchmarkMaxProfitDP2-8 4095866 282.6 ns/op 240 B/op 7 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock 6.732s +*/ diff --git a/Leetcode/0125.Valid-Palindrome/index.html b/Leetcode/0125.Valid-Palindrome/index.html new file mode 100644 index 000000000..815019632 --- /dev/null +++ b/Leetcode/0125.Valid-Palindrome/index.html @@ -0,0 +1,3965 @@ + + + + + + + 0125. Valid Palindrome · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                        +
                                                                                                                                                        + + + + + + + + +
                                                                                                                                                        + +
                                                                                                                                                        + +
                                                                                                                                                        + + + + + + + + +
                                                                                                                                                        +
                                                                                                                                                        + +
                                                                                                                                                        +
                                                                                                                                                        + +
                                                                                                                                                        + +

                                                                                                                                                        0125. Valid Palindrome

                                                                                                                                                        題目

                                                                                                                                                        +

                                                                                                                                                        A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers.

                                                                                                                                                        +

                                                                                                                                                        Given a string s, return true if it is a palindrome, or false otherwise.

                                                                                                                                                        +

                                                                                                                                                        Example 1:

                                                                                                                                                        +

                                                                                                                                                        Input: s = "A man, a plan, a canal: Panama" +Output: true +Explanation: "amanaplanacanalpanama" is a palindrome. +Example 2:

                                                                                                                                                        +

                                                                                                                                                        Input: s = "race a car" +Output: false +Explanation: "raceacar" is not a palindrome. +Example 3:

                                                                                                                                                        +

                                                                                                                                                        Input: s = " " +Output: true +Explanation: s is an empty string "" after removing non-alphanumeric characters. +Since an empty string reads the same forward and backward, it is a palindrome.

                                                                                                                                                        +

                                                                                                                                                        Constraints:

                                                                                                                                                        +

                                                                                                                                                        1 <= s.length <= 2 * 105 +s consists only of printable ASCII characters.

                                                                                                                                                        +

                                                                                                                                                        題目大意

                                                                                                                                                        +

                                                                                                                                                        解題思路

                                                                                                                                                        +

                                                                                                                                                        左右指針

                                                                                                                                                        +

                                                                                                                                                        Big O

                                                                                                                                                        +

                                                                                                                                                        時間複雜 : O(n) +空間複雜 : O(1)

                                                                                                                                                        +

                                                                                                                                                        來源

                                                                                                                                                        + +

                                                                                                                                                        解答

                                                                                                                                                        +

                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0125.Valid-Palindrome/main.go

                                                                                                                                                        +
                                                                                                                                                        package validpalindrome
                                                                                                                                                        +
                                                                                                                                                        +import (
                                                                                                                                                        +    "strings"
                                                                                                                                                        +    "unicode"
                                                                                                                                                        +)
                                                                                                                                                        +
                                                                                                                                                        +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                        +func IsPalindrome(s string) bool {
                                                                                                                                                        +    // 將字符轉成小寫,
                                                                                                                                                        +    s = strings.ToLower(s)
                                                                                                                                                        +
                                                                                                                                                        +    // 使用雙指針, 一左一右相向而行, 判斷回文
                                                                                                                                                        +    left, right := 0, len(s)-1
                                                                                                                                                        +    for left < right {
                                                                                                                                                        +        for left < right && !isChar(s[left]) {
                                                                                                                                                        +            left++
                                                                                                                                                        +        }
                                                                                                                                                        +        for left < right && !isChar(s[right]) {
                                                                                                                                                        +            right--
                                                                                                                                                        +        }
                                                                                                                                                        +        if s[left] != s[right] {
                                                                                                                                                        +            return false
                                                                                                                                                        +        }
                                                                                                                                                        +        left++
                                                                                                                                                        +        right--
                                                                                                                                                        +    }
                                                                                                                                                        +    return true
                                                                                                                                                        +}
                                                                                                                                                        +
                                                                                                                                                        +func isChar(c byte) bool {
                                                                                                                                                        +    if unicode.IsLetter(rune(c)) || unicode.IsDigit(rune(c)) {
                                                                                                                                                        +        return true
                                                                                                                                                        +    }
                                                                                                                                                        +    return false
                                                                                                                                                        +}
                                                                                                                                                        +
                                                                                                                                                        +func isCharAZ09(c byte) bool {
                                                                                                                                                        +    if ('a' 
                                                                                                                                                        +

                                                                                                                                                        Benchmark

                                                                                                                                                        +
                                                                                                                                                        goos: darwin
                                                                                                                                                        +goarch: amd64
                                                                                                                                                        +pkg: LeetcodeGolang/Leetcode/0125.Valid-Palindrome
                                                                                                                                                        +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                        +BenchmarkIsPalindrome-8                  3840048               552.2 ns/op            32 B/op          1 allocs/op
                                                                                                                                                        +BenchmarkIsPalindromeStrBuilder-8        3164848               439.0 ns/op            88 B/op          4 allocs/op
                                                                                                                                                        +PASS
                                                                                                                                                        +ok      LeetcodeGolang/Leetcode/0125.Valid-Palindrome   5.242s
                                                                                                                                                        +
                                                                                                                                                        +
                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                        + +
                                                                                                                                                        + +
                                                                                                                                                        +
                                                                                                                                                        +
                                                                                                                                                        + +

                                                                                                                                                        results matching ""

                                                                                                                                                        +
                                                                                                                                                          + +
                                                                                                                                                          +
                                                                                                                                                          + +

                                                                                                                                                          No results matching ""

                                                                                                                                                          + +
                                                                                                                                                          +
                                                                                                                                                          +
                                                                                                                                                          + +
                                                                                                                                                          +
                                                                                                                                                          + +
                                                                                                                                                          + + + + + + +
                                                                                                                                                          + + +
                                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0125.Valid-Palindrome/main.go b/Leetcode/0125.Valid-Palindrome/main.go new file mode 100644 index 000000000..78f4824cf --- /dev/null +++ b/Leetcode/0125.Valid-Palindrome/main.go @@ -0,0 +1,69 @@ +package validpalindrome + +import ( + "strings" + "unicode" +) + +// 時間複雜 O(), 空間複雜 O() +func IsPalindrome(s string) bool { + // 將字符轉成小寫, + s = strings.ToLower(s) + + // 使用雙指針, 一左一右相向而行, 判斷回文 + left, right := 0, len(s)-1 + for left < right { + for left < right && !isChar(s[left]) { + left++ + } + for left < right && !isChar(s[right]) { + right-- + } + if s[left] != s[right] { + return false + } + left++ + right-- + } + return true +} + +func isChar(c byte) bool { + if unicode.IsLetter(rune(c)) || unicode.IsDigit(rune(c)) { + return true + } + return false +} + +func isCharAZ09(c byte) bool { + if ('a' <= c && c <= 'z') || ('0' <= c && c <= '9') { + return true + } + return false +} + +func IsPalindromeStrBuilder(s string) bool { + s = strings.ToLower(s) + strLen := len(s) + // 將字符轉成小寫, 並濾掉空格和標點符號等字符 + var sb strings.Builder + for i := 0; i < strLen; i++ { + c := rune(s[i]) + if unicode.IsLetter(c) || unicode.IsDigit(c) { + sb.WriteRune(c) + } + } + + sbStr := sb.String() + + // 使用雙指針, 一左一右相向而行, 判斷回文 + left, right := 0, len(sbStr)-1 + for left < right { + if sbStr[left] != sbStr[right] { + return false + } + left++ + right-- + } + return true +} diff --git a/Leetcode/0125.Valid-Palindrome/main_test.go b/Leetcode/0125.Valid-Palindrome/main_test.go new file mode 100644 index 000000000..9eea4669f --- /dev/null +++ b/Leetcode/0125.Valid-Palindrome/main_test.go @@ -0,0 +1,48 @@ +package validpalindrome + +import "testing" + +var tests = []struct { + arg1 string + want bool +}{ + { + "A man, a plan, a canal: Panama", + true, + }, +} + +func TestIsPalindrome(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := IsPalindrome(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkIsPalindrome(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + IsPalindrome(tests[0].arg1) + } +} + +func BenchmarkIsPalindromeStrBuilder(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + IsPalindromeStrBuilder(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0125.Valid-Palindrome -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0125.Valid-Palindrome +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkIsPalindrome-8 3840048 552.2 ns/op 32 B/op 1 allocs/op +BenchmarkIsPalindromeStrBuilder-8 3164848 439.0 ns/op 88 B/op 4 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0125.Valid-Palindrome 5.242s +*/ diff --git a/Leetcode/0128.Longest-Consecutive-Sequence/index.html b/Leetcode/0128.Longest-Consecutive-Sequence/index.html new file mode 100644 index 000000000..eeb26fb4a --- /dev/null +++ b/Leetcode/0128.Longest-Consecutive-Sequence/index.html @@ -0,0 +1,3927 @@ + + + + + + + 128. Longest Consecutive Sequence · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                          +
                                                                                                                                                          + + + + + + + + +
                                                                                                                                                          + +
                                                                                                                                                          + +
                                                                                                                                                          + + + + + + + + +
                                                                                                                                                          +
                                                                                                                                                          + +
                                                                                                                                                          +
                                                                                                                                                          + +
                                                                                                                                                          + +

                                                                                                                                                          128. Longest Consecutive Sequence

                                                                                                                                                          題目

                                                                                                                                                          +

                                                                                                                                                          給定一個未排序的整數數位列 nums ,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。 +請你設計並實現時間複雜度為 O(n) 的演演算法解決此問題。

                                                                                                                                                          +

                                                                                                                                                          題目大意

                                                                                                                                                          +

                                                                                                                                                          解題思路

                                                                                                                                                          +

                                                                                                                                                          Big O

                                                                                                                                                          +

                                                                                                                                                          時間複雜 : O(n) +空間複雜 : O(n)

                                                                                                                                                          +

                                                                                                                                                          來源

                                                                                                                                                          + +

                                                                                                                                                          解答

                                                                                                                                                          +

                                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0128.Longest-Consecutive-Sequence/main.go

                                                                                                                                                          +
                                                                                                                                                          package longestconsecutivesequence
                                                                                                                                                          +
                                                                                                                                                          +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                          +func longestConsecutive(nums []int) int {
                                                                                                                                                          +    m := make(map[int]struct{}, len(nums))
                                                                                                                                                          +    for _, num := range nums {
                                                                                                                                                          +        m[num] = struct{}{}
                                                                                                                                                          +    }
                                                                                                                                                          +    result := 0
                                                                                                                                                          +    for v := range m {
                                                                                                                                                          +        // 如果沒找到該數字的前一個數字, 則把該數字刀做連續序列的第一個數
                                                                                                                                                          +        if _, ok := m[v-1]; !ok {
                                                                                                                                                          +            length := 1
                                                                                                                                                          +            for _, exit := m[v+length]; exit; _, exit = m[v+length] {
                                                                                                                                                          +                length++
                                                                                                                                                          +            }
                                                                                                                                                          +            if result < length {
                                                                                                                                                          +                result = length
                                                                                                                                                          +            }
                                                                                                                                                          +        }
                                                                                                                                                          +    }
                                                                                                                                                          +    return result
                                                                                                                                                          +}
                                                                                                                                                          +
                                                                                                                                                          +

                                                                                                                                                          Benchmark

                                                                                                                                                          +
                                                                                                                                                          
                                                                                                                                                          +
                                                                                                                                                          +
                                                                                                                                                          +
                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                          + +
                                                                                                                                                          + +
                                                                                                                                                          +
                                                                                                                                                          +
                                                                                                                                                          + +

                                                                                                                                                          results matching ""

                                                                                                                                                          +
                                                                                                                                                            + +
                                                                                                                                                            +
                                                                                                                                                            + +

                                                                                                                                                            No results matching ""

                                                                                                                                                            + +
                                                                                                                                                            +
                                                                                                                                                            +
                                                                                                                                                            + +
                                                                                                                                                            +
                                                                                                                                                            + +
                                                                                                                                                            + + + + + + +
                                                                                                                                                            + + +
                                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0128.Longest-Consecutive-Sequence/main.go b/Leetcode/0128.Longest-Consecutive-Sequence/main.go new file mode 100644 index 000000000..e0d225207 --- /dev/null +++ b/Leetcode/0128.Longest-Consecutive-Sequence/main.go @@ -0,0 +1,23 @@ +package longestconsecutivesequence + +// 時間複雜 O(n), 空間複雜 O(n) +func longestConsecutive(nums []int) int { + m := make(map[int]struct{}, len(nums)) + for _, num := range nums { + m[num] = struct{}{} + } + result := 0 + for v := range m { + // 如果沒找到該數字的前一個數字, 則把該數字當做連續序列的第一個數 + if _, ok := m[v-1]; !ok { + length := 1 + for _, exit := m[v+length]; exit; _, exit = m[v+length] { + length++ + } + if result < length { + result = length + } + } + } + return result +} diff --git a/Leetcode/0128.Longest-Consecutive-Sequence/main_test.go b/Leetcode/0128.Longest-Consecutive-Sequence/main_test.go new file mode 100644 index 000000000..da9202b6a --- /dev/null +++ b/Leetcode/0128.Longest-Consecutive-Sequence/main_test.go @@ -0,0 +1,34 @@ +package longestconsecutivesequence + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{100, 4, 200, 1, 3, 2}, + 4, + }, +} + +func TestLongestConsecutive(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := longestConsecutive(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestConsecutive(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + longestConsecutive(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0138.Copy-List-with-Random-Pointer/index.html b/Leetcode/0138.Copy-List-with-Random-Pointer/index.html new file mode 100644 index 000000000..ccad456c5 --- /dev/null +++ b/Leetcode/0138.Copy-List-with-Random-Pointer/index.html @@ -0,0 +1,3961 @@ + + + + + + + 138. Copy List with Random Pointer · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                            +
                                                                                                                                                            + + + + + + + + +
                                                                                                                                                            + +
                                                                                                                                                            + +
                                                                                                                                                            + + + + + + + + +
                                                                                                                                                            +
                                                                                                                                                            + +
                                                                                                                                                            +
                                                                                                                                                            + +
                                                                                                                                                            + +

                                                                                                                                                            138. Copy List with Random Pointer

                                                                                                                                                            題目

                                                                                                                                                            +

                                                                                                                                                            題目大意

                                                                                                                                                            +

                                                                                                                                                            解題思路

                                                                                                                                                            +

                                                                                                                                                            對於數據結構複製,甭管他怎麼變,你就記住最簡單的方式:一個哈希表 + 兩次遍歷

                                                                                                                                                            +
                                                                                                                                                              +
                                                                                                                                                            • 第一次遍歷專門clone節點,藉助 Hash表把原始節點和clone節點的映射存儲起來;
                                                                                                                                                            • +
                                                                                                                                                            • 第二次專門組裝節點,照著原數據結構的樣子,把clone節點的指標組裝起來。
                                                                                                                                                            • +
                                                                                                                                                            +

                                                                                                                                                            Big O

                                                                                                                                                            +
                                                                                                                                                              +
                                                                                                                                                            • 時間複雜 : O(n) ,其中 n 是鏈表的長度。 對於每個節點,我們至多訪問其「後繼節點」和「隨機指標指向的節點」各一次,均攤每個點至多被訪問兩次。
                                                                                                                                                            • +
                                                                                                                                                            • 空間複雜 : O(n) 其中 n 是鏈表的長度。 為哈希表的空間開銷
                                                                                                                                                            • +
                                                                                                                                                            +

                                                                                                                                                            來源

                                                                                                                                                            + +

                                                                                                                                                            解答

                                                                                                                                                            +

                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0138.Copy-List-with-Random-Pointer/main.go

                                                                                                                                                            +
                                                                                                                                                            package copylistwithrandompointer
                                                                                                                                                            +
                                                                                                                                                            +/**
                                                                                                                                                            + * Definition for a Node.
                                                                                                                                                            + * type Node struct {
                                                                                                                                                            + *     Val int
                                                                                                                                                            + *     Next *Node
                                                                                                                                                            + *     Random *Node
                                                                                                                                                            + * }
                                                                                                                                                            + */
                                                                                                                                                            +
                                                                                                                                                            +var cacheMap map[*Node]*Node
                                                                                                                                                            +
                                                                                                                                                            +// 時間複雜 O(n), 空間複雜 O(n)
                                                                                                                                                            +func copyRandomList(head *Node) *Node {
                                                                                                                                                            +    cacheMap = make(map[*Node]*Node)
                                                                                                                                                            +    return deepCopy(head)
                                                                                                                                                            +}
                                                                                                                                                            +
                                                                                                                                                            +func deepCopy(node *Node) *Node {
                                                                                                                                                            +    if node == nil {
                                                                                                                                                            +        return nil
                                                                                                                                                            +    }
                                                                                                                                                            +    if n, ok := cacheMap[node]; ok {
                                                                                                                                                            +        return n
                                                                                                                                                            +    }
                                                                                                                                                            +    newNode := &Node{Val: node.Val}
                                                                                                                                                            +    cacheMap[node] = newNode
                                                                                                                                                            +    newNode.Next = deepCopy(node.Next)
                                                                                                                                                            +    newNode.Random = deepCopy(node.Random)
                                                                                                                                                            +    return newNode
                                                                                                                                                            +}
                                                                                                                                                            +
                                                                                                                                                            +func copyRandomList2(head *Node) *Node {
                                                                                                                                                            +    cMap := make(map[*Node]*Node)
                                                                                                                                                            +    cur := head
                                                                                                                                                            +    // 第一次遍歷專門clone節點,藉助 Hash表把原始節點和clone節點的映射存儲起來;
                                                                                                                                                            +    for cur != nil {
                                                                                                                                                            +        newNode := &Node{Val: cur.Val}
                                                                                                                                                            +        cMap[cur] = newNode
                                                                                                                                                            +        cur = cur.Next
                                                                                                                                                            +    }
                                                                                                                                                            +    // 第二次專門組裝節點,照著原數據結構的樣子,把clone節點的指標組裝起來。
                                                                                                                                                            +    newHead := cMap[head]
                                                                                                                                                            +    for head != nil {
                                                                                                                                                            +        node := cMap[head]
                                                                                                                                                            +        node.Next = cMap[head.Next]
                                                                                                                                                            +        node.Random = cMap[head.Random]
                                                                                                                                                            +        head = head.Next
                                                                                                                                                            +    }
                                                                                                                                                            +    return newHead
                                                                                                                                                            +}
                                                                                                                                                            +
                                                                                                                                                            +

                                                                                                                                                            Benchmark

                                                                                                                                                            +
                                                                                                                                                            
                                                                                                                                                            +
                                                                                                                                                            +
                                                                                                                                                            +
                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                            + +
                                                                                                                                                            + +
                                                                                                                                                            +
                                                                                                                                                            +
                                                                                                                                                            + +

                                                                                                                                                            results matching ""

                                                                                                                                                            +
                                                                                                                                                              + +
                                                                                                                                                              +
                                                                                                                                                              + +

                                                                                                                                                              No results matching ""

                                                                                                                                                              + +
                                                                                                                                                              +
                                                                                                                                                              +
                                                                                                                                                              + +
                                                                                                                                                              +
                                                                                                                                                              + +
                                                                                                                                                              + + + + + + +
                                                                                                                                                              + + +
                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0138.Copy-List-with-Random-Pointer/main.go b/Leetcode/0138.Copy-List-with-Random-Pointer/main.go new file mode 100644 index 000000000..5a96fb3b0 --- /dev/null +++ b/Leetcode/0138.Copy-List-with-Random-Pointer/main.go @@ -0,0 +1,52 @@ +package copylistwithrandompointer + +/** + * Definition for a Node. + * type Node struct { + * Val int + * Next *Node + * Random *Node + * } + */ + +var cacheMap map[*Node]*Node + +// 時間複雜 O(n), 空間複雜 O(n) +func copyRandomList(head *Node) *Node { + cacheMap = make(map[*Node]*Node) + return deepCopy(head) +} + +func deepCopy(node *Node) *Node { + if node == nil { + return nil + } + if n, ok := cacheMap[node]; ok { + return n + } + newNode := &Node{Val: node.Val} + cacheMap[node] = newNode + newNode.Next = deepCopy(node.Next) + newNode.Random = deepCopy(node.Random) + return newNode +} + +func copyRandomList2(head *Node) *Node { + cMap := make(map[*Node]*Node) + cur := head + // 第一次遍歷專門clone節點,藉助 Hash表把原始節點和clone節點的映射存儲起來; + for cur != nil { + newNode := &Node{Val: cur.Val} + cMap[cur] = newNode + cur = cur.Next + } + // 第二次專門組裝節點,照著原數據結構的樣子,把clone節點的指標組裝起來。 + newHead := cMap[head] + for head != nil { + node := cMap[head] + node.Next = cMap[head.Next] + node.Random = cMap[head.Random] + head = head.Next + } + return newHead +} diff --git a/Leetcode/0138.Copy-List-with-Random-Pointer/main_test.go b/Leetcode/0138.Copy-List-with-Random-Pointer/main_test.go new file mode 100644 index 000000000..0788b7309 --- /dev/null +++ b/Leetcode/0138.Copy-List-with-Random-Pointer/main_test.go @@ -0,0 +1,34 @@ +package + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle.go b/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle.go new file mode 100644 index 000000000..6706a43d7 --- /dev/null +++ b/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle.go @@ -0,0 +1,19 @@ +package linkedlistcycle + +type ListNode struct { + Val int + Next *ListNode +} + +func HasCycle(head *ListNode) bool { + fast := head + slow := head + for slow != nil && fast != nil && fast.Next != nil { + fast = fast.Next.Next + slow = slow.Next + if slow == fast { + return true + } + } + return false +} diff --git a/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle_test.go b/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle_test.go new file mode 100644 index 000000000..1ba7da4e8 --- /dev/null +++ b/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle_test.go @@ -0,0 +1,29 @@ +package linkedlistcycle + +import "testing" + +func TestHasCycle(t *testing.T) { + a := &ListNode{1, nil} + b := &ListNode{2, nil} + c := &ListNode{3, nil} + // d := &ListNode{4, nil} + a.Next = b + b.Next = c + c.Next = a + + tests := []struct { + arg1 *ListNode + want bool + }{ + { + arg1: a, + want: true, + }, + } + + for _, tt := range tests { + if got := HasCycle(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Leetcode/0141.Linked-List-Cycle/index.html b/Leetcode/0141.Linked-List-Cycle/index.html new file mode 100644 index 000000000..bfecd2d86 --- /dev/null +++ b/Leetcode/0141.Linked-List-Cycle/index.html @@ -0,0 +1,3919 @@ + + + + + + + 0141.Linked List Cycle · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                              +
                                                                                                                                                              + + + + + + + + +
                                                                                                                                                              + +
                                                                                                                                                              + +
                                                                                                                                                              + + + + + + + + +
                                                                                                                                                              +
                                                                                                                                                              + +
                                                                                                                                                              +
                                                                                                                                                              + +
                                                                                                                                                              + +

                                                                                                                                                              141. Linked List Cycle

                                                                                                                                                              題目

                                                                                                                                                              +

                                                                                                                                                              Given a linked list, determine if it has a cycle in it.

                                                                                                                                                              +

                                                                                                                                                              Follow up: +Can you solve it without using extra space?

                                                                                                                                                              +

                                                                                                                                                              題目大意

                                                                                                                                                              +

                                                                                                                                                              判斷鍊表是否有環,不能使用額外的空間。

                                                                                                                                                              +

                                                                                                                                                              解題思路

                                                                                                                                                              +

                                                                                                                                                              給 2 個指針,一個指針是另外一個指針的下一個指針。快指針一次走 2 格,慢指針一次走 1 格。如果存在環,那麼前一個指針一定會經過若干圈之後追上慢的指針。

                                                                                                                                                              +

                                                                                                                                                              來源

                                                                                                                                                              + +

                                                                                                                                                              解答

                                                                                                                                                              +

                                                                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle.go

                                                                                                                                                              +
                                                                                                                                                              package linkedlistcycle
                                                                                                                                                              +
                                                                                                                                                              +type ListNode struct {
                                                                                                                                                              +    Val  int
                                                                                                                                                              +    Next *ListNode
                                                                                                                                                              +}
                                                                                                                                                              +
                                                                                                                                                              +func HasCycle(head *ListNode) bool {
                                                                                                                                                              +    fast := head
                                                                                                                                                              +    slow := head
                                                                                                                                                              +    for slow != nil && fast != nil && fast.Next != nil {
                                                                                                                                                              +        fast = fast.Next.Next
                                                                                                                                                              +        slow = slow.Next
                                                                                                                                                              +        if slow == fast {
                                                                                                                                                              +            return true
                                                                                                                                                              +        }
                                                                                                                                                              +    }
                                                                                                                                                              +    return false
                                                                                                                                                              +}
                                                                                                                                                              +
                                                                                                                                                              +
                                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                              + +
                                                                                                                                                              + +
                                                                                                                                                              +
                                                                                                                                                              +
                                                                                                                                                              + +

                                                                                                                                                              results matching ""

                                                                                                                                                              +
                                                                                                                                                                + +
                                                                                                                                                                +
                                                                                                                                                                + +

                                                                                                                                                                No results matching ""

                                                                                                                                                                + +
                                                                                                                                                                +
                                                                                                                                                                +
                                                                                                                                                                + +
                                                                                                                                                                +
                                                                                                                                                                + +
                                                                                                                                                                + + + + + + +
                                                                                                                                                                + + +
                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0142.Linked-List-CycleII/index.html b/Leetcode/0142.Linked-List-CycleII/index.html new file mode 100644 index 000000000..cf4c2e007 --- /dev/null +++ b/Leetcode/0142.Linked-List-CycleII/index.html @@ -0,0 +1,3954 @@ + + + + + + + 0142.Linked List Cycle II · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                +
                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                + +
                                                                                                                                                                + +
                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                +
                                                                                                                                                                + +
                                                                                                                                                                +
                                                                                                                                                                + +
                                                                                                                                                                + +

                                                                                                                                                                142. Linked List Cycle II

                                                                                                                                                                題目

                                                                                                                                                                +

                                                                                                                                                                Given the head of a linked list, return the node where the cycle begins. If there is no cycle, return null.

                                                                                                                                                                +

                                                                                                                                                                There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail's next pointer is connected to (0-indexed). It is -1 if there is no cycle. Note that pos is not passed as a parameter.

                                                                                                                                                                +

                                                                                                                                                                Do not modify the linked list.

                                                                                                                                                                +

                                                                                                                                                                Example 1: +

                                                                                                                                                                +
                                                                                                                                                                Input: head = [3,2,0,-4], pos = 1
                                                                                                                                                                +Output: tail connects to node index 1
                                                                                                                                                                +Explanation: There is a cycle in the linked list, where tail connects to the second node.
                                                                                                                                                                +

                                                                                                                                                                Example 2: +

                                                                                                                                                                +
                                                                                                                                                                Input: head = [1,2], pos = 0
                                                                                                                                                                +Output: tail connects to node index 0
                                                                                                                                                                +Explanation: There is a cycle in the linked list, where tail connects to the first node.
                                                                                                                                                                +

                                                                                                                                                                Example 3: +

                                                                                                                                                                +
                                                                                                                                                                Input: head = [1], pos = -1
                                                                                                                                                                +Output: no cycle
                                                                                                                                                                +Explanation: There is no cycle in the linked list.
                                                                                                                                                                +

                                                                                                                                                                Constraints:

                                                                                                                                                                +
                                                                                                                                                                  +
                                                                                                                                                                • The number of the nodes in the list is in the range [0, 104].
                                                                                                                                                                • +
                                                                                                                                                                • -105 <= Node.val <= 105
                                                                                                                                                                • +
                                                                                                                                                                • pos is -1 or a valid index in the linked-list.
                                                                                                                                                                • +
                                                                                                                                                                +

                                                                                                                                                                題目大意

                                                                                                                                                                +

                                                                                                                                                                已知linked list 中有含有環, 返回這個環的起始位置

                                                                                                                                                                +

                                                                                                                                                                解題思路

                                                                                                                                                                +

                                                                                                                                                                假設第一次相遇, slow 走了k步, 那麼 fast就走了 2k, 也就是說fast比slow多走了k步(環長度的整數倍) +設相遇點與環的起點距離為 m, 那麼環的起點Head的距離為 k-m +

                                                                                                                                                                +

                                                                                                                                                                來源

                                                                                                                                                                + +

                                                                                                                                                                解答

                                                                                                                                                                +

                                                                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0142.Linked-List-CycleII/main.go

                                                                                                                                                                +
                                                                                                                                                                package linkedlistcycleII
                                                                                                                                                                +
                                                                                                                                                                +/**
                                                                                                                                                                + * Definition for singly-linked list.
                                                                                                                                                                + * type ListNode struct {
                                                                                                                                                                + *     Val int
                                                                                                                                                                + *     Next *ListNode
                                                                                                                                                                + * }
                                                                                                                                                                + */
                                                                                                                                                                +type ListNode struct {
                                                                                                                                                                +    Val  int
                                                                                                                                                                +    Next *ListNode
                                                                                                                                                                +}
                                                                                                                                                                +
                                                                                                                                                                +func DetectCycle(head *ListNode) *ListNode {
                                                                                                                                                                +    fast, slow := head, head
                                                                                                                                                                +    for fast != nil && fast.Next != nil {
                                                                                                                                                                +        fast = fast.Next.Next
                                                                                                                                                                +        slow = slow.Next
                                                                                                                                                                +        if slow == fast {
                                                                                                                                                                +            // 找到相遇點
                                                                                                                                                                +            break
                                                                                                                                                                +        }
                                                                                                                                                                +    }
                                                                                                                                                                +
                                                                                                                                                                +    slow = head
                                                                                                                                                                +    for slow != fast {
                                                                                                                                                                +        fast = fast.Next
                                                                                                                                                                +        slow = slow.Next
                                                                                                                                                                +    }
                                                                                                                                                                +    return slow
                                                                                                                                                                +}
                                                                                                                                                                +
                                                                                                                                                                +
                                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                + +
                                                                                                                                                                + +
                                                                                                                                                                +
                                                                                                                                                                +
                                                                                                                                                                + +

                                                                                                                                                                results matching ""

                                                                                                                                                                +
                                                                                                                                                                  + +
                                                                                                                                                                  +
                                                                                                                                                                  + +

                                                                                                                                                                  No results matching ""

                                                                                                                                                                  + +
                                                                                                                                                                  +
                                                                                                                                                                  +
                                                                                                                                                                  + +
                                                                                                                                                                  +
                                                                                                                                                                  + +
                                                                                                                                                                  + + + + + + +
                                                                                                                                                                  + + +
                                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0142.Linked-List-CycleII/main.go b/Leetcode/0142.Linked-List-CycleII/main.go new file mode 100644 index 000000000..d1ff9950f --- /dev/null +++ b/Leetcode/0142.Linked-List-CycleII/main.go @@ -0,0 +1,33 @@ +package linkedlistcycleII + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ +type ListNode struct { + Val int + Next *ListNode +} + +func DetectCycle(head *ListNode) *ListNode { + fast, slow := head, head + for fast != nil && fast.Next != nil { + fast = fast.Next.Next + slow = slow.Next + if slow == fast { + // 找到相遇點 + break + } + } + + slow = head + for slow != fast { + fast = fast.Next + slow = slow.Next + } + // 兩個指針相遇的點就是環的起點 + return slow +} diff --git a/Leetcode/0142.Linked-List-CycleII/main_test.go b/Leetcode/0142.Linked-List-CycleII/main_test.go new file mode 100644 index 000000000..a6e19444d --- /dev/null +++ b/Leetcode/0142.Linked-List-CycleII/main_test.go @@ -0,0 +1,43 @@ +package linkedlistcycleII + +import ( + "reflect" + "testing" +) + +func TestDetectCycle(t *testing.T) { + a := &ListNode{1, nil} + b := &ListNode{2, nil} + c := &ListNode{3, nil} + // d := &ListNode{4, nil} + a.Next = b + b.Next = c + c.Next = a + + d := &ListNode{1, nil} + e := &ListNode{2, nil} + f := &ListNode{3, nil} + d.Next = e + e.Next = f + f.Next = a + + tests := []struct { + arg1 *ListNode + want *ListNode + }{ + { + arg1: a, + want: a, + }, + { + arg1: d, + want: a, + }, + } + + for _, tt := range tests { + if got := DetectCycle(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Leetcode/0143.Reorder-List/index.html b/Leetcode/0143.Reorder-List/index.html new file mode 100644 index 000000000..2a036e19a --- /dev/null +++ b/Leetcode/0143.Reorder-List/index.html @@ -0,0 +1,3957 @@ + + + + + + + 143. Reorder List · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                  +
                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                  + +
                                                                                                                                                                  + +
                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                  +
                                                                                                                                                                  + +
                                                                                                                                                                  +
                                                                                                                                                                  + +
                                                                                                                                                                  + +

                                                                                                                                                                  143. Reorder List

                                                                                                                                                                  題目

                                                                                                                                                                  +

                                                                                                                                                                  題目大意

                                                                                                                                                                  +

                                                                                                                                                                  解題思路

                                                                                                                                                                  +

                                                                                                                                                                  Big O

                                                                                                                                                                  +
                                                                                                                                                                    +
                                                                                                                                                                  • 時間複雜 : ``
                                                                                                                                                                  • +
                                                                                                                                                                  • 空間複雜 : ``
                                                                                                                                                                  • +
                                                                                                                                                                  +

                                                                                                                                                                  來源

                                                                                                                                                                  + +

                                                                                                                                                                  解答

                                                                                                                                                                  +

                                                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0143.Reorder-List/main.go

                                                                                                                                                                  +
                                                                                                                                                                  package reorderlist
                                                                                                                                                                  +
                                                                                                                                                                  +/**
                                                                                                                                                                  + * Definition for singly-linked list.
                                                                                                                                                                  + * type ListNode struct {
                                                                                                                                                                  + *     Val int
                                                                                                                                                                  + *     Next *ListNode
                                                                                                                                                                  + * }
                                                                                                                                                                  + */
                                                                                                                                                                  +
                                                                                                                                                                  +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                  +// 先用快慢指針找出Linked list的中間點
                                                                                                                                                                  +// 然後把Linked list分成兩半
                                                                                                                                                                  +// 再把後半的Linked list反轉
                                                                                                                                                                  +// 再把兩半的Linked list merge 起來
                                                                                                                                                                  +func reorderList(head *ListNode) {
                                                                                                                                                                  +    mid := middleNode(head)
                                                                                                                                                                  +
                                                                                                                                                                  +    // 2.反轉中間節點的下一個節點
                                                                                                                                                                  +    right := resverseNode(mid.Next)
                                                                                                                                                                  +    mid.Next = nil
                                                                                                                                                                  +    left := head
                                                                                                                                                                  +    mergeNode(left, right)
                                                                                                                                                                  +}
                                                                                                                                                                  +
                                                                                                                                                                  +// [876. Middle of the Linked List](https://leetcode.com/problems/middle-of-the-linked-list/)
                                                                                                                                                                  +func middleNode(head *ListNode) *ListNode {
                                                                                                                                                                  +    slow, fast := head, head
                                                                                                                                                                  +    for fast != nil && fast.Next != nil {
                                                                                                                                                                  +        slow = slow.Next
                                                                                                                                                                  +        fast = fast.Next.Next
                                                                                                                                                                  +    }
                                                                                                                                                                  +    return slow
                                                                                                                                                                  +}
                                                                                                                                                                  +
                                                                                                                                                                  +// [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/)
                                                                                                                                                                  +func resverseNode(head *ListNode) *ListNode {
                                                                                                                                                                  +    var pre *ListNode
                                                                                                                                                                  +    for head != nil {
                                                                                                                                                                  +        tmp := head.Next
                                                                                                                                                                  +        head.Next = pre
                                                                                                                                                                  +        pre = head
                                                                                                                                                                  +        head = tmp
                                                                                                                                                                  +    }
                                                                                                                                                                  +    return pre
                                                                                                                                                                  +}
                                                                                                                                                                  +
                                                                                                                                                                  +func mergeNode(l1, l2 *ListNode) {
                                                                                                                                                                  +    lcur, rcur := l1, l2
                                                                                                                                                                  +    for lcur != nil && rcur != nil {
                                                                                                                                                                  +        lcur.Next, rcur.Next, lcur, rcur = rcur, lcur.Next, lcur.Next, rcur.Next
                                                                                                                                                                  +    }
                                                                                                                                                                  +}
                                                                                                                                                                  +
                                                                                                                                                                  +

                                                                                                                                                                  Benchmark

                                                                                                                                                                  +
                                                                                                                                                                  
                                                                                                                                                                  +
                                                                                                                                                                  +
                                                                                                                                                                  +
                                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                  + +
                                                                                                                                                                  + +
                                                                                                                                                                  +
                                                                                                                                                                  +
                                                                                                                                                                  + +

                                                                                                                                                                  results matching ""

                                                                                                                                                                  +
                                                                                                                                                                    + +
                                                                                                                                                                    +
                                                                                                                                                                    + +

                                                                                                                                                                    No results matching ""

                                                                                                                                                                    + +
                                                                                                                                                                    +
                                                                                                                                                                    +
                                                                                                                                                                    + +
                                                                                                                                                                    +
                                                                                                                                                                    + +
                                                                                                                                                                    + + + + + + +
                                                                                                                                                                    + + +
                                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0143.Reorder-List/main.go b/Leetcode/0143.Reorder-List/main.go new file mode 100644 index 000000000..3415487a3 --- /dev/null +++ b/Leetcode/0143.Reorder-List/main.go @@ -0,0 +1,53 @@ +package reorderlist + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +// 時間複雜 O(), 空間複雜 O() +// 先用快慢指針找出Linked list的中間點 +// 然後把Linked list分成兩半 +// 再把後半的Linked list反轉 +// 再把兩半的Linked list merge 起來 +func reorderList(head *ListNode) { + mid := middleNode(head) + + // 2.反轉中間節點的下一個節點 + right := resverseNode(mid.Next) + mid.Next = nil + left := head + mergeNode(left, right) +} + +// [876. Middle of the Linked List](https://leetcode.com/problems/middle-of-the-linked-list/) +func middleNode(head *ListNode) *ListNode { + slow, fast := head, head + for fast != nil && fast.Next != nil { + slow = slow.Next + fast = fast.Next.Next + } + return slow +} + +// [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) +func resverseNode(head *ListNode) *ListNode { + var pre *ListNode + for head != nil { + tmp := head.Next + head.Next = pre + pre = head + head = tmp + } + return pre +} + +func mergeNode(l1, l2 *ListNode) { + lcur, rcur := l1, l2 + for lcur != nil && rcur != nil { + lcur.Next, rcur.Next, lcur, rcur = rcur, lcur.Next, lcur.Next, rcur.Next + } +} diff --git a/Leetcode/0143.Reorder-List/main_test.go b/Leetcode/0143.Reorder-List/main_test.go new file mode 100644 index 000000000..0788b7309 --- /dev/null +++ b/Leetcode/0143.Reorder-List/main_test.go @@ -0,0 +1,34 @@ +package + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/index.html b/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/index.html new file mode 100644 index 000000000..4496355b1 --- /dev/null +++ b/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/index.html @@ -0,0 +1,3979 @@ + + + + + + + 0167.Two Sum II Input Array Is Sorted · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                    +
                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                    + +
                                                                                                                                                                    + +
                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                    +
                                                                                                                                                                    + +
                                                                                                                                                                    +
                                                                                                                                                                    + +
                                                                                                                                                                    + +

                                                                                                                                                                    0167.Two Sum II Input Array Is Sorted

                                                                                                                                                                    題目

                                                                                                                                                                    +

                                                                                                                                                                    Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where 1 <= index1 < index2 < numbers.length.

                                                                                                                                                                    +

                                                                                                                                                                    Return the indices of the two numbers, index1 and index2, added by one as an integer array [index1, index2] of length 2.

                                                                                                                                                                    +

                                                                                                                                                                    The tests are generated such that there is exactly one solution. You may not use the same element twice.

                                                                                                                                                                    +

                                                                                                                                                                    Your solution must use only constant extra space.

                                                                                                                                                                    +

                                                                                                                                                                    Example 1:

                                                                                                                                                                    +

                                                                                                                                                                    Input: numbers = [2,7,11,15], target = 9 +Output: [1,2] +Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2]. +Example 2:

                                                                                                                                                                    +

                                                                                                                                                                    Input: numbers = [2,3,4], target = 6 +Output: [1,3] +Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3]. +Example 3:

                                                                                                                                                                    +

                                                                                                                                                                    Input: numbers = [-1,0], target = -1 +Output: [1,2] +Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2].

                                                                                                                                                                    +

                                                                                                                                                                    Constraints:

                                                                                                                                                                    +

                                                                                                                                                                    2 <= numbers.length <= 3 * 104 +-1000 <= numbers[i] <= 1000 +numbers is sorted in non-decreasing order. +-1000 <= target <= 1000 +The tests are generated such that there is exactly one solution.

                                                                                                                                                                    +

                                                                                                                                                                    題目大意

                                                                                                                                                                    +

                                                                                                                                                                    找出兩個數之和等於 target 的兩個數位,要求輸出它們的下標。 注意一個數位不能使用 2 次。 下標從小到大輸出。 假定題目一定有一個解。

                                                                                                                                                                    +

                                                                                                                                                                    解題思路

                                                                                                                                                                    +

                                                                                                                                                                    Big O

                                                                                                                                                                    +
                                                                                                                                                                      +
                                                                                                                                                                    1. 使用1. Two Sun來解

                                                                                                                                                                      +
                                                                                                                                                                        +
                                                                                                                                                                      1. O(n^2) 的時間複雜度和 O(1)的空間複雜度暴力
                                                                                                                                                                      2. +
                                                                                                                                                                      3. 藉助哈希表使用 O(n) 的時間複雜度和 O(n) 的空間複雜度求解
                                                                                                                                                                      4. +
                                                                                                                                                                      +
                                                                                                                                                                    2. +
                                                                                                                                                                    3. 雙指針 +時間複雜度: O(n),其中 n 是陣列的長度。 兩個指標移動的總次數最多為 n 次。 +空間複雜度: O(1)

                                                                                                                                                                      +
                                                                                                                                                                    4. +
                                                                                                                                                                    +

                                                                                                                                                                    時間複雜 : 空間複雜 :

                                                                                                                                                                    +

                                                                                                                                                                    來源

                                                                                                                                                                    + +

                                                                                                                                                                    解答

                                                                                                                                                                    +

                                                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main.go

                                                                                                                                                                    +
                                                                                                                                                                    package twosumiiinputarrayissorted
                                                                                                                                                                    +
                                                                                                                                                                    +// 雙指針. 時間複雜度: O(n),其中 n 是陣列的長度。 兩個指標移動的總次數最多為 n 次。
                                                                                                                                                                    +// 空間複雜度: O(1)
                                                                                                                                                                    +
                                                                                                                                                                    +func TwoSum(numbers []int, target int) []int {
                                                                                                                                                                    +    left, right := 0, len(numbers)-1
                                                                                                                                                                    +
                                                                                                                                                                    +    for left < right {
                                                                                                                                                                    +        if numbers[left]+numbers[right] == target {
                                                                                                                                                                    +            return []int{left + 1, right + 1}
                                                                                                                                                                    +        }
                                                                                                                                                                    +        if numbers[left]+numbers[right] < target {
                                                                                                                                                                    +            left++
                                                                                                                                                                    +        } else {
                                                                                                                                                                    +            right--
                                                                                                                                                                    +        }
                                                                                                                                                                    +    }
                                                                                                                                                                    +
                                                                                                                                                                    +    return nil
                                                                                                                                                                    +}
                                                                                                                                                                    +
                                                                                                                                                                    +// 使用 O(n^2) 的時間複雜度和 O(1)的空間複雜度暴力
                                                                                                                                                                    +// 或者藉助哈希表使用 O(n) 的時間複雜度和 O(n) 的空間複雜度求解
                                                                                                                                                                    +
                                                                                                                                                                    +func TwoSum2(numbers []int, target int) []int {
                                                                                                                                                                    +    m := make(map[int]int, len(numbers))
                                                                                                                                                                    +
                                                                                                                                                                    +    for i, v := range numbers {
                                                                                                                                                                    +        if j, ok := m[target-v]; ok {
                                                                                                                                                                    +            return []int{j + 1, i + 1}
                                                                                                                                                                    +        }
                                                                                                                                                                    +        m[v] = i
                                                                                                                                                                    +    }
                                                                                                                                                                    +    return nil
                                                                                                                                                                    +}
                                                                                                                                                                    +
                                                                                                                                                                    +

                                                                                                                                                                    Benchmark

                                                                                                                                                                    +
                                                                                                                                                                    go test -benchmem -run=none LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted -bench=.
                                                                                                                                                                    +goos: darwin
                                                                                                                                                                    +goarch: amd64
                                                                                                                                                                    +pkg: LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted
                                                                                                                                                                    +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
                                                                                                                                                                    +BenchmarkTwoSum-4       35161128                39.74 ns/op           16 B/op          1 allocs/op
                                                                                                                                                                    +BenchmarkTwoSum2-4      19309680                70.21 ns/op           16 B/op          1 allocs/op
                                                                                                                                                                    +PASS
                                                                                                                                                                    +ok      LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted   2.866s
                                                                                                                                                                    +
                                                                                                                                                                    +
                                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                    + +
                                                                                                                                                                    + +
                                                                                                                                                                    +
                                                                                                                                                                    +
                                                                                                                                                                    + +

                                                                                                                                                                    results matching ""

                                                                                                                                                                    +
                                                                                                                                                                      + +
                                                                                                                                                                      +
                                                                                                                                                                      + +

                                                                                                                                                                      No results matching ""

                                                                                                                                                                      + +
                                                                                                                                                                      +
                                                                                                                                                                      +
                                                                                                                                                                      + +
                                                                                                                                                                      +
                                                                                                                                                                      + +
                                                                                                                                                                      + + + + + + +
                                                                                                                                                                      + + +
                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main.go b/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main.go new file mode 100644 index 000000000..e632906f1 --- /dev/null +++ b/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main.go @@ -0,0 +1,36 @@ +package twosumiiinputarrayissorted + +// 雙指針. 時間複雜度: O(n),其中 n 是陣列的長度。 兩個指標移動的總次數最多為 n 次。 +// 空間複雜度: O(1) + +func TwoSum(numbers []int, target int) []int { + left, right := 0, len(numbers)-1 + + for left < right { + if numbers[left]+numbers[right] == target { + return []int{left + 1, right + 1} + } + if numbers[left]+numbers[right] < target { + left++ + } else { + right-- + } + } + + return nil +} + +// 使用 O(n^2) 的時間複雜度和 O(1)的空間複雜度暴力 +// 或者藉助哈希表使用 O(n) 的時間複雜度和 O(n) 的空間複雜度求解 + +func TwoSum2(numbers []int, target int) []int { + m := make(map[int]int, len(numbers)) + + for i, v := range numbers { + if j, ok := m[target-v]; ok { + return []int{j + 1, i + 1} + } + m[v] = i + } + return nil +} diff --git a/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main_test.go b/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main_test.go new file mode 100644 index 000000000..9572ec1d5 --- /dev/null +++ b/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main_test.go @@ -0,0 +1,60 @@ +package twosumiiinputarrayissorted + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + arg2 int + want []int +}{ + { + []int{2, 7, 11, 15}, + 9, + []int{1, 2}, + }, +} + +func TestTwoSum(t *testing.T) { + for _, tt := range tests { + if got := TwoSum(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestTwoSum2(t *testing.T) { + for _, tt := range tests { + if got := TwoSum2(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkTwoSum(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + TwoSum(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkTwoSum2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + TwoSum2(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkTwoSum-4 35161128 39.74 ns/op 16 B/op 1 allocs/op +BenchmarkTwoSum2-4 19309680 70.21 ns/op 16 B/op 1 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted 2.866s +*/ diff --git a/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements.go b/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements.go new file mode 100644 index 000000000..1bcfb0185 --- /dev/null +++ b/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements.go @@ -0,0 +1,74 @@ +package removelinkedlistelements + +import ( + "LeetcodeGolang/structures" +) + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +type ListNode = structures.ListNode + +// 方法一: 另外考慮刪除head節點 +func RemoveElements(head *ListNode, val int) *ListNode { + // 刪除值相同的head + for head != nil && head.Val == val { + head = head.Next + } + if head == nil { + return head + } + tmpHead := head + for tmpHead.Next != nil { + if tmpHead.Next.Val == val { + tmpHead.Next = tmpHead.Next.Next + } else { + tmpHead = tmpHead.Next + } + } + return head +} + +/* +方法二 添加虛擬節點, 效能較好 +可以設置一個虛擬頭結點」,這樣原鍊錶的所有節點就都可以按照統一的方式進行移除了 +return newHead.Next +*/ +func RemoveElementsVirtualNode(head *ListNode, val int) *ListNode { + if head == nil { + return head + } + // 建立一個虛擬 Head 節點 + newHead := &ListNode{Val: 0, Next: head} + preHead := newHead + curHead := head + for curHead != nil { + if curHead.Val == val { + preHead.Next = curHead.Next + } else { + preHead = curHead + } + curHead = curHead.Next + } + return newHead.Next +} + +/* +方法二 遞迴 +*/ +func RemoveElementsRecurse(head *ListNode, val int) *ListNode { + if head == nil { + return head + } + head.Next = RemoveElementsRecurse(head.Next, val) + if head.Val == val { + return head.Next + } else { + return head + } +} diff --git a/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements_test.go b/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements_test.go new file mode 100644 index 000000000..ec1245aa3 --- /dev/null +++ b/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements_test.go @@ -0,0 +1,100 @@ +package removelinkedlistelements + +import ( + "LeetcodeGolang/structures" + "reflect" + "testing" +) + +var tests = []struct { + arg1 *ListNode + arg2 int + want *ListNode +}{ + { + structures.Ints2List([]int{1, 2, 6, 3, 4, 5, 6}), + 6, + structures.Ints2List([]int{1, 2, 3, 4, 5}), + }, + { + structures.Ints2List([]int{7, 7, 7, 7, 7}), + 7, + structures.Ints2List([]int{}), + }, + { + structures.Ints2List([]int{1, 2, 3, 4, 5}), + 2, + structures.Ints2List([]int{1, 3, 4, 5}), + }, + { + structures.Ints2List([]int{1, 2, 3, 2, 3, 2, 3, 2}), + 2, + structures.Ints2List([]int{1, 3, 3, 3}), + }, + { + structures.Ints2List([]int{1, 2, 3, 4, 5}), + 10, + structures.Ints2List([]int{1, 2, 3, 4, 5}), + }, + { + structures.Ints2List([]int{1}), + 1, + structures.Ints2List([]int{}), + }, +} + +func TestRemoveElements(t *testing.T) { + for _, tt := range tests { + if got := RemoveElements(tt.arg1, tt.arg2); !reflect.DeepEqual(structures.List2Ints(got), structures.List2Ints(tt.want)) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + // got := RemoveElements(tt.arg1, tt.arg2) + // fmt.Println(structures.List2Ints(got)) + } +} + +func TestRemoveElementsRecurse(t *testing.T) { + for _, tt := range tests { + if got := RemoveElementsRecurse(tt.arg1, tt.arg2); !reflect.DeepEqual(structures.List2Ints(got), structures.List2Ints(tt.want)) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + // got := RemoveElements(tt.arg1, tt.arg2) + // fmt.Println(structures.List2Ints(got)) + } +} + +func TestRemoveElementsVirtualNode(t *testing.T) { + for _, tt := range tests { + if got := RemoveElementsVirtualNode(tt.arg1, tt.arg2); !reflect.DeepEqual(structures.List2Ints(got), structures.List2Ints(tt.want)) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkRemoveElements(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + RemoveElements(tests[i%6].arg1, tests[i%6].arg2) + } +} +func BenchmarkRemoveElementsVirtualNode(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + RemoveElementsVirtualNode(tests[i%6].arg1, tests[i%6].arg2) + } +} + +func BenchmarkRemoveElementsRecurse(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + RemoveElementsRecurse(tests[i%6].arg1, tests[i%6].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0203.Remove-Linked-List-Elements -bench=. +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkRemoveElements-8 195664567 5.953 ns/op 0 B/op 0 allocs/op +BenchmarkRemoveElementsVirtualNode-8 217690257 4.806 ns/op 0 B/op 0 allocs/op +BenchmarkRemoveElementsRecurse-8 79181312 14.31 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0203.Remove-Linked-List-Elements/index.html b/Leetcode/0203.Remove-Linked-List-Elements/index.html new file mode 100644 index 000000000..593812742 --- /dev/null +++ b/Leetcode/0203.Remove-Linked-List-Elements/index.html @@ -0,0 +1,3977 @@ + + + + + + + 0203.Remove Linked List Elements · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                      +
                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                      + +
                                                                                                                                                                      + +
                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                      +
                                                                                                                                                                      + +
                                                                                                                                                                      +
                                                                                                                                                                      + +
                                                                                                                                                                      + +

                                                                                                                                                                      203. Remove Linked List Elements

                                                                                                                                                                      題目

                                                                                                                                                                      +

                                                                                                                                                                      Remove all elements from a linked list of integers that have value val.

                                                                                                                                                                      +

                                                                                                                                                                      Example :

                                                                                                                                                                      +
                                                                                                                                                                      Input: 1->2->6->3->4->5->6, val = 6
                                                                                                                                                                      +Output: 1->2->3->4->5
                                                                                                                                                                      +
                                                                                                                                                                      +

                                                                                                                                                                      題目大意

                                                                                                                                                                      +

                                                                                                                                                                      刪除鍊錶中所有指定值的結點。

                                                                                                                                                                      +

                                                                                                                                                                      解題思路

                                                                                                                                                                      +

                                                                                                                                                                      按照題意做即可

                                                                                                                                                                      +

                                                                                                                                                                      來源

                                                                                                                                                                      + +

                                                                                                                                                                      解答

                                                                                                                                                                      +

                                                                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements.go

                                                                                                                                                                      +
                                                                                                                                                                      package removelinkedlistelements
                                                                                                                                                                      +
                                                                                                                                                                      +import (
                                                                                                                                                                      +    "LeetcodeGolang/structures"
                                                                                                                                                                      +)
                                                                                                                                                                      +
                                                                                                                                                                      +/**
                                                                                                                                                                      + * Definition for singly-linked list.
                                                                                                                                                                      + * type ListNode struct {
                                                                                                                                                                      + *     Val int
                                                                                                                                                                      + *     Next *ListNode
                                                                                                                                                                      + * }
                                                                                                                                                                      + */
                                                                                                                                                                      +
                                                                                                                                                                      +type ListNode = structures.ListNode
                                                                                                                                                                      +
                                                                                                                                                                      +// 方法一: 另外考慮刪除head節點
                                                                                                                                                                      +func RemoveElements(head *ListNode, val int) *ListNode {
                                                                                                                                                                      +    // 刪除值相同的head
                                                                                                                                                                      +    for head != nil && head.Val == val {
                                                                                                                                                                      +        head = head.Next
                                                                                                                                                                      +    }
                                                                                                                                                                      +    if head == nil {
                                                                                                                                                                      +        return head
                                                                                                                                                                      +    }
                                                                                                                                                                      +    tmpHead := head
                                                                                                                                                                      +    for tmpHead.Next != nil {
                                                                                                                                                                      +        if tmpHead.Next.Val == val {
                                                                                                                                                                      +            tmpHead.Next = tmpHead.Next.Next
                                                                                                                                                                      +        } else {
                                                                                                                                                                      +            tmpHead = tmpHead.Next
                                                                                                                                                                      +        }
                                                                                                                                                                      +    }
                                                                                                                                                                      +    return head
                                                                                                                                                                      +}
                                                                                                                                                                      +
                                                                                                                                                                      +/*
                                                                                                                                                                      +方法二 添加虛擬節點, 效能較好
                                                                                                                                                                      +可以設置一個虛擬頭結點」,這樣原鍊錶的所有節點就都可以按照統一的方式進行移除了
                                                                                                                                                                      +return newHead.Next
                                                                                                                                                                      +*/
                                                                                                                                                                      +func RemoveElementsVirtualNode(head *ListNode, val int) *ListNode {
                                                                                                                                                                      +    if head == nil {
                                                                                                                                                                      +        return head
                                                                                                                                                                      +    }
                                                                                                                                                                      +    // 建立一個虛擬 Head 節點
                                                                                                                                                                      +    newHead := &ListNode{Val: 0, Next: head}
                                                                                                                                                                      +    preHead := newHead
                                                                                                                                                                      +    curHead := head
                                                                                                                                                                      +    for curHead != nil {
                                                                                                                                                                      +        if curHead.Val == val {
                                                                                                                                                                      +            preHead.Next = curHead.Next
                                                                                                                                                                      +        } else {
                                                                                                                                                                      +            preHead = curHead
                                                                                                                                                                      +        }
                                                                                                                                                                      +        curHead = curHead.Next
                                                                                                                                                                      +    }
                                                                                                                                                                      +    return newHead.Next
                                                                                                                                                                      +}
                                                                                                                                                                      +
                                                                                                                                                                      +/*
                                                                                                                                                                      +方法二 遞迴
                                                                                                                                                                      +*/
                                                                                                                                                                      +func RemoveElementsRecurse(head *ListNode, val int) *ListNode {
                                                                                                                                                                      +    if head == nil {
                                                                                                                                                                      +        return head
                                                                                                                                                                      +    }
                                                                                                                                                                      +    head.Next = RemoveElementsRecurse(head.Next, val)
                                                                                                                                                                      +    if head.Val == val {
                                                                                                                                                                      +        return head.Next
                                                                                                                                                                      +    } else {
                                                                                                                                                                      +        return head
                                                                                                                                                                      +    }
                                                                                                                                                                      +}
                                                                                                                                                                      +
                                                                                                                                                                      +
                                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                      + +
                                                                                                                                                                      + +
                                                                                                                                                                      +
                                                                                                                                                                      +
                                                                                                                                                                      + +

                                                                                                                                                                      results matching ""

                                                                                                                                                                      +
                                                                                                                                                                        + +
                                                                                                                                                                        +
                                                                                                                                                                        + +

                                                                                                                                                                        No results matching ""

                                                                                                                                                                        + +
                                                                                                                                                                        +
                                                                                                                                                                        +
                                                                                                                                                                        + +
                                                                                                                                                                        +
                                                                                                                                                                        + +
                                                                                                                                                                        + + + + + + +
                                                                                                                                                                        + + +
                                                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0206.Reverse-Linked-List/index.html b/Leetcode/0206.Reverse-Linked-List/index.html new file mode 100644 index 000000000..c6661f46a --- /dev/null +++ b/Leetcode/0206.Reverse-Linked-List/index.html @@ -0,0 +1,3966 @@ + + + + + + + 206. Reverse Linked List · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                        +
                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                        + +
                                                                                                                                                                        + +
                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                        +
                                                                                                                                                                        + +
                                                                                                                                                                        +
                                                                                                                                                                        + +
                                                                                                                                                                        + +

                                                                                                                                                                        206. Reverse Linked List

                                                                                                                                                                        題目

                                                                                                                                                                        +

                                                                                                                                                                        Given the head of a singly linked list, reverse the list, and return the reversed list.

                                                                                                                                                                        +

                                                                                                                                                                        Example 1: +

                                                                                                                                                                        +
                                                                                                                                                                        Input: head = [1,2,3,4,5]
                                                                                                                                                                        +Output: [5,4,3,2,1]
                                                                                                                                                                        +

                                                                                                                                                                        Example 2: +

                                                                                                                                                                        +
                                                                                                                                                                        Input: head = [1,2]
                                                                                                                                                                        +Output: [2,1]
                                                                                                                                                                        +

                                                                                                                                                                        Example 3:

                                                                                                                                                                        +
                                                                                                                                                                        Input: head = []
                                                                                                                                                                        +Output: []
                                                                                                                                                                        +

                                                                                                                                                                        Constraints:

                                                                                                                                                                        +
                                                                                                                                                                          +
                                                                                                                                                                        • The number of nodes in the list is the range [0, 5000].
                                                                                                                                                                        • +
                                                                                                                                                                        • -5000 <= Node.val <= 5000
                                                                                                                                                                        • +
                                                                                                                                                                        +

                                                                                                                                                                        Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both?

                                                                                                                                                                        +

                                                                                                                                                                        題目大意

                                                                                                                                                                        +

                                                                                                                                                                        將 Linked List 反向

                                                                                                                                                                        +

                                                                                                                                                                        解題思路

                                                                                                                                                                        +

                                                                                                                                                                        來源

                                                                                                                                                                        + +

                                                                                                                                                                        解答

                                                                                                                                                                        +

                                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0000.kkkk/main.go

                                                                                                                                                                        +
                                                                                                                                                                        package reverselinkedlist
                                                                                                                                                                        +
                                                                                                                                                                        +import (
                                                                                                                                                                        +    . "LeetcodeGolang/structures"
                                                                                                                                                                        +)
                                                                                                                                                                        +
                                                                                                                                                                        +/**
                                                                                                                                                                        + * Definition for singly-linked list.
                                                                                                                                                                        + * type ListNode struct {
                                                                                                                                                                        + *     Val int
                                                                                                                                                                        + *     Next *ListNode
                                                                                                                                                                        + * }
                                                                                                                                                                        + */
                                                                                                                                                                        +
                                                                                                                                                                        +func ReverseList(head *ListNode) *ListNode {
                                                                                                                                                                        +    if head == nil || head.Next == nil {
                                                                                                                                                                        +        return head
                                                                                                                                                                        +    }
                                                                                                                                                                        +
                                                                                                                                                                        +    var prev *ListNode
                                                                                                                                                                        +
                                                                                                                                                                        +    for head != nil {
                                                                                                                                                                        +        next := head.Next
                                                                                                                                                                        +        head.Next = prev
                                                                                                                                                                        +        prev = head
                                                                                                                                                                        +        head = next
                                                                                                                                                                        +    }
                                                                                                                                                                        +
                                                                                                                                                                        +    return prev
                                                                                                                                                                        +}
                                                                                                                                                                        +
                                                                                                                                                                        +func ReverseListRecursively(head *ListNode) *ListNode {
                                                                                                                                                                        +    return ListRecursivelyChild(head, nil)
                                                                                                                                                                        +}
                                                                                                                                                                        +
                                                                                                                                                                        +func ListRecursivelyChild(current *ListNode, prev *ListNode) *ListNode {
                                                                                                                                                                        +    if current == nil {
                                                                                                                                                                        +        return prev
                                                                                                                                                                        +    }
                                                                                                                                                                        +    next := current.Next
                                                                                                                                                                        +    current.Next = prev
                                                                                                                                                                        +    return ListRecursivelyChild(next, current)
                                                                                                                                                                        +}
                                                                                                                                                                        +
                                                                                                                                                                        +

                                                                                                                                                                        Benchmark

                                                                                                                                                                        +
                                                                                                                                                                        goos: darwin
                                                                                                                                                                        +goarch: amd64
                                                                                                                                                                        +pkg: LeetcodeGolang/Leetcode/0206.Reverse-Linked-List
                                                                                                                                                                        +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                        +BenchmarkReverseList-8                  1000000000               0.7960 ns/op          0 B/op          0 allocs/op
                                                                                                                                                                        +BenchmarkReverseListRecursively-8       276534334                4.374 ns/op           0 B/op          0 allocs/op
                                                                                                                                                                        +PASS
                                                                                                                                                                        +ok      LeetcodeGolang/Leetcode/0206.Reverse-Linked-List        2.597s
                                                                                                                                                                        +
                                                                                                                                                                        +
                                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                        + +
                                                                                                                                                                        + +
                                                                                                                                                                        +
                                                                                                                                                                        +
                                                                                                                                                                        + +

                                                                                                                                                                        results matching ""

                                                                                                                                                                        +
                                                                                                                                                                          + +
                                                                                                                                                                          +
                                                                                                                                                                          + +

                                                                                                                                                                          No results matching ""

                                                                                                                                                                          + +
                                                                                                                                                                          +
                                                                                                                                                                          +
                                                                                                                                                                          + +
                                                                                                                                                                          +
                                                                                                                                                                          + +
                                                                                                                                                                          + + + + + + +
                                                                                                                                                                          + + +
                                                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0206.Reverse-Linked-List/main.go b/Leetcode/0206.Reverse-Linked-List/main.go new file mode 100644 index 000000000..6b5d6cc0a --- /dev/null +++ b/Leetcode/0206.Reverse-Linked-List/main.go @@ -0,0 +1,43 @@ +package reverselinkedlist + +import ( + . "LeetcodeGolang/structures" +) + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +func ReverseList(head *ListNode) *ListNode { + if head == nil || head.Next == nil { + return head + } + + var prev *ListNode + + for head != nil { + next := head.Next + head.Next = prev + prev = head + head = next + } + + return prev +} + +func ReverseListRecursively(head *ListNode) *ListNode { + return ListRecursivelyChild(head, nil) +} + +func ListRecursivelyChild(current *ListNode, prev *ListNode) *ListNode { + if current == nil { + return prev + } + next := current.Next + current.Next = prev + return ListRecursivelyChild(next, current) +} diff --git a/Leetcode/0206.Reverse-Linked-List/main_test.go b/Leetcode/0206.Reverse-Linked-List/main_test.go new file mode 100644 index 000000000..7aad327ba --- /dev/null +++ b/Leetcode/0206.Reverse-Linked-List/main_test.go @@ -0,0 +1,67 @@ +package reverselinkedlist + +import ( + . "LeetcodeGolang/structures" + "reflect" + "testing" +) + +var tests = []struct { + arg1 *ListNode + want *ListNode +}{ + { + Ints2List([]int{1, 2, 3, 4, 5}), + Ints2List([]int{5, 4, 3, 2, 1}), + }, + { + Ints2List([]int{1, 2}), + Ints2List([]int{2, 1}), + }, + { + Ints2List([]int{}), + Ints2List([]int{}), + }, +} + +func TestReverseList(t *testing.T) { + for _, tt := range tests { + if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestReverseListRecursively(t *testing.T) { + for _, tt := range tests { + if got := ReverseListRecursively(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkReverseList(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ReverseList(tests[0].arg1) + } +} + +func BenchmarkReverseListRecursively(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ReverseListRecursively(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0206.Reverse-Linked-List -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0206.Reverse-Linked-List +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkReverseList-8 1000000000 0.7960 ns/op 0 B/op 0 allocs/op +BenchmarkReverseListRecursively-8 276534334 4.374 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0206.Reverse-Linked-List 2.597s +*/ diff --git a/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum.go b/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum.go new file mode 100644 index 000000000..c86947a29 --- /dev/null +++ b/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum.go @@ -0,0 +1,119 @@ +package minimumsizesubarraysum + +import ( + "math" + "sort" +) + +// MinSubArrayLenBurst : 暴力解 時間複雜 O(n^2), 空間複雜 O(1) +func MinSubArrayLenBurst(target int, nums []int) int { + lens := len(nums) + if lens <= 0 { + return 0 + } + + minSize := math.MaxInt32 + for i := 0; i < lens; i++ { + sum := 0 + for j := i; j < lens; j++ { + sum += nums[j] + if sum >= target { + minSize = min(minSize, j-i+1) + } + } + } + if minSize == math.MaxInt32 { + minSize = 0 + } + return minSize +} + +// MinSubArrayLenSlidingWindow : 滑動視窗 時間複雜 O(n), 空間複雜 O(1) +// 滑動窗口的精妙之處在於根據當前子序列和大小的情況,不斷調節子序列的起始位置。從而將O(n^2)的暴力解法降為O(n) +func MinSubArrayLenSlidingWindow(target int, nums []int) int { + lens := len(nums) + if lens <= 0 { + return 0 + } + minSize := math.MaxInt32 + + start, end, sum := 0, 0, 0 + for end < lens { + sum += nums[end] + for sum >= target { + minSize = min(minSize, end-start+1) + sum -= nums[start] + start++ + } + end++ + + } + + if minSize == math.MaxInt32 { + minSize = 0 + } + return minSize +} + +/* +MinSubArrayLenBinarysearch : 前缀和 + 二分查找 O(nlog(n)) +為了使用二分查找,需要額外創建一個數組 sums 用於存儲數組nums 的前綴和,其中 sums[i] 表示從 nums[0] 到 nums[i−1] 的元素和。 +得到前綴和之後,對於每個開始下標i,可通過二分查找得到大於或等於 i 的最小下標 bound, +使得 sums[bound]-sums[i-1] >= s, +並更新子數組的最小長度(此時子數組的長度是 bound -(i-1) )。 +C++ 的 lower_bound,Java 的 Arrays.binarySearch + +因為這道題保證了數組中每個元素都為正,所以前綴和一定是遞增的,這一點保證了二分的正確性。如果題目沒有說明數組中每個元素都為正,這裡就不能使用二分來查找這個位置了。 +*/ +func MinSubArrayLenBinarysearch(target int, nums []int) int { + lens := len(nums) + if lens <= 0 { + return 0 + } + minSize := math.MaxInt32 + + // sums[i] 表示從 nums[0] 到 nums[i−1] + sums := make([]int, lens+1) + // 為了方便計算 size = lens + 1 + // sums[0] = 0, 前0個的元素和 + // sums[1] = nums[0] , 前1個元素和為 nums[0] + for i := 1; i <= lens; i++ { + sums[i] = sums[i-1] + nums[i-1] + } + // fmt.Println("sums", sums) + for i := 1; i <= lens; i++ { + /* + target 7 + input 2 3 1 2 4 3 + ----------------------------------- + i 0 1 2 3 4 5 6 + ----------------------------------- + sums 0 2 5 6 8 12 15 // input 的前 n 個元素和 + tmpTarge 7 9 12 13 15 19 // tmpTarge = target + sums[i-1] + bound 4 5 5 6 6 7 // bound = sort.SearchInts(sums, tmpTarge) + bound-(i-1) 4 4 3 3 2 2 + minSize 4 4 3 3 2 2 + */ + tmpTarge := target + sums[i-1] + bound := sort.SearchInts(sums, tmpTarge) + // if bound < 0 { + // bound = -bound - 1 + // } + if bound <= lens { + minSize = min(minSize, bound-(i-1)) + } + // fmt.Println("i:", i, " tmpTarge", tmpTarge, " bound:", bound, " bound-(i-1)", bound-(i-1), " minSize:", minSize) + } + + if minSize == math.MaxInt32 { + minSize = 0 + } + return minSize +} + +func min(x, y int) int { + if x < y { + return x + } + return y +} diff --git a/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum_test.go b/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum_test.go new file mode 100644 index 000000000..543f4c830 --- /dev/null +++ b/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum_test.go @@ -0,0 +1,77 @@ +package minimumsizesubarraysum + +import ( + "testing" +) + +var tests = []struct { + arg1 int + arg2 []int + want int +}{ + { + 7, + []int{2, 3, 1, 2, 4, 3}, + 2, + }, + // { + // 4, + // []int{1, 4, 4}, + // 1, + // }, + // { + // 11, + // []int{1, 1, 1, 1, 1, 1, 1, 1}, + // 0, + // }, +} + +func TestMinSubArrayLenBurst(t *testing.T) { + for _, tt := range tests { + if got := MinSubArrayLenBurst(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestMinSubArrayLenSlidingWindow(t *testing.T) { + for _, tt := range tests { + if got := MinSubArrayLenSlidingWindow(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestMinSubArrayLenBinarysearch(t *testing.T) { + for _, tt := range tests { + if got := MinSubArrayLenBinarysearch(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func BenchmarkMinSubArrayLenBurst(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinSubArrayLenBurst(tests[0].arg1, tests[0].arg2) + } +} +func BenchmarkMinSubArrayLenSlidingWindow(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinSubArrayLenSlidingWindow(tests[0].arg1, tests[0].arg2) + } +} +func BenchmarkMinSubArrayLenBinarysearch(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinSubArrayLenBinarysearch(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0209.Minimum-Size-Subarray-Sum -bench=. +BenchmarkMinSubArrayLenBurst-4 27345652 41.67 ns/op 0 B/op 0 allocs/op +BenchmarkMinSubArrayLenSlidingWindow-4 87522610 13.67 ns/op 0 B/op 0 allocs/op +BenchmarkMinSubArrayLenBinarysearch-4 8496684 136.7 ns/op 64 B/op 1 allocs/op +*/ diff --git a/Leetcode/0209.Minimum-Size-Subarray-Sum/index.html b/Leetcode/0209.Minimum-Size-Subarray-Sum/index.html new file mode 100644 index 000000000..23953b6a8 --- /dev/null +++ b/Leetcode/0209.Minimum-Size-Subarray-Sum/index.html @@ -0,0 +1,3964 @@ + + + + + + + 0209. Minimum Size Subarray Sum · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                          +
                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                          + +
                                                                                                                                                                          + +
                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                          +
                                                                                                                                                                          + +
                                                                                                                                                                          +
                                                                                                                                                                          + +
                                                                                                                                                                          + +

                                                                                                                                                                          209. Minimum Size Subarray Sum

                                                                                                                                                                          题目

                                                                                                                                                                          +

                                                                                                                                                                          Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead.

                                                                                                                                                                          +

                                                                                                                                                                          Example 1:

                                                                                                                                                                          +
                                                                                                                                                                          Input: s = 7, nums = [2,3,1,2,4,3]
                                                                                                                                                                          +Output: 2
                                                                                                                                                                          +Explanation: the subarray [4,3] has the minimal length under the problem constraint.
                                                                                                                                                                          +
                                                                                                                                                                          +
                                                                                                                                                                          Input: s = 4, nums = [1,4,4]
                                                                                                                                                                          +Output: 1
                                                                                                                                                                          +
                                                                                                                                                                          Input: s = 11, nums = [1,1,1,1,1,1,1,1]
                                                                                                                                                                          +Output: 0
                                                                                                                                                                          +

                                                                                                                                                                          Follow up:

                                                                                                                                                                          +

                                                                                                                                                                          If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n).

                                                                                                                                                                          +

                                                                                                                                                                          題目大意

                                                                                                                                                                          +

                                                                                                                                                                          給定一個整型數組和一個數字 s,找到數組中最短的一個連續子數組,使得連續子數組的數字之和 sum>=s,返回最短的連續子數組的返回值。

                                                                                                                                                                          +

                                                                                                                                                                          解題思路

                                                                                                                                                                          +

                                                                                                                                                                          這一題的解題思路是用滑動窗口。在滑動窗口[i,j]之間不斷往後移動,如果總和小於s,就擴大右邊界j,不斷加入右邊的值,直到sum > s,之和再縮小i 的左邊界,不斷縮小直到sum < s,這時候右邊界又可以往右移動。以此類推。

                                                                                                                                                                          +

                                                                                                                                                                          進階

                                                                                                                                                                          +

                                                                                                                                                                          如果你已經實現 O(n) 時間複雜度的解法, 請嘗試設計一個 O(n log(n)) 時間複雜度的解法。

                                                                                                                                                                          +

                                                                                                                                                                          來源

                                                                                                                                                                          + +

                                                                                                                                                                          解答

                                                                                                                                                                          +

                                                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum.go

                                                                                                                                                                          +
                                                                                                                                                                          package minimumsizesubarraysum
                                                                                                                                                                          +
                                                                                                                                                                          +import (
                                                                                                                                                                          +    "math"
                                                                                                                                                                          +    "sort"
                                                                                                                                                                          +)
                                                                                                                                                                          +
                                                                                                                                                                          +// MinSubArrayLenBurst : 暴力解 時間複雜 O(n^2), 空間複雜 O(1)
                                                                                                                                                                          +func MinSubArrayLenBurst(target int, nums []int) int {
                                                                                                                                                                          +    lens := len(nums)
                                                                                                                                                                          +    if lens <= 0="" {="" return="" }="" minsize="" :="math.MaxInt32" for="" i="" <="" lens;="" i++="" sum="" j="" j++="" +="nums[j]" if="">= target {
                                                                                                                                                                          +                minSize = min(minSize, j-i+1)
                                                                                                                                                                          +            }
                                                                                                                                                                          +        }
                                                                                                                                                                          +    }
                                                                                                                                                                          +    if minSize == math.MaxInt32 {
                                                                                                                                                                          +        minSize = 0
                                                                                                                                                                          +    }
                                                                                                                                                                          +    return minSize
                                                                                                                                                                          +}
                                                                                                                                                                          +
                                                                                                                                                                          +// MinSubArrayLenSlidingWindow : 滑動視窗 時間複雜 O(n), 空間複雜 O(1)
                                                                                                                                                                          +// 滑動窗口的精妙之處在於根據當前子序列和大小的情況,不斷調節子序列的起始位置。從而將O(n^2)的暴力解法降為O(n)
                                                                                                                                                                          +func MinSubArrayLenSlidingWindow(target int, nums []int) int {
                                                                                                                                                                          +    lens := len(nums)
                                                                                                                                                                          +    if lens <= 0="" {="" return="" }="" minsize="" :="math.MaxInt32" start,="" end,="" sum="" 0,="" for="" end="" <="" lens="" +="nums[end]">= target {
                                                                                                                                                                          +            minSize = min(minSize, end-start+1)
                                                                                                                                                                          +            sum -= nums[start]
                                                                                                                                                                          +            start++
                                                                                                                                                                          +        }
                                                                                                                                                                          +        end++
                                                                                                                                                                          +
                                                                                                                                                                          +    }
                                                                                                                                                                          +
                                                                                                                                                                          +    if minSize == math.MaxInt32 {
                                                                                                                                                                          +        minSize = 0
                                                                                                                                                                          +    }
                                                                                                                                                                          +    return minSize
                                                                                                                                                                          +}
                                                                                                                                                                          +
                                                                                                                                                                          +/*
                                                                                                                                                                          +MinSubArrayLenBinarysearch : 前缀和 + 二分查找  O(nlog(n))
                                                                                                                                                                          +為了使用二分查找,需要額外創建一個數組 sums 用於存儲數組nums 的前綴和,其中 sums[i] 表示從 nums[0] 到 nums[i−1] 的元素和。
                                                                                                                                                                          +得到前綴和之後,對於每個開始下標i,可通過二分查找得到大於或等於 i 的最小下標 bound,
                                                                                                                                                                          +使得 sums[bound]-sums[i-1] >= s,
                                                                                                                                                                          +並更新子數組的最小長度(此時子數組的長度是 bound -(i-1) )。
                                                                                                                                                                          +C++ 的 lower_bound,Java 的 Arrays.binarySearch
                                                                                                                                                                          +
                                                                                                                                                                          +因為這道題保證了數組中每個元素都為正,所以前綴和一定是遞增的,這一點保證了二分的正確性。如果題目沒有說明數組中每個元素都為正,這裡就不能使用二分來查找這個位置了。
                                                                                                                                                                          +*/
                                                                                                                                                                          +func MinSubArrayLenBinarysearch(target int, nums []int) int {
                                                                                                                                                                          +    lens := len(nums)
                                                                                                                                                                          +    if lens 
                                                                                                                                                                          +
                                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                          + +
                                                                                                                                                                          + +
                                                                                                                                                                          +
                                                                                                                                                                          +
                                                                                                                                                                          + +

                                                                                                                                                                          results matching ""

                                                                                                                                                                          +
                                                                                                                                                                            + +
                                                                                                                                                                            +
                                                                                                                                                                            + +

                                                                                                                                                                            No results matching ""

                                                                                                                                                                            + +
                                                                                                                                                                            +
                                                                                                                                                                            +
                                                                                                                                                                            + +
                                                                                                                                                                            +
                                                                                                                                                                            + +
                                                                                                                                                                            + + + + + + +
                                                                                                                                                                            + + +
                                                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0215.Kth-Largest-Element-in-an-Array/index.html b/Leetcode/0215.Kth-Largest-Element-in-an-Array/index.html new file mode 100644 index 000000000..1e604e46f --- /dev/null +++ b/Leetcode/0215.Kth-Largest-Element-in-an-Array/index.html @@ -0,0 +1,4002 @@ + + + + + + + 0215. Kth Largest Element in an Array · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                            +
                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                            + +
                                                                                                                                                                            + +
                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                            +
                                                                                                                                                                            + +
                                                                                                                                                                            +
                                                                                                                                                                            + +
                                                                                                                                                                            + +

                                                                                                                                                                            0215. Kth Largest Element in an Array

                                                                                                                                                                            題目

                                                                                                                                                                            +

                                                                                                                                                                            Given an integer array nums and an integer k, return the kth largest element in the array.

                                                                                                                                                                            +

                                                                                                                                                                            Note that it is the kth largest element in the sorted order, not the kth distinct element.

                                                                                                                                                                            +

                                                                                                                                                                            Can you solve it without sorting?

                                                                                                                                                                            +

                                                                                                                                                                            Example 1:

                                                                                                                                                                            +
                                                                                                                                                                            Input: nums = [3,2,1,5,6,4], k = 2
                                                                                                                                                                            +Output: 5
                                                                                                                                                                            +

                                                                                                                                                                            Example 2:

                                                                                                                                                                            +
                                                                                                                                                                            Input: nums = [3,2,3,1,2,4,5,5,6], k = 4
                                                                                                                                                                            +Output: 4
                                                                                                                                                                            +

                                                                                                                                                                            Constraints:

                                                                                                                                                                            +
                                                                                                                                                                              +
                                                                                                                                                                            • 1 <= k <= nums.length <= 105
                                                                                                                                                                            • +
                                                                                                                                                                            • -104 <= nums[i] <= 104
                                                                                                                                                                            • +
                                                                                                                                                                            +

                                                                                                                                                                            題目大意

                                                                                                                                                                            +
                                                                                                                                                                              +
                                                                                                                                                                            1. 數組中的第K個最大元素 (Kth Largest Element in an Array)
                                                                                                                                                                            2. +
                                                                                                                                                                            +

                                                                                                                                                                            給定一個未排序的整數數組,找到其中第K個最大的元素。

                                                                                                                                                                            +

                                                                                                                                                                            解題思路

                                                                                                                                                                            +

                                                                                                                                                                            一種常見的解法是使用堆數據結構。我們可以維護一個大小為K的最小堆,初始時將數組的前K個元素加入堆中。然後遍歷數組的剩餘元素,如果當前元素比堆頂元素大,則將堆頂元素出堆,並將當前元素加入堆中。最後堆頂元素即為第K個最大的元素。

                                                                                                                                                                            +
                                                                                                                                                                              +
                                                                                                                                                                            • 時間複雜度: 構建堆的時間複雜度為O(K),遍歷數組的時間複雜度為O((N-K)logK),因此總的時間複雜度為O(NlogK)。
                                                                                                                                                                            • +
                                                                                                                                                                            • 空間複雜度: 使用了大小為K的最小堆來存儲元素,因此空間複雜度為O(K)。
                                                                                                                                                                            • +
                                                                                                                                                                            +

                                                                                                                                                                            在快速選擇 quickselect 的 partition 操作中,每次 partition 操作結束都會返回一個點,這個標定點的下標和最終排序之後有序數組中這個元素所在的下標是一致的。利用這個特性,我們可以不斷的劃分數組區間,最終找到第 K 大的元素。執行一次 partition 操作以後,如果這個元素的下標比 K 小,那麼接著就在後邊的區間繼續執行 partition 操作;如果這個元素的下標比 K 大,那麼就在左邊的區間繼續執行 partition 操作;如果相等就直接輸出這個下標對應的數組元素即可。 +快速選擇 quickselect 的思路實現的算法時間複雜度為 O(n),空間複雜度為 O(logn)

                                                                                                                                                                            +

                                                                                                                                                                            來源

                                                                                                                                                                            + +

                                                                                                                                                                            解答

                                                                                                                                                                            +

                                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0215.Kth-Largest-Element-in-an-Array/main.go

                                                                                                                                                                            +
                                                                                                                                                                            package kthlargestelementinanarray
                                                                                                                                                                            +
                                                                                                                                                                            +import (
                                                                                                                                                                            +    "container/heap"
                                                                                                                                                                            +    "sort"
                                                                                                                                                                            +)
                                                                                                                                                                            +
                                                                                                                                                                            +// 解法一:用Heap資料結構
                                                                                                                                                                            +// container/heap包可以用来構造優先級Queue。
                                                                                                                                                                            +// Heap(堆積)其實是一個Complete Binary Tree(完全二元樹).
                                                                                                                                                                            +// Go的Heap特性是 各個節點都自己是其子樹的根, 且值是最小的(index = 0 的值是最小的).
                                                                                                                                                                            +// 同個根節點的左子樹的值會小於右子樹
                                                                                                                                                                            +func FindKthLargestHeap(nums []int, k int) int {
                                                                                                                                                                            +    if k <= 0="" ||="" k=""> len(nums) {
                                                                                                                                                                            +        return 0
                                                                                                                                                                            +    }
                                                                                                                                                                            +
                                                                                                                                                                            +    // 初始化最小堆
                                                                                                                                                                            +    h := &MinHeap{}
                                                                                                                                                                            +    heap.Init(h)
                                                                                                                                                                            +
                                                                                                                                                                            +    // 遍歷集合
                                                                                                                                                                            +    for _, num := range nums {
                                                                                                                                                                            +        if h.Len() < k {
                                                                                                                                                                            +            heap.Push(h, num)
                                                                                                                                                                            +        } else if num > (*h)[0] {
                                                                                                                                                                            +            heap.Pop(h)
                                                                                                                                                                            +            heap.Push(h, num)
                                                                                                                                                                            +        }
                                                                                                                                                                            +    }
                                                                                                                                                                            +    // fmt.Println(h)
                                                                                                                                                                            +
                                                                                                                                                                            +    return (*h)[0]
                                                                                                                                                                            +}
                                                                                                                                                                            +
                                                                                                                                                                            +// 自定義最小 Heap 結構體
                                                                                                                                                                            +type MinHeap []int
                                                                                                                                                                            +
                                                                                                                                                                            +func (h MinHeap) Len() int {
                                                                                                                                                                            +    return len(h)
                                                                                                                                                                            +}
                                                                                                                                                                            +func (h MinHeap) Less(i, j int) bool {
                                                                                                                                                                            +    // 小到大排序
                                                                                                                                                                            +    return h[i] < h[j]
                                                                                                                                                                            +}
                                                                                                                                                                            +func (h MinHeap) Swap(i, j int) {
                                                                                                                                                                            +    h[i], h[j] = h[j], h[i]
                                                                                                                                                                            +}
                                                                                                                                                                            +
                                                                                                                                                                            +// Push 和 Pop 方法需要使用指針,因為它們會修改 slice 的長度,而不僅僅只內容。
                                                                                                                                                                            +func (h *MinHeap) Push(x interface{}) {
                                                                                                                                                                            +    *h = append(*h, x.(int))
                                                                                                                                                                            +}
                                                                                                                                                                            +func (h *MinHeap) Pop() interface{} {
                                                                                                                                                                            +    old := *h
                                                                                                                                                                            +    n := len(old)
                                                                                                                                                                            +    x := old[n-1]
                                                                                                                                                                            +    *h = old[:n-1]
                                                                                                                                                                            +    return x
                                                                                                                                                                            +}
                                                                                                                                                                            +
                                                                                                                                                                            +// 解法二:先Sort,再取第k個, 最快!
                                                                                                                                                                            +func FindKthLargestSort(nums []int, k int) int {
                                                                                                                                                                            +    sort.Ints(nums)
                                                                                                                                                                            +    return nums[len(nums)-k]
                                                                                                                                                                            +}
                                                                                                                                                                            +
                                                                                                                                                                            +

                                                                                                                                                                            Benchmark

                                                                                                                                                                            +
                                                                                                                                                                            goos: darwin
                                                                                                                                                                            +goarch: amd64
                                                                                                                                                                            +pkg: LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array
                                                                                                                                                                            +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                            +BenchmarkFindKthLargestHeap-8            6112726               184.9 ns/op            48 B/op          3 allocs/op
                                                                                                                                                                            +BenchmarkFindKthLargestSort-8           18023403                60.38 ns/op           24 B/op          1 allocs/op
                                                                                                                                                                            +PASS
                                                                                                                                                                            +ok      LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array    3.383s
                                                                                                                                                                            +
                                                                                                                                                                            +
                                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                            + +
                                                                                                                                                                            + +
                                                                                                                                                                            +
                                                                                                                                                                            +
                                                                                                                                                                            + +

                                                                                                                                                                            results matching ""

                                                                                                                                                                            +
                                                                                                                                                                              + +
                                                                                                                                                                              +
                                                                                                                                                                              + +

                                                                                                                                                                              No results matching ""

                                                                                                                                                                              + +
                                                                                                                                                                              +
                                                                                                                                                                              +
                                                                                                                                                                              + +
                                                                                                                                                                              +
                                                                                                                                                                              + +
                                                                                                                                                                              + + + + + + + + + + +
                                                                                                                                                                              + + +
                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0215.Kth-Largest-Element-in-an-Array/main.go b/Leetcode/0215.Kth-Largest-Element-in-an-Array/main.go new file mode 100644 index 000000000..ef678b0d1 --- /dev/null +++ b/Leetcode/0215.Kth-Largest-Element-in-an-Array/main.go @@ -0,0 +1,66 @@ +package kthlargestelementinanarray + +import ( + "container/heap" + "sort" +) + +// 解法一:用Heap資料結構 +// container/heap包可以用来構造優先級Queue。 +// Heap(堆積)其實是一個Complete Binary Tree(完全二元樹). +// Go的Heap特性是 各個節點都自己是其子樹的根, 且值是最小的(index = 0 的值是最小的). +// 同個根節點的左子樹的值會小於右子樹 +func FindKthLargestHeap(nums []int, k int) int { + if k <= 0 || k > len(nums) { + return 0 + } + + // 初始化最小堆 + h := &MinHeap{} + heap.Init(h) + + // 遍歷集合 + for _, num := range nums { + if h.Len() < k { + heap.Push(h, num) + } else if num > (*h)[0] { + heap.Pop(h) + heap.Push(h, num) + } + } + // fmt.Println(h) + + return (*h)[0] +} + +// 自定義最小 Heap 結構體 +type MinHeap []int + +func (h MinHeap) Len() int { + return len(h) +} +func (h MinHeap) Less(i, j int) bool { + // 小到大排序 + return h[i] < h[j] +} +func (h MinHeap) Swap(i, j int) { + h[i], h[j] = h[j], h[i] +} + +// Push 和 Pop 方法需要使用指針,因為它們會修改 slice 的長度,而不僅僅只內容。 +func (h *MinHeap) Push(x interface{}) { + *h = append(*h, x.(int)) +} +func (h *MinHeap) Pop() interface{} { + old := *h + n := len(old) + x := old[n-1] + *h = old[:n-1] + return x +} + +// 解法二:先Sort,再取第k個, 最快! +func FindKthLargestSort(nums []int, k int) int { + sort.Ints(nums) + return nums[len(nums)-k] +} diff --git a/Leetcode/0215.Kth-Largest-Element-in-an-Array/main_test.go b/Leetcode/0215.Kth-Largest-Element-in-an-Array/main_test.go new file mode 100644 index 000000000..57bf1d2f4 --- /dev/null +++ b/Leetcode/0215.Kth-Largest-Element-in-an-Array/main_test.go @@ -0,0 +1,64 @@ +package kthlargestelementinanarray + +import "testing" + +var tests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{3, 2, 1, 5, 6, 4}, + 2, + 5, + }, + { + []int{3, 2, 3, 1, 2, 4, 5, 5, 6}, + 4, + 4, + }, +} + +func TestFindKthLargestHeap(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := FindKthLargestHeap(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestFindKthLargestSort(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := FindKthLargestSort(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkFindKthLargestHeap(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FindKthLargestHeap(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkFindKthLargestSort(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FindKthLargestSort(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkFindKthLargestHeap-8 6112726 184.9 ns/op 48 B/op 3 allocs/op +BenchmarkFindKthLargestSort-8 18023403 60.38 ns/op 24 B/op 1 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array 3.383s +*/ diff --git a/Leetcode/0217.Contains-Duplicate/index.html b/Leetcode/0217.Contains-Duplicate/index.html new file mode 100644 index 000000000..ec25493b5 --- /dev/null +++ b/Leetcode/0217.Contains-Duplicate/index.html @@ -0,0 +1,3931 @@ + + + + + + + 0217.Contains-Duplicate · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                              +
                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                              + +
                                                                                                                                                                              + +
                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                              +
                                                                                                                                                                              + +
                                                                                                                                                                              +
                                                                                                                                                                              + +
                                                                                                                                                                              + +

                                                                                                                                                                              0217.Contains-Duplicate

                                                                                                                                                                              題目

                                                                                                                                                                              +

                                                                                                                                                                              Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.

                                                                                                                                                                              +

                                                                                                                                                                              Example 1:

                                                                                                                                                                              +
                                                                                                                                                                              Input: nums = [1,2,3,1]
                                                                                                                                                                              +Output: true
                                                                                                                                                                              +

                                                                                                                                                                              Example 2:

                                                                                                                                                                              +
                                                                                                                                                                              Input: nums = [1,2,3,4]
                                                                                                                                                                              +Output: false
                                                                                                                                                                              +

                                                                                                                                                                              Example 3:

                                                                                                                                                                              +
                                                                                                                                                                              Input: nums = [1,1,1,3,3,4,3,2,4,2]
                                                                                                                                                                              +Output: true
                                                                                                                                                                              +

                                                                                                                                                                              Constraints:

                                                                                                                                                                              +
                                                                                                                                                                                +
                                                                                                                                                                              • 1 <= nums.length <= 105
                                                                                                                                                                              • +
                                                                                                                                                                              • -109 <= nums[i] <= 109
                                                                                                                                                                              • +
                                                                                                                                                                              +

                                                                                                                                                                              題目大意

                                                                                                                                                                              +

                                                                                                                                                                              解題思路

                                                                                                                                                                              +

                                                                                                                                                                              來源

                                                                                                                                                                              + +

                                                                                                                                                                              解答

                                                                                                                                                                              +

                                                                                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0217.Contains-Duplicate/main.go

                                                                                                                                                                              +
                                                                                                                                                                              package containsduplicate
                                                                                                                                                                              +
                                                                                                                                                                              +func ContainsDuplicate(nums []int) bool {
                                                                                                                                                                              +    numsMap := make(map[int]bool, len(nums))
                                                                                                                                                                              +    for _, v := range nums {
                                                                                                                                                                              +        if numsMap[v] {
                                                                                                                                                                              +            return true
                                                                                                                                                                              +        }
                                                                                                                                                                              +        numsMap[v] = true
                                                                                                                                                                              +    }
                                                                                                                                                                              +    return false
                                                                                                                                                                              +}
                                                                                                                                                                              +
                                                                                                                                                                              +

                                                                                                                                                                              Benchmark

                                                                                                                                                                              +
                                                                                                                                                                              
                                                                                                                                                                              +
                                                                                                                                                                              +
                                                                                                                                                                              +
                                                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                              + +
                                                                                                                                                                              + +
                                                                                                                                                                              +
                                                                                                                                                                              +
                                                                                                                                                                              + +

                                                                                                                                                                              results matching ""

                                                                                                                                                                              +
                                                                                                                                                                                + +
                                                                                                                                                                                +
                                                                                                                                                                                + +

                                                                                                                                                                                No results matching ""

                                                                                                                                                                                + +
                                                                                                                                                                                +
                                                                                                                                                                                +
                                                                                                                                                                                + +
                                                                                                                                                                                +
                                                                                                                                                                                + +
                                                                                                                                                                                + + + + + + + + + + +
                                                                                                                                                                                + + +
                                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0217.Contains-Duplicate/main.go b/Leetcode/0217.Contains-Duplicate/main.go new file mode 100644 index 000000000..7ab3e914c --- /dev/null +++ b/Leetcode/0217.Contains-Duplicate/main.go @@ -0,0 +1,12 @@ +package containsduplicate + +func ContainsDuplicate(nums []int) bool { + numsMap := make(map[int]bool, len(nums)) + for _, v := range nums { + if numsMap[v] { + return true + } + numsMap[v] = true + } + return false +} diff --git a/Leetcode/0217.Contains-Duplicate/main_test.go b/Leetcode/0217.Contains-Duplicate/main_test.go new file mode 100644 index 000000000..7c1e82ad6 --- /dev/null +++ b/Leetcode/0217.Contains-Duplicate/main_test.go @@ -0,0 +1,33 @@ +package containsduplicate + +import "testing" + +var tests = []struct { + input []int + expected bool +}{ + {[]int{1, 2, 3, 1}, true}, // Duplicate element present + {[]int{1, 2, 3, 4}, false}, // No duplicate element + {[]int{1, 1, 1, 3, 3, 4, 3, 2, 4, 2}, true}, // Duplicate element present +} + +func TestContainsDuplicate(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.expected) { + if got := ContainsDuplicate(tt.input); got != tt.expected { + t.Errorf("got = %v, expected = %v", got, tt.expected) + } + } +} + +func BenchmarkContainsDuplicate(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + ContainsDuplicate(tests[0].input) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0226.Invert-Binary-Tree/images/invert1-tree.jpg b/Leetcode/0226.Invert-Binary-Tree/images/invert1-tree.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d82d93a20031fcdb7083f756a3a0f736f20aa176 GIT binary patch literal 34272 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 aNL^qQ#@Yv{D + + + + + 226. Invert Binary Tree · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0226.Invert-Binary-Tree/main.go b/Leetcode/0226.Invert-Binary-Tree/main.go new file mode 100644 index 000000000..07d452d39 --- /dev/null +++ b/Leetcode/0226.Invert-Binary-Tree/main.go @@ -0,0 +1,62 @@ +package invertbinarytree + +import ( + "LeetcodeGolang/Utility/structures" +) + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + +// type TreeNode struct { +// Val int +// Left *TreeNode +// Right *TreeNode +// } + +func InvertTree(root *structures.TreeNode) *structures.TreeNode { + if root == nil { + return nil + } + + InvertTree(root.Left) + InvertTree(root.Right) + + root.Left, root.Right = root.Right, root.Left + return root +} + +func InvertTree2(root *structures.TreeNode) *structures.TreeNode { + + if root != nil { + root.Left, root.Right = InvertTree2(root.Right), InvertTree2(root.Left) + } + + return root +} + +func InvertTree3(root *structures.TreeNode) *structures.TreeNode { + queue := make([]*structures.TreeNode, 0) + queue = append(queue, root) + + for len(queue) > 0 { + current := queue[0] + queue = queue[1:] + + current.Left, current.Right = current.Right, current.Left + + if current.Left != nil { + queue = append(queue, current.Left) + } + + if current.Right != nil { + queue = append(queue, current.Right) + } + } + return root +} diff --git a/Leetcode/0226.Invert-Binary-Tree/main_test.go b/Leetcode/0226.Invert-Binary-Tree/main_test.go new file mode 100644 index 000000000..77e0cf0f2 --- /dev/null +++ b/Leetcode/0226.Invert-Binary-Tree/main_test.go @@ -0,0 +1,87 @@ +package invertbinarytree + +import ( + "LeetcodeGolang/Utility/structures" + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want []int +}{ + { + []int{4, 2, 7, 1, 3, 6, 9}, + []int{4, 7, 2, 9, 6, 3, 1}, + }, +} + +func TestInvertTree(t *testing.T) { + for _, tt := range tests { + tree := structures.IntsToTree(tt.arg1) + got := InvertTree(tree) + treeWant := structures.IntsToTree(tt.want) + if !reflect.DeepEqual(got, treeWant) { + t.Errorf("got = %v, want = %v", got, treeWant) + } + } +} + +func TestInvertTree2(t *testing.T) { + for _, tt := range tests { + tree := structures.IntsToTree(tt.arg1) + got := InvertTree2(tree) + treeWant := structures.IntsToTree(tt.want) + if !reflect.DeepEqual(got, treeWant) { + t.Errorf("got = %v, want = %v", got, treeWant) + } + } +} + +func TestInvertTree3(t *testing.T) { + for _, tt := range tests { + tree := structures.IntsToTree(tt.arg1) + got := InvertTree3(tree) + treeWant := structures.IntsToTree(tt.want) + if !reflect.DeepEqual(got, treeWant) { + t.Errorf("got = %v, want = %v", got, treeWant) + } + } +} + +func BenchmarkInvertTree(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + tree := structures.IntsToTree(tests[0].arg1) + InvertTree(tree) + } +} + +func BenchmarkInvertTree2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + tree := structures.IntsToTree(tests[0].arg1) + InvertTree2(tree) + } +} + +func BenchmarkInvertTree3(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + tree := structures.IntsToTree(tests[0].arg1) + InvertTree3(tree) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkInvertTree-8 2533011 398.7 ns/op 168 B/op 7 allocs/op +BenchmarkInvertTree2-8 2667645 392.4 ns/op 168 B/op 7 allocs/op +BenchmarkInvertTree3-8 1403001 727.5 ns/op 296 B/op 13 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree 4.889s +*/ diff --git a/Leetcode/0238.Product-of-Array-Except-Self/index.html b/Leetcode/0238.Product-of-Array-Except-Self/index.html new file mode 100644 index 000000000..d3f008c5c --- /dev/null +++ b/Leetcode/0238.Product-of-Array-Except-Self/index.html @@ -0,0 +1,3969 @@ + + + + + + + 238. Product of Array Except Self · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                +
                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                + +
                                                                                                                                                                                + +
                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                +
                                                                                                                                                                                + +
                                                                                                                                                                                +
                                                                                                                                                                                + +
                                                                                                                                                                                + +

                                                                                                                                                                                238. Product of Array Except Self

                                                                                                                                                                                題目

                                                                                                                                                                                +

                                                                                                                                                                                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: nums = [1,2,3,4] +Output: [24,12,8,6] +Example 2:

                                                                                                                                                                                +

                                                                                                                                                                                Input: nums = [-1,1,0,-3,3] +Output: [0,0,9,0,0]

                                                                                                                                                                                +

                                                                                                                                                                                Constraints:

                                                                                                                                                                                +

                                                                                                                                                                                2 <= nums.length <= 105 +-30 <= nums[i] <= 30 +The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.

                                                                                                                                                                                +

                                                                                                                                                                                Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)

                                                                                                                                                                                +

                                                                                                                                                                                題目大意

                                                                                                                                                                                +

                                                                                                                                                                                解題思路

                                                                                                                                                                                +

                                                                                                                                                                                Big O

                                                                                                                                                                                +

                                                                                                                                                                                時間複雜 : O(n) +空間複雜 : ``

                                                                                                                                                                                +

                                                                                                                                                                                來源

                                                                                                                                                                                + +

                                                                                                                                                                                解答

                                                                                                                                                                                +

                                                                                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0238.Product-of-Array-Except-Self/main.go

                                                                                                                                                                                +
                                                                                                                                                                                package productofarrayexceptself
                                                                                                                                                                                +
                                                                                                                                                                                +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                +func productExceptSelf(nums []int) []int {
                                                                                                                                                                                +    result, left, right := make([]int, len(nums)), make([]int, len(nums)), make([]int, len(nums))
                                                                                                                                                                                +
                                                                                                                                                                                +    // left 為左側所有的成績
                                                                                                                                                                                +    // 索引為'0' 的元素, 因為左側沒有元素,所以left[0]=1
                                                                                                                                                                                +    left[0] = 1
                                                                                                                                                                                +    for i := 1; i < len(nums); i++ {
                                                                                                                                                                                +        left[i] = left[i-1] * nums[i-1]
                                                                                                                                                                                +    }
                                                                                                                                                                                +
                                                                                                                                                                                +    right[len(nums)-1] = 1
                                                                                                                                                                                +    for i := len(nums) - 2; i >= 0; i-- {
                                                                                                                                                                                +        right[i] = right[i+1] * nums[i+1]
                                                                                                                                                                                +    }
                                                                                                                                                                                +
                                                                                                                                                                                +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                +        result[i] = left[i] * right[i]
                                                                                                                                                                                +    }
                                                                                                                                                                                +    return result
                                                                                                                                                                                +}
                                                                                                                                                                                +
                                                                                                                                                                                +func productExceptSelf2(nums []int) []int {
                                                                                                                                                                                +    result := make([]int, len(nums))
                                                                                                                                                                                +
                                                                                                                                                                                +    result[0] = 1
                                                                                                                                                                                +    for i := 1; i < len(nums); i++ {
                                                                                                                                                                                +        result[i] = result[i-1] * nums[i-1]
                                                                                                                                                                                +    }
                                                                                                                                                                                +
                                                                                                                                                                                +    rightProduct := 1
                                                                                                                                                                                +    for i := len(nums) - 1; i >= 0; i-- {
                                                                                                                                                                                +        result[i] = result[i] * rightProduct
                                                                                                                                                                                +        rightProduct = rightProduct * nums[i]
                                                                                                                                                                                +    }
                                                                                                                                                                                +
                                                                                                                                                                                +    return result
                                                                                                                                                                                +}
                                                                                                                                                                                +
                                                                                                                                                                                +

                                                                                                                                                                                Benchmark

                                                                                                                                                                                +
                                                                                                                                                                                go test -benchmem -run=none LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self -bench=.
                                                                                                                                                                                +goos: darwin
                                                                                                                                                                                +goarch: amd64
                                                                                                                                                                                +pkg: LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self
                                                                                                                                                                                +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                +BenchmarkProductExceptSelf-8            12772174               158.4 ns/op            96 B/op          3 allocs/op
                                                                                                                                                                                +BenchmarkProductExceptSelf2-8           32292304                63.74 ns/op           32 B/op          1 allocs/op
                                                                                                                                                                                +PASS
                                                                                                                                                                                +ok      LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self       4.228s
                                                                                                                                                                                +
                                                                                                                                                                                +
                                                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                + +
                                                                                                                                                                                + +
                                                                                                                                                                                +
                                                                                                                                                                                +
                                                                                                                                                                                + +

                                                                                                                                                                                results matching ""

                                                                                                                                                                                +
                                                                                                                                                                                  + +
                                                                                                                                                                                  +
                                                                                                                                                                                  + +

                                                                                                                                                                                  No results matching ""

                                                                                                                                                                                  + +
                                                                                                                                                                                  +
                                                                                                                                                                                  +
                                                                                                                                                                                  + +
                                                                                                                                                                                  +
                                                                                                                                                                                  + +
                                                                                                                                                                                  + + + + + + + + + + +
                                                                                                                                                                                  + + +
                                                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0238.Product-of-Array-Except-Self/main.go b/Leetcode/0238.Product-of-Array-Except-Self/main.go new file mode 100644 index 000000000..872fbac2b --- /dev/null +++ b/Leetcode/0238.Product-of-Array-Except-Self/main.go @@ -0,0 +1,40 @@ +package productofarrayexceptself + +// 時間複雜 O(), 空間複雜 O() +func productExceptSelf(nums []int) []int { + result, left, right := make([]int, len(nums)), make([]int, len(nums)), make([]int, len(nums)) + + // left 為左側所有的成績 + // 索引為'0' 的元素, 因為左側沒有元素,所以left[0]=1 + left[0] = 1 + for i := 1; i < len(nums); i++ { + left[i] = left[i-1] * nums[i-1] + } + + right[len(nums)-1] = 1 + for i := len(nums) - 2; i >= 0; i-- { + right[i] = right[i+1] * nums[i+1] + } + + for i := 0; i < len(nums); i++ { + result[i] = left[i] * right[i] + } + return result +} + +func productExceptSelf2(nums []int) []int { + result := make([]int, len(nums)) + + result[0] = 1 + for i := 1; i < len(nums); i++ { + result[i] = result[i-1] * nums[i-1] + } + + rightProduct := 1 + for i := len(nums) - 1; i >= 0; i-- { + result[i] = result[i] * rightProduct + rightProduct = rightProduct * nums[i] + } + + return result +} diff --git a/Leetcode/0238.Product-of-Array-Except-Self/main_test.go b/Leetcode/0238.Product-of-Array-Except-Self/main_test.go new file mode 100644 index 000000000..bb6c63fbc --- /dev/null +++ b/Leetcode/0238.Product-of-Array-Except-Self/main_test.go @@ -0,0 +1,60 @@ +package productofarrayexceptself + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want []int +}{ + { + []int{1, 2, 3, 4}, + []int{24, 12, 8, 6}, + }, +} + +func TestProductExceptSelf(t *testing.T) { + for _, tt := range tests { + if got := productExceptSelf(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // if got := productExceptSelf(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkProductExceptSelf(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + productExceptSelf(tests[0].arg1) + } +} + +func TestProductExceptSelf2(t *testing.T) { + for _, tt := range tests { + if got := productExceptSelf2(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // if got := productExceptSelf2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkProductExceptSelf2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + productExceptSelf2(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkProductExceptSelf-8 12772174 158.4 ns/op 96 B/op 3 allocs/op +BenchmarkProductExceptSelf2-8 32292304 63.74 ns/op 32 B/op 1 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self 4.228s +*/ diff --git a/Leetcode/0242.Valid-Anagram/index.html b/Leetcode/0242.Valid-Anagram/index.html new file mode 100644 index 000000000..ee8b98d72 --- /dev/null +++ b/Leetcode/0242.Valid-Anagram/index.html @@ -0,0 +1,3971 @@ + + + + + + + 0242.Valid-Anagram · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                  +
                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                  + +
                                                                                                                                                                                  + +
                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                  +
                                                                                                                                                                                  + +
                                                                                                                                                                                  +
                                                                                                                                                                                  + +
                                                                                                                                                                                  + +

                                                                                                                                                                                  0242.Valid-Anagram

                                                                                                                                                                                  驗證回文串

                                                                                                                                                                                  +

                                                                                                                                                                                  題目

                                                                                                                                                                                  +

                                                                                                                                                                                  Given two strings s and t, return true if t is an anagram of s, and false otherwise.

                                                                                                                                                                                  +

                                                                                                                                                                                  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: s = "anagram", t = "nagaram" +Output: true +Example 2:

                                                                                                                                                                                  +

                                                                                                                                                                                  Input: s = "rat", t = "car" +Output: false

                                                                                                                                                                                  +

                                                                                                                                                                                  Constraints:

                                                                                                                                                                                  +

                                                                                                                                                                                  1 <= s.length, t.length <= 5 * 104 +s and t consist of lowercase English letters.

                                                                                                                                                                                  +

                                                                                                                                                                                  Follow up: What if the inputs contain Unicode characters? How would you adapt your solution to such a case?

                                                                                                                                                                                  +
                                                                                                                                                                                  +

                                                                                                                                                                                  我們使用 rune 數據類型來處理 Unicode 字元,並使用 map[rune]int 來統計這些字符的出現次數。其餘的邏輯保持不變。

                                                                                                                                                                                  +
                                                                                                                                                                                  +

                                                                                                                                                                                  題目大意

                                                                                                                                                                                  +

                                                                                                                                                                                  解題思路

                                                                                                                                                                                  +

                                                                                                                                                                                  只要先把所有字符轉換成小寫,並過濾掉空格和標點這類字符,然後對剩下的字符執行 數組雙指針技巧匯總 中提到的兩端向中心的雙指針演算法即可

                                                                                                                                                                                  +

                                                                                                                                                                                  來源

                                                                                                                                                                                  + +

                                                                                                                                                                                  解答

                                                                                                                                                                                  +

                                                                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0242.Valid-Anagram/main.go

                                                                                                                                                                                  +
                                                                                                                                                                                  package validanagram
                                                                                                                                                                                  +
                                                                                                                                                                                  +func IsAnagram(s string, t string) bool {
                                                                                                                                                                                  +    if len(s) != len(t) {
                                                                                                                                                                                  +        return false
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +
                                                                                                                                                                                  +    record := make(map[rune]int, len(s))
                                                                                                                                                                                  +
                                                                                                                                                                                  +    for _, v := range s {
                                                                                                                                                                                  +        record[v]++
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +    for _, v := range t {
                                                                                                                                                                                  +        record[v]--
                                                                                                                                                                                  +        if record[v] < 0 {
                                                                                                                                                                                  +            return false
                                                                                                                                                                                  +        }
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +    return true
                                                                                                                                                                                  +}
                                                                                                                                                                                  +
                                                                                                                                                                                  +func IsAnagram2(s string, t string) bool {
                                                                                                                                                                                  +    if len(s) != len(t) {
                                                                                                                                                                                  +        return false
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +
                                                                                                                                                                                  +    record := make(map[rune]int, len(s))
                                                                                                                                                                                  +
                                                                                                                                                                                  +    for _, v := range s {
                                                                                                                                                                                  +        record[v]++
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +    for _, v := range t {
                                                                                                                                                                                  +        record[v]--
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +
                                                                                                                                                                                  +    for _, v := range record {
                                                                                                                                                                                  +        if v != 0 {
                                                                                                                                                                                  +            return false
                                                                                                                                                                                  +        }
                                                                                                                                                                                  +    }
                                                                                                                                                                                  +    return true
                                                                                                                                                                                  +}
                                                                                                                                                                                  +
                                                                                                                                                                                  +

                                                                                                                                                                                  Benchmark

                                                                                                                                                                                  +
                                                                                                                                                                                  goos: darwin
                                                                                                                                                                                  +goarch: amd64
                                                                                                                                                                                  +pkg: LeetcodeGolang/Leetcode/0242.Valid-Anagram
                                                                                                                                                                                  +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                  +BenchmarkIsAnagram-8             6703497               276.3 ns/op             0 B/op          0 allocs/op
                                                                                                                                                                                  +BenchmarkIsAnagram2-8            3660909               318.9 ns/op            48 B/op          2 allocs/op
                                                                                                                                                                                  +PASS
                                                                                                                                                                                  +ok      LeetcodeGolang/Leetcode/0242.Valid-Anagram      4.498s
                                                                                                                                                                                  +
                                                                                                                                                                                  +
                                                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                  + +
                                                                                                                                                                                  + +
                                                                                                                                                                                  +
                                                                                                                                                                                  +
                                                                                                                                                                                  + +

                                                                                                                                                                                  results matching ""

                                                                                                                                                                                  +
                                                                                                                                                                                    + +
                                                                                                                                                                                    +
                                                                                                                                                                                    + +

                                                                                                                                                                                    No results matching ""

                                                                                                                                                                                    + +
                                                                                                                                                                                    +
                                                                                                                                                                                    +
                                                                                                                                                                                    + +
                                                                                                                                                                                    +
                                                                                                                                                                                    + +
                                                                                                                                                                                    + + + + + + + + + + +
                                                                                                                                                                                    + + +
                                                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0242.Valid-Anagram/main.go b/Leetcode/0242.Valid-Anagram/main.go new file mode 100644 index 000000000..f9afda1b0 --- /dev/null +++ b/Leetcode/0242.Valid-Anagram/main.go @@ -0,0 +1,42 @@ +package validanagram + +func IsAnagram(s string, t string) bool { + if len(s) != len(t) { + return false + } + + record := make(map[rune]int, len(s)) + + for _, v := range s { + record[v]++ + } + for _, v := range t { + record[v]-- + if record[v] < 0 { + return false + } + } + return true +} + +func IsAnagram2(s string, t string) bool { + if len(s) != len(t) { + return false + } + + record := make(map[rune]int, len(s)) + + for _, v := range s { + record[v]++ + } + for _, v := range t { + record[v]-- + } + + for _, v := range record { + if v != 0 { + return false + } + } + return true +} diff --git a/Leetcode/0242.Valid-Anagram/main_test.go b/Leetcode/0242.Valid-Anagram/main_test.go new file mode 100644 index 000000000..e552c7609 --- /dev/null +++ b/Leetcode/0242.Valid-Anagram/main_test.go @@ -0,0 +1,64 @@ +package validanagram + +import "testing" + +var tests = []struct { + s string + t string + expected bool +}{ + {"anagram", "nagaram", true}, // 是有效的字母異位詞 + {"rat", "car", false}, // 不是有效的字母異位詞 + {"listen", "silent", true}, // 是有效的字母異位詞 + {"hello", "world", false}, // 不是有效的字母異位詞 +} + +func TestIsAnagram(t *testing.T) { + + for _, test := range tests { + result := IsAnagram(test.s, test.t) + if result != test.expected { + t.Errorf("s: %s, t: %s, Expected: %v, Got: %v", test.s, test.t, test.expected, result) + } + } +} + +func TestIsAnagram2(t *testing.T) { + + for _, test := range tests { + result := IsAnagram2(test.s, test.t) + if result != test.expected { + t.Errorf("s: %s, t: %s, Expected: %v, Got: %v", test.s, test.t, test.expected, result) + } + } +} + +func BenchmarkIsAnagram(b *testing.B) { + s := "anagram" + t := "nagaram" + b.ResetTimer() + for i := 0; i < b.N; i++ { + IsAnagram(s, t) + } +} + +func BenchmarkIsAnagram2(b *testing.B) { + s := "anagram" + t := "nagaram" + b.ResetTimer() + for i := 0; i < b.N; i++ { + IsAnagram2(s, t) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0242.Valid-Anagram -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0242.Valid-Anagram +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkIsAnagram-8 6703497 276.3 ns/op 0 B/op 0 allocs/op +BenchmarkIsAnagram2-8 3660909 318.9 ns/op 48 B/op 2 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0242.Valid-Anagram 4.498s +*/ diff --git a/Leetcode/0283.Move-Zeroes/index.html b/Leetcode/0283.Move-Zeroes/index.html new file mode 100644 index 000000000..259d74038 --- /dev/null +++ b/Leetcode/0283.Move-Zeroes/index.html @@ -0,0 +1,3952 @@ + + + + + + + 0283. Move Zeroes · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                    +
                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                    + +
                                                                                                                                                                                    + +
                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                    +
                                                                                                                                                                                    + +
                                                                                                                                                                                    +
                                                                                                                                                                                    + +
                                                                                                                                                                                    + +

                                                                                                                                                                                    283. Move Zeroes

                                                                                                                                                                                    題目

                                                                                                                                                                                    +

                                                                                                                                                                                    Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements.

                                                                                                                                                                                    +

                                                                                                                                                                                    Note that you must do this in-place without making a copy of the array.

                                                                                                                                                                                    +

                                                                                                                                                                                    Example 1:

                                                                                                                                                                                    +
                                                                                                                                                                                    Input: nums = [0,1,0,3,12]
                                                                                                                                                                                    +Output: [1,3,12,0,0]
                                                                                                                                                                                    +

                                                                                                                                                                                    Example 2:

                                                                                                                                                                                    +
                                                                                                                                                                                    Input: nums = [0]
                                                                                                                                                                                    +Output: [0]
                                                                                                                                                                                    +

                                                                                                                                                                                    Constraints:

                                                                                                                                                                                    +
                                                                                                                                                                                      +
                                                                                                                                                                                    • 1 <= nums.length <= 104
                                                                                                                                                                                    • +
                                                                                                                                                                                    • -231 <= nums[i] <= 231 - 1
                                                                                                                                                                                    • +
                                                                                                                                                                                    +

                                                                                                                                                                                    Follow up: Could you minimize the total number of operations done?

                                                                                                                                                                                    +

                                                                                                                                                                                    題目大意

                                                                                                                                                                                    +

                                                                                                                                                                                    題目要求不能利用額外的輔助空間,將數字組中 0 元素都移到數字組的末尾,並與維持所有非 0 元素的相對位置。

                                                                                                                                                                                    +

                                                                                                                                                                                    解題思路

                                                                                                                                                                                    +
                                                                                                                                                                                      +
                                                                                                                                                                                    1. 非零交換數據, 左右指針都往右移
                                                                                                                                                                                    2. +
                                                                                                                                                                                    3. 零, 右指針右移
                                                                                                                                                                                    4. +
                                                                                                                                                                                    +

                                                                                                                                                                                    來源

                                                                                                                                                                                    + +

                                                                                                                                                                                    解答

                                                                                                                                                                                    +

                                                                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0283.Move-Zeroes/main.go

                                                                                                                                                                                    +
                                                                                                                                                                                    package movezeroes
                                                                                                                                                                                    +
                                                                                                                                                                                    +// 時間O(n^2)
                                                                                                                                                                                    +func MoveZeroes(nums []int) {
                                                                                                                                                                                    +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                    +        if nums[i] == 0 {
                                                                                                                                                                                    +            for j := i + 1; j < len(nums); j++ {
                                                                                                                                                                                    +                if nums[j] != 0 {
                                                                                                                                                                                    +                    nums[i], nums[j] = nums[j], nums[i]
                                                                                                                                                                                    +                    break
                                                                                                                                                                                    +                }
                                                                                                                                                                                    +            }
                                                                                                                                                                                    +        }
                                                                                                                                                                                    +    }
                                                                                                                                                                                    +}
                                                                                                                                                                                    +
                                                                                                                                                                                    +// 時間O(n), 空間O(1)
                                                                                                                                                                                    +func MoveZeroes2point(nums []int) {
                                                                                                                                                                                    +    j := 0
                                                                                                                                                                                    +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                    +        if nums[i] != 0 {
                                                                                                                                                                                    +            if i != j {
                                                                                                                                                                                    +                nums[i], nums[j] = nums[j], nums[i]
                                                                                                                                                                                    +            }
                                                                                                                                                                                    +            j++
                                                                                                                                                                                    +        }
                                                                                                                                                                                    +    }
                                                                                                                                                                                    +}
                                                                                                                                                                                    +
                                                                                                                                                                                    +

                                                                                                                                                                                    Benchmark

                                                                                                                                                                                    +
                                                                                                                                                                                    goos: darwin
                                                                                                                                                                                    +goarch: amd64
                                                                                                                                                                                    +pkg: LeetcodeGolang/Leetcode/0283.Move-Zeroes
                                                                                                                                                                                    +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
                                                                                                                                                                                    +BenchmarkMoveZeroes-4           145544966                9.164 ns/op           0 B/op          0 allocs/op
                                                                                                                                                                                    +BenchmarkMoveZeroes2point-4     183269922                6.149 ns/op           0 B/op          0 allocs/op
                                                                                                                                                                                    +PASS
                                                                                                                                                                                    +ok      LeetcodeGolang/Leetcode/0283.Move-Zeroes        3.975s
                                                                                                                                                                                    +
                                                                                                                                                                                    +
                                                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                    + +
                                                                                                                                                                                    + +
                                                                                                                                                                                    +
                                                                                                                                                                                    +
                                                                                                                                                                                    + +

                                                                                                                                                                                    results matching ""

                                                                                                                                                                                    +
                                                                                                                                                                                      + +
                                                                                                                                                                                      +
                                                                                                                                                                                      + +

                                                                                                                                                                                      No results matching ""

                                                                                                                                                                                      + +
                                                                                                                                                                                      +
                                                                                                                                                                                      +
                                                                                                                                                                                      + +
                                                                                                                                                                                      +
                                                                                                                                                                                      + +
                                                                                                                                                                                      + + + + + + +
                                                                                                                                                                                      + + +
                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0283.Move-Zeroes/main.go b/Leetcode/0283.Move-Zeroes/main.go new file mode 100644 index 000000000..2662b3e56 --- /dev/null +++ b/Leetcode/0283.Move-Zeroes/main.go @@ -0,0 +1,28 @@ +package movezeroes + +// 時間O(n^2) +func MoveZeroes(nums []int) { + for i := 0; i < len(nums); i++ { + if nums[i] == 0 { + for j := i + 1; j < len(nums); j++ { + if nums[j] != 0 { + nums[i], nums[j] = nums[j], nums[i] + break + } + } + } + } +} + +// 時間O(n), 空間O(1) +func MoveZeroes2point(nums []int) { + j := 0 + for i := 0; i < len(nums); i++ { + if nums[i] != 0 { + if i != j { + nums[i], nums[j] = nums[j], nums[i] + } + j++ + } + } +} diff --git a/Leetcode/0283.Move-Zeroes/main_test.go b/Leetcode/0283.Move-Zeroes/main_test.go new file mode 100644 index 000000000..729217555 --- /dev/null +++ b/Leetcode/0283.Move-Zeroes/main_test.go @@ -0,0 +1,64 @@ +package movezeroes + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + want []int +}{ + { + []int{0, 1, 0, 3, 12}, + []int{1, 3, 12, 0, 0}, + }, + { + []int{0}, + []int{0}, + }, +} + +func TestMoveZeroes(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if MoveZeroes(tt.arg1); !reflect.DeepEqual(tt.arg1, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } +} + +func TestMoveZeroes2point(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if MoveZeroes2point(tt.arg1); !reflect.DeepEqual(tt.arg1, tt.want) { + t.Errorf("got = %v, want = %v", tt.arg1, tt.want) + } + } +} + +func BenchmarkMoveZeroes(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MoveZeroes(tests[0].arg1) + } +} + +func BenchmarkMoveZeroes2point(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MoveZeroes2point(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0283.Move-Zeroes -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0283.Move-Zeroes +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkMoveZeroes-4 145544966 9.164 ns/op 0 B/op 0 allocs/op +BenchmarkMoveZeroes2point-4 183269922 6.149 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0283.Move-Zeroes 3.975s +*/ diff --git a/Leetcode/0300.Longest-Increasing-Subsequence/index.html b/Leetcode/0300.Longest-Increasing-Subsequence/index.html new file mode 100644 index 000000000..9b23e336a --- /dev/null +++ b/Leetcode/0300.Longest-Increasing-Subsequence/index.html @@ -0,0 +1,4030 @@ + + + + + + + 0300.Longest Increasing Subsequence · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                      +
                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                      + +
                                                                                                                                                                                      + +
                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                      +
                                                                                                                                                                                      + +
                                                                                                                                                                                      +
                                                                                                                                                                                      + +
                                                                                                                                                                                      + +

                                                                                                                                                                                      300.Longest-Increasing-Subsequence

                                                                                                                                                                                      最長遞增子序列(Longest Increasing Subsequence, LIS)

                                                                                                                                                                                      +

                                                                                                                                                                                      題目

                                                                                                                                                                                      +

                                                                                                                                                                                      Given an integer array nums, return the length of the longest strictly increasing subsequence.

                                                                                                                                                                                      +

                                                                                                                                                                                      A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the remaining elements. For example, [3,6,2,7] is a subsequence of the array [0,3,1,6,2,2,7].

                                                                                                                                                                                      +

                                                                                                                                                                                      Example 1:

                                                                                                                                                                                      +
                                                                                                                                                                                      Input: nums = [10,9,2,5,3,7,101,18]
                                                                                                                                                                                      +Output: 4
                                                                                                                                                                                      +Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
                                                                                                                                                                                      +

                                                                                                                                                                                      Example 2:

                                                                                                                                                                                      +
                                                                                                                                                                                      Input: nums = [0,1,0,3,2,3]
                                                                                                                                                                                      +Output: 4
                                                                                                                                                                                      +

                                                                                                                                                                                      Example 3:

                                                                                                                                                                                      +
                                                                                                                                                                                      Input: nums = [7,7,7,7,7,7,7]
                                                                                                                                                                                      +Output: 1
                                                                                                                                                                                      +

                                                                                                                                                                                      Constraints:

                                                                                                                                                                                      +
                                                                                                                                                                                        +
                                                                                                                                                                                      • 1 <= nums.length <= 2500
                                                                                                                                                                                      • +
                                                                                                                                                                                      • -104 <= nums[i] <= 104
                                                                                                                                                                                      • +
                                                                                                                                                                                      +

                                                                                                                                                                                      Follow up: Can you come up with an algorithm that runs in O(n log(n)) time complexity?

                                                                                                                                                                                      +

                                                                                                                                                                                      題目大意

                                                                                                                                                                                      +

                                                                                                                                                                                      給你一個整事的數組 nums, 找到其中最長遞增子序列的長度

                                                                                                                                                                                      +
                                                                                                                                                                                        +
                                                                                                                                                                                      • 子序列不一定是連續的
                                                                                                                                                                                      • +
                                                                                                                                                                                      • 子串一定是連續的
                                                                                                                                                                                      • +
                                                                                                                                                                                      +

                                                                                                                                                                                      解題思路

                                                                                                                                                                                      +

                                                                                                                                                                                      方法一: DP

                                                                                                                                                                                      +

                                                                                                                                                                                      dp[i]表示nums[i]這個數結尾的最長遞增子序列的長度 +譬如要找dp[5]的直, 也就是球nums[5]為結尾的最長遞增子序列 +只要找到結尾比nums[5]小的子序列, 然後把 nums[5]接到最後, +就可以形成新的遞增子序列, 而這個新子序列長度+1

                                                                                                                                                                                      +

                                                                                                                                                                                      方法二: DP + 二分搜尋

                                                                                                                                                                                      +

                                                                                                                                                                                      patience sorting (耐心排序) +給一組 [6, 3 ,5 ,10, 11, 2, 9, 14, 13, 7, 4, 8, 12] +只能把數字小的放在數字大的堆上, +如果當前數字太大沒有可以放置的堆, 則新建一個堆, +如果當前排有很多堆可以選擇, 則選擇最左邊的那一堆放, 因為這樣可以確保堆頂是有序的(2,4,7,8,12) +6 5 10 11 14 +3 4 9 8 13 +2 7 12

                                                                                                                                                                                      +

                                                                                                                                                                                      堆數就是最長遞增子序列的長度 +[3,5,7,8,12]

                                                                                                                                                                                      +

                                                                                                                                                                                      來源

                                                                                                                                                                                      + +

                                                                                                                                                                                      解答

                                                                                                                                                                                      +

                                                                                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0300.Longest-Increasing-Subsequence/main.go

                                                                                                                                                                                      +
                                                                                                                                                                                      package longestincreasingsubsequence
                                                                                                                                                                                      +
                                                                                                                                                                                      +import "fmt"
                                                                                                                                                                                      +
                                                                                                                                                                                      +func max(a, b int) int {
                                                                                                                                                                                      +    if a > b {
                                                                                                                                                                                      +        return a
                                                                                                                                                                                      +    }
                                                                                                                                                                                      +    return b
                                                                                                                                                                                      +}
                                                                                                                                                                                      +
                                                                                                                                                                                      +// DP 解法 O(n^2)
                                                                                                                                                                                      +func LengthOfLIS(nums []int) int {
                                                                                                                                                                                      +    dp := make([]int, len(nums))
                                                                                                                                                                                      +    for idx := 0; idx < len(dp); idx++ {
                                                                                                                                                                                      +        dp[idx] = 1
                                                                                                                                                                                      +    }
                                                                                                                                                                                      +
                                                                                                                                                                                      +    res := 0
                                                                                                                                                                                      +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                      +        for j := 0; j < i; j++ {
                                                                                                                                                                                      +            if nums[i] > nums[j] {
                                                                                                                                                                                      +                // 找到下一個數值比現在的大
                                                                                                                                                                                      +                dp[i] = max(dp[i], dp[j]+1)
                                                                                                                                                                                      +            }
                                                                                                                                                                                      +        }
                                                                                                                                                                                      +        res = max(res, dp[i])
                                                                                                                                                                                      +    }
                                                                                                                                                                                      +    // fmt.Println(dp)
                                                                                                                                                                                      +    return res
                                                                                                                                                                                      +}
                                                                                                                                                                                      +
                                                                                                                                                                                      +func LengthOfLIS2(nums []int) int {
                                                                                                                                                                                      +    dp := make([]int, len(nums)+1)
                                                                                                                                                                                      +    dp[0] = 0
                                                                                                                                                                                      +    res := 0
                                                                                                                                                                                      +
                                                                                                                                                                                      +    for i := 1; i <= len(nums);="" i++="" {="" for="" j="" :="1;" <="" i;="" j++="" if="" nums[i-1]=""> nums[j-1] {
                                                                                                                                                                                      +                // 找到前面比現在結尾還小的子序列
                                                                                                                                                                                      +                dp[i] = max(dp[i], dp[j])
                                                                                                                                                                                      +            }
                                                                                                                                                                                      +        }
                                                                                                                                                                                      +        dp[i] = dp[i] + 1
                                                                                                                                                                                      +        res = max(res, dp[i])
                                                                                                                                                                                      +    }
                                                                                                                                                                                      +    // fmt.Println(dp)
                                                                                                                                                                                      +    return res
                                                                                                                                                                                      +}
                                                                                                                                                                                      +
                                                                                                                                                                                      +// DP + 二分搜尋:patience sorting. O(nlogn)
                                                                                                                                                                                      +func LengthOfLISPatience(nums []int) int {
                                                                                                                                                                                      +    top := make([]int, len(nums))
                                                                                                                                                                                      +
                                                                                                                                                                                      +    // 牌堆數初始化為0
                                                                                                                                                                                      +    piles := 0
                                                                                                                                                                                      +
                                                                                                                                                                                      +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                      +        poker := nums[i]
                                                                                                                                                                                      +
                                                                                                                                                                                      +        // 搜尋左側邊界的二元搜尋
                                                                                                                                                                                      +        left, right := 0, piles
                                                                                                                                                                                      +        // fmt.Printf("i:%d\tL:%d\tR:%d\n", i, left, right)
                                                                                                                                                                                      +        for left < right {
                                                                                                                                                                                      +            mid := left + (right-left)/2
                                                                                                                                                                                      +            if top[mid] > poker {
                                                                                                                                                                                      +                // 現在的牌比堆小, 縮小範圍
                                                                                                                                                                                      +                right = mid
                                                                                                                                                                                      +            } else if top[mid] < poker {
                                                                                                                                                                                      +                // 現在的牌比堆大
                                                                                                                                                                                      +                left = mid + 1
                                                                                                                                                                                      +            } else {
                                                                                                                                                                                      +                right = mid
                                                                                                                                                                                      +            }
                                                                                                                                                                                      +        }
                                                                                                                                                                                      +
                                                                                                                                                                                      +        // 沒有找到堆, 建立一個新的堆
                                                                                                                                                                                      +        if left == piles {
                                                                                                                                                                                      +            piles++
                                                                                                                                                                                      +        }
                                                                                                                                                                                      +        // 再把這張牌放在堆的頂端
                                                                                                                                                                                      +        top[left] = poker
                                                                                                                                                                                      +    }
                                                                                                                                                                                      +    fmt.Println(top)
                                                                                                                                                                                      +    return piles
                                                                                                                                                                                      +}
                                                                                                                                                                                      +
                                                                                                                                                                                      +
                                                                                                                                                                                      go test -benchmem -run=none LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence -bench=.
                                                                                                                                                                                      +goos: darwin
                                                                                                                                                                                      +goarch: amd64
                                                                                                                                                                                      +pkg: LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence
                                                                                                                                                                                      +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                      +BenchmarkLengthOfLIS-8                  18300901                64.77 ns/op           64 B/op          1 allocs/op
                                                                                                                                                                                      +BenchmarkLengthOfLIS2-8                 17410562                68.98 ns/op           80 B/op          1 allocs/op
                                                                                                                                                                                      +BenchmarkLengthOfLISPatience-8          20768851                58.47 ns/op           64 B/op          1 allocs/op
                                                                                                                                                                                      +PASS
                                                                                                                                                                                      +ok      LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence      3.812s
                                                                                                                                                                                      +
                                                                                                                                                                                      +
                                                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                      + +
                                                                                                                                                                                      + +
                                                                                                                                                                                      +
                                                                                                                                                                                      +
                                                                                                                                                                                      + +

                                                                                                                                                                                      results matching ""

                                                                                                                                                                                      +
                                                                                                                                                                                        + +
                                                                                                                                                                                        +
                                                                                                                                                                                        + +

                                                                                                                                                                                        No results matching ""

                                                                                                                                                                                        + +
                                                                                                                                                                                        +
                                                                                                                                                                                        +
                                                                                                                                                                                        + +
                                                                                                                                                                                        +
                                                                                                                                                                                        + +
                                                                                                                                                                                        + + + + + + +
                                                                                                                                                                                        + + +
                                                                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0300.Longest-Increasing-Subsequence/main.go b/Leetcode/0300.Longest-Increasing-Subsequence/main.go new file mode 100644 index 000000000..97300191c --- /dev/null +++ b/Leetcode/0300.Longest-Increasing-Subsequence/main.go @@ -0,0 +1,84 @@ +package longestincreasingsubsequence + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +// DP 解法 O(n^2) +func LengthOfLIS(nums []int) int { + dp := make([]int, len(nums)) + for idx := 0; idx < len(dp); idx++ { + dp[idx] = 1 + } + + res := 0 + for i := 0; i < len(nums); i++ { + for j := 0; j < i; j++ { + if nums[i] > nums[j] { + // 找到下一個數值比現在的大 + dp[i] = max(dp[i], dp[j]+1) + } + } + res = max(res, dp[i]) + } + // fmt.Println(dp) + return res +} + +func LengthOfLIS2(nums []int) int { + dp := make([]int, len(nums)+1) + dp[0] = 0 + res := 0 + + for i := 1; i <= len(nums); i++ { + for j := 1; j < i; j++ { + if nums[i-1] > nums[j-1] { + // 找到前面比現在結尾還小的子序列 + dp[i] = max(dp[i], dp[j]) + } + } + dp[i] = dp[i] + 1 + res = max(res, dp[i]) + } + // fmt.Println(dp) + return res +} + +// DP + 二分搜尋:patience sorting. O(nlogn) +func LengthOfLISPatience(nums []int) int { + top := make([]int, len(nums)) + + // 牌堆數初始化為0 + piles := 0 + + for i := 0; i < len(nums); i++ { + poker := nums[i] + + // 搜尋左側邊界的二元搜尋 + left, right := 0, piles + // fmt.Printf("i:%d\tL:%d\tR:%d\n", i, left, right) + for left < right { + mid := left + (right-left)/2 + if top[mid] > poker { + // 現在的牌比堆小, 縮小範圍 + right = mid + } else if top[mid] < poker { + // 現在的牌比堆大 + left = mid + 1 + } else { + right = mid + } + } + + // 沒有找到堆, 建立一個新的堆 + if left == piles { + piles++ + } + // 再把這張牌放在堆的頂端 + top[left] = poker + } + return piles +} diff --git a/Leetcode/0300.Longest-Increasing-Subsequence/main_test.go b/Leetcode/0300.Longest-Increasing-Subsequence/main_test.go new file mode 100644 index 000000000..9af0c3dd9 --- /dev/null +++ b/Leetcode/0300.Longest-Increasing-Subsequence/main_test.go @@ -0,0 +1,81 @@ +package longestincreasingsubsequence + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{10, 9, 2, 5, 3, 7, 101, 18}, + 4, + }, + { + []int{0, 1, 0, 3, 2, 3}, + 4, + }, + { + []int{7, 7, 7, 7, 7, 7, 7}, + 1, + }, + { + []int{6, 3, 5, 10, 11, 2, 9, 14, 13, 7, 4, 8, 12}, + 5, + }, +} + +func TestLengthOfLIS(t *testing.T) { + for _, tt := range tests { + if got := LengthOfLIS(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestLengthOfLIS2(t *testing.T) { + for _, tt := range tests { + if got := LengthOfLIS2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestLengthOfLISPatience(t *testing.T) { + for _, tt := range tests { + if got := LengthOfLISPatience(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLengthOfLIS(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LengthOfLIS(tests[0].arg1) + } +} +func BenchmarkLengthOfLIS2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LengthOfLIS2(tests[0].arg1) + } +} +func BenchmarkLengthOfLISPatience(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LengthOfLISPatience(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkLengthOfLIS-8 18300901 64.77 ns/op 64 B/op 1 allocs/op +BenchmarkLengthOfLIS2-8 17410562 68.98 ns/op 80 B/op 1 allocs/op +BenchmarkLengthOfLISPatience-8 20768851 58.47 ns/op 64 B/op 1 allocs/op +PASS +ok LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence 3.812s +*/ diff --git a/Leetcode/0310.Minimum-Height-Trees/index.html b/Leetcode/0310.Minimum-Height-Trees/index.html new file mode 100644 index 000000000..55c412930 --- /dev/null +++ b/Leetcode/0310.Minimum-Height-Trees/index.html @@ -0,0 +1,3991 @@ + + + + + + + 0310.Minimum Height Trees · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                        +
                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                        + +
                                                                                                                                                                                        + +
                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                        +
                                                                                                                                                                                        + +
                                                                                                                                                                                        +
                                                                                                                                                                                        + +
                                                                                                                                                                                        + +

                                                                                                                                                                                        310. Minimum Height Trees

                                                                                                                                                                                        題目

                                                                                                                                                                                        +

                                                                                                                                                                                        A tree is an undirected graph in which any two vertices are connected by exactly one path. In other words, any connected graph without simple cycles is a tree.

                                                                                                                                                                                        +

                                                                                                                                                                                        Given a tree of n nodes labelled from 0 to n - 1, and an array of n - 1 edges where edges[i] = [ai, bi] indicates that there is an undirected edge between the two nodes ai and bi in the tree, you can choose any node of the tree as the root. When you select a node x as the root, the result tree has height h. Among all possible rooted trees, those with minimum height (i.e. min(h)) are called minimum height trees (MHTs).

                                                                                                                                                                                        +

                                                                                                                                                                                        Return a list of all MHTs' root labels. You can return the answer in any order.

                                                                                                                                                                                        +

                                                                                                                                                                                        The height of a rooted tree is the number of edges on the longest downward path between the root and a leaf.

                                                                                                                                                                                        +

                                                                                                                                                                                        Example 1: +

                                                                                                                                                                                        +
                                                                                                                                                                                        Input: n = 4, edges = [[1,0],[1,2],[1,3]]
                                                                                                                                                                                        +Output: [1]
                                                                                                                                                                                        +Explanation: As shown, the height of the tree is 1 when the root is the node with label 1 which is the only MHT.
                                                                                                                                                                                        +

                                                                                                                                                                                        Example 2: +

                                                                                                                                                                                        +
                                                                                                                                                                                        Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]]
                                                                                                                                                                                        +Output: [3,4]
                                                                                                                                                                                        +

                                                                                                                                                                                        Constraints:

                                                                                                                                                                                        +
                                                                                                                                                                                          +
                                                                                                                                                                                        • 1 <= n <= 2 * 104
                                                                                                                                                                                        • +
                                                                                                                                                                                        • edges.length == n - 1
                                                                                                                                                                                        • +
                                                                                                                                                                                        • 0 <= ai, bi < n
                                                                                                                                                                                        • +
                                                                                                                                                                                        • ai != bi
                                                                                                                                                                                        • +
                                                                                                                                                                                        • All the pairs (ai, bi) are distinct.
                                                                                                                                                                                        • +
                                                                                                                                                                                        • The given input is guaranteed to be a tree and there will be no repeated edges.
                                                                                                                                                                                        • +
                                                                                                                                                                                        +

                                                                                                                                                                                        題目大意

                                                                                                                                                                                        +

                                                                                                                                                                                        輸入一個n個節點的二叉樹, 計算出最小高度(root到left的最短距離)

                                                                                                                                                                                        +

                                                                                                                                                                                        解題思路

                                                                                                                                                                                        +

                                                                                                                                                                                        用BFS來解. Queue +起點就是root, 終點就是最靠近root的那個葉節點(就是兩個子節點都是null)

                                                                                                                                                                                        +

                                                                                                                                                                                        來源

                                                                                                                                                                                        + +

                                                                                                                                                                                        解答

                                                                                                                                                                                        +

                                                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0310.Minimum-Height-Trees/main.go

                                                                                                                                                                                        +
                                                                                                                                                                                        package minimumheighttrees
                                                                                                                                                                                        +
                                                                                                                                                                                        +import "fmt"
                                                                                                                                                                                        +
                                                                                                                                                                                        +func FindMinHeightTrees(n int, edges [][]int) []int {
                                                                                                                                                                                        +    if n == 1 {
                                                                                                                                                                                        +        return []int{0}
                                                                                                                                                                                        +    }
                                                                                                                                                                                        +
                                                                                                                                                                                        +    graph := make(map[int][]int)
                                                                                                                                                                                        +    degree := make(map[int]int, n) //出度: 出度是指從該節點(頂點)出發的邊的條數
                                                                                                                                                                                        +    // 建立對應關係
                                                                                                                                                                                        +    for _, v := range edges {
                                                                                                                                                                                        +        if _, ok := graph[v[0]]; ok {
                                                                                                                                                                                        +            graph[v[0]] = append(graph[v[0]], v[1])
                                                                                                                                                                                        +        } else {
                                                                                                                                                                                        +            // 沒找到
                                                                                                                                                                                        +            graph[v[0]] = []int{v[1]}
                                                                                                                                                                                        +        }
                                                                                                                                                                                        +
                                                                                                                                                                                        +        if _, ok := graph[v[1]]; ok {
                                                                                                                                                                                        +            graph[v[1]] = append(graph[v[1]], v[0])
                                                                                                                                                                                        +        } else {
                                                                                                                                                                                        +            // 沒找到
                                                                                                                                                                                        +            graph[v[1]] = []int{v[0]}
                                                                                                                                                                                        +        }
                                                                                                                                                                                        +        degree[v[0]]++
                                                                                                                                                                                        +        degree[v[1]]++
                                                                                                                                                                                        +    }
                                                                                                                                                                                        +    fmt.Printf("graph: %+v \n", graph)
                                                                                                                                                                                        +    fmt.Printf("degree: %+v \n", degree)
                                                                                                                                                                                        +
                                                                                                                                                                                        +    var queue []int
                                                                                                                                                                                        +    for key, value := range degree { //先找到出度為1的點, 加到Queue
                                                                                                                                                                                        +        if value == 1 {
                                                                                                                                                                                        +            queue = append(queue, key)
                                                                                                                                                                                        +        }
                                                                                                                                                                                        +    }
                                                                                                                                                                                        +    fmt.Printf("queue: %+v \n", queue)
                                                                                                                                                                                        +
                                                                                                                                                                                        +    leaves := []int{}
                                                                                                                                                                                        +    for len(queue) != 0 {
                                                                                                                                                                                        +        leaves = leaves[0:0]
                                                                                                                                                                                        +        size := len(queue)
                                                                                                                                                                                        +
                                                                                                                                                                                        +        for i := 0; i < size; i++ {
                                                                                                                                                                                        +            leaves = append(leaves, queue[i])
                                                                                                                                                                                        +            for _, neighbor := range graph[queue[i]] { // 將該點鄰接出度-1, 等於1時加入Queue
                                                                                                                                                                                        +                degree[neighbor]--
                                                                                                                                                                                        +                if degree[neighbor] == 1 {
                                                                                                                                                                                        +                    queue = append(queue, neighbor)
                                                                                                                                                                                        +                }
                                                                                                                                                                                        +            }
                                                                                                                                                                                        +        }
                                                                                                                                                                                        +        queue = queue[size:]
                                                                                                                                                                                        +    }
                                                                                                                                                                                        +    return leaves
                                                                                                                                                                                        +}
                                                                                                                                                                                        +
                                                                                                                                                                                        +/*
                                                                                                                                                                                        +n: 4,    edges: [][]int{{1, 0}, {1, 2}, {1, 3}},
                                                                                                                                                                                        +graph: map[0:[1] 1:[0 2 3] 2:[1] 3:[1]]
                                                                                                                                                                                        +           0 (degree: 1)
                                                                                                                                                                                        +          /
                                                                                                                                                                                        +         1 (3)
                                                                                                                                                                                        +        / \
                                                                                                                                                                                        +    2(1)   3(1)
                                                                                                                                                                                        +
                                                                                                                                                                                        +degree: map[0:1 1:3 2:1 3:1]
                                                                                                                                                                                        +queue: [2 3 0] (先degree=1)
                                                                                                                                                                                        +*/
                                                                                                                                                                                        +
                                                                                                                                                                                        +
                                                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                        + +
                                                                                                                                                                                        + +
                                                                                                                                                                                        +
                                                                                                                                                                                        +
                                                                                                                                                                                        + +

                                                                                                                                                                                        results matching ""

                                                                                                                                                                                        +
                                                                                                                                                                                          + +
                                                                                                                                                                                          +
                                                                                                                                                                                          + +

                                                                                                                                                                                          No results matching ""

                                                                                                                                                                                          + +
                                                                                                                                                                                          +
                                                                                                                                                                                          +
                                                                                                                                                                                          + +
                                                                                                                                                                                          +
                                                                                                                                                                                          + +
                                                                                                                                                                                          + + + + + + +
                                                                                                                                                                                          + + +
                                                                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0310.Minimum-Height-Trees/main.go b/Leetcode/0310.Minimum-Height-Trees/main.go new file mode 100644 index 000000000..516de5d4d --- /dev/null +++ b/Leetcode/0310.Minimum-Height-Trees/main.go @@ -0,0 +1,71 @@ +package minimumheighttrees + +import "fmt" + +func FindMinHeightTrees(n int, edges [][]int) []int { + if n == 1 { + return []int{0} + } + + graph := make(map[int][]int) + degree := make(map[int]int, n) //出度: 出度是指從該節點(頂點)出發的邊的條數 + // 建立對應關係 + for _, v := range edges { + if _, ok := graph[v[0]]; ok { + graph[v[0]] = append(graph[v[0]], v[1]) + } else { + // 沒找到 + graph[v[0]] = []int{v[1]} + } + + if _, ok := graph[v[1]]; ok { + graph[v[1]] = append(graph[v[1]], v[0]) + } else { + // 沒找到 + graph[v[1]] = []int{v[0]} + } + degree[v[0]]++ + degree[v[1]]++ + } + fmt.Printf("graph: %+v \n", graph) + fmt.Printf("degree: %+v \n", degree) + + var queue []int + for key, value := range degree { //先找到出度為1的點, 加到Queue + if value == 1 { + queue = append(queue, key) + } + } + fmt.Printf("queue: %+v \n", queue) + + leaves := []int{} + for len(queue) != 0 { + leaves = leaves[0:0] + size := len(queue) + + for i := 0; i < size; i++ { + leaves = append(leaves, queue[i]) + for _, neighbor := range graph[queue[i]] { // 將該點鄰接出度-1, 等於1時加入Queue + degree[neighbor]-- + if degree[neighbor] == 1 { + queue = append(queue, neighbor) + } + } + } + queue = queue[size:] + } + return leaves +} + +/* +n: 4, edges: [][]int{{1, 0}, {1, 2}, {1, 3}}, +graph: map[0:[1] 1:[0 2 3] 2:[1] 3:[1]] + 0 (degree: 1) + / + 1 (3) + / \ + 2(1) 3(1) + +degree: map[0:1 1:3 2:1 3:1] +queue: [2 3 0] (先degree=1) +*/ diff --git a/Leetcode/0310.Minimum-Height-Trees/main_test.go b/Leetcode/0310.Minimum-Height-Trees/main_test.go new file mode 100644 index 000000000..75b77dc45 --- /dev/null +++ b/Leetcode/0310.Minimum-Height-Trees/main_test.go @@ -0,0 +1,31 @@ +package minimumheighttrees + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + arg2 [][]int + want []int +}{ + { + 4, + [][]int{{1, 0}, {1, 2}, {1, 3}}, + []int{1}, + }, + { + 6, + [][]int{{3, 0}, {3, 1}, {3, 2}, {3, 4}, {5, 4}}, + []int{3, 4}, + }, +} + +func TestFindMinHeightTrees(t *testing.T) { + for _, tt := range tests { + if got := FindMinHeightTrees(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} diff --git a/Leetcode/0322.Coin-Change/Coin-Change.go b/Leetcode/0322.Coin-Change/Coin-Change.go new file mode 100644 index 000000000..6054522fe --- /dev/null +++ b/Leetcode/0322.Coin-Change/Coin-Change.go @@ -0,0 +1,105 @@ +package coinchange + +import ( + "math" +) + +func min(a, b int) int { + if a > b { + return b + } + return a +} + +var memo = map[int]int{} + +func dp(coins []int, n int) int { + // 查詢備忘錄 避免重複 + if _, vok := memo[n]; vok { + return memo[n] + } + + if n == 0 { + return 0 + } + + if n < 0 { + return -1 + } + + res := math.MaxInt + for _, coin := range coins { + subproblem := dp(coins, n-coin) + if subproblem == -1 { + continue + } + res = min(res, 1+subproblem) + } + if res != math.MaxInt { + memo[n] = res + } else { + memo[n] = -1 + } + return memo[n] +} + +// 備忘錄 遞迴 時間複雜O(kn). +func CoinChangeMemoryTableRecursion(coins []int, amount int) int { + memo = map[int]int{} + return dp(coins, amount) +} + +// dp array 迭代解法 +func CoinChangeDP(coins []int, amount int) int { + dp := make([]int, amount+1) + dp[0] = 0 + + // 初始化, 湊成 amount 金額的硬幣 最多就 amount 個(全都用1元), 所以 amount+1相當於正的無窮 + // dp[]的定義: 當目標金額為i時, 至少需要dp[i]枚硬幣湊出 + for i := 1; i < len(dp); i++ { + dp[i] = amount + 1 + } + + // 外層 for 循環遍歷所有狀態的所有取值 + for i := 1; i <= amount; i++ { + // 內層 for 循環遍歷求所有選擇的最小值 + for _, coin := range coins { + if i-coin < 0 { + continue + } + // 狀態轉移 + dp[i] = min(dp[i], 1+dp[i-coin]) + } + } + if dp[amount] > amount { + return -1 + } + + return dp[amount] +} + +func CoinChange(coins []int, n int) int { + var dpClosure func(n int) int + dpClosure = func(n int) int { + if n == 0 { + return 0 + } + if n < 0 { + return -1 + } + res := math.MaxInt + for _, coin := range coins { + subproblem := dpClosure(n - coin) + if subproblem == -1 { + continue + } + res = min(res, 1+subproblem) + } + if res != math.MaxInt { + return res + } else { + return -1 + } + } + return dpClosure(n) +} diff --git a/Leetcode/0322.Coin-Change/Coin-Change_test.go b/Leetcode/0322.Coin-Change/Coin-Change_test.go new file mode 100644 index 000000000..60a48336e --- /dev/null +++ b/Leetcode/0322.Coin-Change/Coin-Change_test.go @@ -0,0 +1,88 @@ +package coinchange + +import ( + "testing" +) + +var tests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{1, 2, 5}, + 11, + 3, + }, + { + []int{2}, + 3, + -1, + }, + { + []int{1}, + 0, + 0, + }, +} + +func TestCoinChange(t *testing.T) { + for _, tt := range tests { + if got := CoinChange(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestCoinChangeDP(t *testing.T) { + for _, tt := range tests { + if got := CoinChangeDP(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestCoinChangeMemoryTableRecursion(t *testing.T) { + for _, tt := range tests { + if got := CoinChangeMemoryTableRecursion(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +var arg1 = []int{1, 2, 5} +var arg2 = 11 + +func BenchmarkCoinChange(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + CoinChange(arg1, arg2) + } +} + +func BenchmarkCoinChangeDP(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + CoinChangeDP(arg1, arg2) + } +} + +func BenchmarkCoinChangeMemoryTableRecursion(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + CoinChangeMemoryTableRecursion(arg1, arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0322.Coin-Change -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0322.Coin-Change +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkCoinChange-8 323095 4531 ns/op 0 B/op 0 allocs/op +BenchmarkCoinChangeDP-8 12356360 90.89 ns/op 96 B/op 1 allocs/op +BenchmarkCoinChangeMemoryTableRecursion-8 1238718 955.2 ns/op 493 B/op 3 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0322.Coin-Change 5.708s +*/ diff --git a/Leetcode/0322.Coin-Change/index.html b/Leetcode/0322.Coin-Change/index.html new file mode 100644 index 000000000..19caa734b --- /dev/null +++ b/Leetcode/0322.Coin-Change/index.html @@ -0,0 +1,4029 @@ + + + + + + + 0322.Coin Change · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                          +
                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                          + +
                                                                                                                                                                                          + +
                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                          +
                                                                                                                                                                                          + +
                                                                                                                                                                                          +
                                                                                                                                                                                          + +
                                                                                                                                                                                          + +

                                                                                                                                                                                          322. Coin Change

                                                                                                                                                                                          題目

                                                                                                                                                                                          +

                                                                                                                                                                                          You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money.

                                                                                                                                                                                          +

                                                                                                                                                                                          Return the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1.

                                                                                                                                                                                          +

                                                                                                                                                                                          You may assume that you have an infinite number of each kind of coin.

                                                                                                                                                                                          +

                                                                                                                                                                                          Example 1:

                                                                                                                                                                                          +

                                                                                                                                                                                          Input: coins = [1,2,5], amount = 11 +Output: 3 +Explanation: 11 = 5 + 5 + 1 +Example 2:

                                                                                                                                                                                          +

                                                                                                                                                                                          Input: coins = [2], amount = 3 +Output: -1 +Example 3:

                                                                                                                                                                                          +

                                                                                                                                                                                          Input: coins = [1], amount = 0 +Output: 0

                                                                                                                                                                                          +

                                                                                                                                                                                          Constraints:

                                                                                                                                                                                          +

                                                                                                                                                                                          1 <= coins.length <= 12 +1 <= coins[i] <= 231 - 1 +0 <= amount <= 104

                                                                                                                                                                                          +

                                                                                                                                                                                          題目大意

                                                                                                                                                                                          +

                                                                                                                                                                                          給妳 k 種面值的硬幣, 面值分別為 c1,c2 ...,ck, 每種硬幣的數量無限. +再給你一個總金額. 求出最少 需要幾枚硬幣湊出這個金額, 如果不能湊出 return -1.

                                                                                                                                                                                          +

                                                                                                                                                                                          解題思路

                                                                                                                                                                                          +

                                                                                                                                                                                          dp(n) 的定義: 輸入一個目標金額n, 返回湊出目標金額n的最少硬幣數量

                                                                                                                                                                                          +

                                                                                                                                                                                          來源

                                                                                                                                                                                          + +

                                                                                                                                                                                          解答

                                                                                                                                                                                          +

                                                                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0322.Coin-Change/Coin-Change.go

                                                                                                                                                                                          +
                                                                                                                                                                                          package coinchange
                                                                                                                                                                                          +
                                                                                                                                                                                          +import (
                                                                                                                                                                                          +    "math"
                                                                                                                                                                                          +)
                                                                                                                                                                                          +
                                                                                                                                                                                          +func min(a, b int) int {
                                                                                                                                                                                          +    if a > b {
                                                                                                                                                                                          +        return b
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +    return a
                                                                                                                                                                                          +}
                                                                                                                                                                                          +
                                                                                                                                                                                          +var memo = map[int]int{}
                                                                                                                                                                                          +
                                                                                                                                                                                          +func dp(coins []int, n int) int {
                                                                                                                                                                                          +    // 查詢備忘錄 避免重複
                                                                                                                                                                                          +    if _, vok := memo[n]; vok {
                                                                                                                                                                                          +        return memo[n]
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +
                                                                                                                                                                                          +    if n == 0 {
                                                                                                                                                                                          +        return 0
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +
                                                                                                                                                                                          +    if n < 0 {
                                                                                                                                                                                          +        return -1
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +
                                                                                                                                                                                          +    res := math.MaxInt
                                                                                                                                                                                          +    for _, coin := range coins {
                                                                                                                                                                                          +        subproblem := dp(coins, n-coin)
                                                                                                                                                                                          +        if subproblem == -1 {
                                                                                                                                                                                          +            continue
                                                                                                                                                                                          +        }
                                                                                                                                                                                          +        res = min(res, 1+subproblem)
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +    if res != math.MaxInt {
                                                                                                                                                                                          +        memo[n] = res
                                                                                                                                                                                          +    } else {
                                                                                                                                                                                          +        memo[n] = -1
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +    return memo[n]
                                                                                                                                                                                          +}
                                                                                                                                                                                          +
                                                                                                                                                                                          +// 備忘錄 遞迴 時間複雜O(kn).
                                                                                                                                                                                          +func CoinChangeMemoryTableRecursion(coins []int, amount int) int {
                                                                                                                                                                                          +    return dp(coins, amount)
                                                                                                                                                                                          +}
                                                                                                                                                                                          +
                                                                                                                                                                                          +// dp array 迭代解法
                                                                                                                                                                                          +func CoinChangeDP(coins []int, amount int) int {
                                                                                                                                                                                          +    dp := make([]int, amount+1)
                                                                                                                                                                                          +    dp[0] = 0
                                                                                                                                                                                          +
                                                                                                                                                                                          +    // 初始化, 湊成 amount 金額的硬幣 最多就 amount 個(全都用1元), 所以 amount+1相當於正的無窮
                                                                                                                                                                                          +    // dp[]的定義: 當目標金額為i時, 至少需要dp[i]枚硬幣湊出
                                                                                                                                                                                          +    for i := 1; i < len(dp); i++ {
                                                                                                                                                                                          +        dp[i] = amount + 1
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +
                                                                                                                                                                                          +    // 外層 for 循環遍歷所有狀態的所有取值
                                                                                                                                                                                          +    for i := 1; i <= 0="" amount;="" i++="" {="" 內層="" for="" 循環遍歷球所有選擇的最小值="" _,="" coin="" :="range" coins="" if="" i-coin="" <="" continue="" }="" dp[i]="min(dp[i]," 1+dp[i-coin])="" dp[amount]=""> amount {
                                                                                                                                                                                          +        return -1
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +
                                                                                                                                                                                          +    return dp[amount]
                                                                                                                                                                                          +}
                                                                                                                                                                                          +
                                                                                                                                                                                          +func CoinChange(coins []int, n int) int {
                                                                                                                                                                                          +    var dpClosure func(n int) int
                                                                                                                                                                                          +    dpClosure = func(n int) int {
                                                                                                                                                                                          +        if n == 0 {
                                                                                                                                                                                          +            return 0
                                                                                                                                                                                          +        }
                                                                                                                                                                                          +        if n < 0 {
                                                                                                                                                                                          +            return -1
                                                                                                                                                                                          +        }
                                                                                                                                                                                          +        res := math.MaxInt
                                                                                                                                                                                          +        for _, coin := range coins {
                                                                                                                                                                                          +            subproblem := dpClosure(n - coin)
                                                                                                                                                                                          +            if subproblem == -1 {
                                                                                                                                                                                          +                continue
                                                                                                                                                                                          +            }
                                                                                                                                                                                          +            res = min(res, 1+subproblem)
                                                                                                                                                                                          +        }
                                                                                                                                                                                          +        if res != math.MaxInt {
                                                                                                                                                                                          +            return res
                                                                                                                                                                                          +        } else {
                                                                                                                                                                                          +            return -1
                                                                                                                                                                                          +        }
                                                                                                                                                                                          +    }
                                                                                                                                                                                          +    return dpClosure(n)
                                                                                                                                                                                          +}
                                                                                                                                                                                          +
                                                                                                                                                                                          +
                                                                                                                                                                                          go test -benchmem -run=none LeetcodeGolang/Leetcode/0322.Coin-Change -bench=.
                                                                                                                                                                                          +goos: darwin
                                                                                                                                                                                          +goarch: amd64
                                                                                                                                                                                          +pkg: LeetcodeGolang/Leetcode/0322.Coin-Change
                                                                                                                                                                                          +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
                                                                                                                                                                                          +BenchmarkCoinChange-4                             273376              4452 ns/op               0 B/op          0 allocs/op
                                                                                                                                                                                          +BenchmarkCoinChangeDP-4                         11071686               128.1 ns/op            96 B/op          1 allocs/op
                                                                                                                                                                                          +BenchmarkCoinChangeMemoryTableRecursion-4       57663068                23.69 ns/op            0 B/op          0 allocs/op
                                                                                                                                                                                          +PASS
                                                                                                                                                                                          +ok      LeetcodeGolang/Leetcode/0322.Coin-Change        4.194s
                                                                                                                                                                                          +
                                                                                                                                                                                          +
                                                                                                                                                                                          amount = 11. k=[1,2,5]
                                                                                                                                                                                          +
                                                                                                                                                                                          +amount 0 1 2 3 4 5 ... 9 10 11
                                                                                                                                                                                          +index  0 1 2 3 4 5 ... 9 10 11
                                                                                                                                                                                          +dp     0 1 1 2 2 1 ... 3  2  3
                                                                                                                                                                                          +
                                                                                                                                                                                          +
                                                                                                                                                                                          +dp[5] = 1+min(dp[5-1],dp[5-2],dp[5-5])
                                                                                                                                                                                          +dp[11] = 1+min(dp[10],dp[9],dp[6])
                                                                                                                                                                                          +
                                                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                          + +
                                                                                                                                                                                          + +
                                                                                                                                                                                          +
                                                                                                                                                                                          +
                                                                                                                                                                                          + +

                                                                                                                                                                                          results matching ""

                                                                                                                                                                                          +
                                                                                                                                                                                            + +
                                                                                                                                                                                            +
                                                                                                                                                                                            + +

                                                                                                                                                                                            No results matching ""

                                                                                                                                                                                            + +
                                                                                                                                                                                            +
                                                                                                                                                                                            +
                                                                                                                                                                                            + +
                                                                                                                                                                                            +
                                                                                                                                                                                            + +
                                                                                                                                                                                            + + + + + + +
                                                                                                                                                                                            + + +
                                                                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0344.Reverse-String/Reverse-String.go b/Leetcode/0344.Reverse-String/Reverse-String.go new file mode 100644 index 000000000..9ab8364d3 --- /dev/null +++ b/Leetcode/0344.Reverse-String/Reverse-String.go @@ -0,0 +1,7 @@ +package reversestring + +func ReverseString(s []byte) { + for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { + s[i], s[j] = s[j], s[i] + } +} diff --git a/Leetcode/0344.Reverse-String/Reverse-String_test.go b/Leetcode/0344.Reverse-String/Reverse-String_test.go new file mode 100644 index 000000000..f2ce6a7cf --- /dev/null +++ b/Leetcode/0344.Reverse-String/Reverse-String_test.go @@ -0,0 +1,29 @@ +package reversestring + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []byte + want []byte +}{ + { + []byte{'h', 'e', 'l', 'l', 'o'}, + []byte{'o', 'l', 'l', 'e', 'h'}, + }, + { + []byte{'H', 'a', 'n', 'n', 'a', 'h'}, + []byte{'h', 'a', 'n', 'n', 'a', 'H'}, + }, +} + +func TestReverseString(t *testing.T) { + for _, tt := range tests { + ReverseString(tt.arg1) + if !reflect.DeepEqual(tt.arg1, tt.want) { + t.Errorf("got = %v \n want = %v \n", tt.arg1, tt.want) + } + } +} diff --git a/Leetcode/0344.Reverse-String/index.html b/Leetcode/0344.Reverse-String/index.html new file mode 100644 index 000000000..05f4279b6 --- /dev/null +++ b/Leetcode/0344.Reverse-String/index.html @@ -0,0 +1,3915 @@ + + + + + + + 0344.Reverse String · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                            +
                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                            + +
                                                                                                                                                                                            + +
                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                            +
                                                                                                                                                                                            + +
                                                                                                                                                                                            +
                                                                                                                                                                                            + +
                                                                                                                                                                                            + +

                                                                                                                                                                                            344. Reverse String

                                                                                                                                                                                            題目

                                                                                                                                                                                            +

                                                                                                                                                                                            Write a function that reverses a string. The input string is given as an array of characters char[].

                                                                                                                                                                                            +

                                                                                                                                                                                            Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

                                                                                                                                                                                            +

                                                                                                                                                                                            You may assume all the characters consist of printable ascii characters.

                                                                                                                                                                                            +

                                                                                                                                                                                            Example 1:

                                                                                                                                                                                            +
                                                                                                                                                                                            Input: ["h","e","l","l","o"]
                                                                                                                                                                                            +Output: ["o","l","l","e","h"]
                                                                                                                                                                                            +
                                                                                                                                                                                            +

                                                                                                                                                                                            Example 2:

                                                                                                                                                                                            +
                                                                                                                                                                                            Input: ["H","a","n","n","a","h"]
                                                                                                                                                                                            +Output: ["h","a","n","n","a","H"]
                                                                                                                                                                                            +
                                                                                                                                                                                            +

                                                                                                                                                                                            題目大意

                                                                                                                                                                                            +

                                                                                                                                                                                            題目要求我們反轉一個字符串。

                                                                                                                                                                                            +

                                                                                                                                                                                            解題思路

                                                                                                                                                                                            +

                                                                                                                                                                                            這一題的解題思路是用 2 個指針,指針對撞的思路,來不斷交換首尾元素,即可。

                                                                                                                                                                                            +

                                                                                                                                                                                            來源

                                                                                                                                                                                            + +

                                                                                                                                                                                            解答

                                                                                                                                                                                            +

                                                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0344.Reverse-Stringm/Reverse-String.go

                                                                                                                                                                                            +
                                                                                                                                                                                            package reversestring
                                                                                                                                                                                            +
                                                                                                                                                                                            +func ReverseString(s []byte) {
                                                                                                                                                                                            +    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
                                                                                                                                                                                            +        s[i], s[j] = s[j], s[i]
                                                                                                                                                                                            +    }
                                                                                                                                                                                            +}
                                                                                                                                                                                            +
                                                                                                                                                                                            +
                                                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                            + +
                                                                                                                                                                                            + +
                                                                                                                                                                                            +
                                                                                                                                                                                            +
                                                                                                                                                                                            + +

                                                                                                                                                                                            results matching ""

                                                                                                                                                                                            +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +

                                                                                                                                                                                              No results matching ""

                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              + + + + + + +
                                                                                                                                                                                              + + +
                                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0347.Top-K-Frequent-Elements/index.html b/Leetcode/0347.Top-K-Frequent-Elements/index.html new file mode 100644 index 000000000..cfb7ec46c --- /dev/null +++ b/Leetcode/0347.Top-K-Frequent-Elements/index.html @@ -0,0 +1,4101 @@ + + + + + + + 347. Top K Frequent Elements · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                              +
                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                              + +
                                                                                                                                                                                              + +
                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +
                                                                                                                                                                                              + +

                                                                                                                                                                                              347. Top K Frequent Elements

                                                                                                                                                                                              題目

                                                                                                                                                                                              +

                                                                                                                                                                                              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: nums = [1,1,1,2,2,3], k = 2 +Output: [1,2] +Example 2:

                                                                                                                                                                                              +

                                                                                                                                                                                              Input: nums = [1], k = 1 +Output: [1]

                                                                                                                                                                                              +

                                                                                                                                                                                              Constraints:

                                                                                                                                                                                              +

                                                                                                                                                                                              1 <= nums.length <= 105 +-104 <= nums[i] <= 104 +k is in the range [1, the number of unique elements in the array]. +It is guaranteed that the answer is unique.

                                                                                                                                                                                              +

                                                                                                                                                                                              Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

                                                                                                                                                                                              +

                                                                                                                                                                                              Seen this question in a real interview before? 1/4

                                                                                                                                                                                              +
                                                                                                                                                                                                +
                                                                                                                                                                                              • Accepted 1.9M
                                                                                                                                                                                              • +
                                                                                                                                                                                              • Submissions 3M
                                                                                                                                                                                              • +
                                                                                                                                                                                              • Acceptance Rate 62.7%
                                                                                                                                                                                              • +
                                                                                                                                                                                              +

                                                                                                                                                                                              題目大意

                                                                                                                                                                                              +

                                                                                                                                                                                              解題思路

                                                                                                                                                                                              +

                                                                                                                                                                                              方法一:heap

                                                                                                                                                                                              +

                                                                                                                                                                                              方法一:堆 +思路與演算法

                                                                                                                                                                                              +

                                                                                                                                                                                              首先遍歷整個數組,並使用哈希表記錄每個數字出現的次數,並形成一個「出現次數數組」。 找出原數組的前 k 個高頻元素,就等於找出「出現次數數組」的前 k 大的值。

                                                                                                                                                                                              +

                                                                                                                                                                                              最簡單的做法是為「出現次數數組」排序。 但由於可能有O(N) 個不同的出現次數(其中N 為原數組長度),故總的演算法複雜度會達到O(Nlog⁡N),不符合題目的要求。

                                                                                                                                                                                              +

                                                                                                                                                                                              在這裡,我們可以利用堆的想法:建立一個小頂堆,然後遍歷「出現次數數組」:

                                                                                                                                                                                              +

                                                                                                                                                                                              如果堆的元素個數小於 k,就可以直接插入堆中。 +如果堆的元素個數等於 k,則檢查堆頂與目前出現次數的大小。 如果堆頂較大,表示至少有 k 個數字的出現次數比目前值大,故捨棄目前值;否則,就彈出堆頂,並將目前值插入堆中。 +遍歷完成後,堆中的元素就代表了「出現次數數組」中前 k 大的值。

                                                                                                                                                                                              +

                                                                                                                                                                                              複雜度分析

                                                                                                                                                                                              +

                                                                                                                                                                                              時間複雜度:O(Nlog⁡k), +其中 N 為陣列的長度。 我們先遍歷原數組,並使用雜湊表記錄出現次數,每個元素需要O(1) 的時間,共需O(N) 的時間 。 +隨後,我們遍歷「出現次數數組」,由於堆的大小至多為k,因此每次堆操作需要O(log⁡k)的時間,共需O(Nlog⁡k)的時間。 二者之和為 O(Nlog⁡k)

                                                                                                                                                                                              +

                                                                                                                                                                                              空間複雜度:O(N)。 +雜湊表的大小為O(N),而堆的大小為O(k),共為O(N)

                                                                                                                                                                                              +

                                                                                                                                                                                              方法二: Quick Sort

                                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                              NameBestAverageWorstMemoryStable
                                                                                                                                                                                              Quick sortn log(n)n log(n)n^2log(n)No
                                                                                                                                                                                              +

                                                                                                                                                                                              使用基於快速排序的方法,求出「出現次數陣列」的前 k 大的值。

                                                                                                                                                                                              +

                                                                                                                                                                                              Big O

                                                                                                                                                                                              +

                                                                                                                                                                                              方法一:heap

                                                                                                                                                                                              +

                                                                                                                                                                                              時間複雜 : O(Nlog⁡k) +空間複雜 : O(N)

                                                                                                                                                                                              +

                                                                                                                                                                                              方法二: Quick Sort

                                                                                                                                                                                              +

                                                                                                                                                                                              時間複雜 : 空間複雜 :

                                                                                                                                                                                              +

                                                                                                                                                                                              來源

                                                                                                                                                                                              + +

                                                                                                                                                                                              解答

                                                                                                                                                                                              +

                                                                                                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0347.Top-K-Frequent-Elements/main.go

                                                                                                                                                                                              +
                                                                                                                                                                                              package topkfrequentelements
                                                                                                                                                                                              +
                                                                                                                                                                                              +import (
                                                                                                                                                                                              +    "container/heap"
                                                                                                                                                                                              +    "sort"
                                                                                                                                                                                              +)
                                                                                                                                                                                              +
                                                                                                                                                                                              +// 方法一: 使用 PriorityQueue
                                                                                                                                                                                              +// 時間複雜 O(Nlog⁡k), 空間複雜 O(N)
                                                                                                                                                                                              +// 首先遍歷整個數組,並使用哈希表記錄每個數字出現的次數,並形成一個「出現次數數組」
                                                                                                                                                                                              +// 建立一個 PriortyQueue, 將「出現次數數組」丟進去
                                                                                                                                                                                              +// 在把 PriortyQueue pop的值丟到 result
                                                                                                                                                                                              +func TopKFrequent(nums []int, k int) []int {
                                                                                                                                                                                              +    m := make(map[int]int)
                                                                                                                                                                                              +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                              +        m[nums[i]]++
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +
                                                                                                                                                                                              +    q := PriorityQueue{}
                                                                                                                                                                                              +    for key, count := range m {
                                                                                                                                                                                              +        item := &Item{key: key, count: count}
                                                                                                                                                                                              +        q.PushPQ(item)
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +
                                                                                                                                                                                              +    var result []int
                                                                                                                                                                                              +    for len(result) < k {
                                                                                                                                                                                              +        item := q.PopPQ()
                                                                                                                                                                                              +        result = append(result, item.key)
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +    return result
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +// Item define
                                                                                                                                                                                              +type Item struct {
                                                                                                                                                                                              +    key   int
                                                                                                                                                                                              +    count int
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +/*
                                                                                                                                                                                              +// A PriorityQueue implements heap.Interface and holds Items.
                                                                                                                                                                                              +package heap
                                                                                                                                                                                              +
                                                                                                                                                                                              +import "sort"
                                                                                                                                                                                              +
                                                                                                                                                                                              +type Interface interface {
                                                                                                                                                                                              +    sort.Interface
                                                                                                                                                                                              +    Push(x any) // add x as element Len()
                                                                                                                                                                                              +    Pop() any   // remove and return element Len() - 1.
                                                                                                                                                                                              +}
                                                                                                                                                                                              +*/
                                                                                                                                                                                              +
                                                                                                                                                                                              +type PriorityQueue []*Item
                                                                                                                                                                                              +
                                                                                                                                                                                              +/*
                                                                                                                                                                                              +// An implementation of Interface can be sorted by the routines in this package.
                                                                                                                                                                                              +// The methods refer to elements of the underlying collection by integer index.
                                                                                                                                                                                              +
                                                                                                                                                                                              +    type Interface interface {
                                                                                                                                                                                              +        // Len is the number of elements in the collection.
                                                                                                                                                                                              +        Len() int
                                                                                                                                                                                              +        Less(i, j int) bool
                                                                                                                                                                                              +        Swap(i, j int)
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +*/
                                                                                                                                                                                              +func (pq PriorityQueue) Len() int {
                                                                                                                                                                                              +    return len(pq)
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (pq PriorityQueue) Less(i, j int) bool {
                                                                                                                                                                                              +    // 大到小排序
                                                                                                                                                                                              +    return pq[i].count > pq[j].count
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (pq PriorityQueue) Swap(i, j int) {
                                                                                                                                                                                              +    pq[i], pq[j] = pq[j], pq[i]
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (pg *PriorityQueue) Push(v interface{}) {
                                                                                                                                                                                              +    item := v.(*Item)
                                                                                                                                                                                              +    *pg = append(*pg, item)
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (pg *PriorityQueue) Pop() interface{} {
                                                                                                                                                                                              +    n := len(*pg)
                                                                                                                                                                                              +    item := (*pg)[n-1]
                                                                                                                                                                                              +    *pg = (*pg)[:n-1]
                                                                                                                                                                                              +    return item
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (pg *PriorityQueue) PushPQ(v *Item) {
                                                                                                                                                                                              +    heap.Push(pg, v)
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (pg *PriorityQueue) PopPQ() *Item {
                                                                                                                                                                                              +    return heap.Pop(pg).(*Item)
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +// 方法二: 使用 Quick Sort
                                                                                                                                                                                              +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                              +func TopKFrequentQuickSort(nums []int, k int) []int {
                                                                                                                                                                                              +    m := make(map[int]int)
                                                                                                                                                                                              +    for i := 0; i < len(nums); i++ {
                                                                                                                                                                                              +        m[nums[i]]++
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +    values := [][]int{}
                                                                                                                                                                                              +    for key, count := range m {
                                                                                                                                                                                              +        values = append(values, []int{key, count})
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +
                                                                                                                                                                                              +    result := []int{}
                                                                                                                                                                                              +    sort.Sort(sortValue(values))
                                                                                                                                                                                              +
                                                                                                                                                                                              +    for i := 0; i < k; i++ {
                                                                                                                                                                                              +        result = append(result, values[i][0])
                                                                                                                                                                                              +    }
                                                                                                                                                                                              +    return result
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +type sortValue [][]int
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (s sortValue) Len() int {
                                                                                                                                                                                              +    return len(s)
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (s sortValue) Less(i, j int) bool {
                                                                                                                                                                                              +    return s[i][1] > s[j][1]
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +func (s sortValue) Swap(i, j int) {
                                                                                                                                                                                              +    s[i], s[j] = s[j], s[i]
                                                                                                                                                                                              +}
                                                                                                                                                                                              +
                                                                                                                                                                                              +

                                                                                                                                                                                              Benchmark

                                                                                                                                                                                              +
                                                                                                                                                                                              goos: darwin
                                                                                                                                                                                              +goarch: amd64
                                                                                                                                                                                              +pkg: LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements
                                                                                                                                                                                              +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                              +BenchmarkTopKFrequent-8                  1875834               648.6 ns/op           200 B/op         11 allocs/op
                                                                                                                                                                                              +BenchmarkTopKFrequentQuickSort-8         1830498               704.2 ns/op           312 B/op         11 allocs/op
                                                                                                                                                                                              +PASS
                                                                                                                                                                                              +ok      LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements    3.831s
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                              + +
                                                                                                                                                                                              + +
                                                                                                                                                                                              +
                                                                                                                                                                                              +
                                                                                                                                                                                              + +

                                                                                                                                                                                              results matching ""

                                                                                                                                                                                              +
                                                                                                                                                                                                + +
                                                                                                                                                                                                +
                                                                                                                                                                                                + +

                                                                                                                                                                                                No results matching ""

                                                                                                                                                                                                + +
                                                                                                                                                                                                +
                                                                                                                                                                                                +
                                                                                                                                                                                                + +
                                                                                                                                                                                                +
                                                                                                                                                                                                + +
                                                                                                                                                                                                + + + + + + +
                                                                                                                                                                                                + + +
                                                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0347.Top-K-Frequent-Elements/main.go b/Leetcode/0347.Top-K-Frequent-Elements/main.go new file mode 100644 index 000000000..de58402d3 --- /dev/null +++ b/Leetcode/0347.Top-K-Frequent-Elements/main.go @@ -0,0 +1,131 @@ +package topkfrequentelements + +import ( + "container/heap" + "sort" +) + +// 方法一: 使用 PriorityQueue +// 時間複雜 O(Nlog⁡k), 空間複雜 O(N) +// 首先遍歷整個數組,並使用哈希表記錄每個數字出現的次數,並形成一個「出現次數數組」 +// 建立一個 PriortyQueue, 將「出現次數數組」丟進去 +// 在把 PriortyQueue pop的值丟到 result +func TopKFrequent(nums []int, k int) []int { + m := make(map[int]int) + for i := 0; i < len(nums); i++ { + m[nums[i]]++ + } + + q := PriorityQueue{} + for key, count := range m { + item := &Item{key: key, count: count} + q.PushPQ(item) + } + + var result []int + for len(result) < k { + item := q.PopPQ() + result = append(result, item.key) + } + return result +} + +// Item define +type Item struct { + key int + count int +} + +/* +// A PriorityQueue implements heap.Interface and holds Items. +package heap + +import "sort" + +type Interface interface { + sort.Interface + Push(x any) // add x as element Len() + Pop() any // remove and return element Len() - 1. +} +*/ + +type PriorityQueue []*Item + +/* +// An implementation of Interface can be sorted by the routines in this package. +// The methods refer to elements of the underlying collection by integer index. + + type Interface interface { + // Len is the number of elements in the collection. + Len() int + Less(i, j int) bool + Swap(i, j int) + } +*/ +func (pq PriorityQueue) Len() int { + return len(pq) +} + +func (pq PriorityQueue) Less(i, j int) bool { + // 大到小排序 + return pq[i].count > pq[j].count +} + +func (pq PriorityQueue) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] +} + +func (pg *PriorityQueue) Push(v interface{}) { + item := v.(*Item) + *pg = append(*pg, item) +} + +func (pg *PriorityQueue) Pop() interface{} { + n := len(*pg) + item := (*pg)[n-1] + *pg = (*pg)[:n-1] + return item +} + +func (pg *PriorityQueue) PushPQ(v *Item) { + heap.Push(pg, v) +} + +func (pg *PriorityQueue) PopPQ() *Item { + return heap.Pop(pg).(*Item) +} + +// 方法二: 使用 Quick Sort +// 時間複雜 O(), 空間複雜 O() +func TopKFrequentQuickSort(nums []int, k int) []int { + m := make(map[int]int) + for i := 0; i < len(nums); i++ { + m[nums[i]]++ + } + values := [][]int{} + for key, count := range m { + values = append(values, []int{key, count}) + } + + result := []int{} + sort.Sort(sortValue(values)) + + for i := 0; i < k; i++ { + result = append(result, values[i][0]) + } + return result +} + +type sortValue [][]int + +func (s sortValue) Len() int { + return len(s) +} + +func (s sortValue) Less(i, j int) bool { + return s[i][1] > s[j][1] +} + +func (s sortValue) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} diff --git a/Leetcode/0347.Top-K-Frequent-Elements/main_test.go b/Leetcode/0347.Top-K-Frequent-Elements/main_test.go new file mode 100644 index 000000000..19e0e07f7 --- /dev/null +++ b/Leetcode/0347.Top-K-Frequent-Elements/main_test.go @@ -0,0 +1,66 @@ +package topkfrequentelements + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []int + arg2 int + want []int +}{ + { + []int{1, 1, 1, 2, 2, 3}, + 2, + []int{1, 2}, + }, + { + []int{1}, + 1, + []int{1}, + }, +} + +func TestTopKFrequent(t *testing.T) { + for _, tt := range tests { + if got := TopKFrequent(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestTopKFrequentQuickSort(t *testing.T) { + for _, tt := range tests { + if got := TopKFrequentQuickSort(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkTopKFrequent(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + TopKFrequent(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkTopKFrequentQuickSort(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + TopKFrequentQuickSort(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements -bench=. +go test -benchmem -run=none LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements -bench=.    100%   14:39:46  +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkTopKFrequent-8 1875834 648.6 ns/op 200 B/op 11 allocs/op +BenchmarkTopKFrequentQuickSort-8 1830498 704.2 ns/op 312 B/op 11 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements 3.831s +*/ diff --git a/Leetcode/0354.Russian-Doll-Envelopes/index.html b/Leetcode/0354.Russian-Doll-Envelopes/index.html new file mode 100644 index 000000000..c018ededf --- /dev/null +++ b/Leetcode/0354.Russian-Doll-Envelopes/index.html @@ -0,0 +1,4033 @@ + + + + + + + 0354. Russian Doll Envelope · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                +
                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                + +
                                                                                                                                                                                                + +
                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                +
                                                                                                                                                                                                + +
                                                                                                                                                                                                +
                                                                                                                                                                                                + +
                                                                                                                                                                                                + +

                                                                                                                                                                                                354. Russian Doll Envelope

                                                                                                                                                                                                題目

                                                                                                                                                                                                +

                                                                                                                                                                                                You are given a 2D array of integers envelopes where envelopes[i] = [wi, hi] represents the width and the height of an envelope.

                                                                                                                                                                                                +

                                                                                                                                                                                                One envelope can fit into another if and only if both the width and height of one envelope are greater than the other envelope's width and height.

                                                                                                                                                                                                +

                                                                                                                                                                                                Return the maximum number of envelopes you can Russian doll (i.e., put one inside the other).

                                                                                                                                                                                                +

                                                                                                                                                                                                Note: You cannot rotate an envelope.

                                                                                                                                                                                                +

                                                                                                                                                                                                Example 1:

                                                                                                                                                                                                +
                                                                                                                                                                                                Input: envelopes = [[5,4],[6,4],[6,7],[2,3]]
                                                                                                                                                                                                +Output: 3
                                                                                                                                                                                                +Explanation: The maximum number of envelopes you can Russian doll is 3 ([2,3] => [5,4] => [6,7]).
                                                                                                                                                                                                +

                                                                                                                                                                                                Example 2:

                                                                                                                                                                                                +
                                                                                                                                                                                                Input: envelopes = [[1,1],[1,1],[1,1]]
                                                                                                                                                                                                +Output: 1
                                                                                                                                                                                                +

                                                                                                                                                                                                Constraints:

                                                                                                                                                                                                +
                                                                                                                                                                                                  +
                                                                                                                                                                                                • 1 <= envelopes.length <= 105
                                                                                                                                                                                                • +
                                                                                                                                                                                                • envelopes[i].length == 2
                                                                                                                                                                                                • +
                                                                                                                                                                                                • 1 <= wi, hi <= 105
                                                                                                                                                                                                • +
                                                                                                                                                                                                +

                                                                                                                                                                                                題目大意

                                                                                                                                                                                                +

                                                                                                                                                                                                給一些信封, 每個信封用寬度和高度的整數對形式(w,h)表示, 當一個信封A的寬度和高度都比另一個信封B大的時候, 則B就可以放進A裡. +計算出最多有多少信封能組成一組

                                                                                                                                                                                                +

                                                                                                                                                                                                解題思路

                                                                                                                                                                                                +

                                                                                                                                                                                                先對寬度w進行升序排序, 如果遇到w相同的情況, 則按照高度進行降序排序. +之後把所有的h最為一個array, 對此array做 最長遞增子序列(Longest Increasing Subsequence, LIS)的長度就是答案

                                                                                                                                                                                                +

                                                                                                                                                                                                此題是二維的LIS問題, 一維LIS參考 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0300.Longest-Increasing-Subsequence/main.go +三維 Leetcode No.1691

                                                                                                                                                                                                +

                                                                                                                                                                                                來源

                                                                                                                                                                                                + +

                                                                                                                                                                                                解答

                                                                                                                                                                                                +

                                                                                                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0354.Russian-Doll-Envelopes/main.go

                                                                                                                                                                                                +
                                                                                                                                                                                                package russiandollenvelopes
                                                                                                                                                                                                +
                                                                                                                                                                                                +import (
                                                                                                                                                                                                +    longestincreasingsubsequence "LeetcodeGolang/Leetcode/0300.Longest-Increasing-Subsequence"
                                                                                                                                                                                                +    "sort"
                                                                                                                                                                                                +)
                                                                                                                                                                                                +
                                                                                                                                                                                                +type sortEnvelopes [][]int
                                                                                                                                                                                                +
                                                                                                                                                                                                +func (s sortEnvelopes) Len() int {
                                                                                                                                                                                                +    return len(s)
                                                                                                                                                                                                +}
                                                                                                                                                                                                +
                                                                                                                                                                                                +func (s sortEnvelopes) Less(i, j int) bool {
                                                                                                                                                                                                +    if s[i][0] == s[j][0] {
                                                                                                                                                                                                +        // 遇到w相同的情況, 則按照高度進行降序排序
                                                                                                                                                                                                +        return s[i][1] > s[j][1]
                                                                                                                                                                                                +    }
                                                                                                                                                                                                +    // 對寬度w進行升序排序
                                                                                                                                                                                                +    return s[i][0] < s[j][0]
                                                                                                                                                                                                +}
                                                                                                                                                                                                +
                                                                                                                                                                                                +func (s sortEnvelopes) Swap(i, j int) {
                                                                                                                                                                                                +    s[i], s[j] = s[j], s[i]
                                                                                                                                                                                                +}
                                                                                                                                                                                                +
                                                                                                                                                                                                +func MaxEnvelopes(envelopes [][]int) int {
                                                                                                                                                                                                +    // 先對寬度w進行升序排序, 如果遇到w相同的情況, 則按照高度進行降序排序.
                                                                                                                                                                                                +    sort.Sort(sortEnvelopes(envelopes))
                                                                                                                                                                                                +    // fmt.Println(envelopes)
                                                                                                                                                                                                +
                                                                                                                                                                                                +    // 所有的h最為一個array, 對此array做 最長遞增子序列(Longest Increasing Subsequence, LIS)的長度就是答案
                                                                                                                                                                                                +    height := make([]int, len(envelopes))
                                                                                                                                                                                                +    for i := 0; i < len(envelopes); i++ {
                                                                                                                                                                                                +        height[i] = envelopes[i][1]
                                                                                                                                                                                                +    }
                                                                                                                                                                                                +
                                                                                                                                                                                                +    //  DP + 二分搜尋:patience sorting. O(nlogn)
                                                                                                                                                                                                +    return longestincreasingsubsequence.LengthOfLISPatience(height)
                                                                                                                                                                                                +}
                                                                                                                                                                                                +
                                                                                                                                                                                                +func MaxEnvelopes2(envelopes [][]int) int {
                                                                                                                                                                                                +    // 先對寬度w進行升序排序, 如果遇到w相同的情況, 則按照高度進行降序排序.
                                                                                                                                                                                                +    sort.Sort(sortEnvelopes(envelopes))
                                                                                                                                                                                                +    // fmt.Println(envelopes)
                                                                                                                                                                                                +
                                                                                                                                                                                                +    // 最長遞增子序列(Longest Increasing Subsequence, LIS)的長度就是答案
                                                                                                                                                                                                +    dp := []int{}
                                                                                                                                                                                                +    for _, e := range envelopes {
                                                                                                                                                                                                +        left, right := 0, len(dp)
                                                                                                                                                                                                +        for left < right {
                                                                                                                                                                                                +            mid := left + (right-left)/2
                                                                                                                                                                                                +            if dp[mid] > e[1] {
                                                                                                                                                                                                +                // 現在的牌比堆小, 所小範圍
                                                                                                                                                                                                +                right = mid
                                                                                                                                                                                                +            } else if dp[mid] < e[1] {
                                                                                                                                                                                                +                // 現在的牌比堆大
                                                                                                                                                                                                +                left = mid + 1
                                                                                                                                                                                                +            } else {
                                                                                                                                                                                                +                right = mid
                                                                                                                                                                                                +            }
                                                                                                                                                                                                +        }
                                                                                                                                                                                                +
                                                                                                                                                                                                +        // 沒有找到堆, 建立一個新的堆
                                                                                                                                                                                                +        if left == len(dp) {
                                                                                                                                                                                                +            dp = append(dp, e[1])
                                                                                                                                                                                                +        }
                                                                                                                                                                                                +
                                                                                                                                                                                                +        // 再把這張牌放在堆的頂端
                                                                                                                                                                                                +        dp[left] = e[1]
                                                                                                                                                                                                +    }
                                                                                                                                                                                                +
                                                                                                                                                                                                +    return len(dp)
                                                                                                                                                                                                +}
                                                                                                                                                                                                +
                                                                                                                                                                                                +/*
                                                                                                                                                                                                +func Sort(data Interface) {
                                                                                                                                                                                                +    n := data.Len()
                                                                                                                                                                                                +    quickSort(data, 0, n, maxDepth(n))
                                                                                                                                                                                                +}
                                                                                                                                                                                                +type Interface interface {
                                                                                                                                                                                                +    // Len is the number of elements in the collection.
                                                                                                                                                                                                +    Len() int
                                                                                                                                                                                                +
                                                                                                                                                                                                +    // Less reports whether the element with index i
                                                                                                                                                                                                +    // must sort before the element with index j.
                                                                                                                                                                                                +    //
                                                                                                                                                                                                +    // If both Less(i, j) and Less(j, i) are false,
                                                                                                                                                                                                +    // then the elements at index i and j are considered equal.
                                                                                                                                                                                                +    // Sort may place equal elements in any order in the final result,
                                                                                                                                                                                                +    // while Stable preserves the original input order of equal elements.
                                                                                                                                                                                                +    //
                                                                                                                                                                                                +    // Less must describe a transitive ordering:
                                                                                                                                                                                                +    //  - if both Less(i, j) and Less(j, k) are true, then Less(i, k) must be true as well.
                                                                                                                                                                                                +    //  - if both Less(i, j) and Less(j, k) are false, then Less(i, k) must be false as well.
                                                                                                                                                                                                +    //
                                                                                                                                                                                                +    // Note that floating-point comparison (the < operator on float32 or float64 values)
                                                                                                                                                                                                +    // is not a transitive ordering when not-a-number (NaN) values are involved.
                                                                                                                                                                                                +    // See Float64Slice.Less for a correct implementation for floating-point values.
                                                                                                                                                                                                +    Less(i, j int) bool
                                                                                                                                                                                                +
                                                                                                                                                                                                +    // Swap swaps the elements with indexes i and j.
                                                                                                                                                                                                +    Swap(i, j int)
                                                                                                                                                                                                +}
                                                                                                                                                                                                +*/
                                                                                                                                                                                                +
                                                                                                                                                                                                +
                                                                                                                                                                                                go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=.
                                                                                                                                                                                                +goos: darwin
                                                                                                                                                                                                +goarch: amd64
                                                                                                                                                                                                +pkg: LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes
                                                                                                                                                                                                +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                                +BenchmarkMaxEnvelopes-8          9067520               167.0 ns/op            88 B/op          3 allocs/op
                                                                                                                                                                                                +BenchmarkMaxEnvelopes2-8         6726646               214.9 ns/op            80 B/op          4 allocs/op
                                                                                                                                                                                                +PASS
                                                                                                                                                                                                +ok      LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes     6.237s
                                                                                                                                                                                                +
                                                                                                                                                                                                +
                                                                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                + +
                                                                                                                                                                                                + +
                                                                                                                                                                                                +
                                                                                                                                                                                                +
                                                                                                                                                                                                + +

                                                                                                                                                                                                results matching ""

                                                                                                                                                                                                +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +

                                                                                                                                                                                                  No results matching ""

                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  + + + + + + +
                                                                                                                                                                                                  + + +
                                                                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0354.Russian-Doll-Envelopes/main.go b/Leetcode/0354.Russian-Doll-Envelopes/main.go new file mode 100644 index 000000000..8ffb917d7 --- /dev/null +++ b/Leetcode/0354.Russian-Doll-Envelopes/main.go @@ -0,0 +1,105 @@ +package russiandollenvelopes + +import ( + longestincreasingsubsequence "LeetcodeGolang/Leetcode/0300.Longest-Increasing-Subsequence" + "sort" +) + +type sortEnvelopes [][]int + +func (s sortEnvelopes) Len() int { + return len(s) +} + +func (s sortEnvelopes) Less(i, j int) bool { + if s[i][0] == s[j][0] { + // 遇到w相同的情況, 則按照高度進行降序排序 + return s[i][1] > s[j][1] + } + // 對寬度w進行升序排序 + return s[i][0] < s[j][0] +} + +func (s sortEnvelopes) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func MaxEnvelopes(envelopes [][]int) int { + // 先對寬度w進行升序排序, 如果遇到w相同的情況, 則按照高度進行降序排序. + sort.Sort(sortEnvelopes(envelopes)) + // fmt.Println(envelopes) + + // 所有的h最為一個array, 對此array做 最長遞增子序列(Longest Increasing Subsequence, LIS)的長度就是答案 + height := make([]int, len(envelopes)) + for i := 0; i < len(envelopes); i++ { + height[i] = envelopes[i][1] + } + + // DP + 二分搜尋:patience sorting. O(nlogn) + return longestincreasingsubsequence.LengthOfLISPatience(height) +} + +func MaxEnvelopes2(envelopes [][]int) int { + // 先對寬度w進行升序排序, 如果遇到w相同的情況, 則按照高度進行降序排序. + sort.Sort(sortEnvelopes(envelopes)) + // fmt.Println(envelopes) + + // 最長遞增子序列(Longest Increasing Subsequence, LIS)的長度就是答案 + dp := []int{} + for _, e := range envelopes { + left, right := 0, len(dp) + for left < right { + mid := left + (right-left)/2 + if dp[mid] > e[1] { + // 現在的牌比堆小, 所小範圍 + right = mid + } else if dp[mid] < e[1] { + // 現在的牌比堆大 + left = mid + 1 + } else { + right = mid + } + } + + // 沒有找到堆, 建立一個新的堆 + if left == len(dp) { + dp = append(dp, e[1]) + } + + // 再把這張牌放在堆的頂端 + dp[left] = e[1] + } + + return len(dp) +} + +/* +func Sort(data Interface) { + n := data.Len() + quickSort(data, 0, n, maxDepth(n)) +} +type Interface interface { + // Len is the number of elements in the collection. + Len() int + + // Less reports whether the element with index i + // must sort before the element with index j. + // + // If both Less(i, j) and Less(j, i) are false, + // then the elements at index i and j are considered equal. + // Sort may place equal elements in any order in the final result, + // while Stable preserves the original input order of equal elements. + // + // Less must describe a transitive ordering: + // - if both Less(i, j) and Less(j, k) are true, then Less(i, k) must be true as well. + // - if both Less(i, j) and Less(j, k) are false, then Less(i, k) must be false as well. + // + // Note that floating-point comparison (the < operator on float32 or float64 values) + // is not a transitive ordering when not-a-number (NaN) values are involved. + // See Float64Slice.Less for a correct implementation for floating-point values. + Less(i, j int) bool + + // Swap swaps the elements with indexes i and j. + Swap(i, j int) +} +*/ diff --git a/Leetcode/0354.Russian-Doll-Envelopes/main_test.go b/Leetcode/0354.Russian-Doll-Envelopes/main_test.go new file mode 100644 index 000000000..fd3da39ca --- /dev/null +++ b/Leetcode/0354.Russian-Doll-Envelopes/main_test.go @@ -0,0 +1,59 @@ +package russiandollenvelopes + +import "testing" + +var tests = []struct { + arg1 [][]int + want int +}{ + { + [][]int{{5, 4}, {6, 4}, {6, 7}, {2, 3}}, + 3, + }, + { + [][]int{{1, 1}, {1, 1}, {1, 1}}, + 1, + }, +} + +func TestMaxEnvelopes(t *testing.T) { + for _, tt := range tests { + if got := MaxEnvelopes(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMaxEnvelopes2(t *testing.T) { + for _, tt := range tests { + if got := MaxEnvelopes2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkMaxEnvelopes(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxEnvelopes(tests[0].arg1) + } +} + +func BenchmarkMaxEnvelopes2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxEnvelopes2(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkMaxEnvelopes-8 9067520 167.0 ns/op 88 B/op 3 allocs/op +BenchmarkMaxEnvelopes2-8 6726646 214.9 ns/op 80 B/op 4 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes 6.237s +*/ diff --git a/Leetcode/0380.Insert-Delete-GetRandom-O1/index.html b/Leetcode/0380.Insert-Delete-GetRandom-O1/index.html new file mode 100644 index 000000000..5c3fb54d1 --- /dev/null +++ b/Leetcode/0380.Insert-Delete-GetRandom-O1/index.html @@ -0,0 +1,3989 @@ + + + + + + + 380. Insert Delete GetRandom O(1) · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  + +

                                                                                                                                                                                                  380. Insert Delete GetRandom O(1)

                                                                                                                                                                                                  題目

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Implement the RandomizedSet class:

                                                                                                                                                                                                  +

                                                                                                                                                                                                  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:

                                                                                                                                                                                                  +

                                                                                                                                                                                                  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.

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Constraints:

                                                                                                                                                                                                  +

                                                                                                                                                                                                  -231 <= val <= 231 - 1 +At most 2 * 105 calls will be made to insert, remove, and getRandom. +There will be at least one element in the data structure when getRandom is called.

                                                                                                                                                                                                  +

                                                                                                                                                                                                  題目大意

                                                                                                                                                                                                  +

                                                                                                                                                                                                  解題思路

                                                                                                                                                                                                  +

                                                                                                                                                                                                  用map紀錄每個元素的index

                                                                                                                                                                                                  +

                                                                                                                                                                                                  Big O

                                                                                                                                                                                                  +

                                                                                                                                                                                                  時間複雜 : O(1) +空間複雜 : O(n)

                                                                                                                                                                                                  +

                                                                                                                                                                                                  來源

                                                                                                                                                                                                  + +

                                                                                                                                                                                                  解答

                                                                                                                                                                                                  +

                                                                                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0380.Insert-Delete-GetRandom-O1/main.go

                                                                                                                                                                                                  +
                                                                                                                                                                                                  package insertdeletegetrandom
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +import "math/rand"
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +// 時間複雜 O(1), 空間複雜 O(n)
                                                                                                                                                                                                  +type RandomizedSet struct {
                                                                                                                                                                                                  +    arr  []int
                                                                                                                                                                                                  +    set  map[int]int
                                                                                                                                                                                                  +    size int
                                                                                                                                                                                                  +}
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +func Constructor() RandomizedSet {
                                                                                                                                                                                                  +    arr := make([]int, 0)
                                                                                                                                                                                                  +    set := make(map[int]int)
                                                                                                                                                                                                  +    size := 0
                                                                                                                                                                                                  +    return RandomizedSet{arr, set, size}
                                                                                                                                                                                                  +}
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +func (this *RandomizedSet) Insert(val int) bool {
                                                                                                                                                                                                  +    if _, ok := this.set[val]; ok {
                                                                                                                                                                                                  +        return false
                                                                                                                                                                                                  +    }
                                                                                                                                                                                                  +    this.set[val] = this.size
                                                                                                                                                                                                  +    this.size++
                                                                                                                                                                                                  +    this.arr = append(this.arr, val)
                                                                                                                                                                                                  +    return true
                                                                                                                                                                                                  +}
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +func (this *RandomizedSet) Remove(val int) bool {
                                                                                                                                                                                                  +    index, ok := this.set[val]
                                                                                                                                                                                                  +    if !ok {
                                                                                                                                                                                                  +        return false
                                                                                                                                                                                                  +    }
                                                                                                                                                                                                  +    // swapping
                                                                                                                                                                                                  +    lastValue := this.arr[this.size-1]
                                                                                                                                                                                                  +    this.arr[index] = lastValue
                                                                                                                                                                                                  +    this.set[lastValue] = index
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +    // Remove last value
                                                                                                                                                                                                  +    this.arr = this.arr[:this.size-1]
                                                                                                                                                                                                  +    delete(this.set, val)
                                                                                                                                                                                                  +    this.size--
                                                                                                                                                                                                  +    return true
                                                                                                                                                                                                  +}
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +func (this *RandomizedSet) GetRandom() int {
                                                                                                                                                                                                  +    index := rand.Intn(this.size)
                                                                                                                                                                                                  +    return this.arr[index]
                                                                                                                                                                                                  +}
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +/**
                                                                                                                                                                                                  + * Your RandomizedSet object will be instantiated and called as such:
                                                                                                                                                                                                  + * obj := Constructor();
                                                                                                                                                                                                  + * param_1 := obj.Insert(val);
                                                                                                                                                                                                  + * param_2 := obj.Remove(val);
                                                                                                                                                                                                  + * param_3 := obj.GetRandom();
                                                                                                                                                                                                  + */
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Benchmark

                                                                                                                                                                                                  +
                                                                                                                                                                                                  
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +

                                                                                                                                                                                                  Follow up

                                                                                                                                                                                                  +

                                                                                                                                                                                                  如果允許重複, 譬如多個1

                                                                                                                                                                                                  +

                                                                                                                                                                                                  0381.Insert-Delete-GetRandom-O1-Duplicates-allowed #Hard

                                                                                                                                                                                                  +
                                                                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  + +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  +
                                                                                                                                                                                                  + +

                                                                                                                                                                                                  results matching ""

                                                                                                                                                                                                  +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + +

                                                                                                                                                                                                    No results matching ""

                                                                                                                                                                                                    + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    + + + + + + +
                                                                                                                                                                                                    + + +
                                                                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0380.Insert-Delete-GetRandom-O1/main.go b/Leetcode/0380.Insert-Delete-GetRandom-O1/main.go new file mode 100644 index 000000000..4d057e76c --- /dev/null +++ b/Leetcode/0380.Insert-Delete-GetRandom-O1/main.go @@ -0,0 +1,57 @@ +package insertdeletegetrandom + +import "math/rand" + +// 時間複雜 O(1), 空間複雜 O(n) +type RandomizedSet struct { + arr []int + set map[int]int + size int +} + +func Constructor() RandomizedSet { + arr := make([]int, 0) + set := make(map[int]int) + size := 0 + return RandomizedSet{arr, set, size} +} + +func (this *RandomizedSet) Insert(val int) bool { + if _, ok := this.set[val]; ok { + return false + } + this.set[val] = this.size + this.size++ + this.arr = append(this.arr, val) + return true +} + +func (this *RandomizedSet) Remove(val int) bool { + index, ok := this.set[val] + if !ok { + return false + } + // swapping + lastValue := this.arr[this.size-1] + this.arr[index] = lastValue + this.set[lastValue] = index + + // Remove last value + this.arr = this.arr[:this.size-1] + delete(this.set, val) + this.size-- + return true +} + +func (this *RandomizedSet) GetRandom() int { + index := rand.Intn(this.size) + return this.arr[index] +} + +/** + * Your RandomizedSet object will be instantiated and called as such: + * obj := Constructor(); + * param_1 := obj.Insert(val); + * param_2 := obj.Remove(val); + * param_3 := obj.GetRandom(); + */ diff --git a/Leetcode/0380.Insert-Delete-GetRandom-O1/main_test.go b/Leetcode/0380.Insert-Delete-GetRandom-O1/main_test.go new file mode 100644 index 000000000..f653cfac8 --- /dev/null +++ b/Leetcode/0380.Insert-Delete-GetRandom-O1/main_test.go @@ -0,0 +1,47 @@ +package insertdeletegetrandom + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 []string + arg2 []int + want []interface{} +}{ + { + []string{ + "RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom", + }, + []int{ + 0, 1, 1, 2, 0, 1, 2, 0, + }, + []interface{}{ + nil, true, true, true, 2, false, false, 2, + }, + }, +} + +func TestInsertdeletegetrandom(t *testing.T) { + for _, tt := range tests { + result := []interface{}{} + var rSet RandomizedSet + for i := 0; i < len(tt.arg1); i++ { + switch tt.arg1[i] { + case "RandomizedSet": + rSet = Constructor() + result = append(result, nil) + case "insert": + result = append(result, rSet.Insert(tt.arg2[i])) + case "remove": + result = append(result, rSet.Remove(tt.arg2[i])) + case "getRandom": + result = append(result, rSet.GetRandom()) + } + } + if !reflect.DeepEqual(result, tt.want) { + t.Errorf("got = %v, want = %v", result, tt.want) + } + } +} diff --git a/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/index.html b/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/index.html new file mode 100644 index 000000000..e7153f5a4 --- /dev/null +++ b/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/index.html @@ -0,0 +1,4014 @@ + + + + + + + 381.Insert Delete GetRandom O(1) Duplicates allowed · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    + +

                                                                                                                                                                                                    381.Insert Delete GetRandom O(1) Duplicates allowed

                                                                                                                                                                                                    題目

                                                                                                                                                                                                    +

                                                                                                                                                                                                    題目大意

                                                                                                                                                                                                    +

                                                                                                                                                                                                    解題思路

                                                                                                                                                                                                    +

                                                                                                                                                                                                    RandomizedCollection is a data structure that contains a collection of numbers, possibly duplicates (i.e., a multiset). It should support inserting and removing specific elements and also reporting a random element.

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Implement the RandomizedCollection class:

                                                                                                                                                                                                    +

                                                                                                                                                                                                    RandomizedCollection() Initializes the empty RandomizedCollection object. +bool insert(int val) Inserts an item val into the multiset, even if the item is already present. Returns true if the item is not present, false otherwise. +bool remove(int val) Removes an item val from the multiset if present. Returns true if the item is present, false otherwise. Note that if val has multiple occurrences in the multiset, we only remove one of them. +int getRandom() Returns a random element from the current multiset of elements. The probability of each element being returned is linearly related to the number of the same values the multiset contains. +You must implement the functions of the class such that each function works on average O(1) time complexity.

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Note: The test cases are generated such that getRandom will only be called if there is at least one item in the RandomizedCollection.

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Example 1:

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Input +["RandomizedCollection", "insert", "insert", "insert", "getRandom", "remove", "getRandom"] +[[], [1], [1], [2], [], [1], []] +Output +[null, true, false, true, 2, true, 1]

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Explanation +RandomizedCollection randomizedCollection = new RandomizedCollection(); +randomizedCollection.insert(1); // return true since the collection does not contain 1. + // Inserts 1 into the collection. +randomizedCollection.insert(1); // return false since the collection contains 1. + // Inserts another 1 into the collection. Collection now contains [1,1]. +randomizedCollection.insert(2); // return true since the collection does not contain 2. + // Inserts 2 into the collection. Collection now contains [1,1,2]. +randomizedCollection.getRandom(); // getRandom should: + // - return 1 with probability 2/3, or + // - return 2 with probability 1/3. +randomizedCollection.remove(1); // return true since the collection contains 1. + // Removes 1 from the collection. Collection now contains [1,2]. +randomizedCollection.getRandom(); // getRandom should return 1 or 2, both equally likely.

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Constraints:

                                                                                                                                                                                                    +

                                                                                                                                                                                                    -231 <= val <= 231 - 1 +At most 2 * 105 calls in total will be made to insert, remove, and getRandom. +There will be at least one element in the data structure when getRandom is called.

                                                                                                                                                                                                    +

                                                                                                                                                                                                    Big O

                                                                                                                                                                                                    +

                                                                                                                                                                                                    時間複雜 : O(1) +空間複雜 : O(n)

                                                                                                                                                                                                    +

                                                                                                                                                                                                    來源

                                                                                                                                                                                                    + +

                                                                                                                                                                                                    解答

                                                                                                                                                                                                    +

                                                                                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main.go

                                                                                                                                                                                                    +
                                                                                                                                                                                                    package insertdeletegetrandomo1duplicatesallowed
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +import (
                                                                                                                                                                                                    +    "math/rand"
                                                                                                                                                                                                    +)
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +// 時間複雜 O(1), 空間複雜 O(n)
                                                                                                                                                                                                    +type RandomizedCollection struct {
                                                                                                                                                                                                    +    arr  []int
                                                                                                                                                                                                    +    set  map[int]map[int]struct{}
                                                                                                                                                                                                    +    size int
                                                                                                                                                                                                    +}
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +func Constructor() RandomizedCollection {
                                                                                                                                                                                                    +    arr := make([]int, 0)
                                                                                                                                                                                                    +    set := make(map[int]map[int]struct{})
                                                                                                                                                                                                    +    size := 0
                                                                                                                                                                                                    +    return RandomizedCollection{arr, set, size}
                                                                                                                                                                                                    +}
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +func (this *RandomizedCollection) Insert(val int) bool {
                                                                                                                                                                                                    +    ids, ok := this.set[val]
                                                                                                                                                                                                    +    if !ok {
                                                                                                                                                                                                    +        // 沒有此數字了, 建立一個index的map
                                                                                                                                                                                                    +        ids = map[int]struct{}{}
                                                                                                                                                                                                    +        this.set[val] = ids
                                                                                                                                                                                                    +    }
                                                                                                                                                                                                    +    // index的map, key為當前最後的index, value為空的struct{}{}
                                                                                                                                                                                                    +    ids[this.size] = struct{}{}
                                                                                                                                                                                                    +    this.arr = append(this.arr, val)
                                                                                                                                                                                                    +    this.size++
                                                                                                                                                                                                    +    return !ok
                                                                                                                                                                                                    +}
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +func (this *RandomizedCollection) Remove(val int) bool {
                                                                                                                                                                                                    +    ids, ok := this.set[val]
                                                                                                                                                                                                    +    if !ok {
                                                                                                                                                                                                    +        return false
                                                                                                                                                                                                    +    }
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +    // 找出此val的的index, 並且把最後一個index的map刪除, 並且把此index的value設為空的struct{}{}
                                                                                                                                                                                                    +    var i int
                                                                                                                                                                                                    +    for id := range ids {
                                                                                                                                                                                                    +        i = id
                                                                                                                                                                                                    +        break
                                                                                                                                                                                                    +    }
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +    // 將最後一筆移到要替換的id
                                                                                                                                                                                                    +    this.arr[i] = this.arr[this.size-1]
                                                                                                                                                                                                    +    delete(ids, i)
                                                                                                                                                                                                    +    // 因為把最後一個元素移到前面了
                                                                                                                                                                                                    +    delete(this.set[this.arr[i]], this.size-1)
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +    if i < this.size-1 {
                                                                                                                                                                                                    +        // fmt.Printf("i =%d, this.size =%d\t", i, this.size)
                                                                                                                                                                                                    +        this.set[this.arr[i]][i] = struct{}{}
                                                                                                                                                                                                    +    }
                                                                                                                                                                                                    +    if len(ids) == 0 {
                                                                                                                                                                                                    +        // 沒有此數字了
                                                                                                                                                                                                    +        delete(this.set, val)
                                                                                                                                                                                                    +    }
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +    this.arr = this.arr[:this.size-1]
                                                                                                                                                                                                    +    this.size--
                                                                                                                                                                                                    +    return true
                                                                                                                                                                                                    +}
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +func (this *RandomizedCollection) GetRandom() int {
                                                                                                                                                                                                    +    index := rand.Intn(this.size)
                                                                                                                                                                                                    +    return this.arr[index]
                                                                                                                                                                                                    +}
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +/**
                                                                                                                                                                                                    + * Your RandomizedCollection object will be instantiated and called as such:
                                                                                                                                                                                                    + * obj := Constructor();
                                                                                                                                                                                                    + * param_1 := obj.Insert(val);
                                                                                                                                                                                                    + * param_2 := obj.Remove(val);
                                                                                                                                                                                                    + * param_3 := obj.GetRandom();
                                                                                                                                                                                                    + */
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +

                                                                                                                                                                                                    Benchmark

                                                                                                                                                                                                    +
                                                                                                                                                                                                    
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    + +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    +
                                                                                                                                                                                                    + +

                                                                                                                                                                                                    results matching ""

                                                                                                                                                                                                    +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + +

                                                                                                                                                                                                      No results matching ""

                                                                                                                                                                                                      + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      + + + + + + +
                                                                                                                                                                                                      + + +
                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main.go b/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main.go new file mode 100644 index 000000000..6f76d3dee --- /dev/null +++ b/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main.go @@ -0,0 +1,79 @@ +package insertdeletegetrandomo1duplicatesallowed + +import ( + "math/rand" +) + +// 時間複雜 O(1), 空間複雜 O(n) +type RandomizedCollection struct { + arr []int + set map[int]map[int]struct{} + size int +} + +func Constructor() RandomizedCollection { + arr := make([]int, 0) + set := make(map[int]map[int]struct{}) + size := 0 + return RandomizedCollection{arr, set, size} +} + +func (this *RandomizedCollection) Insert(val int) bool { + ids, ok := this.set[val] + if !ok { + // 沒有此數字了, 建立一個index的map + ids = map[int]struct{}{} + this.set[val] = ids + } + // index的map, key為當前最後的index, value為空的struct{}{} + ids[this.size] = struct{}{} + this.arr = append(this.arr, val) + this.size++ + return !ok +} + +func (this *RandomizedCollection) Remove(val int) bool { + ids, ok := this.set[val] + if !ok { + return false + } + + // 找出此val的的index, 並且把最後一個index的map刪除, 並且把此index的value設為空的struct{}{} + var i int + for id := range ids { + i = id + break + } + + // 將最後一筆移到要替換的id + this.arr[i] = this.arr[this.size-1] + delete(ids, i) + // 因為把最後一個元素移到前面了 + delete(this.set[this.arr[i]], this.size-1) + + if i < this.size-1 { + // fmt.Printf("i =%d, this.size =%d\t", i, this.size) + this.set[this.arr[i]][i] = struct{}{} + } + if len(ids) == 0 { + // 沒有此數字了 + delete(this.set, val) + } + + this.arr = this.arr[:this.size-1] + this.size-- + return true +} + +func (this *RandomizedCollection) GetRandom() int { + index := rand.Intn(this.size) + return this.arr[index] +} + +/** + * Your RandomizedCollection object will be instantiated and called as such: + * obj := Constructor(); + * param_1 := obj.Insert(val); + * param_2 := obj.Remove(val); + * param_3 := obj.GetRandom(); + */ diff --git a/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main_test.go b/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main_test.go new file mode 100644 index 000000000..07b243d25 --- /dev/null +++ b/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main_test.go @@ -0,0 +1,60 @@ +package insertdeletegetrandomo1duplicatesallowed + +import ( + "fmt" + "reflect" + "testing" +) + +var tests = []struct { + arg1 []string + arg2 []int + want []interface{} +}{ + { + []string{ + "RandomizedCollection", "insert", "insert", "insert", "remove", "getRandom", + }, + []int{ + 0, 1, 1, 2, 2, 1, + }, + []interface{}{ + nil, true, false, true, true, 1, + }, + }, + // { + // []string{ + // "RandomizedCollection", "insert", "insert", "insert", "getRandom", "remove", "getRandom", + // }, + // []int{ + // 0, 1, 1, 2, 0, 1, 0, + // }, + // []interface{}{ + // nil, true, false, true, 2, true, false, 2, + // }, + // }, +} + +func TestInsertdeletegetrandom(t *testing.T) { + for _, tt := range tests { + result := []interface{}{} + var rSet RandomizedCollection + for i := 0; i < len(tt.arg1); i++ { + switch tt.arg1[i] { + case "RandomizedCollection": + rSet = Constructor() + result = append(result, nil) + case "insert": + result = append(result, rSet.Insert(tt.arg2[i])) + case "remove": + result = append(result, rSet.Remove(tt.arg2[i])) + case "getRandom": + result = append(result, rSet.GetRandom()) + } + fmt.Println(rSet.set) + } + if !reflect.DeepEqual(result, tt.want) { + t.Errorf("got = %v, want = %v", result, tt.want) + } + } +} diff --git a/Leetcode/0409.Longest-Palindrome/index.html b/Leetcode/0409.Longest-Palindrome/index.html new file mode 100644 index 000000000..ccbca6627 --- /dev/null +++ b/Leetcode/0409.Longest-Palindrome/index.html @@ -0,0 +1,3936 @@ + + + + + + + 0409. Longest Palindrome · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      + +

                                                                                                                                                                                                      409. Longest Palindrome

                                                                                                                                                                                                      題目

                                                                                                                                                                                                      +

                                                                                                                                                                                                      Given a string s which consists of lowercase or uppercase letters, return the length of the longest palindrome that can be built with those letters.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      Letters are case sensitive, for example, "Aa" is not considered a palindrome here.

                                                                                                                                                                                                      +

                                                                                                                                                                                                      Example 1:

                                                                                                                                                                                                      +
                                                                                                                                                                                                      Input: s = "abccccdd"
                                                                                                                                                                                                      +Output: 7
                                                                                                                                                                                                      +Explanation: One longest palindrome that can be built is "dccaccd", whose length is 7.
                                                                                                                                                                                                      +

                                                                                                                                                                                                      Example 2:

                                                                                                                                                                                                      +
                                                                                                                                                                                                      Input: s = "a"
                                                                                                                                                                                                      +Output: 1
                                                                                                                                                                                                      +Explanation: The longest palindrome that can be built is "a", whose length is 1.
                                                                                                                                                                                                      +

                                                                                                                                                                                                      Constraints:

                                                                                                                                                                                                      +
                                                                                                                                                                                                        +
                                                                                                                                                                                                      • 1 <= s.length <= 2000
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • s consists of lowercase and/or uppercase English letters only.
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      +

                                                                                                                                                                                                      題目大意

                                                                                                                                                                                                      +

                                                                                                                                                                                                      給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的回文串。 +在構造過程中,請注意區分大小寫。比如 Aa 不能當做一個回文字符串。 +注意:假設字符串的長度不會超過 1010。

                                                                                                                                                                                                      +

                                                                                                                                                                                                      解題思路

                                                                                                                                                                                                      +
                                                                                                                                                                                                        +
                                                                                                                                                                                                      • 給出一個字符串,要求用這個字符串裡面的字符組成一個回文串,問回文串最多可以組合成多長的?
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      • 這也是一道題水題,然後先統計每個字符的頻次,每個字符能取2個的取2個,不足2個的並且當前構造中的回文串是偶數的情況下(即每2個都陣容了),可以取1個。最後組合出來的就是終止回文串。
                                                                                                                                                                                                      • +
                                                                                                                                                                                                      +

                                                                                                                                                                                                      來源

                                                                                                                                                                                                      + +

                                                                                                                                                                                                      解答

                                                                                                                                                                                                      +
                                                                                                                                                                                                      package longestpalindrome
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +func LongestPalindrome(s string) int {
                                                                                                                                                                                                      +    counter := make(map[rune]int)
                                                                                                                                                                                                      +    for _, r := range s {
                                                                                                                                                                                                      +        counter[r]++
                                                                                                                                                                                                      +    }
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +    result := 0
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +    for _, v := range counter {
                                                                                                                                                                                                      +        result += v / 2 * 2
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +        // 字符出現奇數次,我們可以選擇其中一個, 放在回文串的中間,這可以貢獻一個長度
                                                                                                                                                                                                      +        if result%2 == 0 && v%2 == 1 {
                                                                                                                                                                                                      +            result++
                                                                                                                                                                                                      +        }
                                                                                                                                                                                                      +    }
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +    return result
                                                                                                                                                                                                      +}
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      + +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      +
                                                                                                                                                                                                      + +

                                                                                                                                                                                                      results matching ""

                                                                                                                                                                                                      +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + +

                                                                                                                                                                                                        No results matching ""

                                                                                                                                                                                                        + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        + + + + + + +
                                                                                                                                                                                                        + + +
                                                                                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0409.Longest-Palindrome/main.go b/Leetcode/0409.Longest-Palindrome/main.go new file mode 100644 index 000000000..ea85fca9a --- /dev/null +++ b/Leetcode/0409.Longest-Palindrome/main.go @@ -0,0 +1,21 @@ +package longestpalindrome + +func LongestPalindrome(s string) int { + counter := make(map[rune]int) + for _, r := range s { + counter[r]++ + } + + result := 0 + + for _, v := range counter { + result += v / 2 * 2 + + // 字符出現奇數次,我們可以選擇其中一個, 放在回文串的中間,這可以貢獻一個長度 + if result%2 == 0 && v%2 == 1 { + result++ + } + } + + return result +} diff --git a/Leetcode/0409.Longest-Palindrome/main_test.go b/Leetcode/0409.Longest-Palindrome/main_test.go new file mode 100644 index 000000000..80a30b19f --- /dev/null +++ b/Leetcode/0409.Longest-Palindrome/main_test.go @@ -0,0 +1,37 @@ +package longestpalindrome + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "abccccdd", + 7, + }, + { + "a", + 1, + }, +} + +func TestLongestPalindrome(t *testing.T) { + for _, tt := range tests { + if got := LongestPalindrome(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindrome(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindrome(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0412.Fizz-Buzz/index.html b/Leetcode/0412.Fizz-Buzz/index.html new file mode 100644 index 000000000..d09789945 --- /dev/null +++ b/Leetcode/0412.Fizz-Buzz/index.html @@ -0,0 +1,3933 @@ + + + + + + + 412. Fizz Buzz · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        + +

                                                                                                                                                                                                        412. Fizz Buzz

                                                                                                                                                                                                        題目

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Facebook, Microsoft, Apple +Given an integer n, return a string array answer (1-indexed) where:

                                                                                                                                                                                                        +

                                                                                                                                                                                                        answer[i] == "FizzBuzz" if i is divisible by 3 and 5. +answer[i] == "Fizz" if i is divisible by 3. +answer[i] == "Buzz" if i is divisible by 5. +answer[i] == i (as a string) if none of the above conditions are true.

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Example 1:

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Input: n = 3 +Output: ["1","2","Fizz"] +Example 2:

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Input: n = 5 +Output: ["1","2","Fizz","4","Buzz"] +Example 3:

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Input: n = 15 +Output: ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz"]

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Constraints:

                                                                                                                                                                                                        +

                                                                                                                                                                                                        1 <= n <= 104

                                                                                                                                                                                                        +

                                                                                                                                                                                                        題目大意

                                                                                                                                                                                                        +

                                                                                                                                                                                                        解題思路

                                                                                                                                                                                                        +

                                                                                                                                                                                                        Big O

                                                                                                                                                                                                        +

                                                                                                                                                                                                        時間複雜 : O(n) +空間複雜 : O(n)

                                                                                                                                                                                                        +

                                                                                                                                                                                                        來源

                                                                                                                                                                                                        + +

                                                                                                                                                                                                        解答

                                                                                                                                                                                                        +

                                                                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0412.Fizz-Buzz/main.go

                                                                                                                                                                                                        +
                                                                                                                                                                                                        package fizzbuzz
                                                                                                                                                                                                        +
                                                                                                                                                                                                        +import "strconv"
                                                                                                                                                                                                        +
                                                                                                                                                                                                        +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                                        +func fizzBuzz(n int) []string {
                                                                                                                                                                                                        +    var result []string
                                                                                                                                                                                                        +    for i := 1; i 
                                                                                                                                                                                                        +

                                                                                                                                                                                                        Benchmark

                                                                                                                                                                                                        +
                                                                                                                                                                                                        goos: darwin
                                                                                                                                                                                                        +goarch: amd64
                                                                                                                                                                                                        +pkg: LeetcodeGolang/Leetcode/0412.Fizz-Buzz
                                                                                                                                                                                                        +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
                                                                                                                                                                                                        +BenchmarkFizzBuzz-4      5918809               287.1 ns/op           112 B/op          3 allocs/op
                                                                                                                                                                                                        +BenchmarkFizzBuzz2-4     5024536               223.8 ns/op           112 B/op          3 allocs/op
                                                                                                                                                                                                        +BenchmarkFizzBuzz3-4     5406643               196.3 ns/op           112 B/op          3 allocs/op
                                                                                                                                                                                                        +PASS
                                                                                                                                                                                                        +ok      LeetcodeGolang/Leetcode/0412.Fizz-Buzz  5.507s
                                                                                                                                                                                                        +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        + +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        +
                                                                                                                                                                                                        + +

                                                                                                                                                                                                        results matching ""

                                                                                                                                                                                                        +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + +

                                                                                                                                                                                                          No results matching ""

                                                                                                                                                                                                          + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          + + + + + + +
                                                                                                                                                                                                          + + +
                                                                                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0412.Fizz-Buzz/main.go b/Leetcode/0412.Fizz-Buzz/main.go new file mode 100644 index 000000000..546e09b11 --- /dev/null +++ b/Leetcode/0412.Fizz-Buzz/main.go @@ -0,0 +1,63 @@ +package fizzbuzz + +import "strconv" + +// 時間複雜 O(), 空間複雜 O() +func fizzBuzz(n int) []string { + var result []string + for i := 1; i <= n; i++ { + if i%15 == 0 { + result = append(result, "FizzBuzz") + } else if i%3 == 0 { + result = append(result, "Fizz") + } else if i%5 == 0 { + result = append(result, "Buzz") + } else { + result = append(result, strconv.Itoa(i)) + } + } + return result +} + +func fizzBuzz2(n int) []string { + var result []string + for i := 1; i <= n; i++ { + var str string + if i%3 == 0 { + str += "Fizz" + } + if i%5 == 0 { + str += "Buzz" + } + if len(str) <= 0 { + str = strconv.Itoa(i) + } + result = append(result, str) + } + return result +} + +// 最佳 +func fizzBuzz3(n int) []string { + var result []string + fizz := 0 + buzz := 0 + for i := 1; i <= n; i++ { + fizz++ + buzz++ + if fizz == 3 && buzz == 5 { + result = append(result, "FizzBuzz") + fizz = 0 + buzz = 0 + } else if fizz == 3 { + result = append(result, "Fizz") + fizz = 0 + } else if buzz == 5 { + result = append(result, "Buzz") + buzz = 0 + } else { + result = append(result, strconv.Itoa(i)) + } + } + return result +} diff --git a/Leetcode/0412.Fizz-Buzz/main_test.go b/Leetcode/0412.Fizz-Buzz/main_test.go new file mode 100644 index 000000000..956318e6e --- /dev/null +++ b/Leetcode/0412.Fizz-Buzz/main_test.go @@ -0,0 +1,69 @@ +package fizzbuzz + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + want []string +}{ + { + 3, + []string{"1", "2", "Fizz"}, + }, +} + +func TestFizzBuzz(t *testing.T) { + for _, tt := range tests { + if got := fizzBuzz(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // if got := fizzBuzz(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkFizzBuzz(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + fizzBuzz(tests[0].arg1) + } +} + +func TestFizzBuzz2(t *testing.T) { + for _, tt := range tests { + if got := fizzBuzz2(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // if got := fizzBuzz2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkFizzBuzz2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + fizzBuzz2(tests[0].arg1) + } +} + +func TestFizzBuzz3(t *testing.T) { + for _, tt := range tests { + if got := fizzBuzz3(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // if got := fizzBuzz3(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkFizzBuzz3(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + fizzBuzz3(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0412.Fizz-Buzz -bench=. + +*/ diff --git a/Leetcode/0438.Find-All-Anagrams-in-a-String/index.html b/Leetcode/0438.Find-All-Anagrams-in-a-String/index.html new file mode 100644 index 000000000..c83c371ab --- /dev/null +++ b/Leetcode/0438.Find-All-Anagrams-in-a-String/index.html @@ -0,0 +1,3990 @@ + + + + + + + 0438.Find All Anagrams in a String · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          + +

                                                                                                                                                                                                          438. Find All Anagrams in a String

                                                                                                                                                                                                          题目

                                                                                                                                                                                                          +

                                                                                                                                                                                                          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: 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:

                                                                                                                                                                                                          +
                                                                                                                                                                                                          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".
                                                                                                                                                                                                          +

                                                                                                                                                                                                          Constraints:

                                                                                                                                                                                                          +

                                                                                                                                                                                                          1 <= s.length, p.length <= 3 * 104 +s and p consist of lowercase English letters.

                                                                                                                                                                                                          +

                                                                                                                                                                                                          題目大意

                                                                                                                                                                                                          +

                                                                                                                                                                                                          找所有字母異位詞, 就像全排列 +給定一個字符串 S 和非空的字符串 P, 找到 S 中所有是 P 得排列, 並返回他的起始 index

                                                                                                                                                                                                          +

                                                                                                                                                                                                          解題思路

                                                                                                                                                                                                          +

                                                                                                                                                                                                          0567.Permutation-in-String類似, 只是把找到的答案記錄起來

                                                                                                                                                                                                          +

                                                                                                                                                                                                          來源

                                                                                                                                                                                                          + +
                                                                                                                                                                                                          package findallanagramsinastring
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +func FindAnagrams(s string, p string) []int {
                                                                                                                                                                                                          +    need, window := make(map[rune]int), make(map[rune]int)
                                                                                                                                                                                                          +    for _, c := range p {
                                                                                                                                                                                                          +        need[c]++
                                                                                                                                                                                                          +    }
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +    left, right := 0, 0
                                                                                                                                                                                                          +    valid := 0
                                                                                                                                                                                                          +    res := []int{} //紀錄結果
                                                                                                                                                                                                          +    for right < len(s) {
                                                                                                                                                                                                          +        c := rune(s[right])
                                                                                                                                                                                                          +        right++
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +        if need[c] > 0 {
                                                                                                                                                                                                          +            window[c]++
                                                                                                                                                                                                          +            if window[c] == need[c] {
                                                                                                                                                                                                          +                valid++
                                                                                                                                                                                                          +            }
                                                                                                                                                                                                          +        }
                                                                                                                                                                                                          +        // fmt.Printf("[%d,%d) \n", left, right)
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +        // 判斷左視窗是否收縮, 看看視窗長度是否同要找的字串的長度
                                                                                                                                                                                                          +        if (right - left) >= len(p) {
                                                                                                                                                                                                          +            if valid == len(need) {
                                                                                                                                                                                                          +                // 想要的字元都找到了, 紀錄index
                                                                                                                                                                                                          +                res = append(res, left)
                                                                                                                                                                                                          +            }
                                                                                                                                                                                                          +            d := rune(s[left])
                                                                                                                                                                                                          +            left++
                                                                                                                                                                                                          +            if need[d] > 0 {
                                                                                                                                                                                                          +                if window[d] == need[d] {
                                                                                                                                                                                                          +                    valid--
                                                                                                                                                                                                          +                }
                                                                                                                                                                                                          +                window[d]--
                                                                                                                                                                                                          +            }
                                                                                                                                                                                                          +        }
                                                                                                                                                                                                          +    }
                                                                                                                                                                                                          +    return res
                                                                                                                                                                                                          +}
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +// 用 slice 取代 map 來優化
                                                                                                                                                                                                          +func FindAnagramsSlice(s string, p string) []int {
                                                                                                                                                                                                          +    need := [256]int{}
                                                                                                                                                                                                          +    for _, c := range p {
                                                                                                                                                                                                          +        need[c-'a']++
                                                                                                                                                                                                          +    }
                                                                                                                                                                                                          +    left, right := 0, 0
                                                                                                                                                                                                          +    count := len(p)
                                                                                                                                                                                                          +    res := []int{}
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +    for right < len(s) {
                                                                                                                                                                                                          +        c := s[right] - 'a'
                                                                                                                                                                                                          +        if need[c] > 0 {
                                                                                                                                                                                                          +            count--
                                                                                                                                                                                                          +        }
                                                                                                                                                                                                          +        need[c]--
                                                                                                                                                                                                          +        right++
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +        if count == 0 {
                                                                                                                                                                                                          +            res = append(res, left)
                                                                                                                                                                                                          +        }
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +        if (right - left) >= len(p) {
                                                                                                                                                                                                          +            d := s[left] - 'a'
                                                                                                                                                                                                          +            if need[d] >= 0 {
                                                                                                                                                                                                          +                count++
                                                                                                                                                                                                          +            }
                                                                                                                                                                                                          +            need[d]++
                                                                                                                                                                                                          +            left++
                                                                                                                                                                                                          +        }
                                                                                                                                                                                                          +    }
                                                                                                                                                                                                          +    return res
                                                                                                                                                                                                          +}
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          + +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          +
                                                                                                                                                                                                          + +

                                                                                                                                                                                                          results matching ""

                                                                                                                                                                                                          +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + +

                                                                                                                                                                                                            No results matching ""

                                                                                                                                                                                                            + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            + + + + + + +
                                                                                                                                                                                                            + + +
                                                                                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0438.Find-All-Anagrams-in-a-String/main.go b/Leetcode/0438.Find-All-Anagrams-in-a-String/main.go new file mode 100644 index 000000000..e61267280 --- /dev/null +++ b/Leetcode/0438.Find-All-Anagrams-in-a-String/main.go @@ -0,0 +1,75 @@ +package findallanagramsinastring + +func FindAnagrams(s string, p string) []int { + need, window := make(map[rune]int), make(map[rune]int) + for _, c := range p { + need[c]++ + } + + left, right := 0, 0 + valid := 0 + res := []int{} //紀錄結果 + for right < len(s) { + c := rune(s[right]) + right++ + + if need[c] > 0 { + window[c]++ + if window[c] == need[c] { + valid++ + } + } + // fmt.Printf("[%d,%d) \n", left, right) + + // 判斷左視窗是否收縮, 看看視窗長度是否同要找的字串的長度 + if (right - left) >= len(p) { + if valid == len(need) { + // 想要的字元都找到了, 紀錄index + res = append(res, left) + } + d := rune(s[left]) + left++ + if need[d] > 0 { + if window[d] == need[d] { + valid-- + } + window[d]-- + } + } + } + return res +} + +// 用 slice 取代 map 來優化 +func FindAnagramsSlice(s string, p string) []int { + need := [256]int{} + for _, c := range p { + need[c-'a']++ + } + left, right := 0, 0 + count := len(p) + res := []int{} + + for right < len(s) { + c := s[right] - 'a' + if need[c] > 0 { + count-- + } + need[c]-- + right++ + + if count == 0 { + res = append(res, left) + } + + if (right - left) >= len(p) { + d := s[left] - 'a' + if need[d] >= 0 { + count++ + } + need[d]++ + left++ + } + } + return res +} diff --git a/Leetcode/0438.Find-All-Anagrams-in-a-String/main_test.go b/Leetcode/0438.Find-All-Anagrams-in-a-String/main_test.go new file mode 100644 index 000000000..3c64d506a --- /dev/null +++ b/Leetcode/0438.Find-All-Anagrams-in-a-String/main_test.go @@ -0,0 +1,65 @@ +package findallanagramsinastring + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 string + arg2 string + want []int +}{ + { + "cbaebabacd", + "abc", + []int{0, 6}, + }, + { + "abab", + "ab", + []int{0, 1, 2}, + }, +} + +func TestFindAnagrams(t *testing.T) { + for _, tt := range tests { + if got := FindAnagrams(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestFindAnagramsSlice(t *testing.T) { + for _, tt := range tests { + if got := FindAnagramsSlice(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkFindAnagrams(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FindAnagrams(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkFindAnagramsSlice(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FindAnagramsSlice(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0438.Find-All-Anagrams-in-a-String -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0438.Find-All-Anagrams-in-a-String +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkFindAnagrams-8 1572444 690.4 ns/op 24 B/op 2 allocs/op +BenchmarkFindAnagramsSlice-8 11687409 136.9 ns/op 24 B/op 2 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0438.Find-All-Anagrams-in-a-String 4.329s +*/ diff --git a/Leetcode/0509.Fibonacci-Number/Fibonacci-Number.go b/Leetcode/0509.Fibonacci-Number/Fibonacci-Number.go new file mode 100644 index 000000000..fd702c247 --- /dev/null +++ b/Leetcode/0509.Fibonacci-Number/Fibonacci-Number.go @@ -0,0 +1,182 @@ +// --- Directions +// Print out the n-th entry in the fibonacci series. +// The fibonacci series is an ordering of numbers where +// each number is the sum of the preceeding two. +// For example, the sequence +// [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] +// forms the first ten entries of the fibonacci series. +// Example: +// fib(4) === 3 + +package fibonaccinumber + +import "math" + +// Fib : iterative 迴圈 O(n) . 空間複雜 O(n). 自底向上的記憶化搜索 +func FibIterative(n int) int { + var result = []int{0, 1} + + for i := 2; i <= n; i++ { + a := result[i-1] + b := result[i-2] + result = append(result, a+b) + } + return result[n] +} + +// Fibrecur : recursive 遞迴 O(2^n) . 空間複雜 O(n) +func Fibrecur(n int) int { + if n < 2 { + return n + } + + return Fibrecur(n-1) + Fibrecur(n-2) +} + +// the memo table +var memo = map[int]int{} + +// FibDP : memoization 備忘錄的遞迴 +// 比較快! +func FibDP(n int) int { + // 如果有cached 直接回傳 + if v, vok := memo[n]; vok == true { + // cached + return v + } + + if _, vok := memo[0]; vok == false { + // 沒cache + memo[0] = 0 + } + + if _, vok := memo[1]; vok == false { + // 沒cache + memo[1] = 1 + } + + for i := 2; i <= n; i++ { + if _, vok := memo[i]; vok == false { + // 沒cache + a := memo[i-1] + b := memo[i-2] + memo[i] = a + b + } + // fmt.Println(memo) + } + return memo[n] + // return FibDP(n-1) + FibDP(n-2) +} + +// 狀態壓縮 +func FibDPStateCompression(n int) int { + if n == 0 { + return 0 + } + if n == 2 || n == 1 { + return 1 + } + + prev := 1 + curr := 1 + + for i := 3; i <= n; i++ { + sum := prev + curr + prev = curr + curr = sum + } + return curr +} + +var cache = map[int]int{} + +func memoize(fn func(int) int) func(int) int { + return func(args int) int { + if _, vok := cache[args]; vok == true { + return cache[args] + } + + result := fn(args) // 跑 Fibrecur(args) + cache[args] = result + return result + } +} + +// Fibmem : memoization 拉出遞迴function +func Fibmem(n int) int { + result := memoize(Fibrecur) + return result(n) +} + +// 解法五 矩阵快速幂 时间复杂度 O(log n),空间复杂度 O(log n) +// | 1 1 | ^ n = | F(n+1) F(n) | +// | 1 0 | | F(n) F(n-1) | +func Fib5(N int) int { + if N <= 1 { + return N + } + var A = [2][2]int{ + {1, 1}, + {1, 0}, + } + A = matrixPower(A, N-1) + return A[0][0] +} + +func matrixPower(A [2][2]int, N int) [2][2]int { + if N <= 1 { + return A + } + A = matrixPower(A, N/2) + A = multiply(A, A) + + var B = [2][2]int{ + {1, 1}, + {1, 0}, + } + if N%2 != 0 { + A = multiply(A, B) + } + + return A +} + +func multiply(A [2][2]int, B [2][2]int) [2][2]int { + x := A[0][0]*B[0][0] + A[0][1]*B[1][0] + y := A[0][0]*B[0][1] + A[0][1]*B[1][1] + z := A[1][0]*B[0][0] + A[1][1]*B[1][0] + w := A[1][0]*B[0][1] + A[1][1]*B[1][1] + A[0][0] = x + A[0][1] = y + A[1][0] = z + A[1][1] = w + return A +} + +// 解法六 公式法 f(n)=(1/√5)*{[(1+√5)/2]^n -[(1-√5)/2]^n},用 时间复杂度在 O(log n) 和 O(n) 之间,空间复杂度 O(1) +// 经过实际测试,会发现 pow() 系统函数比快速幂慢,说明 pow() 比 O(log n) 慢 +// 斐波那契数列是一个自然数的数列,通项公式却是用无理数来表达的。而且当 n 趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割 0.618(或者说后一项与前一项的比值小数部分越来越逼近 0.618)。 +// 斐波那契数列用计算机计算的时候可以直接用四舍五入函数 Round 来计算。 +func Fib6(N int) int { + var goldenRatio float64 = float64((1 + math.Sqrt(5)) / 2) + return int(math.Round(math.Pow(goldenRatio, float64(N)) / math.Sqrt(5))) +} + +// 解法七 協程版,但是时间特别慢,不推荐,放在这里只是告诉大家,写 LeetCode 算法题的时候,启动 goroutine 特别慢 +func Fib7(N int) int { + return <-fibb(N) +} + +func fibb(n int) <-chan int { + result := make(chan int) + go func() { + defer close(result) + + if n <= 1 { + result <- n + return + } + result <- <-fibb(n-1) + <-fibb(n-2) + }() + return result +} diff --git a/Leetcode/0509.Fibonacci-Number/Fibonacci-Number_test.go b/Leetcode/0509.Fibonacci-Number/Fibonacci-Number_test.go new file mode 100644 index 000000000..d3e676efd --- /dev/null +++ b/Leetcode/0509.Fibonacci-Number/Fibonacci-Number_test.go @@ -0,0 +1,236 @@ +package fibonaccinumber + +import ( + "testing" +) + +func TestFib(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "FibIterative", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := FibIterative(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFibrecur(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "Fibrecur", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Fibrecur(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFibDP(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "FibDP", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := FibDP(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFibDPStateCompression(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "FibDPStateCompression", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := FibDPStateCompression(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFibmem(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "Fibmem", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Fibmem(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFib5(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "Fib5", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Fib5(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFib6(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "公式法", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Fib6(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func TestFib7(t *testing.T) { + tests := []struct { + name string + in int + want int + }{ + { + name: "協程版", + in: 39, + want: 63245986, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := Fib7(tt.in); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + }) + } +} + +func BenchmarkFib(b *testing.B) { + input := 39 + b.ResetTimer() + for i := 0; i < b.N; i++ { + FibIterative(input) + } +} + +func BenchmarkFibrecur(b *testing.B) { + input := 39 + b.ResetTimer() + for i := 0; i < b.N; i++ { + Fibrecur(input) + } +} + +func BenchmarkFibmem(b *testing.B) { + input := 39 + b.ResetTimer() + for i := 0; i < b.N; i++ { + Fibmem(input) + } +} + +func BenchmarkFibDP(b *testing.B) { + input := 39 + b.ResetTimer() + for i := 0; i < b.N; i++ { + FibDP(input) + } +} + +func BenchmarkFibDPStateCompression(b *testing.B) { + input := 39 + b.ResetTimer() + for i := 0; i < b.N; i++ { + FibDPStateCompression(input) + } +} + +// go test -benchmem -run=none MyGoNote/algorithms/Fibonacci -bench=. +/* +goos: darwin +goarch: amd64 +pkg: MyGoNote/algorithms/Fibonacci +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkFib-8 3409812 435.8 ns/op 992 B/op 5 allocs/op +BenchmarkFibrecur-8 3 391624567 ns/op 0 B/op 0 allocs/op +BenchmarkFibmem-8 106473912 11.56 ns/op 0 B/op 0 allocs/op +BenchmarkFibmem2-8 28739854 49.79 ns/op 16 B/op 1 allocs/op +BenchmarkFibmemStateCompression-8 123085564 10.72 ns/op 0 B/op 0 allocs/op +PASS +ok MyGoNote/algorithms/Fibonacci 12.090s +*/ diff --git a/Leetcode/0509.Fibonacci-Number/index.html b/Leetcode/0509.Fibonacci-Number/index.html new file mode 100644 index 000000000..1795e8844 --- /dev/null +++ b/Leetcode/0509.Fibonacci-Number/index.html @@ -0,0 +1,3947 @@ + + + + + + + 0509.Fibonacci Number · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            + +

                                                                                                                                                                                                            509. Fibonacci Number

                                                                                                                                                                                                            題目

                                                                                                                                                                                                            +

                                                                                                                                                                                                            The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,

                                                                                                                                                                                                            +
                                                                                                                                                                                                            F(0) = 0, F(1) = 1
                                                                                                                                                                                                            +F(n) = F(n - 1) + F(n - 2), for n > 1.
                                                                                                                                                                                                            +

                                                                                                                                                                                                            Given n, calculate F(n).

                                                                                                                                                                                                            +

                                                                                                                                                                                                            Example 1:

                                                                                                                                                                                                            +
                                                                                                                                                                                                            Input: n = 2
                                                                                                                                                                                                            +Output: 1
                                                                                                                                                                                                            +Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1.
                                                                                                                                                                                                            +

                                                                                                                                                                                                            Example 2:

                                                                                                                                                                                                            +
                                                                                                                                                                                                            Input: n = 3
                                                                                                                                                                                                            +Output: 2
                                                                                                                                                                                                            +Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2.
                                                                                                                                                                                                            +

                                                                                                                                                                                                            Example 3:

                                                                                                                                                                                                            +
                                                                                                                                                                                                            Input: n = 4
                                                                                                                                                                                                            +Output: 3
                                                                                                                                                                                                            +Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3.
                                                                                                                                                                                                            +

                                                                                                                                                                                                            Constraints:

                                                                                                                                                                                                            +
                                                                                                                                                                                                              +
                                                                                                                                                                                                            • 0 <= n <= 30
                                                                                                                                                                                                            • +
                                                                                                                                                                                                            +

                                                                                                                                                                                                            題目大意

                                                                                                                                                                                                            +

                                                                                                                                                                                                            斐波那契數列, 通常用 F(n) 表示

                                                                                                                                                                                                            +

                                                                                                                                                                                                            F(0) = 0, F(1) = 1 +F(N) = F(N - 1) + F(N - 2), 其中 N > 1. +給定 N,計算 F(N)。

                                                                                                                                                                                                            +

                                                                                                                                                                                                            提示:0 ≤ N ≤ 30 +0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ,610, 987……

                                                                                                                                                                                                            +

                                                                                                                                                                                                            解題思路

                                                                                                                                                                                                            +

                                                                                                                                                                                                            遇到遞迴最好畫出遞迴樹

                                                                                                                                                                                                            +
                                                                                                                                                                                                                        f(20)
                                                                                                                                                                                                            +           /     \ 
                                                                                                                                                                                                            +        f(19)   f(18)
                                                                                                                                                                                                            +       ...           ...
                                                                                                                                                                                                            +      /  \           /  \   
                                                                                                                                                                                                            +    f(1) f(2)       f(1) f(2)
                                                                                                                                                                                                            +

                                                                                                                                                                                                            這一題解法很多,大的分類是四種,遞歸,記憶化搜索(dp),矩陣快速冪,通項公式。其中記憶化搜索可以寫 3 種方法,自底向上的,自頂向下的,優化空間複雜度版的。通項公式方法實質是求 a^b 這個還可以用快速冪優化時間複雜度到 O(log n) 。

                                                                                                                                                                                                            +

                                                                                                                                                                                                            來源

                                                                                                                                                                                                            + +

                                                                                                                                                                                                            解答

                                                                                                                                                                                                            +

                                                                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0509.Fibonacci-Number/Fibonacci-Number.go

                                                                                                                                                                                                            +
                                                                                                                                                                                                            // --- Directions
                                                                                                                                                                                                            +// Print out the n-th entry in the fibonacci series.
                                                                                                                                                                                                            +// The fibonacci series is an ordering of numbers where
                                                                                                                                                                                                            +// each number is the sum of the preceeding two.
                                                                                                                                                                                                            +// For example, the sequence
                                                                                                                                                                                                            +//  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
                                                                                                                                                                                                            +// forms the first ten entries of the fibonacci series.
                                                                                                                                                                                                            +// Example:
                                                                                                                                                                                                            +//   fib(4) === 3
                                                                                                                                                                                                            +
                                                                                                                                                                                                            +package fibonaccinumber
                                                                                                                                                                                                            +
                                                                                                                                                                                                            +import "math"
                                                                                                                                                                                                            +
                                                                                                                                                                                                            +// Fib : iterative 迴圈  O(n) . 空間複雜  O(n). 自底向上的記憶化搜索
                                                                                                                                                                                                            +func FibIterative(n int) int {
                                                                                                                                                                                                            +    var result = []int{0, 1}
                                                                                                                                                                                                            +
                                                                                                                                                                                                            +    for i := 2; i 
                                                                                                                                                                                                            +
                                                                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            + +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            +
                                                                                                                                                                                                            + +

                                                                                                                                                                                                            results matching ""

                                                                                                                                                                                                            +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + +

                                                                                                                                                                                                              No results matching ""

                                                                                                                                                                                                              + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              + + + + + + +
                                                                                                                                                                                                              + + +
                                                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0516.Longest-Palindromic-Subsequence/index.html b/Leetcode/0516.Longest-Palindromic-Subsequence/index.html new file mode 100644 index 000000000..236da14f7 --- /dev/null +++ b/Leetcode/0516.Longest-Palindromic-Subsequence/index.html @@ -0,0 +1,3908 @@ + + + + + + + 516. Longest Palindromic Subsequence · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              + +

                                                                                                                                                                                                              516. Longest Palindromic Subsequence

                                                                                                                                                                                                              題目

                                                                                                                                                                                                              +

                                                                                                                                                                                                              Given a string s, find the longest palindromic subsequence's length in s.

                                                                                                                                                                                                              +

                                                                                                                                                                                                              A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements.

                                                                                                                                                                                                              +

                                                                                                                                                                                                              Example 1:

                                                                                                                                                                                                              +
                                                                                                                                                                                                              Input: s = "bbbab"
                                                                                                                                                                                                              +Output: 4
                                                                                                                                                                                                              +Explanation: One possible longest palindromic subsequence is "bbbb".
                                                                                                                                                                                                              +

                                                                                                                                                                                                              Example 2:

                                                                                                                                                                                                              +
                                                                                                                                                                                                              Input: s = "cbbd"
                                                                                                                                                                                                              +Output: 2
                                                                                                                                                                                                              +Explanation: One possible longest palindromic subsequence is "bb".
                                                                                                                                                                                                              +

                                                                                                                                                                                                              Constraints:

                                                                                                                                                                                                              +
                                                                                                                                                                                                                +
                                                                                                                                                                                                              • 1 <= s.length <= 1000
                                                                                                                                                                                                              • +
                                                                                                                                                                                                              • s consists only of lowercase English letters.
                                                                                                                                                                                                              • +
                                                                                                                                                                                                              +

                                                                                                                                                                                                              題目大意

                                                                                                                                                                                                              +

                                                                                                                                                                                                              給你一個字符串 s,找到 s 中最長的回文子串。

                                                                                                                                                                                                              +

                                                                                                                                                                                                              解題思路

                                                                                                                                                                                                              +

                                                                                                                                                                                                              來源

                                                                                                                                                                                                              + +

                                                                                                                                                                                                              解答

                                                                                                                                                                                                              +
                                                                                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              + +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              +
                                                                                                                                                                                                              + +

                                                                                                                                                                                                              results matching ""

                                                                                                                                                                                                              +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + +

                                                                                                                                                                                                                No results matching ""

                                                                                                                                                                                                                + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                + + + + + + +
                                                                                                                                                                                                                + + +
                                                                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0516.Longest-Palindromic-Subsequence/main.go b/Leetcode/0516.Longest-Palindromic-Subsequence/main.go new file mode 100644 index 000000000..4b3184036 --- /dev/null +++ b/Leetcode/0516.Longest-Palindromic-Subsequence/main.go @@ -0,0 +1,50 @@ +package longestpalindromicsubsequence + +/* +* +dp:方程表示從i到j的長度中,回文子串的長度 +Base case: +a ->dp[i][i]=1 +case 1:s[i]==s[j] + + a*****a ->dp[i][j]=dp[i+1][j-1]+2 + +case 2:s[i]!=s[j] + + ab****b dp[i][j]=dp[i+1][i] + a****ab dp[i][j]=dp[i][j-1] +*/ +func LongestPalindromeSubseq(s string) int { + n := len(s) + // 初始化 dp table : [][]int{} + dp := make([][]int, n) + for i := 0; i < n; i++ { + dp[i] = make([]int, n) + // Base case + dp[i][i] = 1 + } + + // 反向遍歷確保正確的狀態轉移 + for i := n - 2; i >= 0; i-- { + for j := i + 1; j < n; j++ { + if s[i] == s[j] { + dp[i][j] = dp[i+1][j-1] + 2 + } else { + dp[i][j] = max(dp[i+1][j], dp[i][j-1]) + } + // fmt.Printf("[%d][%d] = %d \n", i, j, dp[i][j]) + } + } + return dp[0][n-1] +} + +type numbers interface { + int | int8 | int16 | int32 | int64 | float32 | float64 +} + +func max[T numbers](a T, b T) T { + if a > b { + return a + } + return b +} diff --git a/Leetcode/0516.Longest-Palindromic-Subsequence/main_test.go b/Leetcode/0516.Longest-Palindromic-Subsequence/main_test.go new file mode 100644 index 000000000..4e3bca5fa --- /dev/null +++ b/Leetcode/0516.Longest-Palindromic-Subsequence/main_test.go @@ -0,0 +1,37 @@ +package longestpalindromicsubsequence + +import "testing" + +var tests = []struct { + arg1 string + want int +}{ + { + "bbbab", + 4, + }, + { + "cbbd", + 2, + }, +} + +func TestLongestPalindromeSubseq(t *testing.T) { + for _, tt := range tests { + if got := LongestPalindromeSubseq(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestPalindromeSubseq(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestPalindromeSubseq(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0543.Diameter-of-Binary-Tree/index.html b/Leetcode/0543.Diameter-of-Binary-Tree/index.html new file mode 100644 index 000000000..6d28a8f8e --- /dev/null +++ b/Leetcode/0543.Diameter-of-Binary-Tree/index.html @@ -0,0 +1,3961 @@ + + + + + + + 0543. Diameter of Binary Tree · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                + +

                                                                                                                                                                                                                543. Diameter of Binary Tree

                                                                                                                                                                                                                題目

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Given the root of a binary tree, return the length of the diameter of the tree.

                                                                                                                                                                                                                +

                                                                                                                                                                                                                The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.

                                                                                                                                                                                                                +

                                                                                                                                                                                                                The length of a path between two nodes is represented by the number of edges between them.

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Example 1:

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Input: root = [1,2,3,4,5] +Output: 3 +Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3]. +Example 2:

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Input: root = [1,2] +Output: 1

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Constraints:

                                                                                                                                                                                                                +

                                                                                                                                                                                                                The number of nodes in the tree is in the range [1, 104]. +-100 <= Node.val <= 100

                                                                                                                                                                                                                +

                                                                                                                                                                                                                題目大意

                                                                                                                                                                                                                +

                                                                                                                                                                                                                解題思路

                                                                                                                                                                                                                +

                                                                                                                                                                                                                左邊的最高高度與右邊的最高高度相加

                                                                                                                                                                                                                +

                                                                                                                                                                                                                Big O

                                                                                                                                                                                                                +

                                                                                                                                                                                                                時間複雜 O(n), +空間複雜: 最壞 O(n), 平衡樹 O(log(n))

                                                                                                                                                                                                                +

                                                                                                                                                                                                                來源

                                                                                                                                                                                                                + +
                                                                                                                                                                                                                package diameterofbinarytree
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +import "LeetcodeGolang/structures"
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +/**
                                                                                                                                                                                                                + * Definition for a binary tree node.
                                                                                                                                                                                                                + * type TreeNode struct {
                                                                                                                                                                                                                + *     Val int
                                                                                                                                                                                                                + *     Left *TreeNode
                                                                                                                                                                                                                + *     Right *TreeNode
                                                                                                                                                                                                                + * }
                                                                                                                                                                                                                + */
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +type TreeNode = structures.TreeNode
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +var maxDiameter int
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +// 時間複雜 O(n), 空間複雜: 最壞 O(n), 平衡樹 O(log(n))
                                                                                                                                                                                                                +func DiameterOfBinaryTree(root *TreeNode) int {
                                                                                                                                                                                                                +    if root == nil {
                                                                                                                                                                                                                +        return 0
                                                                                                                                                                                                                +    }
                                                                                                                                                                                                                +    maxDiameter = 0
                                                                                                                                                                                                                +    maxDepth(root)
                                                                                                                                                                                                                +    return maxDiameter
                                                                                                                                                                                                                +}
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +func maxDepth(node *TreeNode) int {
                                                                                                                                                                                                                +    if node == nil {
                                                                                                                                                                                                                +        return 0
                                                                                                                                                                                                                +    }
                                                                                                                                                                                                                +    left := maxDepth(node.Left)
                                                                                                                                                                                                                +    right := maxDepth(node.Right)
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +    maxDiameter = max(maxDiameter, left+right)
                                                                                                                                                                                                                +    return max(left, right) + 1
                                                                                                                                                                                                                +}
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +func max(a, b int) int {
                                                                                                                                                                                                                +    if a >= b {
                                                                                                                                                                                                                +        return a
                                                                                                                                                                                                                +    } else {
                                                                                                                                                                                                                +        return b
                                                                                                                                                                                                                +    }
                                                                                                                                                                                                                +}
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +

                                                                                                                                                                                                                Benchmark

                                                                                                                                                                                                                +
                                                                                                                                                                                                                
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                + +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                +
                                                                                                                                                                                                                + +

                                                                                                                                                                                                                results matching ""

                                                                                                                                                                                                                +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                  No results matching ""

                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  + + + + + + +
                                                                                                                                                                                                                  + + +
                                                                                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0543.Diameter-of-Binary-Tree/main.go b/Leetcode/0543.Diameter-of-Binary-Tree/main.go new file mode 100644 index 000000000..e733a119b --- /dev/null +++ b/Leetcode/0543.Diameter-of-Binary-Tree/main.go @@ -0,0 +1,45 @@ +package diameterofbinarytree + +import "LeetcodeGolang/structures" + +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ + +type TreeNode = structures.TreeNode + +var maxDiameter int + +// 時間複雜 O(n), 空間複雜: 最壞 O(n), 平衡樹 O(log(n)) +func DiameterOfBinaryTree(root *TreeNode) int { + if root == nil { + return 0 + } + maxDiameter = 0 + maxDepth(root) + return maxDiameter +} + +func maxDepth(node *TreeNode) int { + if node == nil { + return 0 + } + left := maxDepth(node.Left) + right := maxDepth(node.Right) + + maxDiameter = max(maxDiameter, left+right) + return max(left, right) + 1 +} + +func max(a, b int) int { + if a >= b { + return a + } else { + return b + } +} diff --git a/Leetcode/0543.Diameter-of-Binary-Tree/main_test.go b/Leetcode/0543.Diameter-of-Binary-Tree/main_test.go new file mode 100644 index 000000000..006d5659d --- /dev/null +++ b/Leetcode/0543.Diameter-of-Binary-Tree/main_test.go @@ -0,0 +1,43 @@ +package diameterofbinarytree + +import ( + "LeetcodeGolang/structures" + "testing" +) + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{1, 2, 3, 4, 5}, + 3, + }, + { + []int{1, 2}, + 1, + }, +} + +func TestDiameterOfBinaryTree(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + root := structures.Ints2TreeNode(tt.arg1) + if got := DiameterOfBinaryTree(root); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkDiameterOfBinaryTree(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + root := structures.Ints2TreeNode(tests[0].arg1) + DiameterOfBinaryTree(root) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0567.Permutation-in-String/index.html b/Leetcode/0567.Permutation-in-String/index.html new file mode 100644 index 000000000..859184214 --- /dev/null +++ b/Leetcode/0567.Permutation-in-String/index.html @@ -0,0 +1,3995 @@ + + + + + + + 0567.Permutation in String · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                  567. Permutation in String

                                                                                                                                                                                                                  題目

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  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: s1 = "ab", s2 = "eidbaooo"
                                                                                                                                                                                                                  +Output: true
                                                                                                                                                                                                                  +Explanation: s2 contains one permutation of s1 ("ba").
                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  Example 2:

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  Input: s1 = "ab", s2 = "eidboaoo" +Output: false

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  Constraints:

                                                                                                                                                                                                                  +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                  • 1 <= s1.length, s2.length <= 104
                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                  • s1 and s2 consist of lowercase English letters.
                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  題目大意

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  輸入兩個String S1 和 S2 , 判斷 S2 是否包含S1的排列, 也就是要判斷 S2 中是否存在一個子字串是S1的一種全排列

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  解題思路

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  Sliding Window +可以用 slice 取代 map 來優化

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  來源

                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                  解答

                                                                                                                                                                                                                  +

                                                                                                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0567.Permutation-in-String/main.go

                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  package permutationinstring
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +func CheckInclusion(s1 string, s2 string) bool {
                                                                                                                                                                                                                  +    need, window := make(map[rune]int), make(map[rune]int)
                                                                                                                                                                                                                  +    for _, c := range s1 {
                                                                                                                                                                                                                  +        need[c]++
                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +    left, right := 0, 0
                                                                                                                                                                                                                  +    valid := 0
                                                                                                                                                                                                                  +    for right < len(s2) {
                                                                                                                                                                                                                  +        c := rune(s2[right])
                                                                                                                                                                                                                  +        right++
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +        // 進行窗口內數據的一系列更新
                                                                                                                                                                                                                  +        if need[c] > 0 {
                                                                                                                                                                                                                  +            window[c]++
                                                                                                                                                                                                                  +            if window[c] == need[c] {
                                                                                                                                                                                                                  +                // 該字符長度達到
                                                                                                                                                                                                                  +                valid++
                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +        // fmt.Printf("[%d,%d) \n", left, right)
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +        // 判斷左視窗是否要收縮
                                                                                                                                                                                                                  +        // for (right - left) >= len(s1)
                                                                                                                                                                                                                  +        if (right - left) >= len(s1) {
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +            if valid == len(need) {
                                                                                                                                                                                                                  +                // 全找到
                                                                                                                                                                                                                  +                return true
                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                  +            d := rune(s2[left])
                                                                                                                                                                                                                  +            left++
                                                                                                                                                                                                                  +            if need[d] > 0 {
                                                                                                                                                                                                                  +                if window[d] == need[d] {
                                                                                                                                                                                                                  +                    valid--
                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                  +                window[d]--
                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                  +    return false
                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +// 用 slice 取代 map 來優化
                                                                                                                                                                                                                  +func CheckInclusionSlice(s1 string, s2 string) bool {
                                                                                                                                                                                                                  +    need := [256]int{}
                                                                                                                                                                                                                  +    for _, c := range s1 {
                                                                                                                                                                                                                  +        need[c-'a']++
                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +    left, right := 0, 0
                                                                                                                                                                                                                  +    count := len(s1)
                                                                                                                                                                                                                  +    for right < len(s2) {
                                                                                                                                                                                                                  +        c := s2[right] - 'a'
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +        if need[c] > 0 {
                                                                                                                                                                                                                  +            // 有找到
                                                                                                                                                                                                                  +            count--
                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                  +        need[c]--
                                                                                                                                                                                                                  +        right++
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +        // fmt.Printf("[%d,%d)\n", left, right)
                                                                                                                                                                                                                  +        if count == 0 {
                                                                                                                                                                                                                  +            return true
                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +        // 判斷左視窗是否要收縮
                                                                                                                                                                                                                  +        if (right - left) == len(s1) {
                                                                                                                                                                                                                  +            d := s2[left] - 'a'
                                                                                                                                                                                                                  +            if need[d] >= 0 {
                                                                                                                                                                                                                  +                // 符合預期的長度, 但是卻沒找到預期的結果
                                                                                                                                                                                                                  +                count++
                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                  +            need[d]++
                                                                                                                                                                                                                  +            left++
                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                  +    return false
                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  tags: Medium Leetcode Sliding Window
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  +
                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                  results matching ""

                                                                                                                                                                                                                  +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                    No results matching ""

                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    + + + + + + +
                                                                                                                                                                                                                    + + +
                                                                                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0567.Permutation-in-String/main.go b/Leetcode/0567.Permutation-in-String/main.go new file mode 100644 index 000000000..be5e2bb18 --- /dev/null +++ b/Leetcode/0567.Permutation-in-String/main.go @@ -0,0 +1,83 @@ +package permutationinstring + +func CheckInclusion(s1 string, s2 string) bool { + need, window := make(map[rune]int), make(map[rune]int) + for _, c := range s1 { + need[c]++ + } + + left, right := 0, 0 + valid := 0 + for right < len(s2) { + c := rune(s2[right]) + right++ + + // 進行窗口內數據的一系列更新 + if need[c] > 0 { + window[c]++ + if window[c] == need[c] { + // 該字符長度達到 + valid++ + } + } + + // fmt.Printf("[%d,%d) \n", left, right) + + // 判斷左視窗是否要收縮 + // for (right - left) >= len(s1) + if (right - left) >= len(s1) { + + if valid == len(need) { + // 全找到 + return true + } + d := rune(s2[left]) + left++ + if need[d] > 0 { + if window[d] == need[d] { + valid-- + } + window[d]-- + } + } + } + return false +} + +// 用 slice 取代 map 來優化 +func CheckInclusionSlice(s1 string, s2 string) bool { + need := [256]int{} + for _, c := range s1 { + need[c-'a']++ + } + + left, right := 0, 0 + count := len(s1) + for right < len(s2) { + c := s2[right] - 'a' + + if need[c] > 0 { + // 有找到 + count-- + } + need[c]-- + right++ + + // fmt.Printf("[%d,%d)\n", left, right) + if count == 0 { + return true + } + + // 判斷左視窗是否要收縮 + if (right - left) == len(s1) { + d := s2[left] - 'a' + if need[d] >= 0 { + // 符合預期的長度, 但是卻沒找到預期的結果 + count++ + } + need[d]++ + left++ + } + } + return false +} diff --git a/Leetcode/0567.Permutation-in-String/main_test.go b/Leetcode/0567.Permutation-in-String/main_test.go new file mode 100644 index 000000000..58f56f202 --- /dev/null +++ b/Leetcode/0567.Permutation-in-String/main_test.go @@ -0,0 +1,62 @@ +package permutationinstring + +import "testing" + +var tests = []struct { + arg1 string + arg2 string + want bool +}{ + { + "ab", + "eidbaooo", + true, + }, + { + "ab", + "eidboaoo", + false, + }, +} + +func TestCheckInclusion(t *testing.T) { + for _, tt := range tests { + if got := CheckInclusion(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestCheckInclusionSlice(t *testing.T) { + for _, tt := range tests { + if got := CheckInclusionSlice(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkCheckInclusion(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + CheckInclusion(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkCheckInclusionSlice(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + CheckInclusionSlice(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0567.Permutation-in-String -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0567.Permutation-in-String +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkCheckInclusion-8 9091321 167.9 ns/op 0 B/op 0 allocs/op +BenchmarkCheckInclusionSlice-8 26744336 53.28 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0567.Permutation-in-String 3.143s +*/ diff --git a/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits.go b/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits.go new file mode 100644 index 000000000..a6de38e25 --- /dev/null +++ b/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits.go @@ -0,0 +1,38 @@ +package binarynumberwithalternatingbits + +// 暴力解 O(n) +func hasAlternatingBits(n int) bool { + for n > 0 { + preBit := n & 1 + n = n / 2 + curBit := n & 1 + if curBit == preBit { + return false + } + } + return true +} + +// 數學解 +func hasAlternatingBits2(n int) bool { + /* + n=5 + n= 1 0 1 + n >> 1 0 1 0 + n^(n>>1) 1 1 1 (XOR 不同時得1) + n 1 1 1 + n+1 1 0 0 0 + n & (n+1) 0 0 0 + + n=7 + n= 1 1 1 + n >> 1 0 1 1 + n^(n>>1) 1 0 0 (XOR 不同時得1) + n 1 0 0 + n+1 1 0 1 + n & (n+1) 1 0 0 + */ + n = n ^ (n >> 1) + result := n & (n + 1) + return result == 0 +} diff --git a/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits_test.go b/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits_test.go new file mode 100644 index 000000000..42fe644e9 --- /dev/null +++ b/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits_test.go @@ -0,0 +1,61 @@ +package binarynumberwithalternatingbits + +import "testing" + +var tests = []struct { + arg1 int + want bool +}{ + { + 5, + true, + }, + { + 7, + false, + }, + { + 11, + false, + }, + { + 10, + true, + }, +} + +func TestHasAlternatingBits(t *testing.T) { + for _, tt := range tests { + if got := hasAlternatingBits(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestHasAlternatingBits2(t *testing.T) { + for _, tt := range tests { + if got := hasAlternatingBits2(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkHasAlternatingBits(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + hasAlternatingBits(10) + } +} + +func BenchmarkHasAlternatingBits2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + hasAlternatingBits2(10) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0693.Binary-Number-with-Alternating-Bits -bench=. +BenchmarkHasAlternatingBits-8 300204136 3.979 ns/op 0 B/op 0 allocs/op +BenchmarkHasAlternatingBits2-8 1000000000 0.3335 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0693.Binary-Number-with-Alternating-Bits/index.html b/Leetcode/0693.Binary-Number-with-Alternating-Bits/index.html new file mode 100644 index 000000000..4247371a7 --- /dev/null +++ b/Leetcode/0693.Binary-Number-with-Alternating-Bits/index.html @@ -0,0 +1,3960 @@ + + + + + + + 0693.Binary Number with Alternating Bits · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                    693. Binary Number with Alternating Bits

                                                                                                                                                                                                                    題目

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values.

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    Example 1:

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    Input: 5
                                                                                                                                                                                                                    +Output: True
                                                                                                                                                                                                                    +Explanation:
                                                                                                                                                                                                                    +The binary representation of 5 is: 101
                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    Example 2:

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    Input: 7
                                                                                                                                                                                                                    +Output: False
                                                                                                                                                                                                                    +Explanation:
                                                                                                                                                                                                                    +The binary representation of 7 is: 111.
                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    Example 3:

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    Input: 11
                                                                                                                                                                                                                    +Output: False
                                                                                                                                                                                                                    +Explanation:
                                                                                                                                                                                                                    +The binary representation of 11 is: 1011.
                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    Example 4:

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    Input: 10
                                                                                                                                                                                                                    +Output: True
                                                                                                                                                                                                                    +Explanation:
                                                                                                                                                                                                                    +The binary representation of 10 is: 1010.
                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    題目大意

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    給定一個正整數,檢查他是否為交替位二進制數:換句話說,就是他的二進制數相鄰的兩個位數永不相等。

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    解題思路

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                    • 判斷一個數的二進制位相鄰兩個數是不相等的,即 0101 交叉間隔的,如果是,輸出 true。這一題有多種做法,最簡單的方法就是直接模擬。比較巧妙的方法是通過位運算,合理構造特殊數據進行位運算到達目的。 010101 構造出 101010 兩者相互 & 位運算以後就為 0,因為都“插空”了。
                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    提示:

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    1 <= n <= 2^31 - 1

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    來源

                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                    解答

                                                                                                                                                                                                                    +

                                                                                                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits.go

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    package binarynumberwithalternatingbits
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    +// 暴力解 O(n)
                                                                                                                                                                                                                    +func hasAlternatingBits(n int) bool {
                                                                                                                                                                                                                    +    for n > 0 {
                                                                                                                                                                                                                    +        preBit := n & 1
                                                                                                                                                                                                                    +        n = n / 2
                                                                                                                                                                                                                    +        curBit := n & 1
                                                                                                                                                                                                                    +        if curBit == preBit {
                                                                                                                                                                                                                    +            return false
                                                                                                                                                                                                                    +        }
                                                                                                                                                                                                                    +    }
                                                                                                                                                                                                                    +    return true
                                                                                                                                                                                                                    +}
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    +// 數學解
                                                                                                                                                                                                                    +func hasAlternatingBits2(n int) bool {
                                                                                                                                                                                                                    +    /*
                                                                                                                                                                                                                    +        n=5
                                                                                                                                                                                                                    +        n=                1 0 1
                                                                                                                                                                                                                    +        n >> 1            0 1 0
                                                                                                                                                                                                                    +        n^(n>>1)        1 1 1  (XOR 不同時得1)
                                                                                                                                                                                                                    +        n               1 1 1
                                                                                                                                                                                                                    +        n+1              1 0 0 0
                                                                                                                                                                                                                    +        n & (n+1)        0 0 0
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    +        n=7
                                                                                                                                                                                                                    +        n=                1 1 1
                                                                                                                                                                                                                    +        n >> 1            0 1 1
                                                                                                                                                                                                                    +        n^(n>>1)        1 0 0  (XOR 不同時得1)
                                                                                                                                                                                                                    +        n               1 0 0
                                                                                                                                                                                                                    +        n+1                1 0 1
                                                                                                                                                                                                                    +        n & (n+1)        1 0 0
                                                                                                                                                                                                                    +    */
                                                                                                                                                                                                                    +    n = n ^ (n >> 1)
                                                                                                                                                                                                                    +    result := n & (n + 1)
                                                                                                                                                                                                                    +    return result == 0
                                                                                                                                                                                                                    +}
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    +
                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                    results matching ""

                                                                                                                                                                                                                    +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                      No results matching ""

                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      + + + + + + +
                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0695.Max-Area-of-Island/images/maxarea1-grid.jpg b/Leetcode/0695.Max-Area-of-Island/images/maxarea1-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..127b54089c97739695c6286c0afc19815e1c9c5a GIT binary patch literal 136231 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

                                                                                                                                                                                                                      qZo?F_1vO4FwE;S{Bo2E{O6rJ>@eG(}jpd-x^o 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 literal 0 HcmV?d00001 diff --git a/Leetcode/0695.Max-Area-of-Island/index.html b/Leetcode/0695.Max-Area-of-Island/index.html new file mode 100644 index 000000000..bee8f381b --- /dev/null +++ b/Leetcode/0695.Max-Area-of-Island/index.html @@ -0,0 +1,3982 @@ + + + + + + + 0695.Max Area of Island · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                      695. Max Area of Island

                                                                                                                                                                                                                      題目

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      You are given an m x n binary matrix grid. An island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      The area of an island is the number of cells with a value 1 in the island.

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      Return the maximum area of an island in grid. If there is no island, return 0.

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      Example 1:

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      Input: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
                                                                                                                                                                                                                      +Output: 6
                                                                                                                                                                                                                      +Explanation: The answer is not 11, because the island must be connected 4-directionally.
                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      Example 2:

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      Input: grid = [[0,0,0,0,0,0,0,0]]
                                                                                                                                                                                                                      +Output: 0
                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      Constraints:

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                      • m == grid.length
                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                      • n == grid[i].length
                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                      • 1 <= m, n <= 50
                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                      • grid[i][j] is either 0 or 1.
                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      題目大意

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      給定一個由 '1'(陸地)和 '0'(水域)組成的二維矩陣,計算矩陣中連續的1所組成的最大區域的面積。

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      解題思路

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      使用BFS或DFS遍歷矩陣,計算每個島嶼的面積,並找到最大的面積值。 +給出一個地圖,要求計算上面島嶼的。注意島嶼的定義是要求都是海(為0的點),如果土地(為1的點)靠在地圖邊緣,不能是珊瑚島。 +這題和第200題,第1254題解題思路是一致的。 +DPS深搜。不過這題需要多處理2件事情,一是注意靠邊緣的島嶼不能計算關係,二是動態維護島嶼的最大面積。

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      使用DFS的解法:

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                      1. 創建一個變量maxArea,用於記錄最大面積,初始化為0。
                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                      3. 遍歷二維網格,對於每個為1的位置,調用dfs函數計算以該位置為起點的島嶼面積。
                                                                                                                                                                                                                      4. +
                                                                                                                                                                                                                      5. 在dfs函數中,首先檢查當前位置的合法性,如果超出網格範圍或者該位置已經訪問過或者是水域(0),則返回0。
                                                                                                                                                                                                                      6. +
                                                                                                                                                                                                                      7. 將當前位置標記為已訪問,並初始化面積為1。
                                                                                                                                                                                                                      8. +
                                                                                                                                                                                                                      9. 遞迴地對當前位置的上、下、左、右四個相鄰位置進行dfs,並將返回的面積加到當前面積上。
                                                                                                                                                                                                                      10. +
                                                                                                                                                                                                                      11. 返回當前面積。
                                                                                                                                                                                                                      12. +
                                                                                                                                                                                                                      13. 更新maxArea為當前面積和maxArea中的較大值。
                                                                                                                                                                                                                      14. +
                                                                                                                                                                                                                      15. 遍歷完整個網格後,返回maxArea作為結果。
                                                                                                                                                                                                                      16. +
                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      時間複雜度: 遍歷整個網格的時間複雜度為O(mn),其中m和n分別為網格的行數和列數。 +空間複雜度: 使用了遞迴調用的栈空間,空間複雜度為O(mn)。

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      來源

                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                      解答

                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0695.Max-Area-of-Island/main.go

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      package maxareaofisland
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +var (
                                                                                                                                                                                                                      +    dir = [][]int{
                                                                                                                                                                                                                      +        {-1, 0}, // 上
                                                                                                                                                                                                                      +        {0, 1},  // 右
                                                                                                                                                                                                                      +        {1, 0},  // 下
                                                                                                                                                                                                                      +        {0, -1}, // 左
                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                      +)
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +func MaxAreaOfIsland(grid [][]int) int {
                                                                                                                                                                                                                      +    result := 0
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +    for i, row := range grid {
                                                                                                                                                                                                                      +        for j, col := range row {
                                                                                                                                                                                                                      +            if col == 1 {
                                                                                                                                                                                                                      +                result = max(result, areaOfIsland(grid, i, j))
                                                                                                                                                                                                                      +            }
                                                                                                                                                                                                                      +        }
                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                      +    return result
                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +// DFS
                                                                                                                                                                                                                      +func areaOfIsland(grid [][]int, x, y int) int {
                                                                                                                                                                                                                      +    if x < 0 || x >= len(grid) || y < 0 || y >= len(grid[0]) || grid[x][y] == 0 {
                                                                                                                                                                                                                      +        return 0
                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                      +    // 設為0,避免重複計算
                                                                                                                                                                                                                      +    grid[x][y] = 0
                                                                                                                                                                                                                      +    total := 1
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +    // 四個方向查找
                                                                                                                                                                                                                      +    for i := 0; i < 4; i++ {
                                                                                                                                                                                                                      +        nx := x + dir[i][0]
                                                                                                                                                                                                                      +        ny := y + dir[i][1]
                                                                                                                                                                                                                      +        total += areaOfIsland(grid, nx, ny)
                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                      +    return total
                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +func max(x, y int) int {
                                                                                                                                                                                                                      +    if x > y {
                                                                                                                                                                                                                      +        return x
                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                      +    return y
                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +

                                                                                                                                                                                                                      Benchmark

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      +
                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                      results matching ""

                                                                                                                                                                                                                      +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                        No results matching ""

                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        + + + + + + +
                                                                                                                                                                                                                        + + +
                                                                                                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0695.Max-Area-of-Island/main.go b/Leetcode/0695.Max-Area-of-Island/main.go new file mode 100644 index 000000000..284a9a90d --- /dev/null +++ b/Leetcode/0695.Max-Area-of-Island/main.go @@ -0,0 +1,48 @@ +package maxareaofisland + +var ( + dir = [][]int{ + {-1, 0}, // 上 + {0, 1}, // 右 + {1, 0}, // 下 + {0, -1}, // 左 + } +) + +func MaxAreaOfIsland(grid [][]int) int { + result := 0 + + for i, row := range grid { + for j, col := range row { + if col == 1 { + result = max(result, areaOfIsland(grid, i, j)) + } + } + } + return result +} + +// DFS +func areaOfIsland(grid [][]int, x, y int) int { + if x < 0 || x >= len(grid) || y < 0 || y >= len(grid[0]) || grid[x][y] == 0 { + return 0 + } + // 設為0,避免重複計算 + grid[x][y] = 0 + total := 1 + + // 四個方向查找 + for i := 0; i < 4; i++ { + nx := x + dir[i][0] + ny := y + dir[i][1] + total += areaOfIsland(grid, nx, ny) + } + return total +} + +func max(x, y int) int { + if x > y { + return x + } + return y +} diff --git a/Leetcode/0695.Max-Area-of-Island/main_test.go b/Leetcode/0695.Max-Area-of-Island/main_test.go new file mode 100644 index 000000000..c32b10b65 --- /dev/null +++ b/Leetcode/0695.Max-Area-of-Island/main_test.go @@ -0,0 +1,38 @@ +package maxareaofisland + +import "testing" + +var tests = []struct { + arg1 [][]int + want int +}{ + { + [][]int{{0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0}}, + 6, + }, + { + [][]int{{0, 0, 0, 0, 0, 0, 0, 0}}, + 0, + }, +} + +func TestMaxAreaOfIsland(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MaxAreaOfIsland(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkMaxAreaOfIsland(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MaxAreaOfIsland(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0695.Max-Area-of-Island -bench=. + +*/ diff --git a/Leetcode/0703.Kth-Largest-Element-in-a-Stream/index.html b/Leetcode/0703.Kth-Largest-Element-in-a-Stream/index.html new file mode 100644 index 000000000..766807e1b --- /dev/null +++ b/Leetcode/0703.Kth-Largest-Element-in-a-Stream/index.html @@ -0,0 +1,3997 @@ + + + + + + + 0703. Kth Largest Element in a Stream · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                        0703. Kth Largest Element in a Stream

                                                                                                                                                                                                                        題目

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element.

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Implement KthLargest class:

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        KthLargest(int k, int[] nums) Initializes the object with the integer k and the stream of integers nums. +int add(int val) Appends the integer val to the stream and returns the element representing the kth largest element in the stream.

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Example 1:

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Input +["KthLargest", "add", "add", "add", "add", "add"] +[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]] +Output +[null, 4, 5, 5, 8, 8]

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Explanation +KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]); +kthLargest.add(3); // return 4 +kthLargest.add(5); // return 5 +kthLargest.add(10); // return 5 +kthLargest.add(9); // return 8 +kthLargest.add(4); // return 8

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Constraints:

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        1 <= k <= 104 +0 <= nums.length <= 104 +-104 <= nums[i] <= 104 +-104 <= val <= 104 +At most 104 calls will be made to add. +It is guaranteed that there will be at least k elements in the array when you search for the kth element. +Accepted +479.1K +Submissions +846.4K +Acceptance Rate +56.6%

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        題目大意

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        設計一個找到數據流中第 k 大元素的類(class)。 注意是排序後的第 k 大元素,不是第 k 個不同的元素。 請實現 KthLargest 類:

                                                                                                                                                                                                                        +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                        • KthLargest(int k, int[] nums) 使用整數 k 和整數流 nums 初始化物件。
                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                        • int add(int val) 將 val 插入數據流 nums 後,返回當前數據流中第 k 大的元素。
                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        解題思路

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        這題考察優先順序佇列的使用,可以先做下這道類似的題目 215.陣列中的第 K 個最大元素

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        golang container/heap

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Big O

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        時間複雜 : +初始化時間複雜度為: O(nlog⁡k) ,其中 n 為初始化時 nums 的長度; +單次插入時間複雜度為: O(log⁡k)

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        空間複雜 : O(k)。 需要使用優先佇列存儲前 k 大的元素

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        來源

                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                        解答

                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go

                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        package kthlargestelementinastream
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +import (
                                                                                                                                                                                                                        +    "container/heap"
                                                                                                                                                                                                                        +    "sort"
                                                                                                                                                                                                                        +)
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +/**
                                                                                                                                                                                                                        + * Your KthLargest object will be instantiated and called as such:
                                                                                                                                                                                                                        + * obj := Constructor(k, nums);
                                                                                                                                                                                                                        + * param_1 := obj.Add(val);
                                                                                                                                                                                                                        + */
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                                                        +type KthLargest struct {
                                                                                                                                                                                                                        +    sort.IntSlice
                                                                                                                                                                                                                        +    k int
                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +func Constructor(k int, nums []int) KthLargest {
                                                                                                                                                                                                                        +    kl := KthLargest{k: k}
                                                                                                                                                                                                                        +    for _, val := range nums {
                                                                                                                                                                                                                        +        kl.Add(val)
                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                        +    return kl
                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +func (kl *KthLargest) Add(val int) int {
                                                                                                                                                                                                                        +    heap.Push(kl, val)
                                                                                                                                                                                                                        +    if kl.Len() > kl.k {
                                                                                                                                                                                                                        +        heap.Pop(kl)
                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                        +    return kl.IntSlice[0]
                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +func (kl *KthLargest) Push(v interface{}) {
                                                                                                                                                                                                                        +    kl.IntSlice = append(kl.IntSlice, v.(int))
                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +func (kl *KthLargest) Pop() interface{} {
                                                                                                                                                                                                                        +    a := kl.IntSlice
                                                                                                                                                                                                                        +    v := a[len(a)-1]
                                                                                                                                                                                                                        +    kl.IntSlice = a[:len(a)-1]
                                                                                                                                                                                                                        +    return v
                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +func KthLargestStream(k int, nums []int, elem []int) []int {
                                                                                                                                                                                                                        +    obj := Constructor(k, nums)
                                                                                                                                                                                                                        +    result := []int{0}
                                                                                                                                                                                                                        +    for _, val := range elem {
                                                                                                                                                                                                                        +        obj.Add(val)
                                                                                                                                                                                                                        +        result = append(result, obj.IntSlice[0])
                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +    return result
                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +

                                                                                                                                                                                                                        Benchmark

                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        +
                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                        results matching ""

                                                                                                                                                                                                                        +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                          No results matching ""

                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          + + + + + + +
                                                                                                                                                                                                                          + + +
                                                                                                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go b/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go new file mode 100644 index 000000000..d3e8e2f09 --- /dev/null +++ b/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go @@ -0,0 +1,61 @@ +package kthlargestelementinastream + +import ( + "container/heap" + "sort" +) + +// 時間複雜 : +// 初始化時間複雜度為: O(nlog⁡k) ,其中 n 為初始化時 nums 的長度; +// 單次插入時間複雜度為: O(log⁡k) + +// 空間複雜 : O(k)。 需要使用優先佇列存儲前 k 大的元素 +type KthLargest struct { + sort.IntSlice + k int +} + +func Constructor(k int, nums []int) KthLargest { + kl := KthLargest{k: k} + for _, val := range nums { + kl.Add(val) + } + return kl +} + +func (kl *KthLargest) Add(val int) int { + heap.Push(kl, val) + if kl.Len() > kl.k { + heap.Pop(kl) + } + return kl.IntSlice[0] +} + +func (kl *KthLargest) Push(v interface{}) { + kl.IntSlice = append(kl.IntSlice, v.(int)) +} + +func (kl *KthLargest) Pop() interface{} { + // 拿出最後一筆 + a := kl.IntSlice + v := a[len(a)-1] + kl.IntSlice = a[:len(a)-1] + return v +} + +/** + * Your KthLargest object will be instantiated and called as such: + * obj := Constructor(k, nums); + * param_1 := obj.Add(val); + */ + +func KthLargestStream(k int, nums []int, elem []int) []int { + obj := Constructor(k, nums) + result := []int{0} + for _, val := range elem { + obj.Add(val) + result = append(result, obj.IntSlice[0]) + } + + return result +} diff --git a/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main_test.go b/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main_test.go new file mode 100644 index 000000000..8fedc9628 --- /dev/null +++ b/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main_test.go @@ -0,0 +1,41 @@ +package kthlargestelementinastream + +import ( + "reflect" + "testing" +) + +var tests = []struct { + arg1 int + arg2 []int + arg3 []int + want []int +}{ + { + 3, + []int{4, 5, 8, 2}, + []int{3, 5, 10, 9, 4}, + []int{0, 4, 5, 5, 8, 8}, + }, +} + +func TestKthLargestStream(t *testing.T) { + for _, tt := range tests { + if got := KthLargestStream(tt.arg1, tt.arg2, tt.arg3); !reflect.DeepEqual(got, tt.want) { + // if got := KthLargestStream(tt.arg1, tt.arg2, tt.arg3); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkKthLargestStream(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + KthLargestStream(tests[0].arg1, tests[0].arg2, tests[0].arg3) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git a/Leetcode/0704.Binary-Search/index.html b/Leetcode/0704.Binary-Search/index.html new file mode 100644 index 000000000..4017df0d5 --- /dev/null +++ b/Leetcode/0704.Binary-Search/index.html @@ -0,0 +1,4028 @@ + + + + + + + 0704.Binary Search · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                          704. Binary Search

                                                                                                                                                                                                                          題目

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          You must write an algorithm with O(log n) runtime complexity.

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          Example 1:

                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          Input: nums = [-1,0,3,5,9,12], target = 9
                                                                                                                                                                                                                          +Output: 4
                                                                                                                                                                                                                          +Explanation: 9 exists in nums and its index is 4
                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          Example 2:

                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          Input: nums = [-1,0,3,5,9,12], target = 2
                                                                                                                                                                                                                          +Output: -1
                                                                                                                                                                                                                          +Explanation: 2 does not exist in nums so return -1
                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          Constraints:

                                                                                                                                                                                                                          +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                          • 1 <= nums.length <= 104
                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                          • -104 < nums[i], target < 104
                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                          • All the integers in nums are unique.
                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                          • nums is sorted in ascending order.
                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          題目大意

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          給一個已排序過後的array, 找出target所在index +若未找到回傳 -1

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          解題思路

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          提示:

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          來源

                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                          解答

                                                                                                                                                                                                                          +

                                                                                                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0704.Binary-Search/main.go

                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          package binarysearch
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +import "sort"
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +func Search(nums []int, target int) int {
                                                                                                                                                                                                                          +    lenght := len(nums)
                                                                                                                                                                                                                          +    if lenght <= 0="" 1="" {="" return="" -1="" }="" left,="" right="" :="0," lenght-1="" for="" left="" <="right" mid="" +="" if="" nums[mid]="=" target="" else="" 找右邊=""> target {
                                                                                                                                                                                                                          +            // 找左邊
                                                                                                                                                                                                                          +            right = mid - 1
                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +    // 都沒找到
                                                                                                                                                                                                                          +    return -1
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +func Search2(nums []int, target int) int {
                                                                                                                                                                                                                          +    lenght := len(nums)
                                                                                                                                                                                                                          +    if lenght <= 0="" {="" return="" -1="" }="" left,="" right="" :="0," lenght-1="" for="" left="" <="right" 除以2="" mid="" +="" (right-left)="">>1
                                                                                                                                                                                                                          +        mid := int(uint(right+left) >> 1)
                                                                                                                                                                                                                          +        if nums[mid] == target {
                                                                                                                                                                                                                          +            return mid
                                                                                                                                                                                                                          +        } else if nums[mid] < target {
                                                                                                                                                                                                                          +            // 找右邊
                                                                                                                                                                                                                          +            left = mid + 1
                                                                                                                                                                                                                          +        } else if nums[mid] > target {
                                                                                                                                                                                                                          +            // 找左邊
                                                                                                                                                                                                                          +            right = mid - 1
                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +    // 都沒找到
                                                                                                                                                                                                                          +    return -1
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +// 內建sort
                                                                                                                                                                                                                          +func BinarySearch(nums []int, target int) int {
                                                                                                                                                                                                                          +    length := len(nums)
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +    index := sort.Search(length, func(i int) bool {
                                                                                                                                                                                                                          +        return nums[i] >= target
                                                                                                                                                                                                                          +    })
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +    if index < length && nums[index] == target {
                                                                                                                                                                                                                          +        return index
                                                                                                                                                                                                                          +    } else {
                                                                                                                                                                                                                          +        return -1
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +// 使用遞迴
                                                                                                                                                                                                                          +func BinarySearchRecur(nums []int, target int) (index int) {
                                                                                                                                                                                                                          +    return BinarySearchRecursively(nums, target, 0, len(nums)-1)
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +func BinarySearchRecursively(nums []int, target int, start int, end int) int {
                                                                                                                                                                                                                          +    if end < start {
                                                                                                                                                                                                                          +        return -1
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +    middle := int(uint(end+start) >> 1)
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +    if nums[middle] == target {
                                                                                                                                                                                                                          +        return middle
                                                                                                                                                                                                                          +    } else if target > nums[middle] {
                                                                                                                                                                                                                          +        return BinarySearchRecursively(nums, target, middle+1, end)
                                                                                                                                                                                                                          +    } else {
                                                                                                                                                                                                                          +        return BinarySearchRecursively(nums, target, start, middle-1)
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +// 有點類似 nums 小於 target的元素有幾個
                                                                                                                                                                                                                          +func LeftBound(nums []int, target int) (index int) {
                                                                                                                                                                                                                          +    lenght := len(nums)
                                                                                                                                                                                                                          +    if lenght <= 0="" {="" return="" -1="" }="" left,="" right="" :="0," lenght-1="" for="" left="" <="right" 除以2="" mid="" +="" (right-left)="">>1
                                                                                                                                                                                                                          +        mid := int(uint(right+left) >> 1)
                                                                                                                                                                                                                          +        if nums[mid] == target {
                                                                                                                                                                                                                          +            // 要繼續找左邊, 所以把右邊變小
                                                                                                                                                                                                                          +            right = mid - 1
                                                                                                                                                                                                                          +        } else if nums[mid] < target {
                                                                                                                                                                                                                          +            // 找右邊
                                                                                                                                                                                                                          +            left = mid + 1
                                                                                                                                                                                                                          +        } else if nums[mid] > target {
                                                                                                                                                                                                                          +            // 找左邊
                                                                                                                                                                                                                          +            right = mid - 1
                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +    // 都沒找到 注意: left越界情況
                                                                                                                                                                                                                          +    if left >= lenght || nums[left] != target {
                                                                                                                                                                                                                          +        return -1
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +    return left
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +func RightBound(nums []int, target int) (index int) {
                                                                                                                                                                                                                          +    lenght := len(nums)
                                                                                                                                                                                                                          +    if lenght <= 0="" {="" return="" -1="" }="" left,="" right="" :="0," lenght-1="" for="" left="" <="right" 除以2="" mid="" +="" (right-left)="">>1
                                                                                                                                                                                                                          +        mid := int(uint(right+left) >> 1)
                                                                                                                                                                                                                          +        if nums[mid] == target {
                                                                                                                                                                                                                          +            // 注意:要繼續找右邊, 所以把左邊變大=mid+1
                                                                                                                                                                                                                          +            left = mid + 1
                                                                                                                                                                                                                          +        } else if nums[mid] < target {
                                                                                                                                                                                                                          +            // 找右邊
                                                                                                                                                                                                                          +            left = mid + 1
                                                                                                                                                                                                                          +        } else if nums[mid] > target {
                                                                                                                                                                                                                          +            // 找左邊
                                                                                                                                                                                                                          +            right = mid - 1
                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +    // 都沒找到 注意:right越界情況
                                                                                                                                                                                                                          +    if right < 0 || nums[right] != target {
                                                                                                                                                                                                                          +        return -1
                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                          +    return right
                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          +
                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                          results matching ""

                                                                                                                                                                                                                          +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                            No results matching ""

                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            + + + + + + +
                                                                                                                                                                                                                            + + +
                                                                                                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0704.Binary-Search/main.go b/Leetcode/0704.Binary-Search/main.go new file mode 100644 index 000000000..e71808f3d --- /dev/null +++ b/Leetcode/0704.Binary-Search/main.go @@ -0,0 +1,146 @@ +package binarysearch + +import "sort" + +func Search(nums []int, target int) int { + lenght := len(nums) + if lenght <= 0 { + return -1 + } + left, right := 0, lenght-1 + + for left <= right { + mid := (right-left)/2 + left + if nums[mid] == target { + return mid + } else if nums[mid] < target { + // 找右邊 + left = mid + 1 + } else if nums[mid] > target { + // 找左邊 + right = mid - 1 + } + } + // 都沒找到 + return -1 +} + +func Search2(nums []int, target int) int { + lenght := len(nums) + if lenght <= 0 { + return -1 + } + left, right := 0, lenght-1 + + for left <= right { + // 除以2 + // mid := left + (right-left)>>1 + mid := int(uint(right+left) >> 1) + if nums[mid] == target { + return mid + } else if nums[mid] < target { + // 找右邊 + left = mid + 1 + } else if nums[mid] > target { + // 找左邊 + right = mid - 1 + } + } + // 都沒找到 + return -1 +} + +// 內建sort +func BinarySearch(nums []int, target int) int { + length := len(nums) + + index := sort.Search(length, func(i int) bool { + return nums[i] >= target + }) + + if index < length && nums[index] == target { + return index + } else { + return -1 + } +} + +// 使用遞迴 +func BinarySearchRecur(nums []int, target int) (index int) { + return BinarySearchRecursively(nums, target, 0, len(nums)-1) +} + +func BinarySearchRecursively(nums []int, target int, start int, end int) int { + if end < start { + return -1 + } + + middle := int(uint(end+start) >> 1) + + if nums[middle] == target { + return middle + } else if target > nums[middle] { + return BinarySearchRecursively(nums, target, middle+1, end) + } else { + return BinarySearchRecursively(nums, target, start, middle-1) + } +} + +// 有點類似 nums 小於 target的元素有幾個 +func LeftBound(nums []int, target int) (index int) { + lenght := len(nums) + if lenght <= 0 { + return -1 + } + left, right := 0, lenght-1 + + for left <= right { + // 除以2 + // mid := left + (right-left)>>1 + mid := int(uint(right+left) >> 1) + if nums[mid] == target { + // 要繼續找左邊, 所以把右邊變小 + right = mid - 1 + } else if nums[mid] < target { + // 找右邊 + left = mid + 1 + } else if nums[mid] > target { + // 找左邊 + right = mid - 1 + } + } + // 都沒找到 注意: left越界情況 + if left >= lenght || nums[left] != target { + return -1 + } + return left +} + +func RightBound(nums []int, target int) (index int) { + lenght := len(nums) + if lenght <= 0 { + return -1 + } + left, right := 0, lenght-1 + + for left <= right { + // 除以2 + // mid := left + (right-left)>>1 + mid := int(uint(right+left) >> 1) + if nums[mid] == target { + // 注意:要繼續找右邊, 所以把左邊變大=mid+1 + left = mid + 1 + } else if nums[mid] < target { + // 找右邊 + left = mid + 1 + } else if nums[mid] > target { + // 找左邊 + right = mid - 1 + } + } + // 都沒找到 注意:right越界情況 + if right < 0 || nums[right] != target { + return -1 + } + return right +} diff --git a/Leetcode/0704.Binary-Search/main_test.go b/Leetcode/0704.Binary-Search/main_test.go new file mode 100644 index 000000000..4034282e0 --- /dev/null +++ b/Leetcode/0704.Binary-Search/main_test.go @@ -0,0 +1,156 @@ +package binarysearch + +import "testing" + +var tests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{-1, 0, 3, 5, 9, 12}, + 9, + 4, + }, + { + []int{-1, 0, 3, 5, 9, 12}, + 2, + -1, + }, + { + []int{-1, 0, 3, 5, 9, 12}, + 13, + -1, + }, +} + +var leftboundtests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{1, 2, 2, 2, 3}, + 2, + 1, + }, + { + []int{2, 3, 5, 7}, + 1, + -1, + }, + { + []int{2, 3, 5, 7}, + 8, + -1, + }, +} + +var rightboundtests = []struct { + arg1 []int + arg2 int + want int +}{ + { + []int{1, 2, 2, 4}, + 2, + 2, + }, + { + []int{1, 2, 2, 4}, + 0, + -1, + }, + { + []int{2, 3, 5, 7}, + 7, + 3, + }, +} + +func TestSearch(t *testing.T) { + for _, tt := range tests { + if got := Search(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestSearch2(t *testing.T) { + for _, tt := range tests { + if got := Search2(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestLeftBound(t *testing.T) { + for _, tt := range leftboundtests { + if got := LeftBound(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestRightBound(t *testing.T) { + for _, tt := range rightboundtests { + if got := RightBound(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestBinarySearch(t *testing.T) { + for _, tt := range tests { + if got := BinarySearch(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestBinarySearchRecur(t *testing.T) { + for _, tt := range tests { + if got := BinarySearchRecur(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkSearch(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Search(tests[0].arg1, tests[0].arg2) + } +} +func BenchmarkSearch2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + Search2(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkBinarySearch(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + BinarySearch(tests[0].arg1, tests[0].arg2) + } +} + +func BenchmarkBinarySearchRecur(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + BinarySearchRecur(tests[0].arg1, tests[0].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0704.Binary-Search -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0704.Binary-Search +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkSearch-4 365892498 3.483 ns/op 0 B/op 0 allocs/op +BenchmarkSearch2-4 405742570 2.734 ns/op 0 B/op 0 allocs/op +BenchmarkBinarySearch-4 81949826 13.15 ns/op 0 B/op 0 allocs/op +BenchmarkBinarySearchRecur-4 253851086 4.588 ns/op 0 B/op 0 allocs/op +*/ diff --git a/Leetcode/0721.Accounts-Merge/Accounts-Merge.go b/Leetcode/0721.Accounts-Merge/Accounts-Merge.go new file mode 100644 index 000000000..18047065b --- /dev/null +++ b/Leetcode/0721.Accounts-Merge/Accounts-Merge.go @@ -0,0 +1,150 @@ +package accountsmerge + +import ( + "LeetcodeGolang/template" + "sort" +) + +// TODO: 優化 +func AccountsMerge(accounts [][]string) (result [][]string) { + // result := [][]string{} + emailToIndex := map[string]int{} + emailToName := map[string]string{} + indexToEmails := map[int][]string{} + + for _, account := range accounts { + name := account[0] + for _, email := range account[1:] { + if _, has := emailToIndex[email]; !has { + // 紀錄 email, 對寫入到 對應的index 跟 對應的user name + emailToIndex[email] = len(emailToIndex) + emailToName[email] = name + } + } + } + parent := make([]int, len(emailToIndex)) + // 初始化 + for i := range parent { + parent[i] = i + } + var find func(int) int + find = func(x int) int { + if parent[x] != x { + // 遞迴一直找下去 + parent[x] = find(parent[x]) + } + return parent[x] + } + union := func(from, to int) { + parent[find(from)] = find(to) + } + + for _, account := range accounts { + firstIndex := emailToIndex[account[1]] + for _, email := range account[2:] { + union(emailToIndex[email], firstIndex) + } + } + + for email, index := range emailToIndex { + index = find(index) + indexToEmails[index] = append(indexToEmails[index], email) + } + for _, emails := range indexToEmails { + for i := 0; i < len(indexToEmails); i++ { + // fmt.Println(emailToName[indexToEmails[i][0]]) + } + sort.Strings(emails) + account := append([]string{emailToName[emails[0]]}, emails...) + result = append(result, account) + } + + return +} + +func AccountsMerge2(accounts [][]string) (r [][]string) { + uf := template.UnionFind{} + uf.Init(len(accounts)) + // emailToID 將所有的 email 都拆開,拆開與 id(數組下標) 對應 + // idToName 將 id(數組下標) 與 name 對應 + // idToEmails 將 id(數組下標) 與整理好去重以後的 email 組對應 + emailToID, idToName, idToEmails, res := make(map[string]int), make(map[int]string), make(map[int][]string), [][]string{} + for id, acc := range accounts { + idToName[id] = acc[0] + for i := 1; i < len(acc); i++ { + pid, ok := emailToID[acc[i]] + if ok { + uf.Union(id, pid) + } + emailToID[acc[i]] = id + } + } + for email, id := range emailToID { + pid := uf.Find(id) + idToEmails[pid] = append(idToEmails[pid], email) + } + for id, emails := range idToEmails { + name := idToName[id] + sort.Strings(emails) + res = append(res, append([]string{name}, emails...)) + } + return res +} + +// 暴力解 : Union Find, 結果比較快 +func AccountsMergeBurst(accounts [][]string) [][]string { + if len(accounts) == 0 { + return [][]string{} + } + uf, result, visited := template.UnionFind{}, [][]string{}, map[int]bool{} + uf.Init(len(accounts)) + for i := 0; i < len(accounts); i++ { + for j := i + 1; j < len(accounts); j++ { + if accounts[i][0] == accounts[j][0] { + // A, B帳號. 名字一樣 + tmpAmail, tmpBmail, flag := accounts[i][1:], accounts[j][1:], false + for j := 0; j < len(tmpAmail); j++ { + for k := 0; k < len(tmpBmail); k++ { + if tmpAmail[j] == tmpBmail[k] { + // A,B 帳號, 找到相同的email. 認定為同一人 + flag = true + break + } + } + if flag { + break + } + } + if flag { + uf.Union(i, j) + } + } + } + } + for i := 0; i < len(accounts); i++ { + if visited[i] { + continue + } + emails, account, tmpMap := accounts[i][1:], []string{accounts[i][0]}, map[string]string{} + for j := i + 1; j < len(accounts); j++ { + if uf.Find(j) == uf.Find(i) { + visited[j] = true + for _, v := range accounts[j][1:] { + tmpMap[v] = v + } + } + } + // A 帳號 Email + for _, v := range emails { + tmpMap[v] = v + } + emails = []string{} + for key := range tmpMap { + emails = append(emails, key) + } + sort.Strings(emails) + account = append(account, emails...) + result = append(result, account) + } + return result +} diff --git a/Leetcode/0721.Accounts-Merge/Accounts-Merge_test.go b/Leetcode/0721.Accounts-Merge/Accounts-Merge_test.go new file mode 100644 index 000000000..3e3b78ac0 --- /dev/null +++ b/Leetcode/0721.Accounts-Merge/Accounts-Merge_test.go @@ -0,0 +1,103 @@ +package accountsmerge + +import ( + "fmt" + "testing" +) + +var tests = []struct { + arg1 [][]string + want [][]string +}{ + { + [][]string{ + {"John", "johnsmith@mail.com", "john00@mail.com"}, + {"John", "johnnybravo@mail.com"}, + {"John", "johnsmith@mail.com", "john_newyork@mail.com"}, + {"Mary", "mary@mail.com"}, + }, + [][]string{ + {"John", "john00@mail.com", "john_newyork@mail.com", "johnsmith@mail.com"}, + {"John", "johnnybravo@mail.com"}, + {"Mary", "mary@mail.com"}, + }, + }, + { + [][]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"}, + {"Kevin", "Kevin2@m.co", "Kevin4@m.co"}, + {"Gabe", "Gabe0@m.co", "Gabe2@m.co", "Gabe3@m.co", "Gabe4@m.co"}, + }, + }, + { + [][]string{ + {"David", "David0@m.co", "David4@m.co", "David3@m.co"}, + {"David", "David5@m.co", "David5@m.co", "David0@m.co"}, + {"David", "David1@m.co", "David4@m.co", "David0@m.co"}, + {"David", "David0@m.co", "David1@m.co", "David3@m.co"}, + {"David", "David4@m.co", "David1@m.co", "David3@m.co"}, + }, + [][]string{ + {"David", "David0@m.co", "David1@m.co", "David3@m.co", "David4@m.co", "David5@m.co"}, + }, + }, + { + [][]string{}, + [][]string{}, + }, +} + +func TestAccountsMergeBurst(t *testing.T) { + for _, tt := range tests { + // if got := AccountsMergeBurst(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // t.Errorf("got = %v \n want = %v \n", tt.arg1, tt.want) + // } + fmt.Printf("【input】: \n%v \n【output】:\n%v \n", tt.arg1, AccountsMergeBurst(tt.arg1)) + } +} + +func TestAccountsMerge(t *testing.T) { + for _, tt := range tests { + // if got := AccountsMerge(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // t.Errorf("got = %v \n want = %v \n", tt.arg1, tt.want) + // } + fmt.Printf("\n【input】: \n%v \n【output】:\n%v \n", tt.arg1, AccountsMerge(tt.arg1)) + } +} + +func BenchmarkAccountsMergeBurst(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + AccountsMergeBurst(tests[1].arg1) + } +} + +func BenchmarkAccountsMerge(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + AccountsMerge(tests[1].arg1) + } +} + +func BenchmarkAccountsMerge2(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + AccountsMerge2(tests[1].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0721.Accounts-Merge -bench=. +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkAccountsMergeBurst-8 394038 2885 ns/op 984 B/op 27 allocs/op +BenchmarkAccountsMerge-8 240194 5594 ns/op 2008 B/op 28 allocs/op +BenchmarkAccountsMerge2-8 315127 3755 ns/op 1413 B/op 28 allocs/op +*/ diff --git a/Leetcode/0721.Accounts-Merge/index.html b/Leetcode/0721.Accounts-Merge/index.html new file mode 100644 index 000000000..435cb192c --- /dev/null +++ b/Leetcode/0721.Accounts-Merge/index.html @@ -0,0 +1,4087 @@ + + + + + + + 0721.Accounts Merge · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                            721. Accounts Merge

                                                                                                                                                                                                                            题目

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            Given a list accounts, 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 emailsrepresenting emails of the account.

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            Now, we would like to merge these accounts. Two accounts definitely belong to the same person if there is some email that is common 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: 
                                                                                                                                                                                                                            +accounts = [["John", "johnsmith@mail.com", "john00@mail.com"], ["John", "johnnybravo@mail.com"], ["John", "johnsmith@mail.com", "john_newyork@mail.com"], ["Mary", "mary@mail.com"]]
                                                                                                                                                                                                                            +Output: [["John", 'john00@mail.com', 'john_newyork@mail.com', 'johnsmith@mail.com'],  ["John", "johnnybravo@mail.com"], ["Mary", "mary@mail.com"]]
                                                                                                                                                                                                                            +Explanation: 
                                                                                                                                                                                                                            +The first and third John's are the same person as they have the common email "johnsmith@mail.com".
                                                                                                                                                                                                                            +The second 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.
                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            Note:

                                                                                                                                                                                                                            +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                            • The length of accounts will be in the range [1, 1000].
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            • The length of accounts[i] will be in the range [1, 10].
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            • The length of accounts[i][j] will be in the range [1, 30].
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            題目大意

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            給定一個列表 accounts,每個元素 accounts[i] 是一個字符串列表,其中第一個元素 accounts[i][0] 是 名稱 (name),其餘元素是 emails 表示該賬戶的郵箱地址。 現在,我們想合併這些賬戶。如果兩個賬戶都有一些共同的郵箱地址,則兩個賬戶必定屬於同一個人。請注意,即使兩個賬戶具有相同的名稱,它們也可能屬於不同的人,因為人們可能具有相同的名稱。一個人最初可以擁有任意數量的賬戶,但其所有賬戶都具有相同的名稱。 合併賬戶後,按以下格式返回賬戶:每個賬戶的第一個元素是名稱,其餘元素是按字符 ASCII 順序排列的郵箱地址。賬戶本身可以以任意順序返回。

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            解題思路

                                                                                                                                                                                                                            +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                            • 給出一堆賬戶和對應的郵箱。要求合併同一個人的多個郵箱賬戶。
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            • 如果這個人名和所屬的其中之一的郵箱是相同的,就判定這是同一個人的郵箱,那麼就合併這些郵箱。
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            • 這題的解題思路是並查集。不過如果用暴力合併的方法,時間複雜度非常差。優化方法是先把每組數據都進行編號,人編號,每個郵箱都進行編號。這個映射關係用 map 記錄起來。如果利用並查集的 union() 操作,把這些編號都進行合併。最後把人的編號和對應郵箱的編號拼接起來。
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            • 這一題有 2 處比較“坑”的是,不需要合併的用戶的郵箱列表也是需要排序和去重的,同一個人的所有郵箱集合都要合併到一起。具體見測試用例。不過題目中也提到了這些點,也不能算題目坑,只能歸自己沒注意這些邊界情況。
                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            來源

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            https://books.halfrost.com/leetcode/ChapterFour/0700~0799/0721.Accounts-Merge/

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            時間複雜度:O(n log n)

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            其中 n 是不同郵箱地址的數量。 +需要遍歷所有郵箱地址,在並查集內進行查找和合併操作,對於兩個不同的郵箱地址, +如果它們的祖先不同則需要進行合併,需要進行 2 次查找和最多 1 次合併。一共需要進行 2n 次查找和最多 n 次合併, +因此時間複雜度是 O(2n log n) = O(n log n)。 +這裡的並查集使用了路徑壓縮,但是沒有使用按秩合併, +最壞情況下的時間複雜度是O(n log n),平均情況下的時間複雜度依然是 O(nα(n)),其中α 為阿克曼函數的反函數,α(n) 可以認為是一個很小的常數。 +整理出題目要求的返回賬戶的格式時需要對郵箱地址排序,時間複雜度是 O(n log n)。 +其餘操作包括遍歷所有郵箱地址,在哈希表中記錄相應的信息,時間複雜度是O(n), +在漸進意義下O(n) 小於O(nlog n)。 +因此總時間複雜度是 O(n log n)。

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            作者:LeetCode-Solution +鏈接:https://leetcode-cn.com/problems/accounts-merge/solution/zhang-hu-he-bing-by-leetcode-solution-3dyq/ +來源:力扣(LeetCode) +著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            來源

                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                            解答

                                                                                                                                                                                                                            +

                                                                                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0721.Accounts-Merge/Accounts-Merge.go

                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            package accountsmerge
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +import (
                                                                                                                                                                                                                            +    "LeetcodeGolang/template"
                                                                                                                                                                                                                            +    "sort"
                                                                                                                                                                                                                            +)
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +// TODO: 優化
                                                                                                                                                                                                                            +func AccountsMerge(accounts [][]string) (result [][]string) {
                                                                                                                                                                                                                            +    // result := [][]string{}
                                                                                                                                                                                                                            +    emailToIndex := map[string]int{}
                                                                                                                                                                                                                            +    emailToName := map[string]string{}
                                                                                                                                                                                                                            +    indexToEmails := map[int][]string{}
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +    for _, account := range accounts {
                                                                                                                                                                                                                            +        name := account[0]
                                                                                                                                                                                                                            +        for _, email := range account[1:] {
                                                                                                                                                                                                                            +            if _, has := emailToIndex[email]; !has {
                                                                                                                                                                                                                            +                // 紀錄 email, 對寫入到 對應的index 跟 對應的user name
                                                                                                                                                                                                                            +                emailToIndex[email] = len(emailToIndex)
                                                                                                                                                                                                                            +                emailToName[email] = name
                                                                                                                                                                                                                            +            }
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    parent := make([]int, len(emailToIndex))
                                                                                                                                                                                                                            +    // 初始化
                                                                                                                                                                                                                            +    for i := range parent {
                                                                                                                                                                                                                            +        parent[i] = i
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    var find func(int) int
                                                                                                                                                                                                                            +    find = func(x int) int {
                                                                                                                                                                                                                            +        if parent[x] != x {
                                                                                                                                                                                                                            +            // 遞迴一直找下去
                                                                                                                                                                                                                            +            parent[x] = find(parent[x])
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +        return parent[x]
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    union := func(from, to int) {
                                                                                                                                                                                                                            +        parent[find(from)] = find(to)
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +    for _, account := range accounts {
                                                                                                                                                                                                                            +        firstIndex := emailToIndex[account[1]]
                                                                                                                                                                                                                            +        for _, email := range account[2:] {
                                                                                                                                                                                                                            +            union(emailToIndex[email], firstIndex)
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +    for email, index := range emailToIndex {
                                                                                                                                                                                                                            +        index = find(index)
                                                                                                                                                                                                                            +        indexToEmails[index] = append(indexToEmails[index], email)
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    for _, emails := range indexToEmails {
                                                                                                                                                                                                                            +        for i := 0; i < len(indexToEmails); i++ {
                                                                                                                                                                                                                            +            // fmt.Println(emailToName[indexToEmails[i][0]])
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +        sort.Strings(emails)
                                                                                                                                                                                                                            +        account := append([]string{emailToName[emails[0]]}, emails...)
                                                                                                                                                                                                                            +        result = append(result, account)
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +    return
                                                                                                                                                                                                                            +}
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +func AccountsMerge2(accounts [][]string) (r [][]string) {
                                                                                                                                                                                                                            +    uf := template.UnionFind{}
                                                                                                                                                                                                                            +    uf.Init(len(accounts))
                                                                                                                                                                                                                            +    // emailToID 將所有的 email 都拆開,拆開與 id(數組下標) 對應
                                                                                                                                                                                                                            +    // idToName 將 id(數組下標) 與 name 對應
                                                                                                                                                                                                                            +    // idToEmails 將 id(數組下標) 與整理好去重以後的 email 組對應
                                                                                                                                                                                                                            +    emailToID, idToName, idToEmails, res := make(map[string]int), make(map[int]string), make(map[int][]string), [][]string{}
                                                                                                                                                                                                                            +    for id, acc := range accounts {
                                                                                                                                                                                                                            +        idToName[id] = acc[0]
                                                                                                                                                                                                                            +        for i := 1; i < len(acc); i++ {
                                                                                                                                                                                                                            +            pid, ok := emailToID[acc[i]]
                                                                                                                                                                                                                            +            if ok {
                                                                                                                                                                                                                            +                uf.Union(id, pid)
                                                                                                                                                                                                                            +            }
                                                                                                                                                                                                                            +            emailToID[acc[i]] = id
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    for email, id := range emailToID {
                                                                                                                                                                                                                            +        pid := uf.Find(id)
                                                                                                                                                                                                                            +        idToEmails[pid] = append(idToEmails[pid], email)
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    for id, emails := range idToEmails {
                                                                                                                                                                                                                            +        name := idToName[id]
                                                                                                                                                                                                                            +        sort.Strings(emails)
                                                                                                                                                                                                                            +        res = append(res, append([]string{name}, emails...))
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    return res
                                                                                                                                                                                                                            +}
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +// 暴力解 : Union Find, 結果比較快
                                                                                                                                                                                                                            +func AccountsMergeBurst(accounts [][]string) [][]string {
                                                                                                                                                                                                                            +    if len(accounts) == 0 {
                                                                                                                                                                                                                            +        return [][]string{}
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    uf, result, visited := template.UnionFind{}, [][]string{}, map[int]bool{}
                                                                                                                                                                                                                            +    uf.Init(len(accounts))
                                                                                                                                                                                                                            +    for i := 0; i < len(accounts); i++ {
                                                                                                                                                                                                                            +        for j := i + 1; j < len(accounts); j++ {
                                                                                                                                                                                                                            +            if accounts[i][0] == accounts[j][0] {
                                                                                                                                                                                                                            +                // A, B帳號. 名字一樣
                                                                                                                                                                                                                            +                tmpAmail, tmpBmail, flag := accounts[i][1:], accounts[j][1:], false
                                                                                                                                                                                                                            +                for j := 0; j < len(tmpAmail); j++ {
                                                                                                                                                                                                                            +                    for k := 0; k < len(tmpBmail); k++ {
                                                                                                                                                                                                                            +                        if tmpAmail[j] == tmpBmail[k] {
                                                                                                                                                                                                                            +                            // A,B 帳號, 找到相同的email. 認定為同一人
                                                                                                                                                                                                                            +                            flag = true
                                                                                                                                                                                                                            +                            break
                                                                                                                                                                                                                            +                        }
                                                                                                                                                                                                                            +                    }
                                                                                                                                                                                                                            +                    if flag {
                                                                                                                                                                                                                            +                        break
                                                                                                                                                                                                                            +                    }
                                                                                                                                                                                                                            +                }
                                                                                                                                                                                                                            +                if flag {
                                                                                                                                                                                                                            +                    uf.Union(i, j)
                                                                                                                                                                                                                            +                }
                                                                                                                                                                                                                            +            }
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    for i := 0; i < len(accounts); i++ {
                                                                                                                                                                                                                            +        if visited[i] {
                                                                                                                                                                                                                            +            continue
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +        emails, account, tmpMap := accounts[i][1:], []string{accounts[i][0]}, map[string]string{}
                                                                                                                                                                                                                            +        for j := i + 1; j < len(accounts); j++ {
                                                                                                                                                                                                                            +            if uf.Find(j) == uf.Find(i) {
                                                                                                                                                                                                                            +                visited[j] = true
                                                                                                                                                                                                                            +                for _, v := range accounts[j][1:] {
                                                                                                                                                                                                                            +                    tmpMap[v] = v
                                                                                                                                                                                                                            +                }
                                                                                                                                                                                                                            +            }
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +        // A 帳號 Email
                                                                                                                                                                                                                            +        for _, v := range emails {
                                                                                                                                                                                                                            +            tmpMap[v] = v
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +        emails = []string{}
                                                                                                                                                                                                                            +        for key := range tmpMap {
                                                                                                                                                                                                                            +            emails = append(emails, key)
                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                            +        sort.Strings(emails)
                                                                                                                                                                                                                            +        account = append(account, emails...)
                                                                                                                                                                                                                            +        result = append(result, account)
                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                            +    return result
                                                                                                                                                                                                                            +}
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            +
                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                            results matching ""

                                                                                                                                                                                                                            +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                              No results matching ""

                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              + + + + + + +
                                                                                                                                                                                                                              + + +
                                                                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0733.Flood-Fill/images/flood1-grid.jpg b/Leetcode/0733.Flood-Fill/images/flood1-grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd7ba981ef9aba5b412f702b322a89bc9e28ba33 GIT binary patch literal 17608 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 a6WCZ?cCi + + + + + 0733.Flood Fill · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                              0733.Flood Fill

                                                                                                                                                                                                                              題目

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              An image is represented by an m x n integer grid image where image[i][j] represents the pixel value of the image.

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              You are also given three integers sr,sc, and color. You should perform a flood fill on the image starting from the pixel image[sr][sc].

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              To perform a flood fill, consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color), and so on. Replace the color of all of the aforementioned pixels with color.

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              Return the modified image after performing the flood fill.

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              Example 1: +

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              Input: image = [[1,1,1],[1,1,0],[1,0,1]], sr = 1, sc = 1, color = 2
                                                                                                                                                                                                                              +Output: [[2,2,2],[2,2,0],[2,0,1]]
                                                                                                                                                                                                                              +Explanation: From the center of the image with position (sr, sc) = (1, 1) (i.e., the red pixel), all pixels connected by a path of the same color as the starting pixel (i.e., the blue pixels) are colored with the new color.
                                                                                                                                                                                                                              +Note the bottom corner is not colored 2, because it is not 4-directionally connected to the starting pixel.
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              Example 2:

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              Input: image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, color = 0
                                                                                                                                                                                                                              +Output: [[0,0,0],[0,0,0]]
                                                                                                                                                                                                                              +Explanation: The starting pixel is already colored 0, so no changes are made to the image.
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              Constraints:

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                              • m == image.length
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • n == image[i].length
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • 1 <= m, n <= 50
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • 0 <= image[i][j], color < 216
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • 0 <= sr < m
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • 0 <= sc < n
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              題目大意

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              有一個以二維整數陣列表示的圖畫,每個整數表示該圖畫的像素值大小,數值在 0 到 65535 之間。 +給你一個坐標 (sr, sc) 表示圖像渲染開始的像素值(行 ,列)和一個新的顏色值新顏色,讓您重新上色該幅圖像。

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              為了完成上顏色工作,從主板坐標開始,記錄主板坐標的上下四個方向上像素值與主板坐標相同的完整像素點,連接再記錄這四個方向上條件符合的像素點與它們對應的四個像素點方向上像素值與主板坐標的連通像素點相同,……,重複該過程。將所有有記錄的像素點的顏色值改為新的顏色值。最後返回經過上顏色渲染後的圖像。

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              注意:

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                              • image 和 image[0] 的長度在範圍 [1, 50] 內。
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • 給出的初始點將滿足 0 <= sr < image.length 和 0 <= sc < image[0].length。
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              • image[i][j] 和 newColor 表示的顏色值在範圍 [0, 65535] 內。
                                                                                                                                                                                                                              • +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              解題思路

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              一個給出二維的圖片點陣,每個點陣都有一個數字。給出起點一個坐標,要求從這個起點坐標開始,把所有與這個起點設置的點都染色成新的顏色。 +這題是標準的洪水填充算法。可以用 DFS 也可以用 BFS 。

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              BFS比較適合找最短路徑,DFS比較適合找所有路徑 +DFS使用遞迴比較好寫

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              使用DFS的解法:

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                              1. 檢查起始點的顏色是否等於新的顏色,如果是則直接返回圖像。
                                                                                                                                                                                                                              2. +
                                                                                                                                                                                                                              3. 呼叫深度優先搜索函數dfs,傳入起始點座標sr和sc。
                                                                                                                                                                                                                              4. +
                                                                                                                                                                                                                              5. 在dfs函數中,檢查當前座標的顏色是否等於起始點的顏色,如果是則將其顏色修改為新的顏色。
                                                                                                                                                                                                                              6. +
                                                                                                                                                                                                                              7. 遞迴地對當前座標的四個相鄰方格進行dfs。
                                                                                                                                                                                                                              8. +
                                                                                                                                                                                                                              9. 返回填充完成的圖像。
                                                                                                                                                                                                                              10. +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              時間複雜度: 圖像中的每個方格最多被訪問一次,因此時間複雜度為O(mn),其中m和n分別為圖像的行數和列數。 +空間複雜度: 使用了遞迴調用的栈空間,空間複雜度為O(mn)。

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              使用BFS的解題思路如下:

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                              1. 檢查起始點的顏色是否等於新的顏色,如果是則直接返回圖像。
                                                                                                                                                                                                                              2. +
                                                                                                                                                                                                                              3. 創建一個隊列,將起始點的座標(sr, sc)加入隊列中。
                                                                                                                                                                                                                              4. +
                                                                                                                                                                                                                              5. 創建一個訪問過的集合,將起始點的座標(sr, sc)添加到集合中,表示已經訪問過。
                                                                                                                                                                                                                              6. +
                                                                                                                                                                                                                              7. 進入BFS循環,當隊列不為空時,執行以下操作:
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                • 從隊列中取出一個座標(current_r, current_c)。
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • 檢查該座標的顏色是否等於起始點的顏色,如果是,將該座標的顏色修改為新的顏色。
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • 檢查該座標的四個相鄰方格,如果相鄰方格的座標有效且顏色等於起始點的顏色,且該相鄰方格的座標還沒有被訪問過,則將該相鄰方格的座標加入隊列中,同時將該相鄰方格的座標添加到訪問過的集合中。
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • 重複以上步驟,直到隊列為空。
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                              8. +
                                                                                                                                                                                                                              9. 返回填充完成的圖像。
                                                                                                                                                                                                                              10. +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              時間複雜度和空間複雜度的分析與DFS解法相同。 +使用BFS的解法同樣可以完成泛洪填充的任務,不同的是使用隊列來保存待處理的座標,而不是使用遞迴函數。

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              來源

                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                              解答

                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0733.Flood-Fill/main.go

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              package floodfill
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +// DFS
                                                                                                                                                                                                                              +func FloodFill(image [][]int, sr int, sc int, color int) [][]int {
                                                                                                                                                                                                                              +    oldColor := image[sr][sc]
                                                                                                                                                                                                                              +    if color == oldColor {
                                                                                                                                                                                                                              +        return image
                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                              +    dfsfill(image, sr, sc, oldColor, color)
                                                                                                                                                                                                                              +    return image
                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +func dfsfill(image [][]int, row, col, oldColor, newColor int) {
                                                                                                                                                                                                                              +    // Check if the current pixel is out of bounds or does not have the old color
                                                                                                                                                                                                                              +    if row < 0 || row >= len(image) || col < 0 || col >= len(image[0]) || image[row][col] != oldColor {
                                                                                                                                                                                                                              +        return
                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    // Update the current pixel with the new color
                                                                                                                                                                                                                              +    image[row][col] = newColor
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    // Recursively perform flood fill on the adjacent pixels
                                                                                                                                                                                                                              +    dfsfill(image, row-1, col, oldColor, newColor) // Up
                                                                                                                                                                                                                              +    dfsfill(image, row+1, col, oldColor, newColor) // Down
                                                                                                                                                                                                                              +    dfsfill(image, row, col-1, oldColor, newColor) // Left
                                                                                                                                                                                                                              +    dfsfill(image, row, col+1, oldColor, newColor) // Right
                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +type Point struct {
                                                                                                                                                                                                                              +    row, col int
                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +func FloodFillBFS(image [][]int, sr int, sc int, newColor int) [][]int {
                                                                                                                                                                                                                              +    // Check if the starting point is out of bounds or already has the new color
                                                                                                                                                                                                                              +    if sr < 0 || sr >= len(image) || sc < 0 || sc >= len(image[0]) || image[sr][sc] == newColor {
                                                                                                                                                                                                                              +        return image
                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    // Get the old color at the starting point
                                                                                                                                                                                                                              +    oldColor := image[sr][sc]
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    // Create a queue and enqueue the starting point
                                                                                                                                                                                                                              +    queue := []Point{{sr, sc}}
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    // Define the directions (up, down, left, right)
                                                                                                                                                                                                                              +    directions := [][]int{{-1, 0}, {1, 0}, {0, -1}, {0, 1}}
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    // Perform BFS
                                                                                                                                                                                                                              +    for len(queue) > 0 {
                                                                                                                                                                                                                              +        // Dequeue a point from the queue
                                                                                                                                                                                                                              +        point := queue[0]
                                                                                                                                                                                                                              +        queue = queue[1:]
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +        // Update the point with the new color
                                                                                                                                                                                                                              +        image[point.row][point.col] = newColor
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +        // Explore the neighboring pixels
                                                                                                                                                                                                                              +        for _, dir := range directions {
                                                                                                                                                                                                                              +            newRow, newCol := point.row+dir[0], point.col+dir[1]
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +            // Check if the neighboring pixel is within bounds and has the old color
                                                                                                                                                                                                                              +            if newRow >= 0 && newRow < len(image) && newCol >= 0 && newCol < len(image[0]) && image[newRow][newCol] == oldColor {
                                                                                                                                                                                                                              +                // Enqueue the neighboring pixel
                                                                                                                                                                                                                              +                queue = append(queue, Point{newRow, newCol})
                                                                                                                                                                                                                              +            }
                                                                                                                                                                                                                              +        }
                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +    return image
                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +

                                                                                                                                                                                                                              Benchmark

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              goos: darwin
                                                                                                                                                                                                                              +goarch: amd64
                                                                                                                                                                                                                              +pkg: LeetcodeGolang/Leetcode/0733.Flood-Fill
                                                                                                                                                                                                                              +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                                                              +BenchmarkFloodFillDFS-8         384756555                4.486 ns/op           0 B/op          0 allocs/op
                                                                                                                                                                                                                              +BenchmarkFloodFillBFS-8         309088303                3.642 ns/op           0 B/op          0 allocs/op
                                                                                                                                                                                                                              +PASS
                                                                                                                                                                                                                              +ok      LeetcodeGolang/Leetcode/0733.Flood-Fill 3.572s
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              +
                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                              results matching ""

                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                No results matching ""

                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                + + + + + + +
                                                                                                                                                                                                                                + + +
                                                                                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0733.Flood-Fill/main.go b/Leetcode/0733.Flood-Fill/main.go new file mode 100644 index 000000000..f637a17b1 --- /dev/null +++ b/Leetcode/0733.Flood-Fill/main.go @@ -0,0 +1,70 @@ +package floodfill + +// DFS +func FloodFill(image [][]int, sr int, sc int, color int) [][]int { + oldColor := image[sr][sc] + if color == oldColor { + return image + } + dfsfill(image, sr, sc, oldColor, color) + return image +} + +func dfsfill(image [][]int, row, col, oldColor, newColor int) { + // Check if the current pixel is out of bounds or does not have the old color + if row < 0 || row >= len(image) || col < 0 || col >= len(image[0]) || image[row][col] != oldColor { + return + } + + // Update the current pixel with the new color + image[row][col] = newColor + + // Recursively perform flood fill on the adjacent pixels + dfsfill(image, row-1, col, oldColor, newColor) // Up + dfsfill(image, row+1, col, oldColor, newColor) // Down + dfsfill(image, row, col-1, oldColor, newColor) // Left + dfsfill(image, row, col+1, oldColor, newColor) // Right +} + +type Point struct { + row, col int +} + +func FloodFillBFS(image [][]int, sr int, sc int, newColor int) [][]int { + // Check if the starting point is out of bounds or already has the new color + if sr < 0 || sr >= len(image) || sc < 0 || sc >= len(image[0]) || image[sr][sc] == newColor { + return image + } + + // Get the old color at the starting point + oldColor := image[sr][sc] + + // Create a queue and enqueue the starting point + queue := []Point{{sr, sc}} + + // Define the directions (up, down, left, right) + directions := [][]int{{-1, 0}, {1, 0}, {0, -1}, {0, 1}} + + // Perform BFS + for len(queue) > 0 { + // Dequeue a point from the queue + point := queue[0] + queue = queue[1:] + + // Update the point with the new color + image[point.row][point.col] = newColor + + // Explore the neighboring pixels + for _, dir := range directions { + newRow, newCol := point.row+dir[0], point.col+dir[1] + + // Check if the neighboring pixel is within bounds and has the old color + if newRow >= 0 && newRow < len(image) && newCol >= 0 && newCol < len(image[0]) && image[newRow][newCol] == oldColor { + // Enqueue the neighboring pixel + queue = append(queue, Point{newRow, newCol}) + } + } + } + + return image +} diff --git a/Leetcode/0733.Flood-Fill/main_test.go b/Leetcode/0733.Flood-Fill/main_test.go new file mode 100644 index 000000000..831d0bee9 --- /dev/null +++ b/Leetcode/0733.Flood-Fill/main_test.go @@ -0,0 +1,101 @@ +package floodfill + +import ( + "reflect" + "testing" +) + +var tests = []struct { + image [][]int + sr, sc, color int + expected [][]int +}{ + { + [][]int{ + {1, 1, 1}, + {1, 1, 0}, + {1, 0, 1}, + }, + 1, 1, 2, + [][]int{ + {2, 2, 2}, + {2, 2, 0}, + {2, 0, 1}, + }, + }, + { + [][]int{ + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + }, + 1, 1, 1, + [][]int{ + {1, 1, 1}, + {1, 1, 1}, + {1, 1, 1}, + }, + }, + { + [][]int{ + {1, 1, 1}, + {1, 1, 1}, + {1, 1, 1}, + }, + 0, 0, 0, + [][]int{ + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + }, + }, + // Add more test cases here if needed +} + +func TestFloodFillDFS(t *testing.T) { + for _, tt := range tests { + result := FloodFill(tt.image, tt.sr, tt.sc, tt.color) + // Check if the result matches the expected output + if !reflect.DeepEqual(result, tt.expected) { + t.Errorf("FloodFillDFS(%v, %d, %d, %d) returned %+v, expected %+v", + tt.image, tt.sr, tt.sc, tt.color, result, tt.expected) + } + } +} + +func TestFloodFillBFS(t *testing.T) { + for _, tt := range tests { + result := FloodFillBFS(tt.image, tt.sr, tt.sc, tt.color) + // Check if the result matches the expected output + if !reflect.DeepEqual(result, tt.expected) { + t.Errorf("FloodFillBFS(%v, %d, %d, %d) returned %+v, expected %+v", + tt.image, tt.sr, tt.sc, tt.color, result, tt.expected) + } + } +} + +func BenchmarkFloodFillDFS(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FloodFill(tests[0].image, tests[0].sr, tests[0].sc, tests[0].color) + } +} + +func BenchmarkFloodFillBFS(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FloodFillBFS(tests[0].image, tests[0].sr, tests[0].sc, tests[0].color) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0733.Flood-Fill -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0733.Flood-Fill +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkFloodFillDFS-8 384756555 4.486 ns/op 0 B/op 0 allocs/op +BenchmarkFloodFillBFS-8 309088303 3.642 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0733.Flood-Fill 3.572s +*/ diff --git a/Leetcode/0746.Min-Cost-Climbing-Stairs/index.html b/Leetcode/0746.Min-Cost-Climbing-Stairs/index.html new file mode 100644 index 000000000..19d358434 --- /dev/null +++ b/Leetcode/0746.Min-Cost-Climbing-Stairs/index.html @@ -0,0 +1,4048 @@ + + + + + + + 746. Min Cost Climbing Stairs · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                746. Min Cost Climbing Stairs

                                                                                                                                                                                                                                題目

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                You are given an integer array cost where cost[i] is the cost of ith step on a staircase. Once you pay the cost, you can either climb one or two steps.

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                You can either start from the step with index 0, or the step with index 1.

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Return the minimum cost to reach the top of the floor.

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Example 1:

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Input: cost = [10,15,20] +Output: 15 +Explanation: You will start at index 1.

                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                • Pay 15 and climb two steps to reach the top. +The total cost is 15. +Example 2:
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Input: cost = [1,100,1,1,1,100,1,1,100,1] +Output: 6 +Explanation: You will start at index 0.

                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                • Pay 1 and climb two steps to reach index 2.
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • Pay 1 and climb two steps to reach index 4.
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • Pay 1 and climb two steps to reach index 6.
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • Pay 1 and climb one step to reach index 7.
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • Pay 1 and climb two steps to reach index 9.
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                • Pay 1 and climb one step to reach the top. +The total cost is 6.
                                                                                                                                                                                                                                • +
                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Constraints:

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                2 <= cost.length <= 1000 +0 <= cost[i] <= 999

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                題目大意

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                陣列的每個索引做為一個階梯,第 i 個階梯對應著一個非負數的體力花費值 cost[i] (索引從 0 開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。 在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                解題思路

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                cur 變數存儲從第 i-2 步到達第 i 步的最小花費。 +last 變數存儲從第 i-1 步到達第 i 步的最小花費。 +在每次迭代中,函數都會比較 cur 和 last 變數的值,並選擇較小的那個存儲在 cur 變數中。 +在迭代結束時,last 變數將存儲爬完所有樓梯的最小花費。

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                cost := []int{1, 100, 1, 1, 1, 100, 1, 1, 100, 1}

                                                                                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                迭代curlast
                                                                                                                                                                                                                                201
                                                                                                                                                                                                                                312
                                                                                                                                                                                                                                422
                                                                                                                                                                                                                                523
                                                                                                                                                                                                                                633
                                                                                                                                                                                                                                734
                                                                                                                                                                                                                                844
                                                                                                                                                                                                                                945
                                                                                                                                                                                                                                1056
                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Big O

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                時間複雜 : O(n) +空間複雜 : O(1)

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                來源

                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                解答

                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0746.Min-Cost-Climbing-Stairs/main.go

                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                package mincostclimbingstairs
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +// 時間複雜 O(n), 空間複雜 O(1)
                                                                                                                                                                                                                                +func MinCostClimbingStairs(cost []int) int {
                                                                                                                                                                                                                                +    dp := make([]int, len(cost))
                                                                                                                                                                                                                                +    dp[0], dp[1] = cost[0], cost[1]
                                                                                                                                                                                                                                +    for i := 2; i < len(cost); i++ {
                                                                                                                                                                                                                                +        dp[i] = cost[i] + min(dp[i-1], dp[i-2])
                                                                                                                                                                                                                                +    }
                                                                                                                                                                                                                                +    return min(dp[len(cost)-2], dp[len(cost)-1])
                                                                                                                                                                                                                                +}
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +func min(a, b int) int {
                                                                                                                                                                                                                                +    if a > b {
                                                                                                                                                                                                                                +        return b
                                                                                                                                                                                                                                +    }
                                                                                                                                                                                                                                +    return a
                                                                                                                                                                                                                                +}
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +// 時間複雜 O(n), 空間複雜 O(1)
                                                                                                                                                                                                                                +// 優化
                                                                                                                                                                                                                                +// 使用了兩個變數cur和last,
                                                                                                                                                                                                                                +// cur 變數存儲從第 i-2 步到達第 i 步的最小花費。
                                                                                                                                                                                                                                +// last 變數存儲從第 i-1 步到達第 i 步的最小花費。
                                                                                                                                                                                                                                +// 比較兩種選擇的花費:
                                                                                                                                                                                                                                +// 從第2階開始(i := 2),一直迭代到最後一階(i < len(cost)+1)。
                                                                                                                                                                                                                                +// 在每一步驟中:
                                                                                                                                                                                                                                +// 比較兩種選擇的花費:
                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                +//    選擇從上一階跳到當前階的花費:last + cost[i-1]
                                                                                                                                                                                                                                +//    選擇從上上階跳到當前階的花費:cur + cost[i-2]
                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                +// 選擇花費較小的方案:
                                                                                                                                                                                                                                +//
                                                                                                                                                                                                                                +//    如果 last + cost[i-1] 更小,則將 last 的值更新為 cur + cost[i-2],並將 cur 的值更新為 last(即上一步的最小花費)。
                                                                                                                                                                                                                                +//    否則,將 last 的值更新為 last + cost[i-1],並將 cur 的值更新為 last(即上一步的最小花費)。
                                                                                                                                                                                                                                +func MinCostClimbingStairsOptimize(cost []int) int {
                                                                                                                                                                                                                                +    var cur, last int
                                                                                                                                                                                                                                +    for i := 2; i < len(cost)+1; i++ {
                                                                                                                                                                                                                                +        // 選擇從上一階跳到當前階的花費:last + cost[i-1]
                                                                                                                                                                                                                                +        // 選擇從上上階跳到當前階的花費:cur + cost[i-2]
                                                                                                                                                                                                                                +        if last+cost[i-1] > cur+cost[i-2] {
                                                                                                                                                                                                                                +            cur, last = last, cur+cost[i-2]
                                                                                                                                                                                                                                +        } else {
                                                                                                                                                                                                                                +            cur, last = last, last+cost[i-1]
                                                                                                                                                                                                                                +        }
                                                                                                                                                                                                                                +        // fmt.Printf("%-d | %-d | %-d\n", i, cur, last)
                                                                                                                                                                                                                                +    }
                                                                                                                                                                                                                                +    return last
                                                                                                                                                                                                                                +}
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +

                                                                                                                                                                                                                                Benchmark

                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                goos: darwin
                                                                                                                                                                                                                                +goarch: amd64
                                                                                                                                                                                                                                +pkg: LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs
                                                                                                                                                                                                                                +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz
                                                                                                                                                                                                                                +BenchmarkMinCostClimbingStairs-4                36693742                30.17 ns/op           24 B/op          1 allocs/op
                                                                                                                                                                                                                                +BenchmarkMinCostClimbingStairsOptimize-4        405489464                3.091 ns/op           0 B/op          0 allocs/op
                                                                                                                                                                                                                                +PASS
                                                                                                                                                                                                                                +ok      LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs   2.713s
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                results matching ""

                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                  No results matching ""

                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  + + + + + + +
                                                                                                                                                                                                                                  + + +
                                                                                                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0746.Min-Cost-Climbing-Stairs/main.go b/Leetcode/0746.Min-Cost-Climbing-Stairs/main.go new file mode 100644 index 000000000..1edcb03d6 --- /dev/null +++ b/Leetcode/0746.Min-Cost-Climbing-Stairs/main.go @@ -0,0 +1,50 @@ +package mincostclimbingstairs + +// 時間複雜 O(n), 空間複雜 O(1) +func MinCostClimbingStairs(cost []int) int { + dp := make([]int, len(cost)) + dp[0], dp[1] = cost[0], cost[1] + for i := 2; i < len(cost); i++ { + dp[i] = cost[i] + min(dp[i-1], dp[i-2]) + } + return min(dp[len(cost)-2], dp[len(cost)-1]) +} + +func min(a, b int) int { + if a > b { + return b + } + return a +} + +// 時間複雜 O(n), 空間複雜 O(1) +// 優化 +// 使用了兩個變數cur和last, +// cur 變數存儲從第 i-2 步到達第 i 步的最小花費。 +// last 變數存儲從第 i-1 步到達第 i 步的最小花費。 +// 比較兩種選擇的花費: +// 從第2階開始(i := 2),一直迭代到最後一階(i < len(cost)+1)。 +// 在每一步驟中: +// 比較兩種選擇的花費: +// +// 選擇從上一階跳到當前階的花費:last + cost[i-1] +// 選擇從上上階跳到當前階的花費:cur + cost[i-2] +// +// 選擇花費較小的方案: +// +// 如果 last + cost[i-1] 更小,則將 last 的值更新為 cur + cost[i-2],並將 cur 的值更新為 last(即上一步的最小花費)。 +// 否則,將 last 的值更新為 last + cost[i-1],並將 cur 的值更新為 last(即上一步的最小花費)。 +func MinCostClimbingStairsOptimize(cost []int) int { + var cur, last int + for i := 2; i < len(cost)+1; i++ { + // 選擇從上一階跳到當前階的花費:last + cost[i-1] + // 選擇從上上階跳到當前階的花費:cur + cost[i-2] + if last+cost[i-1] > cur+cost[i-2] { + cur, last = last, cur+cost[i-2] + } else { + cur, last = last, last+cost[i-1] + } + // fmt.Printf("%-d | %-d | %-d\n", i, cur, last) + } + return last +} diff --git a/Leetcode/0746.Min-Cost-Climbing-Stairs/main_test.go b/Leetcode/0746.Min-Cost-Climbing-Stairs/main_test.go new file mode 100644 index 000000000..64a64bcf7 --- /dev/null +++ b/Leetcode/0746.Min-Cost-Climbing-Stairs/main_test.go @@ -0,0 +1,61 @@ +package mincostclimbingstairs + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{10, 15, 20}, + 15, + }, + { + []int{1, 100, 1, 1, 1, 100, 1, 1, 100, 1}, + 6, + }, +} + +func TestMinCostClimbingStairs(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MinCostClimbingStairs(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestMinCostClimbingStairsOptimize(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := MinCostClimbingStairsOptimize(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkMinCostClimbingStairs(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinCostClimbingStairs(tests[0].arg1) + } +} + +func BenchmarkMinCostClimbingStairsOptimize(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + MinCostClimbingStairsOptimize(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs +cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz +BenchmarkMinCostClimbingStairs-4 36693742 30.17 ns/op 24 B/op 1 allocs/op +BenchmarkMinCostClimbingStairsOptimize-4 405489464 3.091 ns/op 0 B/op 0 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs 2.713s +*/ diff --git a/Leetcode/0752.Open-the-Lock/index.html b/Leetcode/0752.Open-the-Lock/index.html new file mode 100644 index 000000000..2a3287851 --- /dev/null +++ b/Leetcode/0752.Open-the-Lock/index.html @@ -0,0 +1,4166 @@ + + + + + + + 0752.Open the Lock · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                  752. Open the Lock

                                                                                                                                                                                                                                  You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. The wheels can rotate freely and wrap around: for example we can turn '9' to be '0', or '0' to be '9'. Each move consists of turning one wheel one slot.

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  The lock initially starts at '0000', a string representing the state of the 4 wheels.

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it.

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  Given a target representing the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible.

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  Example 1:

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  Input: deadends = ["0201","0101","0102","1212","2002"], target = "0202"
                                                                                                                                                                                                                                  +Output: 6
                                                                                                                                                                                                                                  +Explanation: 
                                                                                                                                                                                                                                  +A sequence of valid moves would be "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202".
                                                                                                                                                                                                                                  +Note that a sequence like "0000" -> "0001" -> "0002" -> "0102" -> "0202" would be invalid,
                                                                                                                                                                                                                                  +because the wheels of the lock become stuck after the display becomes the dead end "0102".
                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  Example 2:

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  Input: deadends = ["8888"], target = "0009"
                                                                                                                                                                                                                                  +Output: 1
                                                                                                                                                                                                                                  +Explanation: We can turn the last wheel in reverse to move from "0000" -> "0009".
                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  Example 3:

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  Input: deadends = ["8887","8889","8878","8898","8788","8988","7888","9888"], target = "8888"
                                                                                                                                                                                                                                  +Output: -1
                                                                                                                                                                                                                                  +Explanation: We cannot reach the target without getting stuck.
                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  Constraints:

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                  • 1 <= deadends.length <= 500
                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                  • deadends[i].length == 4
                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                  • target.length == 4
                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                  • target will not be in the list deadends.
                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                  • target and deadends[i] consist of digits only.
                                                                                                                                                                                                                                  • +
                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  題目大意

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  有一個四個圓形播盤的轉盤鎖, 每個播盤有0~9共10個數字, 每個播盤上下旋轉可以把 0變成9 或 9變成0. 每次只能旋轉一個播盤 +初始直接為0.且有一組 deadends 數組. 不能接數字轉到其中任一組. 如果無法得到 target 回傳 -1

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  解題思路

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  從 0000開始轉, 轉一次可窮舉出 "1000", "9000", "0100", "0900", "0010", "0090", "0001", "0009". 8 總可能, +再以這八種密碼為基礎, 對每總密碼再轉一下, 窮舉出每個可能 +可以抽象成一副圖, 每個節點有8個相鄰的節點, 讓你求出最短距離

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  方法二: 還可以用雙向BFS, 從起點跟終點開始擴散, 當兩邊有交集時停止

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  方法三: 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散, +那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集 +無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  來源

                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                  解答

                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                  https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0752.Open-the-Lock/main.go

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  package openthelock
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +// 方法ㄧ: 單向BFS
                                                                                                                                                                                                                                  +func OpenLock(deadends []string, target string) int {
                                                                                                                                                                                                                                  +    if target == "0000" {
                                                                                                                                                                                                                                  +        return 0
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +    targetNum := strToInt(target)
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    // 紀錄已窮舉過的密碼, 防止走回頭路
                                                                                                                                                                                                                                  +    visited := make([]bool, 10000)
                                                                                                                                                                                                                                  +    visited[0] = true
                                                                                                                                                                                                                                  +    for _, deadend := range deadends {
                                                                                                                                                                                                                                  +        num := strToInt(deadend)
                                                                                                                                                                                                                                  +        if num == 0 {
                                                                                                                                                                                                                                  +            return -1
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +        visited[num] = true
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    depth, curDepth, nextDepth := 0, []int16{0}, make([]int16, 0)
                                                                                                                                                                                                                                  +    var nextNum int16
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    for len(curDepth) > 0 {
                                                                                                                                                                                                                                  +        nextDepth = nextDepth[0:0]
                                                                                                                                                                                                                                  +        // 當前Queue中所有的節點向外擴散
                                                                                                                                                                                                                                  +        for _, curNum := range curDepth {
                                                                                                                                                                                                                                  +            // 遍歷八種組合
                                                                                                                                                                                                                                  +            for incrementer := int16(1000); incrementer > 0; incrementer /= 10 {
                                                                                                                                                                                                                                  +                nextNum = PlusOne(curNum, incrementer)
                                                                                                                                                                                                                                  +                if nextNum == targetNum {
                                                                                                                                                                                                                                  +                    return depth + 1
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +                if !visited[nextNum] {
                                                                                                                                                                                                                                  +                    visited[nextNum] = true
                                                                                                                                                                                                                                  +                    nextDepth = append(nextDepth, nextNum)
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +                nextNum = MinusOne(curNum, incrementer)
                                                                                                                                                                                                                                  +                if nextNum == targetNum {
                                                                                                                                                                                                                                  +                    return depth + 1
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +                if !visited[nextNum] {
                                                                                                                                                                                                                                  +                    visited[nextNum] = true
                                                                                                                                                                                                                                  +                    nextDepth = append(nextDepth, nextNum)
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +        curDepth, nextDepth = nextDepth, curDepth
                                                                                                                                                                                                                                  +        // 增加步數
                                                                                                                                                                                                                                  +        depth++
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    return -1
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +/* Note: Golang set
                                                                                                                                                                                                                                  +type void struct{}
                                                                                                                                                                                                                                  +var member void
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +set := make(map[string]void) // New empty set
                                                                                                                                                                                                                                  +set["Foo"] = member          // Add
                                                                                                                                                                                                                                  +for k := range set {         // Loop
                                                                                                                                                                                                                                  +    fmt.Println(k)
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +delete(set, "Foo")      // Delete
                                                                                                                                                                                                                                  +size := len(set)        // Size
                                                                                                                                                                                                                                  +_, exists := set["Foo"] // Membership
                                                                                                                                                                                                                                  +*/
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +// 方法二: 雙向BFS. 不在使用 Queue而是用 hashset, 快速判斷兩者是否交集
                                                                                                                                                                                                                                  +// 從起點跟終點開始擴散, 當兩邊有交集時停止
                                                                                                                                                                                                                                  +func OpenLockBiDirection(deadends []string, target string) int {
                                                                                                                                                                                                                                  +    if target == "0000" {
                                                                                                                                                                                                                                  +        return 0
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +    targetNum := strToInt(target)
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    // 紀錄已窮舉過的密碼, 防止走回頭路
                                                                                                                                                                                                                                  +    visited := make([]bool, 10000)
                                                                                                                                                                                                                                  +    for _, deadend := range deadends {
                                                                                                                                                                                                                                  +        num := strToInt(deadend)
                                                                                                                                                                                                                                  +        if num == 0 {
                                                                                                                                                                                                                                  +            return -1
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +        visited[num] = true
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    depth := 0
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    // 起點跟終點初始化
                                                                                                                                                                                                                                  +    curDepth := make(map[int16]struct{})
                                                                                                                                                                                                                                  +    nextDepth := make(map[int16]struct{})
                                                                                                                                                                                                                                  +    curDepth[0] = struct{}{}
                                                                                                                                                                                                                                  +    nextDepth[targetNum] = struct{}{}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    var nextNum int16
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    for len(curDepth) != 0 && len(nextDepth) != 0 {
                                                                                                                                                                                                                                  +        // 儲存 curDepth 的擴散結果
                                                                                                                                                                                                                                  +        tmp := make(map[int16]struct{})
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +        // curDepth的節點向外擴散
                                                                                                                                                                                                                                  +        for curNum := range curDepth {
                                                                                                                                                                                                                                  +            // 判斷是否達到終點
                                                                                                                                                                                                                                  +            if visited[curNum] {
                                                                                                                                                                                                                                  +                continue
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +            _, exists := nextDepth[curNum]
                                                                                                                                                                                                                                  +            if exists {
                                                                                                                                                                                                                                  +                return depth
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +            visited[curNum] = true
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +            // 遍歷八種組合
                                                                                                                                                                                                                                  +            for incrementer := int16(1000); incrementer > 0; incrementer /= 10 {
                                                                                                                                                                                                                                  +                nextNum = PlusOne(curNum, incrementer)
                                                                                                                                                                                                                                  +                if !visited[nextNum] {
                                                                                                                                                                                                                                  +                    tmp[nextNum] = struct{}{}
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +                nextNum = MinusOne(curNum, incrementer)
                                                                                                                                                                                                                                  +                if !visited[nextNum] {
                                                                                                                                                                                                                                  +                    tmp[nextNum] = struct{}{}
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +        // 小技巧, 這裏交換 curDepth, nextDepth .
                                                                                                                                                                                                                                  +        // 下一輪 whihe會擴散 nextDepth.
                                                                                                                                                                                                                                  +        // 所以只要默認擴散curDepth, 就相當於輪流擴散curDepth, nextDepth
                                                                                                                                                                                                                                  +        curDepth, nextDepth = nextDepth, tmp
                                                                                                                                                                                                                                  +        // 增加步數
                                                                                                                                                                                                                                  +        depth++
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    return -1
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +// 方法三 : 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散,
                                                                                                                                                                                                                                  +// 那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集
                                                                                                                                                                                                                                  +// 無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的
                                                                                                                                                                                                                                  +func OpenLockBiDirectionOptimization(deadends []string, target string) int {
                                                                                                                                                                                                                                  +    if target == "0000" {
                                                                                                                                                                                                                                  +        return 0
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +    targetNum := strToInt(target)
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    // 紀錄已窮舉過的密碼, 防止走回頭路
                                                                                                                                                                                                                                  +    visited := make([]bool, 10000)
                                                                                                                                                                                                                                  +    for _, deadend := range deadends {
                                                                                                                                                                                                                                  +        num := strToInt(deadend)
                                                                                                                                                                                                                                  +        if num == 0 {
                                                                                                                                                                                                                                  +            return -1
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +        visited[num] = true
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    depth := 0
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    // 起點跟終點初始化
                                                                                                                                                                                                                                  +    curDepth := make(map[int16]struct{})
                                                                                                                                                                                                                                  +    nextDepth := make(map[int16]struct{})
                                                                                                                                                                                                                                  +    curDepth[0] = struct{}{}
                                                                                                                                                                                                                                  +    nextDepth[targetNum] = struct{}{}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    var nextNum int16
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    for len(curDepth) != 0 && len(nextDepth) != 0 {
                                                                                                                                                                                                                                  +        if len(curDepth) > len(nextDepth) {
                                                                                                                                                                                                                                  +            curDepth, nextDepth = nextDepth, curDepth
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +        // 儲存 curDepth 的擴散結果
                                                                                                                                                                                                                                  +        tmp := make(map[int16]struct{})
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +        // curDepth的節點向外擴散
                                                                                                                                                                                                                                  +        for curNum := range curDepth {
                                                                                                                                                                                                                                  +            // 判斷是否達到終點
                                                                                                                                                                                                                                  +            if visited[curNum] {
                                                                                                                                                                                                                                  +                continue
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +            _, exists := nextDepth[curNum]
                                                                                                                                                                                                                                  +            if exists {
                                                                                                                                                                                                                                  +                return depth
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +            visited[curNum] = true
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +            // 遍歷八種組合
                                                                                                                                                                                                                                  +            for incrementer := int16(1000); incrementer > 0; incrementer /= 10 {
                                                                                                                                                                                                                                  +                nextNum = PlusOne(curNum, incrementer)
                                                                                                                                                                                                                                  +                if !visited[nextNum] {
                                                                                                                                                                                                                                  +                    tmp[nextNum] = struct{}{}
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +                nextNum = MinusOne(curNum, incrementer)
                                                                                                                                                                                                                                  +                if !visited[nextNum] {
                                                                                                                                                                                                                                  +                    tmp[nextNum] = struct{}{}
                                                                                                                                                                                                                                  +                }
                                                                                                                                                                                                                                  +            }
                                                                                                                                                                                                                                  +        }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +        // 小技巧, 這裏交換 curDepth, nextDepth .
                                                                                                                                                                                                                                  +        // 下一輪 whihe會擴散 nextDepth.
                                                                                                                                                                                                                                  +        // 所以只要默認擴散curDepth, 就相當於輪流擴散curDepth, nextDepth
                                                                                                                                                                                                                                  +        curDepth, nextDepth = nextDepth, tmp
                                                                                                                                                                                                                                  +        // 增加步數
                                                                                                                                                                                                                                  +        depth++
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +    return -1
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +func PlusOne(curNum int16, incrementer int16) (nextNum int16) {
                                                                                                                                                                                                                                  +    digit := (curNum / incrementer) % 10
                                                                                                                                                                                                                                  +    if digit == 9 {
                                                                                                                                                                                                                                  +        nextNum = curNum - 9*incrementer
                                                                                                                                                                                                                                  +    } else {
                                                                                                                                                                                                                                  +        nextNum = curNum + incrementer
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +    return nextNum
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +func MinusOne(curNum int16, incrementer int16) (nextNum int16) {
                                                                                                                                                                                                                                  +    digit := (curNum / incrementer) % 10
                                                                                                                                                                                                                                  +    if digit == 0 {
                                                                                                                                                                                                                                  +        nextNum = curNum + 9*incrementer
                                                                                                                                                                                                                                  +    } else {
                                                                                                                                                                                                                                  +        nextNum = curNum - incrementer
                                                                                                                                                                                                                                  +    }
                                                                                                                                                                                                                                  +    return nextNum
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +func strToInt(str string) int16 {
                                                                                                                                                                                                                                  +    return int16(str[0]-'0')*1000 + int16(str[1]-'0')*100 + int16(str[2]-'0')*10 + int16(str[3]-'0')
                                                                                                                                                                                                                                  +}
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  tags: Medium Leetcode BFS
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                  results matching ""

                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                    No results matching ""

                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    + + + + + + +
                                                                                                                                                                                                                                    + + +
                                                                                                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0752.Open-the-Lock/main.go b/Leetcode/0752.Open-the-Lock/main.go new file mode 100644 index 000000000..12847b60b --- /dev/null +++ b/Leetcode/0752.Open-the-Lock/main.go @@ -0,0 +1,235 @@ +package openthelock + +// 方法ㄧ: 單向BFS +func OpenLock(deadends []string, target string) int { + if target == "0000" { + return 0 + } + targetNum := strToInt(target) + + // 紀錄已窮舉過的密碼, 防止走回頭路 + visited := make([]bool, 10000) + visited[0] = true + for _, deadend := range deadends { + num := strToInt(deadend) + if num == 0 { + return -1 + } + visited[num] = true + } + + depth, curDepth, nextDepth := 0, []int16{0}, make([]int16, 0) + var nextNum int16 + + for len(curDepth) > 0 { + nextDepth = nextDepth[0:0] + // 當前Queue中所有的節點向外擴散 + for _, curNum := range curDepth { + // 遍歷八種組合 + for incrementer := int16(1000); incrementer > 0; incrementer /= 10 { + nextNum = PlusOne(curNum, incrementer) + if nextNum == targetNum { + return depth + 1 + } + if !visited[nextNum] { + visited[nextNum] = true + nextDepth = append(nextDepth, nextNum) + } + + nextNum = MinusOne(curNum, incrementer) + if nextNum == targetNum { + return depth + 1 + } + if !visited[nextNum] { + visited[nextNum] = true + nextDepth = append(nextDepth, nextNum) + } + } + } + curDepth, nextDepth = nextDepth, curDepth + // 增加步數 + depth++ + } + + return -1 +} + +/* Note: Golang set +type void struct{} +var member void + +set := make(map[string]void) // New empty set +set["Foo"] = member // Add +for k := range set { // Loop + fmt.Println(k) +} +delete(set, "Foo") // Delete +size := len(set) // Size +_, exists := set["Foo"] // Membership +*/ + +// 方法二: 雙向BFS. 不在使用 Queue而是用 hashset, 快速判斷兩者是否交集 +// 從起點跟終點開始擴散, 當兩邊有交集時停止 +func OpenLockBiDirection(deadends []string, target string) int { + if target == "0000" { + return 0 + } + targetNum := strToInt(target) + + // 紀錄已窮舉過的密碼, 防止走回頭路 + visited := make([]bool, 10000) + for _, deadend := range deadends { + num := strToInt(deadend) + if num == 0 { + return -1 + } + visited[num] = true + } + + depth := 0 + + // 起點跟終點初始化 + curDepth := make(map[int16]struct{}) + nextDepth := make(map[int16]struct{}) + curDepth[0] = struct{}{} + nextDepth[targetNum] = struct{}{} + + var nextNum int16 + + for len(curDepth) != 0 && len(nextDepth) != 0 { + // 儲存 curDepth 的擴散結果 + tmp := make(map[int16]struct{}) + + // curDepth的節點向外擴散 + for curNum := range curDepth { + // 判斷是否達到終點 + if visited[curNum] { + continue + } + _, exists := nextDepth[curNum] + if exists { + return depth + } + visited[curNum] = true + + // 遍歷八種組合 + for incrementer := int16(1000); incrementer > 0; incrementer /= 10 { + nextNum = PlusOne(curNum, incrementer) + if !visited[nextNum] { + tmp[nextNum] = struct{}{} + } + + nextNum = MinusOne(curNum, incrementer) + if !visited[nextNum] { + tmp[nextNum] = struct{}{} + } + } + } + + // 小技巧, 這裏交換 curDepth, nextDepth . + // 下一輪 whihe會擴散 nextDepth. + // 所以只要默認擴散curDepth, 就相當於輪流擴散curDepth, nextDepth + curDepth, nextDepth = nextDepth, tmp + // 增加步數 + depth++ + } + + return -1 +} + +// 方法三 : 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散, +// 那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集 +// 無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的 +func OpenLockBiDirectionOptimization(deadends []string, target string) int { + if target == "0000" { + return 0 + } + targetNum := strToInt(target) + + // 紀錄已窮舉過的密碼, 防止走回頭路 + visited := make([]bool, 10000) + for _, deadend := range deadends { + num := strToInt(deadend) + if num == 0 { + return -1 + } + visited[num] = true + } + + depth := 0 + + // 起點跟終點初始化 + curDepth := make(map[int16]struct{}) + nextDepth := make(map[int16]struct{}) + curDepth[0] = struct{}{} + nextDepth[targetNum] = struct{}{} + + var nextNum int16 + + for len(curDepth) != 0 && len(nextDepth) != 0 { + if len(curDepth) > len(nextDepth) { + curDepth, nextDepth = nextDepth, curDepth + } + // 儲存 curDepth 的擴散結果 + tmp := make(map[int16]struct{}) + + // curDepth的節點向外擴散 + for curNum := range curDepth { + // 判斷是否達到終點 + if visited[curNum] { + continue + } + _, exists := nextDepth[curNum] + if exists { + return depth + } + visited[curNum] = true + + // 遍歷八種組合 + for incrementer := int16(1000); incrementer > 0; incrementer /= 10 { + nextNum = PlusOne(curNum, incrementer) + if !visited[nextNum] { + tmp[nextNum] = struct{}{} + } + + nextNum = MinusOne(curNum, incrementer) + if !visited[nextNum] { + tmp[nextNum] = struct{}{} + } + } + } + + // 小技巧, 這裏交換 curDepth, nextDepth . + // 下一輪 whihe會擴散 nextDepth. + // 所以只要默認擴散curDepth, 就相當於輪流擴散curDepth, nextDepth + curDepth, nextDepth = nextDepth, tmp + // 增加步數 + depth++ + } + + return -1 +} + +func PlusOne(curNum int16, incrementer int16) (nextNum int16) { + digit := (curNum / incrementer) % 10 + if digit == 9 { + nextNum = curNum - 9*incrementer + } else { + nextNum = curNum + incrementer + } + return nextNum +} + +func MinusOne(curNum int16, incrementer int16) (nextNum int16) { + digit := (curNum / incrementer) % 10 + if digit == 0 { + nextNum = curNum + 9*incrementer + } else { + nextNum = curNum - incrementer + } + return nextNum +} + +func strToInt(str string) int16 { + return int16(str[0]-'0')*1000 + int16(str[1]-'0')*100 + int16(str[2]-'0')*10 + int16(str[3]-'0') +} diff --git a/Leetcode/0752.Open-the-Lock/main_test.go b/Leetcode/0752.Open-the-Lock/main_test.go new file mode 100644 index 000000000..f51cb19d6 --- /dev/null +++ b/Leetcode/0752.Open-the-Lock/main_test.go @@ -0,0 +1,85 @@ +package openthelock + +import ( + "testing" +) + +var tests = []struct { + arg1 []string + arg2 string + want int +}{ + { + []string{"0201", "0101", "0102", "1212", "2002"}, + "0202", + 6, + }, + { + []string{"8888"}, + "0009", + 1, + }, + { + []string{"8887", "8889", "8878", "8898", "8788", "8988", "7888", "9888"}, + "8888", + -1, + }, +} + +func TestOpenLock(t *testing.T) { + for _, tt := range tests { + if got := OpenLock(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestOpenLockBiDirection(t *testing.T) { + for _, tt := range tests { + if got := OpenLockBiDirection(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func TestOpenLockBiDirectionOptimization(t *testing.T) { + for _, tt := range tests { + if got := OpenLockBiDirectionOptimization(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v \n want = %v \n", got, tt.want) + } + } +} + +func BenchmarkOpenLock(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + OpenLock(tests[i%3].arg1, tests[i%3].arg2) + } +} + +func BenchmarkOpenLockBiDirection(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + OpenLockBiDirection(tests[i%3].arg1, tests[i%3].arg2) + } +} + +func BenchmarkOpenLockBiDirectionOptimization(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + OpenLockBiDirectionOptimization(tests[i%3].arg1, tests[i%3].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0752.Open-the-Lock -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/0752.Open-the-Lock +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkOpenLock-8 12866 92523 ns/op 5543 B/op 12 allocs/op +BenchmarkOpenLockBiDirection-8 79819 14357 ns/op 1722 B/op 28 allocs/op +BenchmarkOpenLockBiDirectionOptimization-8 85179 14486 ns/op 1721 B/op 28 allocs/op +PASS +ok LeetcodeGolang/Leetcode/0752.Open-the-Lock 4.820s +*/ diff --git a/Leetcode/0875.Koko-Eating-Bananas/index.html b/Leetcode/0875.Koko-Eating-Bananas/index.html new file mode 100644 index 000000000..51b0338e7 --- /dev/null +++ b/Leetcode/0875.Koko-Eating-Bananas/index.html @@ -0,0 +1,3930 @@ + + + + + + + 875. Koko Eating Bananas · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                    875. Koko Eating Bananas

                                                                                                                                                                                                                                    題目

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    題目大意

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    解題思路

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    Big O

                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                    • 時間複雜 : O(n log m),其中 n 是香蕉堆的數量,m 是香蕉堆中香蕉數量的最大值
                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                    • 空間複雜 : O(1)
                                                                                                                                                                                                                                    • +
                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    來源

                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                    解答

                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0875.Koko-Eating-Bananas/main.go

                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    package kokoeatingbananas
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +// 時間複雜 O(n log m), 空間複雜 O(1)
                                                                                                                                                                                                                                    +func minEatingSpeed(piles []int, h int) int {
                                                                                                                                                                                                                                    +    // 找出最大的香蕉堆
                                                                                                                                                                                                                                    +    left, right := 1, maxPile(piles)
                                                                                                                                                                                                                                    +    for left < right {
                                                                                                                                                                                                                                    +        // mid 代表消耗香蕉的速度(k)
                                                                                                                                                                                                                                    +        mid := int(uint(left+right) >> 1)
                                                                                                                                                                                                                                    +        if executeTime(piles, mid) <= 1="" h="" {="" right="mid" }="" else="" left="mid" +="" return="" 假設消耗速度k,="" 算出要花多少時間="" func="" executetime(piles="" []int,="" k="" int)="" int="" time="" :="0" for="" _,="" pile="" piles="" if="" pile%k=""> 0 {
                                                                                                                                                                                                                                    +            time++
                                                                                                                                                                                                                                    +        }
                                                                                                                                                                                                                                    +        // time += int(math.Ceil(float64(pile) / float64(k)))
                                                                                                                                                                                                                                    +    }
                                                                                                                                                                                                                                    +    return time
                                                                                                                                                                                                                                    +}
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +func maxPile(piles []int) int {
                                                                                                                                                                                                                                    +    result := 0
                                                                                                                                                                                                                                    +    for _, pile := range piles {
                                                                                                                                                                                                                                    +        if result < pile {
                                                                                                                                                                                                                                    +            result = pile
                                                                                                                                                                                                                                    +        }
                                                                                                                                                                                                                                    +    }
                                                                                                                                                                                                                                    +    return result
                                                                                                                                                                                                                                    +}
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +

                                                                                                                                                                                                                                    Benchmark

                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                    results matching ""

                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                      No results matching ""

                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      + + + + + + +
                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0875.Koko-Eating-Bananas/main.go b/Leetcode/0875.Koko-Eating-Bananas/main.go new file mode 100644 index 000000000..dc5ebdd6f --- /dev/null +++ b/Leetcode/0875.Koko-Eating-Bananas/main.go @@ -0,0 +1,40 @@ +package kokoeatingbananas + +// 時間複雜 O(n log m), 空間複雜 O(1) +func minEatingSpeed(piles []int, h int) int { + // 找出最大的香蕉堆 + left, right := 1, maxPile(piles) + for left < right { + // mid 代表消耗香蕉的速度(k) + mid := int(uint(left+right) >> 1) + if executeTime(piles, mid) <= h { + right = mid + } else { + left = mid + 1 + } + } + return left +} + +// 假設消耗速度k, 算出要花多少時間 +func executeTime(piles []int, k int) int { + time := 0 + for _, pile := range piles { + time += pile / k + if pile%k > 0 { + time++ + } + // time += int(math.Ceil(float64(pile) / float64(k))) + } + return time +} + +func maxPile(piles []int) int { + result := 0 + for _, pile := range piles { + if result < pile { + result = pile + } + } + return result +} diff --git a/Leetcode/0875.Koko-Eating-Bananas/main_test.go b/Leetcode/0875.Koko-Eating-Bananas/main_test.go new file mode 100644 index 000000000..fb5185657 --- /dev/null +++ b/Leetcode/0875.Koko-Eating-Bananas/main_test.go @@ -0,0 +1,39 @@ +package kokoeatingbananas + +import "testing" + +var tests = []struct { + piles []int + h int + want int +}{ + { + []int{3, 6, 7, 11}, + 8, + 4, + }, + { + []int{30, 11, 23, 4, 20}, + 5, + 30, + }, + { + []int{30, 11, 23, 4, 20}, + 6, + 23, + }, +} + +func TestMinEatingSpeed(t *testing.T) { + for _, tt := range tests { + if got := minEatingSpeed(tt.piles, tt.h); got != tt.want { + t.Errorf("minEatingSpeed(%v, %v) = %v, want %v", tt.piles, tt.h, got, tt.want) + } + } +} + +func BenchmarkMinEatingSpeed(b *testing.B) { + for i := 0; i < b.N; i++ { + minEatingSpeed(tests[0].piles, tests[0].h) + } +} diff --git a/Leetcode/0876.Middle-of-the-Linked-List/index.html b/Leetcode/0876.Middle-of-the-Linked-List/index.html new file mode 100644 index 000000000..8b1e18117 --- /dev/null +++ b/Leetcode/0876.Middle-of-the-Linked-List/index.html @@ -0,0 +1,3954 @@ + + + + + + + 0876.Middle of the Linked List · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                      876. Middle of the Linked List

                                                                                                                                                                                                                                      題目

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Given the head of a singly linked list, return the middle node of the linked list.

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      If there are two middle nodes, return the second middle node.

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Example 1:

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      Input: head = [1,2,3,4,5]
                                                                                                                                                                                                                                      +Output: [3,4,5]
                                                                                                                                                                                                                                      +Explanation: The middle node of the list is node 3.
                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Example 2:

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      Input: head = [1,2,3,4,5,6]
                                                                                                                                                                                                                                      +Output: [4,5,6]
                                                                                                                                                                                                                                      +Explanation: Since the list has two middle nodes with values 3 and 4, we return the second one.
                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      Constraints:

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      The number of nodes in the list is in the range [1, 100]. +1 <= Node.val <= 100

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      題目大意

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      尋找無環的 linked list 的中間節點

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      解題思路

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      使用 two pointer. 讓快指針往前兩步. 慢指針往前一步. 當快指針到達盡頭時, 慢指針就位於linked list的中間位置. +當linked list的長度為奇數時, slow剛好停在中點位置; +如果長度為偶數, slow停在中間偏右

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      來源

                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                      解答

                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                      https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0876.Middle-of-the-Linked-List/main.go

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      package middleofthelinkedlist
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +/**
                                                                                                                                                                                                                                      + * Definition for singly-linked list.
                                                                                                                                                                                                                                      + * type ListNode struct {
                                                                                                                                                                                                                                      + *     Val int
                                                                                                                                                                                                                                      + *     Next *ListNode
                                                                                                                                                                                                                                      + * }
                                                                                                                                                                                                                                      + */
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +type ListNode struct {
                                                                                                                                                                                                                                      +    Val  int
                                                                                                                                                                                                                                      +    Next *ListNode
                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +func MiddleNode(head *ListNode) *ListNode {
                                                                                                                                                                                                                                      +    if head == nil || head.Next == nil {
                                                                                                                                                                                                                                      +        return head
                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +    fast, slow := head, head
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +    for fast.Next != nil && fast.Next.Next != nil {
                                                                                                                                                                                                                                      +        fast = fast.Next.Next
                                                                                                                                                                                                                                      +        slow = slow.Next
                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +    // 算出長度
                                                                                                                                                                                                                                      +    curr := head
                                                                                                                                                                                                                                      +    length := 0
                                                                                                                                                                                                                                      +    for curr != nil {
                                                                                                                                                                                                                                      +        length++
                                                                                                                                                                                                                                      +        curr = curr.Next
                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                      +    if length%2 == 0 {
                                                                                                                                                                                                                                      +        // 偶數
                                                                                                                                                                                                                                      +        return slow.Next
                                                                                                                                                                                                                                      +    } else {
                                                                                                                                                                                                                                      +        // 奇數
                                                                                                                                                                                                                                      +        return slow
                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      tags: Medium Leetcode two pointers
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                      results matching ""

                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                        No results matching ""

                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        + + + + + + +
                                                                                                                                                                                                                                        + + +
                                                                                                                                                                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/0876.Middle-of-the-Linked-List/main.go b/Leetcode/0876.Middle-of-the-Linked-List/main.go new file mode 100644 index 000000000..a808e69f4 --- /dev/null +++ b/Leetcode/0876.Middle-of-the-Linked-List/main.go @@ -0,0 +1,42 @@ +package middleofthelinkedlist + +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +type ListNode struct { + Val int + Next *ListNode +} + +func MiddleNode(head *ListNode) *ListNode { + if head == nil || head.Next == nil { + return head + } + + fast, slow := head, head + + for fast.Next != nil && fast.Next.Next != nil { + fast = fast.Next.Next + slow = slow.Next + } + + // 算出長度 + curr := head + length := 0 + for curr != nil { + length++ + curr = curr.Next + } + if length%2 == 0 { + // 偶數 + return slow.Next + } else { + // 奇數 + return slow + } +} diff --git a/Leetcode/0876.Middle-of-the-Linked-List/main_test.go b/Leetcode/0876.Middle-of-the-Linked-List/main_test.go new file mode 100644 index 000000000..484aaaff8 --- /dev/null +++ b/Leetcode/0876.Middle-of-the-Linked-List/main_test.go @@ -0,0 +1,38 @@ +package middleofthelinkedlist + +import ( + "reflect" + "testing" +) + +func TestMiddleNode(t *testing.T) { + a := &ListNode{1, nil} + b := &ListNode{2, nil} + c := &ListNode{3, nil} + d := &ListNode{4, nil} + e := &ListNode{5, nil} + f := &ListNode{6, nil} + + a.Next = b + b.Next = c + c.Next = d + d.Next = e + e.Next = f + f.Next = nil + + tests := []struct { + arg1 *ListNode + want *ListNode + }{ + { + arg1: a, + want: d, + }, + } + + for _, tt := range tests { + if got := MiddleNode(tt.arg1); !reflect.DeepEqual(got, tt.want) { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} diff --git a/Leetcode/1046.Last-Stone-Weight/index.html b/Leetcode/1046.Last-Stone-Weight/index.html new file mode 100644 index 000000000..40ce9ec98 --- /dev/null +++ b/Leetcode/1046.Last-Stone-Weight/index.html @@ -0,0 +1,4013 @@ + + + + + + + 1046. Last Stone Weight · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                        1046. Last Stone Weight

                                                                                                                                                                                                                                        題目

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        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: 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:

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        Input: stones = [1] +Output: 1

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        Constraints:

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        1 <= stones.length <= 30 +1 <= stones[i] <= 1000

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        題目大意

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        有一個集合 stones,每個 stone 的重量由正整數表示。 +每次可以選擇兩個不同的石頭,將它們一起粉碎,然後得到一個新的石頭,其重量為兩者之差。 +你需要重複這個過程,直到集合中只剩下一個石頭,或者集合中沒有石頭為止。 +在這個過程中,找到可能的最後一顆石頭的重量。如果集合中沒有石頭,則返回 0。

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        Input: stones = [2,7,4,1,8,1]
                                                                                                                                                                                                                                        +Output: 1
                                                                                                                                                                                                                                        +Explanation:
                                                                                                                                                                                                                                        +步驟1:選擇石頭 7 和 8,得到新石頭 [2,4,1,1,1]。
                                                                                                                                                                                                                                        +步驟2:選擇石頭 2 和 4,得到新石頭 [2,1,1,1]。
                                                                                                                                                                                                                                        +步驟3:選擇石頭 2 和 1,得到新石頭 [1,1,1]。
                                                                                                                                                                                                                                        +步驟4:選擇石頭 1 和 1,得到新石頭 [0,1]。
                                                                                                                                                                                                                                        +步驟5:選擇石頭 1 和 0,得到新石頭 [1]。
                                                                                                                                                                                                                                        +最後剩下的石頭的重量為 1。
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        解題思路

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                        1. 將 stones 陣列轉換為最大堆(max heap),可以使用優先佇列實現。
                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                        3. 進行迴圈,每次從最大堆中取出兩個最大的石頭。
                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                        5. 如果兩個石頭不相等,將它們的差值插入最大堆。
                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                        7. 重複上述步驟,直到最大堆中只剩下一個石頭或沒有石頭為止。
                                                                                                                                                                                                                                        8. +
                                                                                                                                                                                                                                        9. 如果最大堆中有石頭,返回該石頭的重量,否則返回 0。 +這樣的做法確保每次都選擇最大的兩個石頭進行粉碎,最終留下的石頭重量就是可能的最後一個石頭的重量。
                                                                                                                                                                                                                                        10. +
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        參考 0215 Kth Largest Element in an Array

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        Big O

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        時間複雜 : O(nlogn) +空間複雜 : O(n)

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        n 是石頭數量. 每次從隊列中取出元素需要話O(logn) 的時間, 最多共需要需要粉碎 n−1 次石頭

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        來源

                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                        解答

                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/1046.Last-Stone-Weight/main.go

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        package laststoneweight
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +import (
                                                                                                                                                                                                                                        +    "container/heap"
                                                                                                                                                                                                                                        +    "fmt"
                                                                                                                                                                                                                                        +    "sort"
                                                                                                                                                                                                                                        +)
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +/*
                                                                                                                                                                                                                                        +// IntSlice attaches the methods of Interface to []int, sorting in increasing order.
                                                                                                                                                                                                                                        +type IntSlice []int
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +func (x IntSlice) Len() int           { return len(x) }
                                                                                                                                                                                                                                        +func (x IntSlice) Less(i, j int) bool { return x[i] < x[j] }
                                                                                                                                                                                                                                        +func (x IntSlice) Swap(i, j int)      { x[i], x[j] = x[j], x[i] }
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +// Sort is a convenience method: x.Sort() calls Sort(x).
                                                                                                                                                                                                                                        +func (x IntSlice) Sort() { Sort(x) }
                                                                                                                                                                                                                                        +*/
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +type hp struct {
                                                                                                                                                                                                                                        +    sort.IntSlice
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +func (h hp) Less(i, j int) bool {
                                                                                                                                                                                                                                        +    // 大到小排序
                                                                                                                                                                                                                                        +    return h.IntSlice[i] > h.IntSlice[j]
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +func (h *hp) Push(v interface{}) {
                                                                                                                                                                                                                                        +    h.IntSlice = append(h.IntSlice, v.(int))
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +func (h *hp) Pop() interface{} {
                                                                                                                                                                                                                                        +    old := h.IntSlice
                                                                                                                                                                                                                                        +    v := old[len(old)-1]
                                                                                                                                                                                                                                        +    h.IntSlice = old[:len(old)-1]
                                                                                                                                                                                                                                        +    return v
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +func (h *hp) PushInt(v int) {
                                                                                                                                                                                                                                        +    heap.Push(h, v)
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +func (h *hp) PopInt() int {
                                                                                                                                                                                                                                        +    return heap.Pop(h).(int)
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +// 時間複雜 O(nlogn), 空間複雜 O(n)
                                                                                                                                                                                                                                        +// n 是石頭數量. 每次從隊列中取出元素需要話O(logn) 的時間, 最多共需要需要粉碎 n−1 次石頭
                                                                                                                                                                                                                                        +func LastStoneWeight(stones []int) int {
                                                                                                                                                                                                                                        +    q := &hp{stones}
                                                                                                                                                                                                                                        +    heap.Init(q)
                                                                                                                                                                                                                                        +    fmt.Println(q)
                                                                                                                                                                                                                                        +    for q.Len() > 1 {
                                                                                                                                                                                                                                        +        fmt.Println(q)
                                                                                                                                                                                                                                        +        x, y := q.PopInt(), q.PopInt()
                                                                                                                                                                                                                                        +        fmt.Printf("%d,%d\n", x, y)
                                                                                                                                                                                                                                        +        if x > y {
                                                                                                                                                                                                                                        +            q.PushInt(x - y)
                                                                                                                                                                                                                                        +        }
                                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                                        +    if q.Len() > 0 {
                                                                                                                                                                                                                                        +        return q.IntSlice[0]
                                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                                        +    return 0
                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                        Benchmark

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                        results matching ""

                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                          No results matching ""

                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          + + + + + + +
                                                                                                                                                                                                                                          + + +
                                                                                                                                                                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/1046.Last-Stone-Weight/main.go b/Leetcode/1046.Last-Stone-Weight/main.go new file mode 100644 index 000000000..6e6743b3a --- /dev/null +++ b/Leetcode/1046.Last-Stone-Weight/main.go @@ -0,0 +1,67 @@ +package laststoneweight + +import ( + "container/heap" + "fmt" + "sort" +) + +/* +// IntSlice attaches the methods of Interface to []int, sorting in increasing order. +type IntSlice []int + +func (x IntSlice) Len() int { return len(x) } +func (x IntSlice) Less(i, j int) bool { return x[i] < x[j] } +func (x IntSlice) Swap(i, j int) { x[i], x[j] = x[j], x[i] } + +// Sort is a convenience method: x.Sort() calls Sort(x). +func (x IntSlice) Sort() { Sort(x) } +*/ + +type hp struct { + sort.IntSlice +} + +func (h hp) Less(i, j int) bool { + // 大到小排序 + return h.IntSlice[i] > h.IntSlice[j] +} + +func (h *hp) Push(v interface{}) { + h.IntSlice = append(h.IntSlice, v.(int)) +} + +func (h *hp) Pop() interface{} { + old := h.IntSlice + v := old[len(old)-1] + h.IntSlice = old[:len(old)-1] + return v +} + +func (h *hp) PushInt(v int) { + heap.Push(h, v) +} + +func (h *hp) PopInt() int { + return heap.Pop(h).(int) +} + +// 時間複雜 O(nlogn), 空間複雜 O(n) +// n 是石頭數量. 每次從隊列中取出元素需要話O(logn) 的時間, 最多共需要需要粉碎 n−1 次石頭 +func LastStoneWeight(stones []int) int { + q := &hp{stones} + heap.Init(q) + fmt.Println(q) + for q.Len() > 1 { + fmt.Println(q) + x, y := q.PopInt(), q.PopInt() + fmt.Printf("%d,%d\n", x, y) + if x > y { + q.PushInt(x - y) + } + } + if q.Len() > 0 { + return q.IntSlice[0] + } + return 0 +} diff --git a/Leetcode/1046.Last-Stone-Weight/main_test.go b/Leetcode/1046.Last-Stone-Weight/main_test.go new file mode 100644 index 000000000..3d34f3495 --- /dev/null +++ b/Leetcode/1046.Last-Stone-Weight/main_test.go @@ -0,0 +1,34 @@ +package laststoneweight + +import "testing" + +var tests = []struct { + arg1 []int + want int +}{ + { + []int{2, 7, 4, 1, 8, 1}, + 1, + }, +} + +func TestLastStoneWeight(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + if got := LastStoneWeight(tt.arg1); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLastStoneWeight(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LastStoneWeight(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/1046.Last-Stone-Weight -bench=. + +*/ diff --git a/Leetcode/1143.Longest-Common-Subsequence/index.html b/Leetcode/1143.Longest-Common-Subsequence/index.html new file mode 100644 index 000000000..e56fff990 --- /dev/null +++ b/Leetcode/1143.Longest-Common-Subsequence/index.html @@ -0,0 +1,3999 @@ + + + + + + + 1143.Longest Common Subsequence · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                          1143. Longest Common Subsequence

                                                                                                                                                                                                                                          題目

                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          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: text1 = "abcde", text2 = "ace" 
                                                                                                                                                                                                                                          +Output: 3  
                                                                                                                                                                                                                                          +Explanation: The longest common subsequence is "ace" and its length is 3.
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          Example 2:

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          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.
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          Constraints:

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                          • 1 <= text1.length, text2.length <= 1000
                                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                                          • text1 and text2 consist of only lowercase English characters.
                                                                                                                                                                                                                                          • +
                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          題目大意

                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          給兩個string 求出, 這兩個string 的最長公共子序列的長度, 如果不存在返回0. +譬如 str1="abcde", str2="aceb", 輸出為3, 因為最長公共子序列是"ace"

                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          解題思路

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                          1. 暴力解法, 用遞迴 dp(i,j) 表示 s1[0..i]和s2[0..j]中最長公共子序列的長度, +如果s1[i]==s2[j], 說明這個公共字符一定在lcs中, 如果知道了s1[0..i-1]和s2[0..j-1]中的lcs長度, 再加1就是s1[0..i]和s2[0..j]中lcs的長度

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                             if (str[i] == str2[j]) {
                                                                                                                                                                                                                                            +     dp(i,j) = dp(i-1,j-1)+1
                                                                                                                                                                                                                                            + }
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            如果s1[i]!=s2[j], 說明這兩個字符至少有一個不在lcs中,

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                             if (str[i] != str2[j]){
                                                                                                                                                                                                                                            +     dp(i,j) = max( dp(i-1,j) , dp(i,j-1))
                                                                                                                                                                                                                                            + }
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                             def longestCommonSubsequence(str1,str2) ->int:
                                                                                                                                                                                                                                            +     def dp(i,j):
                                                                                                                                                                                                                                            +         # 空的base code
                                                                                                                                                                                                                                            +         if i == -1 or j == -1:
                                                                                                                                                                                                                                            +             return 0
                                                                                                                                                                                                                                            +         if str[i] == str2[j]:
                                                                                                                                                                                                                                            +             # 找到一個lcs中的元素
                                                                                                                                                                                                                                            +             return dp(i-1, j-1)+1
                                                                                                                                                                                                                                            +         if str[i] != str2[j]:
                                                                                                                                                                                                                                            +             # 至少有一個字符不在lcs中, 都試一下,看誰能讓lcs最長
                                                                                                                                                                                                                                            +             return max( dp(i-1,j) , dp(i,j-1))
                                                                                                                                                                                                                                            +     return dp(len(str1)-1,len(str2)-1)
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                          2. +
                                                                                                                                                                                                                                          3. DP優化

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                          4. +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          int longestCommonSubsequence(string str1, string str2) {
                                                                                                                                                                                                                                          +    int m = str1.size(), n = str2.size();
                                                                                                                                                                                                                                          +    // 定義對s1[0..i-1] 和 s2[0..j-1], 他們的lcs長度是dp[i][j]
                                                                                                                                                                                                                                          +    vector> dp(m + 1, vector(n + 1, 0));
                                                                                                                                                                                                                                          +    // base case: dp[0][...] = dp[..][0] = 0, 已初始化
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +    for (int i = 1; i 
                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          來源

                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                          解答

                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/1143.Longest-Common-Subsequence/main.go

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          package longestcommonsubsequence
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +func LongestCommonSubsequence(text1 string, text2 string) int {
                                                                                                                                                                                                                                          +    var dp func(int, int) int
                                                                                                                                                                                                                                          +    dp = func(i, j int) int {
                                                                                                                                                                                                                                          +        if i == -1 || j == -1 {
                                                                                                                                                                                                                                          +            return 0
                                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                                          +        if text1[i] == text2[j] {
                                                                                                                                                                                                                                          +            return dp(i-1, j-1) + 1
                                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                                          +        if text1[i] != text2[j] {
                                                                                                                                                                                                                                          +            return max(dp(i-1, j), dp(i, j-1))
                                                                                                                                                                                                                                          +        }
                                                                                                                                                                                                                                          +        return 0
                                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                                          +    return dp(len(text1)-1, len(text2)-1)
                                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +func LongestCommonSubsequenceDP(text1 string, text2 string) int {
                                                                                                                                                                                                                                          +    m, n := len(text1), len(text2)
                                                                                                                                                                                                                                          +    if m == 0 || n == 0 {
                                                                                                                                                                                                                                          +        return 0
                                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +    dp := make([][]int, m+1)
                                                                                                                                                                                                                                          +    for i := range dp {
                                                                                                                                                                                                                                          +        dp[i] = make([]int, n+1)
                                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                                          +    for i := 1; i <= 1="" m;="" i++="" {="" for="" j="" :="1;" <="n;" j++="" if="" text1[i-1]="=" text2[j-1]="" dp[i][j]="dp[i-1][j-1]" +="" }="" else="" dp[i-1][j])="" return="" dp[m][n]="" func="" max(a,="" b="" int)="" int="" a=""> b {
                                                                                                                                                                                                                                          +        return a
                                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                                          +    return b
                                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          goos: darwin
                                                                                                                                                                                                                                          +goarch: amd64
                                                                                                                                                                                                                                          +pkg: LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence
                                                                                                                                                                                                                                          +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                                                                          +BenchmarkLongestCommonSubsequence-8                  100         737158262 ns/op               0 B/op          0 allocs/op
                                                                                                                                                                                                                                          +BenchmarkLongestCommonSubsequenceDP-8            2355297               491.3 ns/op           912 B/op          8 allocs/op
                                                                                                                                                                                                                                          +PASS
                                                                                                                                                                                                                                          +ok      LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence 75.400s
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                          results matching ""

                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                            No results matching ""

                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            + + + + + + +
                                                                                                                                                                                                                                            + + +
                                                                                                                                                                                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/1143.Longest-Common-Subsequence/main.go b/Leetcode/1143.Longest-Common-Subsequence/main.go new file mode 100644 index 000000000..c313aa34b --- /dev/null +++ b/Leetcode/1143.Longest-Common-Subsequence/main.go @@ -0,0 +1,48 @@ +package longestcommonsubsequence + +func LongestCommonSubsequence(text1 string, text2 string) int { + var dp func(int, int) int + dp = func(i, j int) int { + if i == -1 || j == -1 { + return 0 + } + if text1[i] == text2[j] { + return dp(i-1, j-1) + 1 + } + if text1[i] != text2[j] { + return max(dp(i-1, j), dp(i, j-1)) + } + return 0 + } + return dp(len(text1)-1, len(text2)-1) +} + +// DP table 優化 +func LongestCommonSubsequenceDP(text1 string, text2 string) int { + m, n := len(text1), len(text2) + if m == 0 || n == 0 { + return 0 + } + + dp := make([][]int, m+1) + for i := range dp { + dp[i] = make([]int, n+1) + } + for i := 1; i <= m; i++ { + for j := 1; j <= n; j++ { + if text1[i-1] == text2[j-1] { + dp[i][j] = dp[i-1][j-1] + 1 + } else { + dp[i][j] = max(dp[i][j-1], dp[i-1][j]) + } + } + } + return dp[m][n] +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} diff --git a/Leetcode/1143.Longest-Common-Subsequence/main_test.go b/Leetcode/1143.Longest-Common-Subsequence/main_test.go new file mode 100644 index 000000000..6b2407bf3 --- /dev/null +++ b/Leetcode/1143.Longest-Common-Subsequence/main_test.go @@ -0,0 +1,74 @@ +package longestcommonsubsequence + +import ( + "testing" +) + +var tests = []struct { + arg1 string + arg2 string + want int +}{ + { + "abcde", + "ace", + 3, + }, + { + "abc", + "abc", + 3, + }, + { + "abc", + "def", + 0, + }, + { + "pmjghexybyrgzczy", + "hafcdqbgncrcbihkd", + 4, + }, +} + +func TestLongestCommonSubsequence(t *testing.T) { + for _, tt := range tests { + if got := LongestCommonSubsequence(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func TestLongestCommonSubsequenceDP(t *testing.T) { + for _, tt := range tests { + if got := LongestCommonSubsequenceDP(tt.arg1, tt.arg2); got != tt.want { + t.Errorf("got = %v, want = %v", got, tt.want) + } + } +} + +func BenchmarkLongestCommonSubsequence(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestCommonSubsequence(tests[i%4].arg1, tests[i%4].arg2) + } +} + +func BenchmarkLongestCommonSubsequenceDP(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + LongestCommonSubsequenceDP(tests[i%4].arg1, tests[i%4].arg2) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence -bench=. +goos: darwin +goarch: amd64 +pkg: LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz +BenchmarkLongestCommonSubsequence-8 100 737158262 ns/op 0 B/op 0 allocs/op +BenchmarkLongestCommonSubsequenceDP-8 2355297 491.3 ns/op 912 B/op 8 allocs/op +PASS +ok LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence 75.400s +*/ diff --git a/Leetcode/1195.Fizz-Buzz-Multithreaded/index.html b/Leetcode/1195.Fizz-Buzz-Multithreaded/index.html new file mode 100644 index 000000000..36c0c3717 --- /dev/null +++ b/Leetcode/1195.Fizz-Buzz-Multithreaded/index.html @@ -0,0 +1,3958 @@ + + + + + + + 1195. Fizz Buzz Multithreaded · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                            1195. Fizz Buzz Multithreaded

                                                                                                                                                                                                                                            題目

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            You have the four functions:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            printFizz that prints the word "fizz" to the console, +printBuzz that prints the word "buzz" to the console, +printFizzBuzz that prints the word "fizzbuzz" to the console, and +printNumber that prints a given integer to the console. +You are given an instance of the class FizzBuzz that has four functions: fizz, buzz, fizzbuzz and number. The same instance of FizzBuzz will be passed to four different threads:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Thread A: calls fizz() that should output the word "fizz". +Thread B: calls buzz() that should output the word "buzz". +Thread C: calls fizzbuzz() that should output the word "fizzbuzz". +Thread D: calls number() that should only output the integers. +Modify the given class to output the series [1, 2, "fizz", 4, "buzz", ...] where the ith token (1-indexed) of the series is:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            "fizzbuzz" if i is divisible by 3 and 5, +"fizz" if i is divisible by 3 and not 5, +"buzz" if i is divisible by 5 and not 3, or +i if i is not divisible by 3 or 5. +Implement the FizzBuzz class:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            FizzBuzz(int n) Initializes the object with the number n that represents the length of the sequence that should be printed. +void fizz(printFizz) Calls printFizz to output "fizz". +void buzz(printBuzz) Calls printBuzz to output "buzz". +void fizzbuzz(printFizzBuzz) Calls printFizzBuzz to output "fizzbuzz". +void number(printNumber) Calls printnumber to output the numbers.

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Example 1:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Input: n = 15 +Output: [1,2,"fizz",4,"buzz","fizz",7,8,"fizz","buzz",11,"fizz",13,14,"fizzbuzz"] +Example 2:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Input: n = 5 +Output: [1,2,"fizz",4,"buzz"]

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Constraints:

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            1 <= n <= 50

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            題目大意

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            解題思路

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Big O

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            時間複雜 : 空間複雜 :

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            來源

                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                            解答

                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/1195.Fizz-Buzz-Multithreaded/main.go

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            package fizzbuzzmultithreaded
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +import (
                                                                                                                                                                                                                                            +    "fmt"
                                                                                                                                                                                                                                            +    "sync"
                                                                                                                                                                                                                                            +)
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +var (
                                                                                                                                                                                                                                            +    wg = sync.WaitGroup{}
                                                                                                                                                                                                                                            +)
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                                                                            +func FizzBuzz(n int) {
                                                                                                                                                                                                                                            +    fb := NewFizzBuzz()
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +    wg.Add(4)
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +    go fb.fizz()
                                                                                                                                                                                                                                            +    go fb.buzz()
                                                                                                                                                                                                                                            +    go fb.fizzbuzz()
                                                                                                                                                                                                                                            +    go fb.number()
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +    for i := 1; i 
                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                            Benchmark

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                            results matching ""

                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                              No results matching ""

                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              + + + + + + + + + + +
                                                                                                                                                                                                                                              + + +
                                                                                                                                                                                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Leetcode/1195.Fizz-Buzz-Multithreaded/main.go b/Leetcode/1195.Fizz-Buzz-Multithreaded/main.go new file mode 100644 index 000000000..8c23be8f3 --- /dev/null +++ b/Leetcode/1195.Fizz-Buzz-Multithreaded/main.go @@ -0,0 +1,112 @@ +package fizzbuzzmultithreaded + +import ( + "fmt" + "sync" +) + +var ( + wg = sync.WaitGroup{} +) + +// 時間複雜 O(), 空間複雜 O() +func FizzBuzz(n int) { + fb := NewFizzBuzz() + + wg.Add(4) + + go fb.fizz() + go fb.buzz() + go fb.fizzbuzz() + go fb.number() + + for i := 1; i <= n; i++ { + if i%3 == 0 && i%5 == 0 { + fb.fizzbuzzCh <- struct{}{} + } else if i%3 == 0 { + fb.fizzCh <- struct{}{} + } else if i%5 == 0 { + fb.buzzCh <- struct{}{} + } else { + fb.numberCh <- i + } + <-fb.orderCh + } + fb.done <- struct{}{} + fb.done <- struct{}{} + fb.done <- struct{}{} + fb.done <- struct{}{} + wg.Wait() +} + +type FizzBuzzStruct struct { + numberCh chan int + fizzCh chan struct{} + buzzCh chan struct{} + fizzbuzzCh chan struct{} + orderCh chan struct{} + done chan struct{} +} + +func NewFizzBuzz() *FizzBuzzStruct { + return &FizzBuzzStruct{ + numberCh: make(chan int), + fizzCh: make(chan struct{}), + buzzCh: make(chan struct{}), + fizzbuzzCh: make(chan struct{}), + orderCh: make(chan struct{}), + done: make(chan struct{}, 4), + } +} + +func (fb *FizzBuzzStruct) fizz() { + defer wg.Done() + for { + select { + case <-fb.fizzCh: + fmt.Print("fizz") + fb.orderCh <- struct{}{} + case <-fb.done: + return + } + } +} + +func (fb *FizzBuzzStruct) buzz() { + defer wg.Done() + for { + select { + case <-fb.buzzCh: + fmt.Print("buzz") + fb.orderCh <- struct{}{} + case <-fb.done: + return + } + } +} + +func (fb *FizzBuzzStruct) fizzbuzz() { + defer wg.Done() + for { + select { + case <-fb.fizzbuzzCh: + fmt.Print("fizzbuzz") + fb.orderCh <- struct{}{} + case <-fb.done: + return + } + } +} + +func (fb *FizzBuzzStruct) number() { + defer wg.Done() + for { + select { + case v := <-fb.numberCh: + fmt.Print(v) + fb.orderCh <- struct{}{} + case <-fb.done: + return + } + } +} diff --git a/Leetcode/1195.Fizz-Buzz-Multithreaded/main_test.go b/Leetcode/1195.Fizz-Buzz-Multithreaded/main_test.go new file mode 100644 index 000000000..b10e54af9 --- /dev/null +++ b/Leetcode/1195.Fizz-Buzz-Multithreaded/main_test.go @@ -0,0 +1,35 @@ +package fizzbuzzmultithreaded + +import "testing" + +var tests = []struct { + arg1 int + want []interface{} +}{ + { + 15, + []interface{}{1, 2, "fizz", 4, "buzz", "fizz", 7, 8, "fizz", "buzz", 11, "fizz", 13, 14, "fizzbuzz"}, + }, +} + +func TestFizzBuzz(t *testing.T) { + for _, tt := range tests { + // if got := ReverseList(tt.arg1); !reflect.DeepEqual(got, tt.want) { + // if got := FizzBuzz(tt.arg1); got != tt.want { + // t.Errorf("got = %v, want = %v", got, tt.want) + // } + FizzBuzz(tt.arg1) + } +} + +func BenchmarkFizzBuzz(b *testing.B) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + FizzBuzz(tests[0].arg1) + } +} + +/* +go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. + +*/ diff --git "a/Leetcode_labuladong/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" "b/Leetcode_labuladong/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" new file mode 100644 index 000000000..c77cbf969 --- /dev/null +++ "b/Leetcode_labuladong/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" @@ -0,0 +1,22 @@ +/* + * @lc app=leetcode.cn id=1 lang=golang + * + * [1] 两数之和 + */ + +// @lc code=start +// 用一個map, key紀錄number的值, value 紀錄number的index +// 遍歷整個nums, 判斷map中是否有 "target-number"存入map, 如果有就可以將 index從map取出, 並回傳 +func twoSum(nums []int, target int) []int { + m := make(map[int]int) + for i, v := range nums { + if j, ok := m[target-v]; ok { + return []int{j, i} + } + m[v] = i + } + return nil +} + +// @lc code=end + diff --git "a/Leetcode_labuladong/11.\347\233\233\346\234\200\345\244\232\346\260\264\347\232\204\345\256\271\345\231\250.go" "b/Leetcode_labuladong/11.\347\233\233\346\234\200\345\244\232\346\260\264\347\232\204\345\256\271\345\231\250.go" new file mode 100644 index 000000000..f7d8ab3fc --- /dev/null +++ "b/Leetcode_labuladong/11.\347\233\233\346\234\200\345\244\232\346\260\264\347\232\204\345\256\271\345\231\250.go" @@ -0,0 +1,40 @@ +// 時間複雜度: O(n) +// 空間複雜度: O(1) +/* + * @lc app=leetcode.cn id=11 lang=golang + * + * [11] 盛最多水的容器 + */ + +// @lc code=start +func maxArea(height []int) int { + left, right := 0, len(height)-1 + result := 0 + for left < right { + tmp := (right - left) * min(height[left], height[right]) + result = max(result, tmp) + if height[left] > height[right] { + right-- + } else { + left++ + } + } + return result +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +// @lc code=end + diff --git "a/Leetcode_labuladong/143.\351\207\215\346\216\222\351\223\276\350\241\250.go" "b/Leetcode_labuladong/143.\351\207\215\346\216\222\351\223\276\350\241\250.go" new file mode 100644 index 000000000..40769930c --- /dev/null +++ "b/Leetcode_labuladong/143.\351\207\215\346\216\222\351\223\276\350\241\250.go" @@ -0,0 +1,62 @@ +// 時間複雜度: +// 空間複雜度: +/* + * @lc app=leetcode.cn id=143 lang=golang + * + * [143] 重排链表 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ + +// 先用快慢指針找出Linked list的中間點 +// 然後把Linked list分成兩半 +// 再把後半的Linked list反轉 +// 再把兩半的Linked list merge 起來 +func reorderList(head *ListNode) { + mid := middleNode(head) + + // 2.反轉中間節點的下一個節點 + right := resverseNode(mid.Next) + mid.Next = nil + left := head + mergeNode(left, right) +} + +// [876. Middle of the Linked List](https://leetcode.com/problems/middle-of-the-linked-list/) +func middleNode(head *ListNode) *ListNode { + slow, fast := head, head + for fast != nil && fast.Next != nil { + slow = slow.Next + fast = fast.Next.Next + } + return slow +} + +// [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) +func resverseNode(head *ListNode) *ListNode { + var pre *ListNode + for head != nil { + tmp := head.Next + head.Next = pre + pre = head + head = tmp + } + return pre +} + +func mergeNode(l1, l2 *ListNode) { + lcur, rcur := l1, l2 + for lcur != nil && rcur != nil { + lcur.Next, rcur.Next, lcur, rcur = rcur, lcur.Next, lcur.Next, rcur.Next + } +} + +// @lc code=end + diff --git "a/Leetcode_labuladong/19.\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254-n-\344\270\252\347\273\223\347\202\271.go" "b/Leetcode_labuladong/19.\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254-n-\344\270\252\347\273\223\347\202\271.go" new file mode 100644 index 000000000..055cc1de4 --- /dev/null +++ "b/Leetcode_labuladong/19.\345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254-n-\344\270\252\347\273\223\347\202\271.go" @@ -0,0 +1,37 @@ +// 時間複雜度: +// 空間複雜度: +/* + * @lc app=leetcode.cn id=19 lang=golang + * + * [19] 删除链表的倒数第 N 个结点 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ +// 產生 dummyHead,跟 preslow +// 使用雙指針, 先讓 fast走 `k` 步, 然後 `fast slow 同速前進` +// 這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點 +// 將 slow的前一步(preslow)的next 指向 slow.Next +func removeNthFromEnd(head *ListNode, n int) *ListNode { + dummyHead := &ListNode{Next: head} + preSlow, slow, fast := dummyHead, head, head + for fast != nil { + if n <= 0 { + preSlow = slow + slow = slow.Next + } + fast = fast.Next + n-- + } + preSlow.Next = slow.Next + return dummyHead.Next +} + +// @lc code=end + diff --git "a/Leetcode_labuladong/2.\344\270\244\346\225\260\347\233\270\345\212\240.go" "b/Leetcode_labuladong/2.\344\270\244\346\225\260\347\233\270\345\212\240.go" new file mode 100644 index 000000000..11d88b753 --- /dev/null +++ "b/Leetcode_labuladong/2.\344\270\244\346\225\260\347\233\270\345\212\240.go" @@ -0,0 +1,50 @@ +// 時間複雜度: +// 空間複雜度: +/* + * @lc app=leetcode.cn id=2 lang=golang + * + * [2] 两数相加 + */ + +// @lc code=start +/** + * Definition for singly-linked list. + * type ListNode struct { + * Val int + * Next *ListNode + * } + */ +// 遍歷 l1跟 l2. 講兩個list的val相加, 並且記錄進位的值給next使用 +// 最後如果 carry 還有的話, 需要產生一個新的節點 +func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { + var result, tail *ListNode + carry := 0 + for l1 != nil || l2 != nil { + n1, n2 := 0, 0 + if l1 != nil { + n1 = l1.Val + l1 = l1.Next + } + if l2 != nil { + n2 = l2.Val + l2 = l2.Next + } + + sum := n1 + n2 + carry + sum, carry = sum%10, sum/10 + if result == nil { + result = &ListNode{Val: sum} + tail = result + } else { + tail.Next = &ListNode{Val: sum} + tail = tail.Next + } + } + if carry > 0 { + tail.Next = &ListNode{Val: carry} + } + return result +} + +// @lc code=end + diff --git "a/Leetcode_labuladong/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.go" "b/Leetcode_labuladong/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.go" new file mode 100644 index 000000000..5f9a2ffd5 --- /dev/null +++ "b/Leetcode_labuladong/5.\346\234\200\351\225\277\345\233\236\346\226\207\345\255\220\344\270\262.go" @@ -0,0 +1,40 @@ +// 時間複雜度: +// 空間複雜度: +/* + * @lc app=leetcode.cn id=5 lang=golang + * + * [5] 最长回文子串 + */ + +// @lc code=start +func longestPalindrome(s string) string { + dp := make([][]bool, len(s)) + result := s[0:1] + + for i := 0; i < len(s); i++ { + dp[i] = make([]bool, len(s)) + dp[i][i] = true // 每個字符本身都是回文 + } + for length := 2; length <= len(s); length++ { + for start := 0; start < len(s)-length+1; start++ { + end := start + length - 1 + if s[start] != s[end] { + // 字頭字尾不同, 不是回文 + continue + } else if length < 3 { + // 長度為2且字頭字尾相同, 則為回文 + dp[start][end] = true + } else { + // 狀態轉移 : 去掉字頭字尾, 判斷是否還是回文 + dp[start][end] = dp[start+1][end-1] + } + if dp[start][end] && (end-start+1) > len(result) { + result = s[start : end+1] + } + } + } + return result +} + +// @lc code=end + diff --git "a/Leetcode_labuladong/875.\347\210\261\345\220\203\351\246\231\350\225\211\347\232\204\347\217\202\347\217\202.go" "b/Leetcode_labuladong/875.\347\210\261\345\220\203\351\246\231\350\225\211\347\232\204\347\217\202\347\217\202.go" new file mode 100644 index 000000000..92b1b92e4 --- /dev/null +++ "b/Leetcode_labuladong/875.\347\210\261\345\220\203\351\246\231\350\225\211\347\232\204\347\217\202\347\217\202.go" @@ -0,0 +1,49 @@ +// 時間複雜度: +// 空間複雜度: +/* + * @lc app=leetcode.cn id=875 lang=golang + * + * [875] 爱吃香蕉的珂珂 + */ + +// @lc code=start +func minEatingSpeed(piles []int, h int) int { + // 找出最大的香蕉堆 + left, right := 1, maxPile(piles) + for left < right { + // mid 代表消耗香蕉的速度(k) + mid := int(uint(left+right) >> 1) + if executeTime(piles, mid) <= h { + right = mid + } else { + left = mid + 1 + } + } + return left +} + +// 假設消耗速度k, 算出要花多少時間 +func executeTime(piles []int, k int) int { + time := 0 + for _, pile := range piles { + time += pile / k + if pile%k > 0 { + time++ + } + // time += int(math.Ceil(float64(pile) / float64(k))) + } + return time +} + +func maxPile(piles []int) int { + result := 0 + for _, pile := range piles { + if result < pile { + result = pile + } + } + return result +} + +// @lc code=end + diff --git a/SUMMARY.md b/SUMMARY.md new file mode 100644 index 000000000..2cf7eff3b --- /dev/null +++ b/SUMMARY.md @@ -0,0 +1,225 @@ +# Kimi's LeetcodeGolang Notes + +- Algorithms + - A 1 B 2 C 3 + * [A1B2C3: Two Go Routine Print A1B2C3....Z26](Algorithms/A1B2C3/README.md) + - Find Target Last Index + * [Find Target Last Index](Algorithms/Find_Target_Last_Index/findtargetlastindex.md) + - Intersection Of Two Sorted Arrays Using In Place Approach + * [Intersection Of Two Sorted Arrays Using In Place Approach](Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/README.md) + - Search Graph + * [Search Graph In Golang](Algorithms/SearchGraph/README.md) + - [Weighted Edit Distance](Algorithms/WeightedEditDistance/README.md) +- [Code Signal](CodeSignal/README.md) + - Bank Requests + * [Bank Requests](CodeSignal/Bank-Requests/README.md) +- Codility + - Lesson + - 0001.Iterations + - Binary Gap + * [Binary Gap](Codility/Lesson/0001.Iterations/Binary-Gap/README.md) + - 0002.Array + - Cyclic Rotation + * [Cyclic Rotation](Codility/Lesson/0002.Array/CyclicRotation/README.md) + - [Odd Occurrences In Array](Codility/Lesson/0002.Array/OddOccurrencesInArray/README.md) + - 0003.Time-Complexity + - [Frog Jmp](Codility/Lesson/0003.Time-Complexity/FrogJmp/README.md) + - [Perm Missing Elem](Codility/Lesson/0003.Time-Complexity/PermMissingElem/README.md) + - [Tape Equilibrium](Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/README.md) + - 0004.Counting-Elements + - [Frog River One](Codility/Lesson/0004.Counting-Elements/FrogRiverOne/README.md) + - [Max Counters](Codility/Lesson/0004.Counting-Elements/MaxCounters/README.md) + - [Missing Integer](Codility/Lesson/0004.Counting-Elements/MissingInteger/README.md) + - [Perm Check](Codility/Lesson/0004.Counting-Elements/PermCheck/README.md) + - 0005.Prefix-Sums + - [Count Div](Codility/Lesson/0005.Prefix-Sums/CountDiv/README.md) + - [Genomic Range Query](Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/README.md) + - [Min Avg Two Slice](Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/README.md) + - [Passing Cars](Codility/Lesson/0005.Prefix-Sums/PassingCars/README.md) + - 0006.Sorting + - [Distinct](Codility/Lesson/0006.Sorting/Distinct/README.md) + - [Max Product Of Three](Codility/Lesson/0006.Sorting/MaxProductOfThree/README.md) + - [Number Of Disc Intersections](Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/README.md) + - [Triangle](Codility/Lesson/0006.Sorting/Triangle/README.md) + - 0007.Stacks-and-Queues + - [Brackets](Codility/Lesson/0007.Stacks-and-Queues/Brackets/README.md) + - [Fish](Codility/Lesson/0007.Stacks-and-Queues/Fish/README.md) + - [Nesting](Codility/Lesson/0007.Stacks-and-Queues/Nesting/README.md) + - [Stone Wall](Codility/Lesson/0007.Stacks-and-Queues/StoneWall/README.md) + - 0008.Leader + - [Dominator](Codility/Lesson/0008.Leader/Dominator/README.md) + - [Equi Leader](Codility/Lesson/0008.Leader/EquiLeader/README.md) + - 0009.Maximum-Slice-Problem + - [Max Double Slice Sum](Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/README.md) + - [Max Profit](Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/README.md) + - [Max Slice Sum](Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/README.md) + - 0010.Prime-And-Composite-Numbers + - [Count Factors](Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/README.md) + - [Flags](Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/README.md) + - [Min Perimeter Rectangle](Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/README.md) + - [Peaks](Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/README.md) + - 0011.Sieve-of-Eratosthenes + - [Count Non Divisible](Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/README.md) + - [Count Semiprimes](Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/README.md) + - 0012.Euclidean-Algorithm + - [Chocolates By Numbers](Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/README.md) + - [Common Prime Divisors](Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/README.md) + - 0013.Fibonacci-Numbers + - [Fib Frog](Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/README.md) + - 0015.Caterpillar-Method + - [Abs Distinct](Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/README.md) +- Geeksfor Geeks + - Sorting Algorithms + - [0031.Find-Minimum-Difference-Between-Any-Two-Elements](GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/README.md) +- Leetcode + - 0000.xxxx + * [NUM.LEETCODETITLE](Leetcode/0000.xxxx/README.md) + - 0001.Two-Sum + - [Merging 2 Packages](Leetcode/0001.Two-Sum/Merging-2-Packages/README.md) + * [0001.Two Sum](Leetcode/0001.Two-Sum/README.md) + - 0002.Add-Two-Numbers + * [0002.Add Two Numbers](Leetcode/0002.Add-Two-Numbers/README.md) + - 0003.Longest-Substring-Without-Repeating-Characters + * [0003.Longest Substring Without Repeating Characters](Leetcode/0003.Longest-Substring-Without-Repeating-Characters/README.md) + - 0005.Longest-Palindromic-Substring + * [0005. Longest Palindromic Substring](Leetcode/0005.Longest-Palindromic-Substring/README.md) + - 0011.Container-With-Most-Water + * [0011.Container With Most Water](Leetcode/0011.Container-With-Most-Water/README.md) + - 0015.3Sum + * [0015. 3Sum](Leetcode/0015.3Sum/README.md) + - 0019.Remove-Nth-Node-From-End-of-List + * [0019. Remove Nth Node From End of List](Leetcode/0019.Remove-Nth-Node-From-End-of-List/README.md) + - 0020.Valid-Parentheses + * [0020. Valid Parentheses](Leetcode/0020.Valid-Parentheses/README.md) + - 0021.Merge-Two-Sorted-Lists + * [0021. Merge Two Sorted Lists](Leetcode/0021.Merge-Two-Sorted-Lists/README.md) + - 0027.Remove-Element + * [0027.Remove Element](Leetcode/0027.Remove-Element/README.md) + - 0028.Find-the-Index-of-the-First-Occurrence-in-a-String + * [0028. Find the Index of the First Occurrence in a String](Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/README.md) + - 0035.Search-Insert-Position + * [0035.Search Insert Position](Leetcode/0035.Search-Insert-Position/README.md) + - [0046.Permutations](Leetcode/0046.Permutations/README.md) + - 0049.Group-Anagrams + * [0049.Group Anagrams](Leetcode/0049.Group-Anagrams/README.md) + - 0053.Maximum-Subarray + * [0053.Maximum Subarray](Leetcode/0053.Maximum-Subarray/README.md) + - 0059.Spiral-Matrix-II + * [0059.Spiral Matrix II](Leetcode/0059.Spiral-Matrix-II/README.md) + - 0070.Climbing-Stairs + * [0070.Climbing Stairs](Leetcode/0070.Climbing-Stairs/README.md) + - 0072.Edit-Distance + * [0072. Edit Distance](Leetcode/0072.Edit-Distance/README.md) + - 0074.Search-a-2D-Matrix + * [74. Search a 2D Matrix](Leetcode/0074.Search-a-2D-Matrix/README.md) + - 0075.Sort-Colors + * [0075.Sort Colors](Leetcode/0075.Sort-Colors/README.md) + - 0078.Subsets + * [0078. Subsets](Leetcode/0078.Subsets/README.md) + - 0088.Merge-Sorted-Array + * [0088.Merge Sorted Array](Leetcode/0088.Merge-Sorted-Array/README.md) + - 0094.Binary-Tree-Inorder-Traversal + * [0094.Binary Tree Inorder Traversal](Leetcode/0094.Binary-Tree-Inorder-Traversal/README.md) + - 0100.Same-Tree + * [100. Same Tree](Leetcode/0100.Same-Tree/README.md) + - 0104.Maximum-Depth-of-Binary-Tree + * [0104.Maximum Depth of Binary Tree](Leetcode/0104.Maximum-Depth-of-Binary-Tree/README.md) + - 0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal + * [105. Construct Binary Tree from Preorder and Inorder Traversal](Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/README.md) + - 0110.Balanced-Binary-Tree + * [110. Balanced Binary Tree](Leetcode/0110.Balanced-Binary-Tree/README.md) + - 0121.Best-Time-to-Buy-and-Sell-Stock + * [0121.Best Time to Buy and Sell Stock](Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/README.md) + - 0125.Valid-Palindrome + * [0125. Valid Palindrome](Leetcode/0125.Valid-Palindrome/README.md) + - 0128.Longest-Consecutive-Sequence + * [128. Longest Consecutive Sequence](Leetcode/0128.Longest-Consecutive-Sequence/README.md) + - 0138.Copy-List-with-Random-Pointer + * [138. Copy List with Random Pointer](Leetcode/0138.Copy-List-with-Random-Pointer/README.md) + - 0141.Linked-List-Cycle + * [0141.Linked List Cycle](Leetcode/0141.Linked-List-Cycle/README.md) + - 0142.Linked-List-CycleII + * [0142.Linked List Cycle II](Leetcode/0142.Linked-List-CycleII/README.md) + - 0143.Reorder-List + * [143. Reorder List](Leetcode/0143.Reorder-List/README.md) + - 0167.Two-Sum-II-Input-Array-Is-Sorted + * [0167.Two Sum II Input Array Is Sorted](Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/README.md) + - 0203.Remove-Linked-List-Elements + * [0203.Remove Linked List Elements](Leetcode/0203.Remove-Linked-List-Elements/README.md) + - 0206.Reverse-Linked-List + * [206. Reverse Linked List](Leetcode/0206.Reverse-Linked-List/README.md) + - 0209.Minimum-Size-Subarray-Sum + * [0209. Minimum Size Subarray Sum](Leetcode/0209.Minimum-Size-Subarray-Sum/README.md) + - 0215.Kth-Largest-Element-in-an-Array + * [0215. Kth Largest Element in an Array](Leetcode/0215.Kth-Largest-Element-in-an-Array/README.md) + - [0217.Contains-Duplicate](Leetcode/0217.Contains-Duplicate/README.md) + - 0226.Invert-Binary-Tree + * [226. Invert Binary Tree](Leetcode/0226.Invert-Binary-Tree/README.md) + - 0238.Product-of-Array-Except-Self + * [238. Product of Array Except Self](Leetcode/0238.Product-of-Array-Except-Self/README.md) + - [0242.Valid-Anagram](Leetcode/0242.Valid-Anagram/README.md) + - 0283.Move-Zeroes + * [0283. Move Zeroes](Leetcode/0283.Move-Zeroes/README.md) + - 0300.Longest-Increasing-Subsequence + * [0300.Longest Increasing Subsequence](Leetcode/0300.Longest-Increasing-Subsequence/README.md) + - 0310.Minimum-Height-Trees + * [0310.Minimum Height Trees](Leetcode/0310.Minimum-Height-Trees/README.md) + - 0322.Coin-Change + * [0322.Coin Change](Leetcode/0322.Coin-Change/README.md) + - 0344.Reverse-String + * [0344.Reverse String](Leetcode/0344.Reverse-String/README.md) + - 0347.Top-K-Frequent-Elements + * [347. Top K Frequent Elements](Leetcode/0347.Top-K-Frequent-Elements/README.md) + - 0354.Russian-Doll-Envelopes + * [0354. Russian Doll Envelope](Leetcode/0354.Russian-Doll-Envelopes/README.md) + - 0380.Insert-Delete-GetRandom-O1 + * [380. Insert Delete GetRandom O(1)](Leetcode/0380.Insert-Delete-GetRandom-O1/README.md) + - 0381.Insert-Delete-GetRandom-O1-Duplicates-allowed + * [381.Insert Delete GetRandom O(1) Duplicates allowed](Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/README.md) + - 0409.Longest-Palindrome + * [0409. Longest Palindrome](Leetcode/0409.Longest-Palindrome/README.md) + - 0412.Fizz-Buzz + * [412. Fizz Buzz](Leetcode/0412.Fizz-Buzz/README.md) + - 0438.Find-All-Anagrams-in-a-String + * [0438.Find All Anagrams in a String](Leetcode/0438.Find-All-Anagrams-in-a-String/README.md) + - 0509.Fibonacci-Number + * [0509.Fibonacci Number](Leetcode/0509.Fibonacci-Number/README.md) + - 0516.Longest-Palindromic-Subsequence + * [516. Longest Palindromic Subsequence](Leetcode/0516.Longest-Palindromic-Subsequence/README.md) + - 0543.Diameter-of-Binary-Tree + * [0543. Diameter of Binary Tree](Leetcode/0543.Diameter-of-Binary-Tree/README.md) + - 0567.Permutation-in-String + * [0567.Permutation in String](Leetcode/0567.Permutation-in-String/README.md) + - 0693.Binary-Number-with-Alternating-Bits + * [0693.Binary Number with Alternating Bits](Leetcode/0693.Binary-Number-with-Alternating-Bits/README.md) + - 0695.Max-Area-of-Island + * [0695.Max Area of Island](Leetcode/0695.Max-Area-of-Island/README.md) + - 0703.Kth-Largest-Element-in-a-Stream + * [0703. Kth Largest Element in a Stream](Leetcode/0703.Kth-Largest-Element-in-a-Stream/README.md) + - 0704.Binary-Search + * [0704.Binary Search](Leetcode/0704.Binary-Search/README.md) + - 0721.Accounts-Merge + * [0721.Accounts Merge](Leetcode/0721.Accounts-Merge/README.md) + - 0733.Flood-Fill + * [0733.Flood Fill](Leetcode/0733.Flood-Fill/README.md) + - 0746.Min-Cost-Climbing-Stairs + * [746. Min Cost Climbing Stairs](Leetcode/0746.Min-Cost-Climbing-Stairs/README.md) + - 0752.Open-the-Lock + * [0752.Open the Lock](Leetcode/0752.Open-the-Lock/README.md) + - 0875.Koko-Eating-Bananas + * [875. Koko Eating Bananas](Leetcode/0875.Koko-Eating-Bananas/README.md) + - 0876.Middle-of-the-Linked-List + * [0876.Middle of the Linked List](Leetcode/0876.Middle-of-the-Linked-List/README.md) + - 1046.Last-Stone-Weight + * [1046. Last Stone Weight](Leetcode/1046.Last-Stone-Weight/README.md) + - 1143.Longest-Common-Subsequence + * [1143.Longest Common Subsequence](Leetcode/1143.Longest-Common-Subsequence/README.md) + - 1195.Fizz-Buzz-Multithreaded + * [1195. Fizz Buzz Multithreaded](Leetcode/1195.Fizz-Buzz-Multithreaded/README.md) +- [Structures](structures/README.md) + - Heap + * [Golang Container Heap](structures/heap/index.en.md) +- [Template](template/README.md) +* [CHANGELOG](CHANGELOG.md) +* [Content](Content.md) +* [Tags](tags.md) diff --git a/Utility/crud/crud.go b/Utility/crud/crud.go new file mode 100644 index 000000000..b4cebd1de --- /dev/null +++ b/Utility/crud/crud.go @@ -0,0 +1,135 @@ +package crud + +import ( + "bytes" + "crypto/tls" + "errors" + "fmt" + "io/ioutil" + "net/http" + + jsoniter "github.com/json-iterator/go" +) + +var ( + errStatusNo200 = errors.New("http code not 200") +) + +type Crud struct { + URL string + Request +} + +type Request struct { + Header map[string]string + Params map[string]string + Body map[string]interface{} +} + +type Response struct { + HttpCode int + Response string + Header http.Header + Error error +} + +func NewCrud(url string) *Crud { + return &Crud{URL: url} +} + +func handleRequest(url string, method string, header map[string]string, params map[string]string, body map[string]interface{}) (int, string, http.Header, error) { + // body + var json = jsoniter.ConfigCompatibleWithStandardLibrary + jsonStr, _ := json.Marshal(body) + + // ignore SSL + http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} + + req, err := http.NewRequest(method, url, bytes.NewBuffer(jsonStr)) + if err != nil { + return 0, "", nil, err + } + + // headers + for key, value := range header { + req.Header.Add(key, value) + } + + // params + q := req.URL.Query() + for key, value := range params { + q.Add(key, value) + } + + client := &http.Client{} + + req.URL.RawQuery = q.Encode() + + resp, err := client.Do(req) + + if err != nil { + fmt.Println(err) + } + defer resp.Body.Close() + + content, err := ioutil.ReadAll(resp.Body) + if err != nil { + return resp.StatusCode, "", nil, err + } + respBody := string(content) + headers := resp.Header + + return resp.StatusCode, respBody, headers, nil +} + +func (crud *Crud) Post() Response { + httpCode, response, headers, error := handleRequest(crud.URL, "POST", crud.Header, crud.Params, crud.Body) + + resp := Response{ + HttpCode: httpCode, + Response: response, + Header: headers, + Error: error, + } + + return resp +} + +func (crud *Crud) Get() Response { + httpCode, response, headers, error := handleRequest(crud.URL, "GET", crud.Header, crud.Params, crud.Body) + + resp := Response{ + HttpCode: httpCode, + Response: response, + Header: headers, + Error: error, + } + + return resp +} + +func (crud *Crud) Put() Response { + httpCode, response, headers, error := handleRequest(crud.URL, "PUT", crud.Header, crud.Params, crud.Body) + + resp := Response{ + HttpCode: httpCode, + Response: response, + Header: headers, + Error: error, + } + + return resp +} + +func (crud *Crud) Delete() Response { + httpCode, response, headers, error := handleRequest(crud.URL, "DELETE", crud.Header, crud.Params, crud.Body) + + resp := Response{ + HttpCode: httpCode, + Response: response, + Header: headers, + Error: error, + } + + return resp +} diff --git a/Utility/crud/crud_test.go b/Utility/crud/crud_test.go new file mode 100644 index 000000000..d96abe3cc --- /dev/null +++ b/Utility/crud/crud_test.go @@ -0,0 +1,74 @@ +package crud + +import ( + "fmt" + "testing" +) + +func TestPost(t *testing.T) { + tests := []struct { + name string + url string + header map[string]string + params map[string]string + body map[string]interface{} + }{ + { + name: "Post", + url: "https://10.36.235.47:7071/api/packages", + header: map[string]string{ + "Version": "1.1.0", + "Windows-Package-Manager": "winget-cli-restsource-dev", + "Content-Type": "application/json", + "Accept": "application/Json", + }, + params: nil, + body: map[string]interface{}{ + "PackageIdentifier": "Demo.Postman", + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + crud := NewCrud(tt.url) + crud.Header = tt.header + crud.Params = tt.params + crud.Body = tt.body + if got := crud.Post(); got.Error != nil { + t.Errorf("got = %v", got) + } else { + fmt.Println(got.HttpCode) + } + }) + } +} + +func TestGet(t *testing.T) { + tests := []struct { + name string + url string + header map[string]string + params map[string]string + }{ + { + name: "Get", + url: "https://kimi0230.github.io", + header: nil, + params: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + crud := NewCrud(tt.url) + crud.Header = tt.header + crud.Params = tt.params + if got := crud.Get(); got.Error != nil { + t.Errorf("got = %v", got) + } else { + fmt.Println(got.HttpCode) + } + }) + } +} diff --git a/Utility/structures/StackBasedOnArray.go b/Utility/structures/StackBasedOnArray.go new file mode 100644 index 000000000..3436b624c --- /dev/null +++ b/Utility/structures/StackBasedOnArray.go @@ -0,0 +1,79 @@ +package structures + +import "fmt" + +/* +tree stack +*/ + +type ArrayStack struct { + //data + data []interface{} + //stack + top int +} + +func NewArrayStack() *ArrayStack { + return &ArrayStack{ + data: make([]interface{}, 0, 32), + top: -1, + } +} + +func (this *ArrayStack) IsEmpty() bool { + if this.top < 0 { + return true + } + return false +} + +func (this *ArrayStack) Push(v interface{}) { + if this.top < 0 { + this.top = 0 + } else { + this.top += 1 + } + + if this.top > len(this.data)-1 { + this.data = append(this.data, v) + } else { + this.data[this.top] = v + } +} + +func (this *ArrayStack) Pop() interface{} { + if this.IsEmpty() { + return nil + } + v := this.data[this.top] + this.top -= 1 + return v +} + +func (this *ArrayStack) Top() interface{} { + if this.IsEmpty() { + return nil + } + return this.data[this.top] +} + +func (this *ArrayStack) Flush() { + this.top = -1 +} + +func (this *ArrayStack) Size() int { + if this.top < 0 { + return 0 + } + return this.top + 1 +} + +func (this *ArrayStack) Print() { + if this.IsEmpty() { + fmt.Println("empty statck") + } else { + for i := this.top; i >= 0; i-- { + fmt.Println(this.data[i]) + } + } +} diff --git a/Utility/structures/TreeNode.go b/Utility/structures/TreeNode.go new file mode 100644 index 000000000..6c3750de9 --- /dev/null +++ b/Utility/structures/TreeNode.go @@ -0,0 +1,251 @@ +/* +https://github.com/halfrost/LeetCode-Go/tree/master/structures +*/ + +package structures + +import ( + "fmt" +) + +// TreeNode is tree's node +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +// NULL 方便添加測試數據 +var NULL = -1 << 63 + +// Ints2TreeNode 利用 []int 生成 *TreeNode +func Ints2TreeNode(ints []int) *TreeNode { + n := len(ints) + if n == 0 { + return nil + } + + root := &TreeNode{ + Val: ints[0], + } + + queue := make([]*TreeNode, 1, n*2) + queue[0] = root + + i := 1 + for i < n { + node := queue[0] + queue = queue[1:] + + if i < n && ints[i] != NULL { + node.Left = &TreeNode{Val: ints[i]} + queue = append(queue, node.Left) + } + i++ + + if i < n && ints[i] != NULL { + node.Right = &TreeNode{Val: ints[i]} + queue = append(queue, node.Right) + } + i++ + } + + return root +} + +// GetTargetNode 返回 Val = target 的 TreeNode +// root 中一定有 node.Val = target +func GetTargetNode(root *TreeNode, target int) *TreeNode { + if root == nil || root.Val == target { + return root + } + + res := GetTargetNode(root.Left, target) + if res != nil { + return res + } + return GetTargetNode(root.Right, target) +} + +func indexOf(val int, nums []int) int { + for i, v := range nums { + if v == val { + return i + } + } + + msg := fmt.Sprintf("%d 不存在於 %v 中", val, nums) + panic(msg) +} + +// PreIn2Tree 把 preorder 和 inorder slice 轉換成 二叉樹 +func PreIn2Tree(pre, in []int) *TreeNode { + if len(pre) != len(in) { + panic("preIn2Tree 中兩個切片的長度不相等") + } + + if len(in) == 0 { + return nil + } + + res := &TreeNode{ + Val: pre[0], + } + + if len(in) == 1 { + return res + } + + idx := indexOf(res.Val, in) + + res.Left = PreIn2Tree(pre[1:idx+1], in[:idx]) + res.Right = PreIn2Tree(pre[idx+1:], in[idx+1:]) + + return res +} + +// InPost2Tree 把 inorder 和 postorder 切片轉換成 二叉樹 +func InPost2Tree(in, post []int) *TreeNode { + if len(post) != len(in) { + panic("inPost2Tree 中兩個切片的長度不相等") + } + + if len(in) == 0 { + return nil + } + + res := &TreeNode{ + Val: post[len(post)-1], + } + + if len(in) == 1 { + return res + } + + idx := indexOf(res.Val, in) + + res.Left = InPost2Tree(in[:idx], post[:idx]) + res.Right = InPost2Tree(in[idx+1:], post[idx:len(post)-1]) + + return res +} + +// Tree2Preorder 把 二叉樹 轉換成 preorder 的切片 +func Tree2Preorder(root *TreeNode) []int { + if root == nil { + return nil + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + res := []int{root.Val} + res = append(res, Tree2Preorder(root.Left)...) + res = append(res, Tree2Preorder(root.Right)...) + + return res +} + +// Tree2Inorder 把 二叉樹 轉換成 inorder 的切片 +func Tree2Inorder(root *TreeNode) []int { + if root == nil { + return nil + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + res := Tree2Inorder(root.Left) + res = append(res, root.Val) + res = append(res, Tree2Inorder(root.Right)...) + + return res +} + +// Tree2Postorder 把 二叉樹 轉換成 postorder 的切片 +func Tree2Postorder(root *TreeNode) []int { + if root == nil { + return nil + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + res := Tree2Postorder(root.Left) + res = append(res, Tree2Postorder(root.Right)...) + res = append(res, root.Val) + + return res +} + +// Equal return ture if tn == a +func (tn *TreeNode) Equal(a *TreeNode) bool { + if tn == nil && a == nil { + return true + } + + if tn == nil || a == nil || tn.Val != a.Val { + return false + } + + return tn.Left.Equal(a.Left) && tn.Right.Equal(a.Right) +} + +// Tree2ints 把 *TreeNode 按照行還原成 []int +func Tree2ints(tn *TreeNode) []int { + res := make([]int, 0, 1024) + + queue := []*TreeNode{tn} + + for len(queue) > 0 { + size := len(queue) + for i := 0; i < size; i++ { + nd := queue[i] + if nd == nil { + res = append(res, NULL) + } else { + res = append(res, nd.Val) + queue = append(queue, nd.Left, nd.Right) + } + } + queue = queue[size:] + } + + i := len(res) + for i > 0 && res[i-1] == NULL { + i-- + } + + return res[:i] +} + +// T2s convert *TreeNode to []int +func T2s(head *TreeNode, array *[]int) { + fmt.Printf("運行到這裡了 head = %v array = %v\n", head, array) + // fmt.Printf("****array = %v\n", array) + // fmt.Printf("****head = %v\n", head.Val) + *array = append(*array, head.Val) + if head.Left != nil { + T2s(head.Left, array) + } + if head.Right != nil { + T2s(head.Right, array) + } +} + +func BuildTree(nums []int, index int) *TreeNode { + if index >= len(nums) || nums[index] == -1 { + return nil + } + root := &TreeNode{Val: nums[index]} + root.Left = BuildTree(nums, 2*index+1) + root.Right = BuildTree(nums, 2*index+2) + return root +} + +func IntsToTree(nums []int) *TreeNode { + return BuildTree(nums, 0) +} diff --git a/Utility/structures/tree/BinaryTree.go b/Utility/structures/tree/BinaryTree.go new file mode 100644 index 000000000..ae05c3064 --- /dev/null +++ b/Utility/structures/tree/BinaryTree.go @@ -0,0 +1,207 @@ +package tree + +import ( + "fmt" +) + +/* + 0 + / \ + 1 2 + / \ \ + 3 4 5 + / \ / \ +6 7 8 9 +Preorder Traversal 前序遍歷 = Depth-first Search +理論上的遍歷順序是:根、左子樹、右子樹。根排在前面。 +0 1 3 6 7 4 2 5 8 9 + +Inorder Traversal 中序遍歷 +理論上的遍歷順序是:左子樹、根、右子樹。根排在中間。 +實際上是採用Depth-first Search,只不過更動了節點的輸出順序。 +6 3 7 1 4 0 2 8 5 9 + +Postorder Traversal 後序遍歷 +理論上的遍歷順序是:左子樹、右子樹、根。根排在後面。 +實際上是採用Depth-first Search,只不過更動了節點的輸出順序。 +6 7 3 4 1 8 9 5 2 0 + +Level-order Traversal 層序遍歷 +即是Breadth-first Search。 +0 1 2 3 4 5 6 7 8 9 +*/ + +type BinaryTree struct { + root *Node +} + +// type Node struct { +// data interface{} +// left *Node +// right *Node +// } + +func NewBinaryTree(rootV interface{}) *BinaryTree { + return &BinaryTree{NewNode(rootV)} +} + +// BFSTraverse: 廣度優先, Breadth First Traverse 廣度優先 +// 用 Queue實現 +func (this *BinaryTree) BFSTraverse() { + p := this.root + s := NewQueueStack() + + if p == nil { + return + } + s.Push(p) + for !s.IsEmpty() { + node := s.Head().(*Node) + + if node.left != nil { + s.Push(node.left) + } + if node.right != nil { + s.Push(node.right) + } + + tmp := s.Pop().(*Node) + fmt.Printf("%+v ", tmp.data) + } + fmt.Println() +} + +// PreOrderTraverse : 深度優先, 前序遍歷 +// 若二元樹為空回傳空, 否則先根節點-> 左子樹 -> 右子樹 +func (this *BinaryTree) PreOrderTraverse() { + p := this.root + s := NewArrayStack() + + for !s.IsEmpty() || nil != p { + if nil != p { + fmt.Printf("%+v ", p.data) + s.Push(p) + p = p.left + } else { + p = s.Pop().(*Node).right + } + } +} + +func (this *Node) PreOrderTraverseRecursive() { + p := this + if p == nil { + return + } + + fmt.Printf("%+v ", p.data) + left := p.left + right := p.right + left.PreOrderTraverseRecursive() + right.PreOrderTraverseRecursive() +} + +// InOrderTraverse : 深度優先, 中序遍歷 +// 若二元樹為空回傳空, 否則從根結點開始, 先走訪根節點的左子樹 -> 根節點 -> 右子樹 +func (this *BinaryTree) InOrderTraverse() { + p := this.root + s := NewArrayStack() + + for !s.IsEmpty() || nil != p { + if nil != p { + s.Push(p) + p = p.left + } else { + tmp := s.Pop().(*Node) + fmt.Printf("%+v ", tmp.data) + p = tmp.right + } + } + fmt.Println() +} + +// InOrderTraverseRecursive : 中序遍歷 遞迴 +func (this *Node) InOrderTraverseRecursive() { + p := this + if p == nil { + return + } + + left := p.left + left.PreOrderTraverseRecursive() + + fmt.Printf("%+v ", p.data) + + right := p.right + right.PreOrderTraverseRecursive() +} + +// PostOrderTraverse : 深度優先, 後序遍歷 +// 若二元樹為空回傳空, 否則從左到右誒並從葉子節點後續走訪左子樹到右子樹, 最後是拜訪根節點 +func (this *BinaryTree) PostOrderTraverse() { + s1 := NewArrayStack() + s2 := NewArrayStack() + s1.Push(this.root) + + for !s1.IsEmpty() { + p := s1.Pop().(*Node) + s2.Push(p) + if p.left != nil { + s1.Push(p.left) + } + if p.right != nil { + s1.Push(p.right) + } + } + + for !s2.IsEmpty() { + fmt.Printf("%+v ", s2.Pop().(*Node).data) + } + + fmt.Println() +} + +// PostOrderTraverse2 : 深度優先, 後序遍歷 +// use one stack, pre cursor to traverse from post order +// 若二元樹為空回傳空, 否則從左到右誒並從葉子節點後續走訪左子樹到右子樹, 最後是拜訪根節點 +func (this *BinaryTree) PostOrderTraverse2() { + r := this.root + s := NewArrayStack() + + //point to last visit node + var pre *Node + + s.Push(r) + + for !s.IsEmpty() { + r = s.Top().(*Node) + if (r.left == nil && r.right == nil) || (pre != nil && (pre == r.left || pre == r.right)) { + fmt.Printf("%+v ", r.data) + s.Pop() + pre = r + } else { + if r.right != nil { + s.Push(r.right) + } + + if r.left != nil { + s.Push(r.left) + } + } + } + fmt.Println() +} + +// PostOrderTraverseRecursive : 後序遍歷 遞迴 +func (this *Node) PostOrderTraverseRecursive() { + p := this + if p == nil { + return + } + + left := p.left + right := p.right + left.PreOrderTraverseRecursive() + right.PreOrderTraverseRecursive() + fmt.Printf("%+v ", p.data) +} diff --git a/Utility/structures/tree/BinaryTree_test.go b/Utility/structures/tree/BinaryTree_test.go new file mode 100644 index 000000000..2bf9be64f --- /dev/null +++ b/Utility/structures/tree/BinaryTree_test.go @@ -0,0 +1,87 @@ +package tree + +import ( + "testing" +) + +// 1 +// / \ +// 3 4 +// / +// 5 +func TestBinaryTree_BFSTraverse(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + binaryTree.BFSTraverse() // 1 3 4 5 +} + +// 前序遍歷 +func TestBinaryTree_PreOrderTraverse(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.PreOrderTraverse() //1 3 4 5 +} + +func TestBinaryTree_PreOrderTraverseRecursive(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.root.PreOrderTraverseRecursive() //1 3 4 5 +} + +//中序遍歷 +func TestBinaryTree_InOrderTraverse(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.InOrderTraverse() // 3 1 5 4 +} + +//中序遍歷 遞迴 +func TestBinaryTree_InOrderTraverseRecursive(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.root.InOrderTraverseRecursive() // 3 1 5 4 +} + +//後序遍歷 +func TestBinaryTree_PostOrderTraverse(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.PostOrderTraverse() // 3 5 4 1 +} + +//後序遍歷 +func TestBinaryTree_PostOrderTraverse2(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.PostOrderTraverse2() // 3 5 4 1 +} + +//後序遍歷 遞迴 +func TestBinaryTree_PostOrderTraverseRecursive(t *testing.T) { + binaryTree := NewBinaryTree(1) + binaryTree.root.left = NewNode(3) + binaryTree.root.right = NewNode(4) + binaryTree.root.right.left = NewNode(5) + + binaryTree.root.PostOrderTraverseRecursive() // 3 5 4 1 +} diff --git a/Utility/structures/tree/QueueBasedOnArray.go b/Utility/structures/tree/QueueBasedOnArray.go new file mode 100644 index 000000000..4067d8390 --- /dev/null +++ b/Utility/structures/tree/QueueBasedOnArray.go @@ -0,0 +1,80 @@ +package tree + +import "fmt" + +/* +tree stack +*/ + +type QueueStack struct { + //data + data []interface{} + //stack + top int +} + +func NewQueueStack() *QueueStack { + return &QueueStack{ + data: make([]interface{}, 0, 32), + top: -1, + } +} + +func (this *QueueStack) IsEmpty() bool { + if this.top < 0 { + return true + } + return false +} + +func (this *QueueStack) Push(v interface{}) { + if this.top < 0 { + this.top = 0 + } else { + this.top += 1 + } + + if this.top > len(this.data)-1 { + this.data = append(this.data, v) + } else { + this.data[this.top] = v + } +} + +func (this *QueueStack) Pop() interface{} { + if this.IsEmpty() { + return nil + } + v := this.data[0] + this.data = this.data[1:] + this.top -= 1 + return v +} + +func (this *QueueStack) Head() interface{} { + if this.IsEmpty() { + return nil + } + return this.data[0] +} + +func (this *QueueStack) Top() interface{} { + if this.IsEmpty() { + return nil + } + return this.data[this.top] +} + +func (this *QueueStack) Flush() { + this.top = -1 +} + +func (this *QueueStack) Print() { + if this.IsEmpty() { + fmt.Println("empty statck") + } else { + for i := this.top; i >= 0; i-- { + fmt.Println(this.data[i]) + } + } +} diff --git a/Utility/structures/tree/StackBasedOnArray.go b/Utility/structures/tree/StackBasedOnArray.go new file mode 100644 index 000000000..e24b81570 --- /dev/null +++ b/Utility/structures/tree/StackBasedOnArray.go @@ -0,0 +1,72 @@ +package tree + +import "fmt" + +/* +tree stack +*/ + +type ArrayStack struct { + //data + data []interface{} + //stack + top int +} + +func NewArrayStack() *ArrayStack { + return &ArrayStack{ + data: make([]interface{}, 0, 32), + top: -1, + } +} + +func (this *ArrayStack) IsEmpty() bool { + if this.top < 0 { + return true + } + return false +} + +func (this *ArrayStack) Push(v interface{}) { + if this.top < 0 { + this.top = 0 + } else { + this.top += 1 + } + + if this.top > len(this.data)-1 { + this.data = append(this.data, v) + } else { + this.data[this.top] = v + } +} + +func (this *ArrayStack) Pop() interface{} { + if this.IsEmpty() { + return nil + } + v := this.data[this.top] + this.top -= 1 + return v +} + +func (this *ArrayStack) Top() interface{} { + if this.IsEmpty() { + return nil + } + return this.data[this.top] +} + +func (this *ArrayStack) Flush() { + this.top = -1 +} + +func (this *ArrayStack) Print() { + if this.IsEmpty() { + fmt.Println("empty statck") + } else { + for i := this.top; i >= 0; i-- { + fmt.Println(this.data[i]) + } + } +} diff --git a/Utility/structures/tree/tree.go b/Utility/structures/tree/tree.go new file mode 100644 index 000000000..351a819f4 --- /dev/null +++ b/Utility/structures/tree/tree.go @@ -0,0 +1,27 @@ +package tree + +import "fmt" + +type Node struct { + data interface{} + left *Node + right *Node +} + +func NewNode(data interface{}) *Node { + return &Node{data: data} +} + +func (this *Node) String() string { + return fmt.Sprintf("v:%+v, left:%+v, right:%+v", this.data, this.left, this.right) + // return fmt.Sprintf("v:%+v, left:%+v, right:%+v", this.data, this.left, this.right) +} + +// func main() { +// a := Node{"a", nil, nil} +// b := Node{"b", nil, nil} +// c := Node{"c", nil, nil} +// a.left = &b +// b.right = &c +// fmt.Println(a.String()) +// } diff --git a/assets/images/0046.permutations.png b/assets/images/0046.permutations.png new file mode 100644 index 0000000000000000000000000000000000000000..943ca25e5bcc82a6edbbf8bbb885e67a166f16bb GIT binary patch literal 80972 zcmZU41ymeOvnT{Ya19pRAvgqgcL>4V-B~oaySux)F1ok{hv4qAxI2&UzxV$4fA7sX zeWto}s(Pz-PW5!yPk9L>_;2tK5D-XGlA^yLARsqB##dOF4~!)vFXP8V%tA!ur<8~Y z@lQuPQwwVo2ngypBYk~zDLU$50|R~i;c;3Tct_V?p`nq#^nC`qhr1`bNA&yk(^Ivz zH*rump_F?e3KV;QR)TYa_8Qp6^W#mfR4_JG>CXa1po_j>b`#lKYF}E4CQe+*cgXF= zUH^P^7?{DY#9FN#g%JH`5cOi=zR{oR4}2GoQ14(+dEk2aKdEA%?;;v+K-7PZXGQlj zWdcFeJIBZN&&DnO^bqnL8kifBAn6|NpIQy@1xS6ND8r;6Ugqk`t*2(?D-i8L!;vn7 z&vqaA%?&ROBQB1Jn9CGW`sN9RpB!n34_lX5f`~ZSDky{$sGbY~)purxi0H3{W_XO^ zx1K)QZBLv_Tt|&|1~F(yH()U+j>>-T0s}K|@&4|EY^JZjV66Y(@%sM0vGV@@-X7`a z_lWiLoC6{SWQZ@()F1W{S5*^rDN{K)i0>aTECghT1qAd51o<((eGCW)sQ6%rFCTaG zk0F}->3^t@8@W*bhQI#9D5NAJCG~MvGIBIAu?3jhIpNPWgnp=+w@_AhQkRqEHnOu} zFfg_=G+}VFvHwQ|g4d1v1GF)5G9Y%dv9<+pyYZ3!i-Y?E{s+xSO8hStCo4Wub-AC! zB6f}@#Ow@A3{0f_@WjN#ypG1E+`mM{|6BZH#z$)I%Ks~=0x)qDv9tLw>BRrPEA!vN|4ICBL0-mxJpYeK z{8yO&h5d*#KRhqvzt@Z(-l%~m69PgILP}If*$wg}>x+Ko!1TSu%-YdklhIDRRfNSs zed|c(&iix-zd&;G*w{O7xI$E6YLdJ{h%&)asnR^P*$7A_MD~Hs`{H%^nfvGSqd0|w z*)>3~i>xEURg;&C*~jH#YG&GCS+3TsUTn-1+am}Ag^TzP&@JC5cqb30nN|EB%)dyS zh{l0-!Kf@a!}`PleuywEIEy1Vl60O8WAzP>R8jFsNhUAn?V{jkAL7?17+#Cs{#4gN zoR?_sHD){{FmC4){n1^V_v?>?JZD56N5Vj&Y2XHb2lI0k zaI*nqzq2)RKt=&;4Ow9Yo$IHqpE8f^I-$IB|Z(@(tRF%_sj1`dLE5OIV zLjL3h9Iz#LEj8m?#JKB&K?^BHe1 zi4SZCA-ZB4S(*UQ5znaMLS~LbC}^N-Rs*oN4Fxh_xt`A?(xvHW)&lUupjm|eA>QIJ zG3fd6mt%21YERzfF)ymP*mR}$>9U;=I^aS{S9hAk>m!)Qk^$zn^5Zv1ill+;?Cjz} zu|)EM4QM!BSe4oLO6h)5!s`moReM|0i(@nezeF~Fx0h06~om{dy2oX6xWbkq|9p`$wV_oWQbRK`i5w&_X1&S*z z#7qS2N3oqk5zeL9%cg*W$f|6Jbky;@5GaWv`wA#}c0-btsa(d327l3Zx)_d!nZEWW zo~2`C&*%UYpYFaS!1ihZKql}^Vl%Nc`EXs=#qQ|%agt7Q&jS?!A?_C))Edz5JOw?9wiQVrDE;nUcEuLP*VF%R8_(SWi1>2w)a)w%wt&t^ zVh&qzICfk71TdAA^`*<`V(_#b!~xS4xVulH)4^TpISc%lH7-0p-E0C@2~RD09y5>S zr(D0*ct4@?=2Q5Lso;dqFH~$W1E+xs`0id0w(kwyg&G&EXjL~^{PabBCG!r2JZDZ| zgf8!#%fmT4ucj<4JIjHJ^ShOOk}T$jlrXKW^Oo1ZUNsa`>HjOePjC>)fAE~AR4)|8sf>tg6P`z%QvR!EoYdn?aTyWE?rbImq@T0)>$r&GcDty2 zl#BCfZdTlue=3H4iIE^0dJTwsHfSB+zS~<>SvwW2o5u_5je~m(cH=$DeIkPg2F{R!B~xK9gjsc0-nZuOjYN#wWY99G(!r$ct0_^|u0rJ^NoZ(8hnz;>7E{dlZmMURTOxMY^IKd-8z(-|b(qeF0m=$Rw(&l4S3&wOPBngf!( z+DL|qZ|v%OV{H%*x?h`N2_^Xb%EhJW85n}~#*?FUxN2woHUQq1o82*9wc zPvjJEB{#Q&zK?oeOJ~0txm3@IKaeW@%fohk!Cu$PZIgMR9pggw==UZa&50lJJ>AVX zlGL7H<|b;!s+_Mr+*FExIQB$T_~lLVq*M~&E7R}5!!##AYJrOEON0b{2c|8-t&&om zC@z9j%MrgSvwRvlrTbr6T2^dxbKXC9C(bCW<;Ui)II3Hj&pRb12e$m)PzD;1TdzN8qE_D9U< zKrOwXJF7gKJsveZ?{JBYE8#mOUQKja??bIyYzA#Z9ch{7R&{aeiIEYD4P?FFOkUXw znGzdFyKwhPKlHW-K#ven%~f0}XB_T~^2PntTtqhn1R^FsbS$p+*J`poFJxpCAE$7i z#QB{BH{gP5xTUESiodBB^RuuO|l!fdJ%u;|FJtUq~D>${r>wx%7oX@16nv6=sa zpDCPQRm!)ehgeuJ5`C@^2B)I8bHRgRvG=7|B}GJq^Vk={$iT6TxeU9A&j*|N(7k7u z<4fJ~(2Q%jyFF9W_S`fu#vS113^*XF(OtI_aGSv~JX-l8>0l*KPtI8VN_nN!-Z4A^ zK3<^yNMbj^?}g3mR3VgI!dA3iv|a5vm{j4>Gp;T!&465Km=tfVE(0=bK4o>Ft&RrZ zRKo}=BXg);x2%2-YhKraE#aPy2r$C>yp@_Jw$BMT<#cCo@ zT2LA6q%pGMJP`Hx;_S&Vf=nY)=o*Y-_*UCoPUG!&+a@k=7dD!^-cFI9ABzMU{h*$K zD@+WUjs0&oB`c@x8+;p2H(}{T80?9UECG-?IObiQ*N;;^9&B)Yr_sDyK)%6I@d+3# z;9{8(-ia$9;O=Uh`1z_|%>QY}dFiev+?Ve`s5{#!!H-cD@)XauG6slpXcU z*yjvDWuAqHa2ihb81SPw$RbMW!!TXKKtZDGLQiQH)OfQ+tE(5GMG>;j>`&?$>+zqH zW^e(L+mGcacS~`(G_`E(7HdbYuCKIx*2`z^EqBt)bQ=lz+B6gu4Xm%z?r{;FzCq>C z+L^)iXIhJ5y&Fk6`mnSgH@EF$*(x7NrZ?qFAV^Oh&GDr`*gREb-+eQ$ggDuqvM6`K z_>pi?LAi;y!DDEK9Jbhn4P(8WD?WOv4>PY~wt{pXXf4S!TD{&iUyK;7&QM!{)RO>} zOUooyGXQBNiK~`TgySLX%c5t>R2yL+xKvcmMXT4M&)jQY(2k|7w(d+r-!xqiqGe!^ zXQ$M}@gptH=b1ZU`h_qXLL4T#cwu6DnQA3nm$znY)YTudgIIRM% zHwgv6EY=#dYk6~8=S*n%?k}y$3%rWrv01iUBZLx^{7|lL!F;ab9j2$;!ZBDY*OOg_2VRe| z8NBX>JW5WU0%?=Dh=l=uI?@l8OMltoO^R7ovNa^}tu{>Y7B~!VAJh{I;P~&Prm8(D zHlCCm%xfrDs(cDgIqH`OFF|wyb-sxy7pu2ich|V?#x-!7dRP`QZ%B7lP?k2vu3VpN z#8TFi1GP>f;ci`IM3P@k9J`JheLk9W)JX_H_}gWXff1T{DmJ;ot|c;^n@zyo9uzmduJs=)|}Ze zt~Y_OSoisF58fM|lI4k&2OHtRX?{kV;vcF#5-op$O#dpJgQ7+ToO|bjX&zIS9ci+`jx14UX4z5lwAfsH)0$~p5 zC>CeYP5|@!i(v}8c;TQdj7$}}^P}~Y$=bb30^?KSyUt}{3 zsj{6Sk;D^Dhud2_I(n-+u6~#Jd4pHkh&$JA+X!3p)4hut6hA zcXh9KD?{_u8Zj1+pDW5LnmX^lnR&?Jn{`f`@A1wxnBBA6so0&MKd=B~1kDbhPme3A z0qN%`AXlNk%n=(Dt9x+xQLq=;V;vvwFiXs}N^E*?>Tj<8EakH{1isL-C(c}{$qhE= z>qvB=SkHYPt#`LW*QXLn$0wb$VG`pObrpJ}4IK~>pJc2EJ}FNgy(GlIeNGM3)Wgq; z##6F$-6X-c7|Zh!cH4$rgb$zn(ExcDn-?|TUb+Oj_sllwiZgp3TCyrl$R7CSO6C#H zvp(5mvbV&JZsUb{(8Ol`G|);vUxDfy-~AOT`}VteGst{kbm})p{wJ$Q%Z-DbIysYd zGp1S*CSn6N<9ngZGUR%nH?UAilQ-DEX8G^yy>q$=U6pjV*TdFOv+NeA9TO{qgq{7ecBmvjScAWMhq#i~^lr1tZ5DflAg>JVpANP4kf>)QBhcTeLmI z=;CRO&Y21fBtreZGp68xpAidp^96aywXmOHmwd*NxiBsu$-dD6Tb6=JDw9(rf^6xR zYe>T}v$+9c(R@I1bF*AXl&XHI}nsQykOBJDj{oZlN=f2m0lV)ZbBk$@FtNL@fil!q@l}8!_*-eq| zk^DctHvRZ|^40Oe6G5yq3n+Ii&L7Px@|G*6FGQSP0(b(pkv6L>OV#afl=IdRazZk5 z;;Xdie``9~XDQ{DN84N(uR*r=-}5-l&W0KrrY*t8Cty8+A@L}}ect>ekH z?1OFl+o!ejOoa@)<0;egGjXPf&)8OBcW(kTv`{!o%e0w{;OJ}(y)fj7h z)p_GC-r7NL|9PGOWAq$*TRh2J^%Rpx_V_%si%@a`pv$2#{ZVm27#jKJvxYzQFD)-*1Mx5{d-m|aBZ7f;?b!$h?IDH}r zdSP}j+0ndZkTVj5U^l+YURzOkx}QQzdbf}M9o5gB#lhjQMZshD49&VvYG@%jG=IKS zsHt^bcPHAy!}R{WCK)=Z4ZZ*1V03A^Z%rc!SgPYNpkTcWsdSpI_nuu_Fu*WYT7@TQvAbG~ zHmmIW#3J%c^UeR*bZo}EHmM9F#xGDAi=zB+JJg4G+H7utG`@DgaCfZxH)F!#>G}S0 zSq#=9iY~%R((~LB7sm1Mm8hpBz@>eyW|>}?vzpwKGKPHuXF*>HM%0?_pzFE73)K2u z-`(65{#_%y^)?v@IL*iIV+RE$+Qa^(5`iKej}8oyy}-UKfzcOyJ@lRe zZlS??52=Q^ITNkV(FW+C)4_HdrAs*p0VT#|iR~N=uN5@eu;XK%9*Ts#^LpA|=!WT)tvljEDa=(I|`9`yq}htEAzcx1gUJODL3G6WMHB5hq@u`AbP}?Auk!ip|nh z5}d(?silkJ6BdK!bSu(u7$|gJA-Z7k;IE6Or*FutCZNhKiq*W|f9kArQ_5^i3tYmw zzYC_yyQnI!bO>CJ1BjkbLo4g(1XSq&N3g1_YC{B&m!GYiOfmR&5+A+=&AVf0o(N^; zeOGPDt6Q3{*^mXT9yb>k-eMWWzoKrnw~7;nJGyiuMhU+8C>@`czGYMyUQ>c`qZi5S z0B=vfKw0e`{oZU%6Z;0z$dD3RW0m@(YG=W>cxx3R_o!0R^V6_E+pppTdyqpctP0+xQ<0px7l*^OOlXXXTCoz4rcvkOk+RYnuN- zk>X^n&{E5*4b|b@kOIflx_KoFUGcL#hkP?TsGrT~0%Kt>)gZ;=6EqJ+wGQ zJ@ZWK@I;NuJ({4~WRH^>nHm>Or+Zryf?mQ1lo-&g&POM%9m7igrn6x_Q}0RMb(}3e zMHB05XYqH{)`%` zI2{8l0Lv2b*;415x`NIxV|M-$KI^LkFOB0`Jv1)|El(>i z9pl)Rvr$3-%3M#ZFELLSN;%SmUe8CQSd;=rcY;&eB}yB875AR?YNrGE+1rOaORP`h zw_9dY)p^O(*`D**XHDL`o~@MIZ)hUNQpu$a6TIWhASyy1EWZJms8Mlp988u%?n^OZ zYK3YBdt6>OUskydz$BClxXM)vc&2k&+gHpp+rX*;?G#%pkv!?F}Z=6AG{%W=^IIk!*A4@5i< ztKu8{`@%M7k!%NtAHR|60FvfsZf=EmAw};^1f@-JH^)$$1~TSCppU)(q9;kFaA00`N;f0pul<*Nl@KsyR)D-pgNs=h$#1 zk6dM6eWc>UhYo^HMo@YKKgS9<%XKrXa~Sgdkw&eZ4r)e|s0iUlTAqf@)%;rMs(P?^ zWP~;Yt7_rGqGwml&@9k}*1SYM@-V(NCm*rif6q9Mu>8~Bd!|&Jwl}dNe*_^&#I}U~ z@+gWd5}<_1ba?-OF7C{5D0TPEyHZ%NW_My$B_p8O(x#hGJeR+g&R4>*fxhxj(`!5X z3gd-m_9BsmErqRG4P{Eg!_GZG*rmI>|1lXMBL6_cUjpwsX3EX3AL<#e53dTvba#<- zo4Uudc)REPwHj0ygmOA#eeE}CqioKanG=x^5u3~G(Zu6DSG0BYcB8e?BU=9{$t`s? z#o-+`*mLtJv}{nt)#iJW{zAR^n~s22=yYNsWP%HS*&z=WLk}wXIxBpFK!;^dlFMZb z)vel3$-`9Vj(tOendhIjs6@fP#v5x|Lwl8b6W#`iNtFF5kAdFE`#TI%@fS(f>xDv* zlv0BZLj(rsxkH4mg&2#=(BFA!6wwHzQon=$b_+qByj)L;L6sTGxA`CZ@;Dwj$aJmm z4J+I#ryg|e)%94Un@H)p2ufI%oz9pN{j0!K+SJ~(Tk3W1)jb|$&gX*vB)6QJ*;3v1 z1e0QU6%4Lvtn-M>k2_5LY*xN~=%J1yia4wZd#B%~7Aq=vf(x?y`qobtJ5{rrdAY^adN=9X zdx!5(@y^{bh&*5+`8*&niMY}y6X1drEw-^8d9Q(Am8}&BFApH$O=HYbHhU&9rf}mk zoYOd8khG4AS#l@aU)92rj2IW^v2Dgh@OJ@MJT`wly%uCZe;A@s2}EXF0&qIKhSe4f z4LjbNFwp#DLCy-QcaOq)DhQcJnZ~C0^HY`j4(M5T%VBZu+JW2b9wCAy7*Sa|-mHMT zfWWDSdoUXOxbj={M09M`Y|D+U1KXdlWVjim>7mGDK#~`*E$7e92wvh`eQ{YFB-V@B zsfP|?lER3l*L__)ztMFAhsTUa{@5sC;sRPMdlCukKbWm}$pb-P9^_#cB->{a?xD9F zDInp4@1!gC^seP8jj#Lfo{ zhJA!3oX%-W)k|w>((Kq~7vS`$T2RDPL;b#2s74;TP^n|*im`tK)_a|J+lXPP2TZ=^ zC)G)v3>O~q;k~y3_T@Tl3AA_-S3HX?H9bYDB)-(kDG_+b*%I-zyiKHq>;hudA6!C( z+`r+;E0a8TrMcfJWtRAxcRj*Rq6$lp2tq<1-gu+o%~Bc8{3xO~^lLclFCt`)EJVLa z4O!xHIU{!yPIXhc6A#rDmW-K*qS{<^!uzC~emIF-R!0^BXpTI(e~!Ukq=SCZkfsTP z_>E{*!Q3hAGQo)@_l#t-B1vuw&{ASK=A~^u1PcGSlSC_~T9MCKt zLKHHa!v1BVzUTbXKcz-nG6CA)Wbww!dV0SI3x6F7Iq79*=E!+Ii+@`%+^cZS1I`u` z7s)sp1;VJY@onmf=K7=GUL6j}d`4O+=osAw&VF9oyIpH{1%L+&_SF}gvi&)^Z;t0? z`5!LGw1D0LN0Dlj;sY-e|6`wckSkr#vBECp46U({21oEBa`3RgbFmP@? z6vPvrju=>-cMh$1-3wUPfLLZ-@OX#a`2{Yz3mCH1ajSWIz(}&iCm0I6%Y)GbN4)t~ zBc5z-Q-T?s4!q#j*Zc&CY!-K-=UY45`t~!>ByuMIT+{v7EaP(1!h4Um!xDwdpR%Di zPUBj}5>Aw0g4b_?c~imK^10he+j(thHvFE3Pn(qBPYPH9vpH`LH61ECuO@$dkpEc? zxtmnN@iTc%_a)mwX!@-@_pgwZ#3vG_>E8W$(!|58_ihv3R7kdsmYD&6EgC-y-uGAK8+gvAV5nD{e^7U zR!6OGEhE()#Ve& z`I>n@F-g*2zNE{Ep2?C8vbNuLld=Z>(|A6K$2puS>MxG{b_F+Ko%BVM$FZtF6c6A& zf=tks;dR^5aN299XZ_Kbb6F}QBxzPls}7GSctbmd`Ci;V=($)+!tS_hPvy4y`Jj=) z08fj&MIxF!=6b{1&gW&es<5qN;? zm8!T!`=2Nuq_ms6LlrB&2U`Ts-v|?>O%Ls%LwklMCsN{_h6H`i-6*a_%x}Qn_~r{t z(jNvhmR6`8(r#OD^l2dnq(3C`JFx(inju)!TeNw3Ut;Io~ugde*ZL&lbwvA zM_Q2}pFfPQO>Ta56;3L4OsQ&Iz;oz`Z&*;ct7>>Y*yrw{rPuZc61q8^Zn9Hid(XO( zsJgDUt-yDixs|X#lb}w1)39S?Kxo6+;}<&}A5pGbo8BhkX&d}aT6)Wsm48Vv=Kkn( zL2RSbayuArt95jfQI^ru9o_9)FBK(3J2x%{PajbWb$7_6=rfZX!+WLgap>2z@_H|@ zo$2^?bpT$YKnObq^E6TQoKp3R6(5v6E7W)1rgE>Vyc6duLAM3CP)fbWhzhQTxZG2ch@@;g z6*Y|9zRV*jIdMwGSZZkk_)QN?VND5pU47!U5GhtvuqU*zYe(C6qhe3{oPE^_Ah83} z(Lf{}(HV$b#;m?a+>KiRCO}T4kundY>`r*p>+#|5`_*XS+dOUPI*tqKC}UnBtDc*m z$Yw4(BdM}1i$5ssw6ko;G@e&(IUML*bT!=Ko9%V?t?yTw0%VPH%n&7?@qgI+w(F^- zko?G32{(?Pc7}*COUp?L|CKMgf9M9dHtPv{i0RPZkzq;Q22(!KeHQi6sC+g3nqoX8 zT3+(D{TQ-PZC|L|kH`R0JMe9*HhK}(w6^SD3fhVgzHYKiAJ(k3EYY%|ws#BlZoyLmrM z*%Wpyn+B}$<}seEZFqhpL~?=lZ(`KkYY2qstfLeC6o}=43$SHNzpH>fgd(OcDoq?b zL1U5wFxoYo2Jh2cyM-`0FPUUoJ6Gtujd(_}92=K(lV*hu{PN+p9}AjCJkM>p|mi@_9VpGr!dm_L*3B9pm#7e-&t62qYfH~5LRHNIt^U5vIP_v1~uA8o-D7sc? zVz~DrUKCKc)8M|#{!=r6LDbtxr1f#BPKCWb33#kIU$pugtGE*bt|w6-GTjH@-fc_D zHT{WHVq&FzURsKqTqchlTCw9CR@Qj=1oodIizY+ke|a!_d}1?}v*Au-UBPSs4F$U# zZ{6^e!{FOeE;J^ppoEwJpF(~lo@vm@(DUDw6Qpq$6y^rn zQGhk{sWxBLdUd@yXZ#H7arDMo+m9ublE3k80i$ra7hN4`W*+rB2_mVs@bMPB&78rr zLZ2cRf9LFV4lio`%qhy6+-vyOf+iD6Dl1c0G%=A|D_Z z^j5wIOH1^~{eyzS2(547=`{Cw znwJM7`gAP?eGKj#;iq^uDbWi{VzA|e0SC#6B$2*{v&0Iy^BKBq|BR#+UMf-jjY{H| z%CO&T)OcIAXwO@DZ0z_#YuOQEd2_h7aGGa|P#HE1r^7kLAjqn3HzPhpM5==ewZf`U zArEI@nNKc95s#Tr9GXH7$*5t-UU+=8g+p6X-1)$}H8s8BT`YO5iZ;1Lrt(KDGvc(0Ojx z74E7ZJ%0xpd7&SrOn4TBhM&HF(&lL$(5gR?mz^`iVC4OL;793VBtuG~g$yb4fYr-{ zFZ&l;+YpOoi;#)h(8rr~!Ipe_=nQrRa2btdVD;q)&O-pqwd6*S3-=b*yuptnAk^fd zcZ4f&(da=Pg>uxKWBYnY-uUUOnD13Y?~ii&diyYy4TqXJzW3mz?7k}f7j@d_p3hi< z55;}T0vNLV4s&UbcT0^Gl-EVnbNAXxI`E<9D|VMtHBZNK{MZ>`5N_BJ(_ZR9`_%}G zvBCJ@5lzJHVe`N@ldaATXh6-b-DiaQ4r;^a`|w4$c8(?6RGKDL1ZIWr%{sLY!Fqy) z8i8aMwO-G+b)c%r;(QFggmQU0oZjhZ{D7zMQxV>?q$0@Y6@nJkBII@_Bv{XPsZ&kc}_Rfn^Vsi6NW{<@$#74Z9TZ4O$?Zw(oiTWkeAGT zd?|Fa@D-}00fmdJKiNGK(=+1PM&V?|dI4YKbgUBCnQWCn)H{}%B9lz$VgNe^N0B)i zFKS39FUcL?6-%df-$~TW5_qBEfl9P0o2|W^%o@NM;u8MtCu68cv}gfyUZjcZ+xH2X z1TGO|MLj0W*a0bo3nl#O?AMQyn2K9pQ08$T$HtEFNx2u9jr<@K=E^15Tws$o!BC>^ z)FX>vjzn})wKm|5I-y&mZdq0g8t7ndP7`4q26c{l6e-h9&i1%_wJy3(EHi z@YxUUGJkV$avb$(d1O5Yb3|`HCmgdXF^EJqhehSk)s|D4sh<{cTn%F(=mA=t`A#`U z30P+wpYEM?EC2N1QPy=5r3Oy^-Y5BLxb90kXK51<#udXo=o|W#0@sV`xAFvcI)X{k zFI6T1rn&j~9%w(Bo=1ax{%_`81#Bs$-WX~5q6(jlqswgJ7PXjezc}!}tUS>@i{)VP zBq5!+-c$Lsq87$=hG{cbOMv45GEwaK7!Qnm>p1#w|fL7o0ZZ+?iuM3cUt4IiGp= z<8CEY(!G7PLuXFGHWS)f-k8}@D{5mN#d2h4nco3ESOOs`vFx$>1z$6N*Dk^?tf z48M9JxUv)_7j@lPu!=yS4XtdxUnO}Ar8ck!EG*orOFaFTUfs$$*avO@)vK*x|AK27 zA&<{bE-t<)w3u81WBQ)GSM8=)tSTt3LJV7CXOa$nnRA9VyG|`DDQ`)dJx8FZ7a338 zh$tC*g`OyBQP$9L!-NE{ot;ZN34ryC(|gZ6K}g73ynMApW3#M&id7c-8AYPqrkVL~ z7Y4R_TEZSdC!_FfD<+oyo#lz zrFN1wB@ZUqPrz;WFF8Xu3cTU13k{47MKtD6edoA9$8G6Fii-2)JT8i|g~vo7iTT#m z7p;Z~c!u^Vc;p;gpjvy%ti(UUzPW(KJ z!eU1dBg6!^Pc2)8*BTA8`s79DWz`pFDU$ni)$80SS{jxu1&4tz$8rWR(@(!`Ro|F1MiJ&ibQE~d(#Eau;*L*gryoxSN*wq8<;1i?98wE9()4E{O40TN#Gi238vuYXK z7rAJn8ovbviZ3EBs}(WEEEI$T(V(6ARraVszTF3ylwfFBz3V^=?WE?IUxZFUh4Tt2 zf@K(``4R+X(PvAMG@$ut95u6{`m|1Dgnr%Ex?_Jco$_2!dUTL9$O(dzFZSo6;lx_I zQP5hi=@DTiW`p7y2;5D%7mL1y&%NIU4nG5 z`N#{bpx48!?Yxi&?VdQY$Tg|^G;W}e4g9&SbbQWhI^$J^TWn82T`RDyvKpxd+*>yi zO%B%)38?9J@sX|Rc^`}ycM zGFoL86ksgYCDU?yveq{);yGU>|SsyuqhVVI2OSxax$lRWebsTXlEKtyNO1pULO4yth)!??ENh)2Ud9iNM?FOn5c3Mvjoof`QKYIuJwOGp=NeR>TJ$k% z0Ap=ALc9M`ux@9iBW(R9YFsv?^Jl&EB#h!}{U{UJ>g!RlWS;sDr(DpzcBm6`+P<^c zGP}Q_gT{)&Z!v50&)s;-PR%wu7do;JWOu}-2H`}*J>Og4+X)~s{jmaT=ty;n^Bvxa zJk_GL>Hv&ARl-UiU1|*xZe4)Qsd$g8m!!e*(Sxg{?#W1qIics)PgL=(L|h$m8of~Z zD0rV#F$+*7R*|^ zB|}aQ=qNZ1NNsMvf=>=6cb9@<_EvzDb1USskgj7r*%R^|0?2S`u_WN`X=meL!$#g+ zwB~J}AeW++#8w5d{yGta)AK1pZpf~4=27DwuM#9}{_KF}c-GvUQYN;xkF5mqdRn{n zU(r+az-6`d+O~5YLydzhqo57mp{tVf5LXmzMC!3&iCNtP&`|9y$ql#->@?@>i-U|RUx5Be8D5PV` zdNMz!aqy;spSy=S@;AqxI47&O@!yrm`_wC=v7^lWd(6@pk~M-@$hSPEa$%l1CUiP$ z#n)pBj>#J8Xjs)6xSCgx=xy{~^w)RJuEEG<6fyqW*()1XgaR;d8?c(sWu57#q1(Sb z(4iK>QjMu*qkmj4=3klsHSupdy)pH2CgXxh^@8=WT$59O9PkiQHqp1J60f!-&BLH} zl2ZKKXpNVDJ`F+j%JgwguS1u6U%z)emC(MsK6IKGKrpn?fg_B(oA7M5*Pc45ZgFNR z@+~piT3ObAiKv$k6Mm|-YIEkMeb%1{mL_B95oI{0RTVMx))?k}_~HL3!Kv*P0d>ea zv;b_Kurk!`_0;i8*-+fIvRxUu7}Jk8(RLP%(s}jt%aTMki%iAp-#KT9oeH@&q^P%- zCu`ioyrrN*OY2z>u5{#81epue_gn4woHhk{DAU@#m(0B!O4GiAo06}KAZ76r4uG|D zRxg`I6%Y3q^Gx?j6PSd+smBA2BN+wtv)VPfh}Bm5KQMtyMOC3VtO+y0(Gwlh`5+Xf z#VDp=o;q^5e(pk@=AIU)hGBargdEdZmX3vGX!>)5?7>Ivd0Sb(z`F1U*fH@*Q!gAg zp|node@oI!DO)ziK3J#$&D+M!5IWwMJ^>${GHZ<#q z*gN4Hiw~KA--HRln>xZw+t*)(cz;X_a7Pu({SNjW*?B*cxKo>smvN(r5361Pkxy?g zgScE+ao-RR+H!1=7df+&j-H%no zjnb8UW;-`GcM6;0pI_`L^TS+>SDK5qerJP#?4uV;bd)8p3UY}Wk{d>mOKx`#{Be8A z6+$sb;l~Tcv^X;aRhSbVZCVdfRieGaUlM(}G{4O@b8Au3&U$*!YWC+tRwE$?#fJV(qS>Xm?(oL%`62 z1|c+M9<7{;&2YmB$N6XGfK8@u`Kej`TWdWotF1A%-Ba!Mz?McPe-LcXch+WP;AdfL zwCy5Au=k3GR3k|YIPQe0lidhxy54ZX)n5Aas#m#PE}*{k`9S?JwQm_gib&FOOSbbV zZ>aJuiKFVU7K-k?oJdP>8Boz6hagX6^BLg8YBo*JiMf|Zg2wd4RQiDFVjrGY{qm#> zPU(WP3U6NI4rZc4*FTQGPdHVgy~=dNg->$Wvenl3(J<0HEbG&J!+^J~SM0of4m+Mg zd7IXKSz`{{*F}oSpi^nbc&jK=X-CArhhtb#_Hh2pfeR;9)R<748F;AqVu1uBD9X!O zw!+|mqerq1lLdgp)yRuF@3nT!?8Rp#ZwDu>~hNcIe0tXHb5J-yIhvj`;Z zY5ap*&d)^*p8WxO`XR!Fh(H!5Z$0L zITJvt@QCbEhw*IZ=1mE81a|FKi=T|gA5M2UiBg2%>ftiW`CTmAL0Z%31iqZ+i>R|j z9E4E&bEDv*k@>SN6~jNEC!7TUWOq}DYO9Df#i+XUV0ns~X&mTk#)+@w=dzQSzUA_uuAq3 zjpL#X(PgclC361=tXrz6t=T^6@lL}}zQ>zjNBo)TQ^GQ%)2V(6ORCfjf#F@KZ#^4_ zTc7uC*v*p!t&20T)_A>eRXkmqjERRidpxlt$mh%yn^a_T+et})rGAg~w2jdE?Jx!Ak*gXTer0;qjcMk=5_%$u=KQjz zWIi{xvw%j7y&0t|Sy@dNR0LaU02`knCEkcrbxZx|SDT@6KDL4inmPc!Kx!3G) zVbk>6H003s=|*o#>2JjcTwB(MsH^}{FE|Cq{-;2>l-*^)RsQ%o6$embxQitLTj_*A zPov`i;8At*?2OU8Mk2<#cH!q9(F3))&+Z(%U(tyv4~8&T2rb-DKua`Mt&6tAQMSHr z6M_u8+iUUK)>feUDvyBv^T+wNSV@>7w#`Wqla5lbuFr}ks?!!fAHChX7rjg`lgmXu zQ=q}^+P&7e&AryT)U(D`ihNUdtWad^2DhT-Aut=yG#!h+Zqt}chZ*jMY;vslF{08R zwXki}wlTBJLw#a*B$>y=ZWNabQ93yNGfEATwmbuqh(`u;;y^ed{M^ONzeK%9@nqh5(lCC%>9rvR$^izi7!JV~fyKcQnx zCM56is(-YEIaKgF*%?Gza>Uwv$js_kSm%c823JYhN#T@z(ue@lQ zCBlZ9(0Mp9T_`Wc6`zgre5jjy zdk`OOKXn}aGjxU%qb%Fi6vJnw;?ojUh#f%xzFR>5!`+VavogNk!T~H9t*REErp?=< znHE-E%J#!J9*4#_RE)-6pMn;0^*hD;OVu9gALYkcE4uUCSNe9mY=LxucSY;HLB+!> zz3R>0EPWxOdNy|UT;Ot0KLUSn(?O?#WN>%zjy8Mt7kkzetxSHHJTV==oj)E- zM_c9uWOX=fRXu-SSP-HcH0(&4yP4|0stYbovj}2{ z_?^A$BCe3L&(3OPb;k2OZ9HTIf6V9L8d*p!1DhA509b>43Egdz;4DS@GPJj;L0zwhmkBB>3z zUZtv5ADEbr$qd&qxvEU5I_y93k3{dsdQD+=R5qPOlh7$04A1=L`SlxpJmrP8{S!dB zKu*~R>^jr?nJ4C?Hoqw$gznGa$cWU=x~9899RIlKcM$Wk8z0sUwCGgNRMsE1l%|-s1^hyMd(d zjBB))m*+VDq5pc}Dlv-3M<+)Fb^4!>@ntWh?*XZ&5J= zmVd$#7Cz!&)UmXue=E*g1-?wpIYS1!l#+EXzGjtwxYb$)^|j(NPO$vrk8m4-+DD#- zGht@keUO8vY0*-v`0Zb;e$FSB%^7g+fm4BnZT088u-u$Lm07vGCfhzlSpESgm0A)K zXi=YgP?b%>oaoow=b=N4W-W|-8O}S?@oEjrZ2Ufq2T$d898UY6p8OF`BqyqNMN{1u z^n1=$?SAy}LCbavhB!`h_F^nw7}98eWo*hP9BUr+(b9iK6$!3U_?7(jgen);`NHCW zojejP2@hN`VOcx=NtDJf@muKyPg;bjcNsL%69uG_{Lb$#&9RF~yW5L%!Tw!|7u_9) zD`Kn%cFiGcRWuu5M~Kpr79Z`xlG#K~g|}BX+a0guTLYSH7<2SOH0qDgP`e|TP6}pO z8JcthO34$1BArHVd?n_PM|Cp8KUbQP*3(&^v~D^mX>;Gh z*`=NFOxU_&THdpJR1IH&dF8_`#PK4O72439&PTxr&LkH1NWv3FK%`23!5>vux8@&pz1-dUUfE5&{JJ z_lZia&*_AT=44i`W&`@+3YZ~g+#m@ z2P|JF5t4ju$~o_SnlPm4oRc0(-g{}L+8{`4)V%q-yD$9XB^chy==uY9+? zirUAyg$sB>_Ajgjw+r7`P-XJ(%-Zq;m#h}Y5oYxf-srl#C%S?iB<&v8kVOlHz^CJc zR3&ZUJCa@0V@K85$C#JbaFtaS2eZ5PGdo};F}m2h12_;wt%ohv6`=F!L6fVU%FZe~ zTEOqDairA`LN1G#+QKiLZovtATJ@j)ZtI_VfkU8?*7WWiYgx3)y8Q0fR&d6NoCo7z zMK+~c&SV?8O{VZ`XIpk(R3;(L*qR&(n;Ryk`ne;-&D zf>%N{+`FeWy#2lf2KKWp*WPT6Z@y+0#{K7vQHb``8+{doFg4f`n=ym_N%18+pEg2FT4|*-K!9XrbE_eT8If zk@j1}R4TkkQh@g@{5h$~OQ(zYjoPDh$Le)5G5wDtfOXU(Gim~eqLu%P{}oE)fTTGO zAW#+0>hQonyYu~nC)8LS8t*ftb-ea{vXD)ww>=SpA$VmUw6@3aTwjBk^KLwC$8wx- zF7edKinly}MQdRS}%LVK{_}vt;IY_nyH75P;^eG4;sYWo$nNSXE<$%vwtx_nUD!T9$uqZwpQI8xN*b=>WGr zk8nVkq|=8|-KA4MU6>qB!I;Ld6?a=9j(?}DQ~J;En3XrWg*gZza6^B%3NPf3Y|}R{ zw%j2Dt@Nf}Szzd3*G1FvRaW`u+byzisTFxy*UE1F ztp!F5vB+ERx$vU^nmPlF>1)@UH%(SEe;#d!c|}djS@s06?DvxrHIKD&H2w^iyU+^e zEKBA`?ZzFZ9L|#co>&Hp3&}8r1J3|*0K;i)F=xRK zBYfW@Pw+tMeUtM_GC`5&yc%h*s|2k#Oln;6Oq@J1 znyOS|i1zHdZTF8OW7-i&$>4D`&OcHZKSas=4gKio{Dx^)5gt?P|DB@mD({` z(L5;kXch6aWu#fl0l$@hxzlp`_OdR&_>mKMOS?L4g&5 zE2UhN^Hl?ys~olhBRKGgi@+CS+O!caLg`9)l45;bSQBT*dM32@p6+v&!krM{iuG-P zE}B*^v94ENW`$qHF-z$$F+Vr1Smh8K!1U}D;i8_H(v6I}nCA=8&{NHun1Emsfp;OD zTdbh)+KqkH@1iBqcNxxK%7dM(2&OvXlQ(bLVr5;6Ei0U7iwGHc0W;qB@Zi6wTMPaS zbv6xiUJ=@#90YYig6LZb;k$G#P1bzdZ-Pm=!V|7JXhA!AWsZ}^l0}S(VA>SfLUMfQ zI{tT~=ZRm3#-6CsL$Rt`G0FN3@cS&BmY~S&tSBAWm~GiqjvrK$<1>i_a6--_VWk125-93h#33OnCL>0c zidpIz0pbLl&mFIx(W2IEK#2yS-(yRr4u!GgjFSVpt>#p+^ z2tK}Oqmd7j3L;q(31`(;+j1zLy@nmIe@~jIC zKOkYr^D>O)K#UEuKeFZx8!d;t&#^h51&5fJipHf?(!woA`lLI2v8`GT3%GvP`&Na< zTm9=h@ot8eMvSrS!a|qdSsb&4O;pp$)t1f1D7#k=ZKKs1FhID_kaAjU)8~hlgr_J> z9q-y*9PTwXOiV(%PRW4p15l82)-TzQ?UIQoWZ zxC_!-`%U!{rSIH?YfdvGGh+!nWd$Csf+>^@p2DoT?9>-MsP7zzurybjN}l&oRIfA? zt?wvbL*pJ;FFA+4E5Yp91-RB@HVv=_x+tkV3|aG-s%YK{wc!)prPx@itv33GKK$G) zrDp_7R~-7p$Na+7w&s8@Rq& ztvM~xjhIpu;ug+Tj`t$x1o${{wj0Q_bp#=$p2jcXBOf2#yyRIvldUJ1~!jxXICM zLmyl4JiUi-t2?<(PON*I#bg2ohOmvRF~==7AkVU?76};is$_jWt`BF2ofNCYQlV z9?A^1Y1vAvyy;e}U$_KwXMr`7?>WF6ho+CUk}rS38Wt{gXUolmH)Ru&)PiOk;h7+3 z!dVEZ7KFA}M5uml0`lsMmIRX)aI!_=)z_7$qC*nCQ(7Q3)NV5P@}u& zQ?ZXK+V#hl&eL~d3KtyR@sb_Hxz@*I4yxmG82S!pCn26#fLh<@asf&@B@|m9X5Z3_ zaiV#t0D?;-uk1|1k;bg6Ed9=b+VFezpz5lKz8#H6Kc@WG(UJ>+OIfw8f=AzNU!-{B zU}7G^com0Wyfv*3IWkQyBxBXHc**L{+*z0}=dteZTw7@4ht%6s$JaPM@OwB z=eamveS*W#KQYrr*ff3pSi%6=I4QS{pEVao*i8e*t4Qs5*E_iusTQAPGsdl0r{h6g z!0&=dMSM_6KpLA7SkQ)`O}6G#Ll@)RM}CIWN2--3rv&A;$`sL*&eDfsHjlQpZ3t?z zG3c2Hysa9|y@ZW}AeC&8=DwU9**D`UK9A6>dhjxw%M!kKXpQ}i%}hS{(I!V54{d<6 zg5fCcF=L3;s@+6|F0f|kRyO!jk|mmWwI^zE7yB-{tK@bLc6HTgsd5q5&e0^ zip`S?`73k6E)`mFKRgg&bY%t6Yoe4?TcHBly(ZFbSK@T`F{X)${h~xCvxBab(r#=E zXEQ&3E7zuB<-3KDgfWC=s0}T&RlqD0Vl2`6fjMCvtvZBO)3Oy-e&ugD>;1$EF)LT& zSzP&(%t6PJc20~`!d6hHBWRNK znd&$7B}Ta?=c;#e-QPSe7}+BTm*3V(nX0MI{|={U?#s9pM+`tBInlDrsR}`n@ZDMX z==>md+>@SmE9*xPCNOJNj{W56e0zbcQZm=?4G$?n>$>>xYU|JYU%mv-VZ*QVle!%a z>!geC)m+DyQY>$M@|&DVTln_s^up|~Lz`7RukREeEQh3JXmO8{(BqPssHuEMf-?Kg z^Z7Q30EaCIn2QPfT#uvHFJB`Riu-DnH7eEIiDzAYST(tigH{FK>Vx*FtX*0U5<^h| z6@^^il=6KI0;mT545_3n!rMmbx+E1H)E10tJMAJ`1r|jNG=NKQlOp<6%Hm&>bi^qm zG^{gYjm6{j>QnH`$Ky`c-nYq>{qqqKmprOBmIQ5z#q*`C2{xyI(SgH_wl|_-E4Q`xY;4=BLyYjhKW?!%@Gu^gjmdIn315+G57vUbs6`H~ z{mPtKg=RAtde$2GUoXOf=tw+hv|@m{yL^3Rty?BKPyE@7dG@cj^XwU&)F|l%JmHs^ zQol%kW|?Ud@fb0G9eF8N{o`oS%Lr8(guu|U$w%89N*k+D08|#^?fg3Trr(6nokiv+ zB{ec)dJpE_=3jFm#(Hdd|KQ>UT~M=xBof8&I+rQU#}X85J=l0DagjD!G6g%6FLW7S zB_;RwM>Qd}ZB0R8joI+m0ec&Y9}c7`$^oQF$}_UNMbaf zkaYatm~r3X;5{Fwf$^NV^@9N@-P(tk?{yUjm)VU`7nRv7DXwKq{x2@o*+<-9DHZVADY}9dzAG0{?3ymFRwg3FL zwcxms#TjyaSTkb?{ zZs+ebC)(L6X7#R_dG;yu^8d)YJDH3(3YQZ<@aAtjckR15(WDYI96zGb{)~t0bUZqS z=iu<>yM@nC5d<|4gW)28oy#jtF|97i{yL6T6nm@<@Bea9rm0Qv9>s(T7g8KXkOyIe zGnH~~%kmhA_IMkX6hmnC$7KAgqpR&0gjq*|*Tbh6`FN}zPY^r)F6WVhOQLH{o5kG_ zh-=vV&mmjZPq^ZB2Bzhs2_5=9iH`Q;D69$=dT|jCR=dv|i=~sTy53PCV2+KR_5X&1i+zQV>$K`geedYzL z{M{|qSWV2|$wv}a^i5RtRvQz-(m6d96(N-MT`L4^J%f9WCQkScYb0f5?!o(SJBZe* zE{$bsqvha*`mN zLcZ~9S)|2S3mr=MXIGIcVj_ofz1*u~0`|uz!*+RLwG~54-qdw4)X(-c``DI&Sf56M zF&LQFnKZA3WK=4L_I0;*x@-Ki0rj7MT0BZVAu2Na{tHGt7~!hK8p4f!(W``%JbxeJ zwzb=E_&JJv#6$2rJ`LfhP@}USDsUMBl_l(Wym%+TyUMiTa|EjAqwNeQ#APy;k0($P zCUKEMZ~77+>BEL>4obr?6o?1UB+&*8DfZcD3v3>lr?q5ATZSj^AIZx-65)6-{q3kt zlVIoujDCt}M@r8x$gQlhqiAWbzEP!2n}g02Z&RSuo_jD)*YbBMmyNu}RgQ0Bg{?w9 z<>Gw!Gj8!agCnX`{p>K|E5ch0QH0rPh)_gJjxg96cw^VZC)$O`9efTui(+1T;});$ zu)dm2Ab4JbJ9L+arOFHv8?3@{yY92*#Y-(`%*YPfOxDWw`^}}vqq&)!xjjg@ z&^>JQuHB>24&=%=X(Tf7`kv422bQmv@V&9~Nz`x=UbFWQtNE2O%$g7^WVQW^8fCZN zv=2M@-t9Y4oasYoV$-oQ>FjYwG0g2hsL$S_c-!lwYFx1@Ncfl8lcbisi%66gIXmo% zFx09R4XK{A(*+3GdpLvr8Rq4$O|HdhDyn_;1#jbs53Xl9uEPvHdwI~_#vJ?={0sWQ z^I~zTsW_VSy!T^zevNqIlW^XY#w_0W?AmO1hP%~j7iEEZM!Za>P?@GbVv{*%dB{$| zGx=h!9h8!=L+FM+|5u8R1dihj_yj!HRb&wo@6cu^cK#CKV}}V}U9#{P7kEgoAKaaV#Fhdva(mfW4yk4G^vfwl6!to)D56x_}-bgj~>=N^uMTn3maip0BM-Q{ee1tjir!FH_yfgyztXwP& zAZ!}}9ycgCW(5ZHv1WvRWa$bLc#Oi#9am{5d=$2Yd(qZiIN8l1>`R*Dn}jbYX^g@_ z{?q2=crU)_ z|FwAWu466+ktj~nB#lcqDaix7oPF`DC@GI|PWex??~_US`*YHr>T(DCD>K3ue0`Rp zbxGO^5T5=b*sj7?@<$9ngrcj)4j~WpODhBR;M{HT%X9320VFO!%N0YcRmVy(+T~N=fle3 z14=mVF)FXkRIf4`ccUMffzuJb+BXW8Xz^ZC^hP!9hKulkR9eDL721$M%q3Hlb}o^n z%dPTncUs*`Z&_&acq>CF2hoIuSZTL81NtHS`XQh{w!BT7ajL?$9z-Da?``!6*JkeI z&B0^YTk+CVgJ`GKq=IZhQw`|scpL2(&6o4!7RA*?q)AiUa6|;{aiMs~95xGC#O+1U z!qc9hXzQK+*U=>)Ic*IFbRW)C<6w}#=FCl-LMPxjen@2|>NEhIcu+8l7T;e@93sqh zQs0O>KXaJn`>B`=e|&bG{qn9nt6G(9XLPBvg6(C3RwvMC^Jr*m3ZArHrYwC8T#8x0 zk-Ja7PrT${%$;u9J2A%3>m%|i{sA$v-yv(1Ov)-!2(+ntc2SN!PWaHngs;@%*HMg5 z%6gnbd!QkevF5k1!56~hm?=x3c!6-L<1fX>>de?JA0ai`v}<4gsNTU`Xz>!~wSObs z;iYUErJQg>t8@AkFPg`#MwidXx0Ptp1!&Y!yq2&Zy+^r7sy zy0h~W5h(!sCCnw|Jl6x$v?nmt_G->hD&Xh+iCt6OP3+!&_Iw_W0@?P*BRRxJ-Mj~_ z`dCcNWe}J&-AYWj()v7;w7=0rYl+5{ou~@o9Y^m;n*lU8{tLmE)9(gleE)Z+3KCihy7ba^0WHWYrD;AeSe!l5FTX{vssKQ2U`#!{92AmM4U% znoTCFAgLrH3zrZ>TuyxNR!zHIv)l25=11pZ>(M4=;Xk0TuZcLQ{PeIYF5f_C0GCI1 z+p*iv+>~g3BQW0$gT0Z>!WH|FT%iB9%^oy_1Rv+s*^eJ3>(+-k_KiZ!=FSBgx?&xr zT||u9M=^EHdn0)FNAUIlm{u!=q6|LfI7nW*M{xdlB<4#wvh0dDOndBUKA@u`@j|a~ z0OOpZCbFr^nqKen-p@umo{yF98O{RVBeUH}_Y~V4?eGZqIT-Sv$Pve$IFo7v7{n47 zKmo`lM{@y!T1tkTk7QXBe-p12o_nD!f0YXvE+X607(ADU<5k=pST?~Mm5@W5fT=xM zi|nNp;?#9ijZGYgBNJ_2@f?uBTr z(?{3aXi}Q#I>Bd2wf7Qnvi~5F`*e0y^U+$rM84B?5Zy`^^B<GLMm!_;| z)UF!?ttS|UerzkMDlfPyH0yMzQW=cGP;!e;^KsNP9TmRvf?i8#fWkGD;if$fqM&*8 z6U~FG!9+EEO5S8rz2)sc!3s}4#v*6$XuS;6!UIqw zCvo7akI5u>x&5qay9sB*vtBQ@9~9QwVZnL}lW@$L_G5%FGv;7RNNucBU6Rr~iuJS) zueMEh&mFSphJq}Lq_xRV&;7DzBxE|s= z;PcLeNvLvREAT{JynYy)qr)*J_biLp3a(haVoIG2K>4Vv=ekpbSF@u>=$qW!!>V*?Tiu316;hEjeHY7 z%6W7Y8nKiZ;mM0zT?J1?CyG*lCNpl1c08UmIf-S8eo0i)p$|`HX<&ZnudQt%A`Tac zV9|Hm8%GI+Z&f8Xalmj($#EQ;QAP^Rzaf-<2#y|ToU>L0?4~!u+$q^)rwv_euk0VN zH`Wx|Ba2$N*EeGKlk8h(y9MmPbgPR9N2P{jrt?;FeHN)e6!RL3ED56}#D?|2J-$CX z!jDK6e$VWX9o}=3jVi1pxp;{^2@}{K!9S=qEND4G?4h~2CIZv7Pl|)vQmcDUE398P zrKL=sc}Ekcytx(RX;se8a2M1gAEk;M*bPdX!j&=6$xr@JrEUQt?zI%b(}nSE;S5|U zEEC-*qJ^_%bM#hpa>l}Ru!oS`c?t7HfqgzM_QDY^f?F(R6s(bA%tGw$0 z3vjIpeU@=9{2@s&$iYlvjiw&mtpSsA3)*uS?Kh`y@2DVUqO!Ynb2kw+E?QzO zq?*i9vJAf8OukaVQbOu93FKx%UYgf#aH~3Z--*`r^|P$}rrWHPu%_JoC%IhHb)>K? zMffURr7~wVW9p8P32j3X4ja(Km2Z=v#PAmB~#o)dQ1qFDplIUVd^~(qN)6VPOD2#nSM7 z6y?4xuW7K?)|A=p?-ttOTt#>ex3*}LCLF}#K`<%zt>~!;FY^KHCVp{PjlDP|XurkW zd3#pAUARY$?aNK>p_OP)&M*PJ)mLDp3LrFNJkx1QiT9hw5i7nwxa-Cj`YgO|U<`qf z)n^ylZSRJ-M1p+Q6YK1F!ejEO6DxQlZ1|MxTq$6cb~P146Md_`;zh-064Uoq#A(dc zWKOH$Px*d>_z|Qk%I&;`KJu{q6uO-A$)E7I=GwOrg{jt!L0R~`A{x|LpvHB?P(mU( z(^cY$!kh-%0xji}c6GvVEC|$53P#1ox_RbRsTP$}_(7~54`XG>Ys|L+jpKQYmkxmY9a5(d9U;Cgw}tYBx0vbJOE^IV$GtQ#|L6 z!}N6UZq<$nZz8eyLwMsIj}yy41mH*g;#`>8qRiCb1w4# z**gyatBR|SpWS`icUf4fQbbS`6tIKXOElJqnrKX7Of=C%qbVADOJXnNv$sT(*b=)j z8jTGrSm`1vN)xHud;5O>xqFwlZ(q4@cY#IUDEr#nnKNh3%$YfJ=6{B>>(!Ib_kWqg7eOxiBw!-fmY?++*);#=#Q>>mxG$vQ-*RxrBPIUKw z<#dI0%S$xIg#;YDxmAPFEHiNi$W=;`i?)dp-nM)NI6mjdj(*C^#q3=__hSG*Zna|W z_ht+q=9G|%&ge(=rLWrY?1v%gaWlCuU!TS|G+Rce3^_xUii<#HBj&aHKY}>zg zi`_>UwJ}^p^Lt;DlP}+G?NC86llsT2BPdNON)uBMSrT7#J#Ixc=Xl&PesxuzU4n(@ z5H9a)JVcW#eWyEw8JbvWH@)SKGQQ0-J7e~I5-;eRKFYUCxQBh-7WFoE4ZagC4Hg2Y zJPV7HgS?ZNOGggixP~Kro$scx7#32r>`l72y0|3E-d>VxcYIo4-(p8~)8Um4$VT-? z(&hC7ZKg4L&yqoGh?zW|($8Aa2THoKqw&KtVoZ=kHfY-;^b+|SG~SU7PjZ6%-reLik8=DH;$~sy*!rP^0iiS{*+AUUf zY8R0 zvn>t9S1|=h$?MLxqH)_>?Z*qO^untx|E!-`wt^l!{w#5LEAf&hauJw&DQ>%64oITk`aqN9=e?yF&iuNx zHr=kq#JmR+m(I=Fc`!q}FW*7x5Dmg0_GoHvrD-Lh!;2>g1)p+N=%6a93wMBL*AUAh@3-maY zy3EXM0HUT4171M*qQ$2tYR0fHy+~TLK!hhqDpOVmSwj>mG)Qu?#L^J@X(*oz(YkMY6Lk)3{DC*R&@_h6hq8goJ9yR8V(6i27DMcibc%X$Px+N*PC5`B9Z`JYxE>dO8&#?aNWL z`{0SW`w;J{(A3Y<39OB>oK$DUOd?A11niAdg6^>`A^eph1u4$qKk$@9f7(nCsor0n z?QnFzOy$cFd@H zI}OE)4zinG$0>^m+|_4 zvb0haeFAximHhm%es|wPygZ-lFb7wjeTAieRc3u3ypEs+gRSfzx>vi{df#%DDaLQZ zjJZ~O??0_^!Dr3{jMSk-f#jS$8wP-kg_D&pxKfrGI7p=9=m8q+XpJ z=UsZHg+}9GE6FT1Bb3{aPaEKWZ%bKHxe>dT9}#6e_XGD z+THqq`mTgX0}pVO;!!3Qnd7cTKKs%CO6?SH>odueuSb&2AM_b5ydJ{y`YPo7k1R01 z!&Q_5=7VT=-&;v z(!$SA$+lU~CHu_!&hP2m;Qf#+J?o>*QI)UXDbZdv*-gNE?ug|X_5f$GV=x`deEKgY zzN16RiZ6W;D@4+Lk#fQn28tSdcP-1_3b&B73AHQ=S7p)hv&Cs zx4a)ArDo#^{S0-SwUr+#%e!{*Jmr0W!`FUj?~C^&q#GX5pHbI)%R=q~`tCTV2+Z4B zC*Npoi2P21xH+rJIh-|r$OU#eCdeGTib?%*l=-Isl~07;Urz8=i~jQ(2on%!-MK?A zwM#m?eh$a5LcZUt)l}pwc8Q3TZwtE{2RtsbbJYEByCS21phMF03!F)$@HanoC|9-9 z-?uejJLep_pY=NbEK374LrJlHZ9uWRzni`9ByW`ReC_Mgt$}Muy)OKX7vfK&S4tF9 zvmzihu~RkeR9jcmt}vbpfdO6c`(L?_?f&q*lx?3s5-<3=TWrnGerrXSo#Qa3(|S`L zffd@kvD-Zu{Db;T3%MEi9bEAi_g$G#ZalQgc4VifNy?jmf|s|Ua*A&GnSF+%&9%^7 z!dQ5eD^KHbqT#1@lWSLKa+5R*!W`r;2Peq>{2N90pR`l*rTTK4{FA9Cx`P9f)g{V_rQIad0Smll`oq! zaL#{qwWv)yp=5J_rL5x`Qtk6ETiyxBVjH6qX=xf~w(0$gtzpqpXVy*=+)?0!ISc&e zV!|4h{pCShb;NO&^P>~2iF>}8I4)^t-Pv~QY*zuVA0;^W+4FJw1D)#V9qQO2tTV|4 zCUXO3l&lDR=2aY*egQzkN%&7(zJHb5Z3fxxZYWYU9{fc@PhG@pC|+!+dNg0?>^_!R ze?!rcs%OJ-AZg_*(xfCufDQU9l;bt;WLrN>wsn{_bnVDjPJ6N=+zDWSqsI}9o?T@v zit;J$rM<#V7?szb}>T|jDKA$t-FDO%HZ=VjY)+x+BkPU9?Waq^&hvxWk;NQ>WNly)lKYXM_ATg6M2rE z7)n^>)N_`s^WdZ?72oiH&BP>KeDUurfAXQk34RV3v6Ys0{85%(5aw|kkO7htbhf>U zQ{Nw0#BGDsW9CuSwiT#Cy1N+T=2F1Y*Kam07=%J}4;a#SL;vl20DKQ%f-s~to_b1> z(p5M`MabD2r=Q-ew~~?jp3;s@i4OJuLo>47TyO%oz?wT!>FdvdPIt4E)GjF3lkk#! z@FT+dVNMom)z|^Vh=p&85~H1>oUSzge~4N5HqLraz&lzYrX+9*NFb%GT?~E{z^5^Z z@{E!Oyw0xVHGL3f+n2eoxp1u)_yC7lyBWp%?2KI7e^edkQ`%KF+cXq=K9iYtzR6B# zRM&R-T;^cyP`Z-*2}_sY@A^)q-OII?D_$(H$L2QJ@4;1-Te3i-bROQ76UdaB};TGdz);KCIw82YeKeg3E_+mc0@6rHR@Jt>LaMJV3e2$+5bU=F+H zVy)>(1b)qEkqpek_vL!#hoM|QJYr0%RqSil&QxHWna`}@Zs%c#k)&6ruIbI^JP zN^}CIxX6igGaK4IeIh1>llX1Knk0Q@T_Xx#k4drgjl?d$ydrA@| z0^j}(3U_b37N6l>-h}(`gylQ!tiMMalG{>tY*`vtjW{^BX6`BL+L6=h9kaO=jg)mW z_lKJ+2^R>Toa*9F2KRUiPyC*(#Y4ID&v)S@b-KIvo3R-?=r!feTpSuPtn;)wFArTq zNiOLMm=;3s0jYN`p6$B=KJb4>cvoJWH6pp z^faaGGe$#4GQrh-77bWc)L~9Y{2Zy*?&N^xvUgaR<#EJy5P%$=nYyIFm9)N2b(P19 zP2q2sl&>17__<5ix$cXZdB%#6t>mn?A7_Ylj9KF`$;ol?j!5nago*N=swZhe?no*sa;sD)_-l>JeagHa5n+aLQ7WqE_~` zC|^NUY6q;HMr3l6N|f&-^R181sy2;@YyzI)V+K^(_a@#L z`N}b>S&mHH*LCN-(b|d`IGv041zbDI#38E1A%c4~>#9-)LGOFxK(*$SvjKR&&ib5p z76@3IW5UR^X3WJNr@KaLGVRnk*h>2KL6Cf|#JVztILY6}gSQwfNl#T?YM(eHSj+ib z*|`nSij{t(P8)HP~@t#b(>mMgO5X%42#K`4I{pm6XG$+a9efG+beG7-XA92jq zE6fijNCjG)u3>>EE25%HMJCmuJi?MzU&^Z2esc8A|g< zW9n=gW@kkgdgU|1jd6uy7I)Krj9K{9UF%&i=_#P(JOL*27)-IpbAL@|8)D}CRq3_} zM4}@>g3;sB9@>38q$uzLS%L zu`?^oaJrIxFPe4jMVQXp;oP+i-qWH{E8l2~h2Z5=2xwLEOxBriGbmT-@@m$3Z)C#M zn>}e)k2%^QM^=ofTCseK@3_iJF1XUxTy&Kce0x7aKJ~R`AS@l@#ncUu#IKplLw3s> zIkuYqeBsDy8w1aJqNz5L9XfJR)SoFR-feKyyMMnr+l*^F;$I}oBcI*apT&2jwr=*n z@V-v{?M4nrmOmp9!XoC$eXxM(-fpz3aj~k@^GkU4I(%Y!abx7Sd)ByXNs=+mE$X^5 z7O$@$i!We(spbCrkMKJY?4@K>eY`&ALBD>{?a$|`$IZ#S>b+=BCaEpjhykeQl8zVG z2kptw)YZIEm9O6@pK-A&(eDa@Re^FFQbfE-cB4;o_jV+c7fA8y20)FH|F4?di=I zidgg1k_>x+x&~7BU`*eA$d`rETM5oy8Xm`IVg5S=6OSS<@pxPE%+;(A!@q3%wc{Hn zKl}-t-#y?7k=}~_c+YzMpo{Zy2;!$S&UI{wDc$Cy*t-8rNXC8Md}P2$Ni1o(Ry->#9)=dL&>4{v^{5Cp@A2Z+uc?(Hxy7 z@7wTaRx`)1!CydEL7!(1eugWW)#wL9KhSfSg8)aOou}c5dH|Nt0q6q1?#MdCC&x=N ztj5=4K4soA3%E@HX~r^#-+OqqyZs{F;HTteqZ9p1WkF@b>$lkXqblDzaAO6^ z4uK|{D>*@u@PU1rd`8E6u9h|kGdDNBJ!xfhS%$BBk@&wiYfvr3nxB7Bf5ub)I~jp7kAT1Ar^Q#KZcOgzh@C6)UjliGDSRSCiD{{2?ljzfr4lMeb(vxdi2iLs?0^!u5 z*V^q|G5iQ?=~y;-exC|^xwaNuejruD;}JwFU;J&rJX(iv=OTMSWXYFr;dckp53TYo zy`nK4-fuolQD+hXZP(P)m^xdGii5!Wv7i@L&(68JvP74w!rylx1pRlis>`rcSn#WBDrqz&nL-`TO;CXUSJc0hqG zXV-f%FqEp}#OXxa ztUTz0x7c-$-U_5bPzqgwTY-&n002M$NklH{9Y?V_Nw`T&YYXuaZ-h zuem!X3HjCnFxEyTt-5MiG#tD*3~(! zTfsy;ud6i+F-Hi-PG=qGypn5Y00(#k%36XDFR9c06@>CShC!m%2hm6k&mXVcPX7i0 zBH5>@)8)i^FhCzfKALQslg%GQE|Q^1GE$37Jjx3GN*wflgY0~NM^>ch-T2ZMR!b-N zlx#a9`Q*#nSIF?K+;xAC-No5^)!N>GzvxIr`IUmohWOCHfU4%0B!mS(QG*f;2UkbX z@*Od)G({aOE`w+Ge}}eQ4}9$JfNh?osGgA zd(q2zF6hBpbk=PLRud#cpggXEb`zXrPd+ZE{U_Io5S&ZMTZskoE*ulzBB;oOVIUBW zueIr)XW4w_+6%ZvGMc;aFQTkZdb+>{vq8BYG`QX9TVIZo%`wA@t~uJ5`88|6pl#5NHHD=&#g9wScS~M$w~khKLugx1XgtN==AFi z&#(7V%G(n(K@8Ga?Wx-~0wnL5ToTPT;S-JP)C5cp&mT!gw|s_22}tN#H39k{vVvsW zoNWGBf)q(d_~%%4$XKux<#jW$Xy+n7_uvsc5szT;G?x5?m)rKf6MRax9pP(Pad`eVIwRglhUL+%GwzS^exC`n>0cLw?E5T6f60X0 z&Z#isS$zyrN4v)Y@JYPK)Zq<9^1C_`tpeIrlEjAq^hB1HY@3tKpR8PnKA%VZ*qJF5 z>TI?Hr%kN3$!sV>bh2X~0=6Z0AP6g&d1`8gkE+3)eCx&6E4HWX}yTi?vJck#Br0mZyE z*Dq^OYKm>0&qDV%2h=!>2FaiPNxz5H)~>EtA7b%UnCg=;Ip2VDt$;OLmw&y>tGE{^N`WhQ;{P9Zne)QibdhPIVq6hrnlXx&edt)nKzpgm1 zD!UL_nve254P=%RFuCDJm2d~^Is=Xl1wwK-&*==e-3lg7ovEL`9vqNk)w@g}m#~W6 zipk=Z!>iijGlvhhp4M8?UCL4A{Y-c_&dIW?C)CF3{9Xb5 zXkL@de93K&t3kSZmtFBKm{H~UGzFlbe17};tQ;GM6VYiCYwclVssI5|keO%;P)USL z%Wr~{P=Wu#6AiK#^Kmyb` zur^4d`7;z`f6UPZ_`gJ}FIIbFeXj-eX6$+u-R=u^-NIdHQ@*ht3j1CQi%G2uaPdww zwof8l-}CCEQ?Hw5>YDPU&EvUB@vmbm+^Zt8bYxa+#wc%dgzY|d?$j?|2M$Q_=(@lY z99R4m6s7OtL~%T(=0apAnL)ZSc%gaVW6+4MC3=?H@c5CH&WfWpCETU*te)5T@K^XN zJjf*b#>d&tF-IoCN&NN)Ceotb3dgCO8)s7SCt%ecE6y}OrBVb3)MHX$Qoz-m!)h)R z54Fhp93}LpmvgNG)9_!9sB)G*oomkFZ1hD;!>17b@zjZRwwmW&{4CQZFsBaYST5RJ zDj%GA1f6-6e1)8^o`Et|ct8R9$jkXQ6#6{Cj;>+HE6juWoI~G1yz`gm#$9i^S zey`Pd8Al}lP+ltG#z#CcB>uJ9$Kt zU2;gJjpc0cS(#XT6$pR$T|0wTxXW#*KHe81BuH+Zk9-2C(~l7^l5?>_qih ziagq#Uxgu^heDmREYr?K!JbL@RNdu}-^Bf(sNDw=+zorwSWRVy{SMRf%hZ1|W9+*V zYV0*|@D-{x4WEJ!IoJOia;NaD!s(Bu=mR%8EThCn&i7I*igu^izpZxduw0#ctFq;I z=37cVgTB7qG*g$AuO>~!15KqA2V!wR!$Z3{AwJ!}Rh$*v$^JhkqA{HPOLTg);^oX~ zS-IKYrsvt6>=f=IAi@Dan`UEQi?u=*AEb0ykAhy5Zf|{*V-J54vP^a!r{Uvp30J7L z;(WLgg?4o zVi$XvOu#6)Pw;KH41~XD35{yRSpLo^ypVz2T?TsJJt)H?!Lj$T@1xaPio@14ly^Bd zJLYk@psobVFd5GQ`sndUPCD^oR@LcD(ZjJO@wdYVp7U?12g=aRGlnNm6)FX`%#u%fVuYfVAuW- zFHZ%+=*hcXovR6q;Bh9#Ul57wR%re{wClQvQX<+F2x2wn^&N)S+xZ7I*kFP|_~+R= z8-9hI?s>pw9yPSlem;qX2qs6B>6PnEyq>++t8at<)$FNR)1TY)no5B`D*D`EGDut}Lx_p1c3h_JCF0(u{^+8-GP83=svG!LZgCk-mH&VF#t={PH*b; zUcJxm%haEM91sA+{)3zB9hBk>OvGChd43Jyk82D_K6I|Th~tDjF?MA+)iu#&xK!g4( zCX6YVYiDC7d+d;E+YWQH8!j73sU%{pKSlg^L6%)OHOCHT*Ks*cRh#$ncBNWq2Tht- z!<}WMc$bu?+07{Q_dzjw<&Y}dfyr5XlHy&LG+9aYZTzJDw?DmYd}=lg3dFHl95eh2 zi^(Jqo*Hn9dUr{t?FAr&!bpbqtMXQGnE31fm#rxtr@D5H@KSLSG(aBFzP?hNXe`9re6!Uj6 zJKu?bZ+y5i!wzBhJVefd;RN{)cJWp1(jpb)2B##o1C|_xCw-E2N#n%*3;!{}dyScF zo&{YsV(cV%um}De)?MqUlPz6XmO&ug^pu}p@PWZrI+U-Thmr9h2iH+V9rUOmAlDyF z2n=mj3QCjmOL*jg7o^>SXOt)=Q+_h^wDCxi9bm9urK`|qr7&8rXXX^)!urCvblwmNH->s zr$mXyC{Rk!v7q9T9dEvT2knRCdDMBD1hrT}0GT^+dfJZj`|qJ3_4!r$UQSYdaF9}e zYqwS-h{^g4dz+vKcj9FAN1_q!!yVlQOu^MCTq%~8W{qJpDcJt`^>+GzdOK|rp74^X zRuRboF>5CRBiuMA(-yPH9mSnm{nm)=z4QeN{q=l;%B0!xyVTfs0IqlnPy1&+&2sV7 zjiV4ZSm}q(@JXMw*nvkP9Jag+BLN*64@4tT(vJ;?bPfX}) zlagNatgd9`WCF{WAbDY;Z(-7ZVOC zKq@bTj+X??y?XUphkIK@%-bNT9PDUe@`_LX zL>}`wsu$L@a8%U>CuuP=d%{$*rqqp(;=aA33VHbB>W9jzDyyidw7!%t4B~i61E(Hv z@inx$u&}@idle+)k$AXfb%|SO^zBFVBo)${^j53fcktpo3&ndF=TB!asbtny+Nu@R zo-6@M9xpkXz!hJ!ro>@#7Zm0vq)7rUnluTBPvJC0t4np1mwEC%U_h~@6K3&!U;!_J z<{|7(u0Oo8&D+#XmgKMFQt#TeB}vJ5+1j;M-5jzvzZ_^k;au((t`U77bDz%b{K+$% zz6#`fbs4d(8wO*Fj=xX|A9I1_JK&geJ&NOxCd;+RMkUTed4+}Hq;`DILkgaueh`jw zVG$8d;tx01uO(~CoC20CMVrLKD+-tIVj_11!C&`iTI;aOdleNXlqJcxKjtFkJDe8( zy=18pykCvEfymOr(i~gJm9k?v%Pr(wbqjW~!cne~_cKXzaA{Se-Th{ZUGynDs^q*D zb8|nSvjq$J1px>C^;w2Jhq>Ch%EQCU@iq9~$S;ZWo6cO>UcTjnFp_iSRkd06DW>Yt z?1IJiYVfb~2=;LPzJPrUL4k9|?36Z>PKA^^3eKa5X^1zzdPCIq)gjHh4-s??z?!1Z(|Mi zvvJF9=Pkif&dWzmyj;39p)>0>+!Uy0XYc$+XmdUDMoCGD_349bD2PU!BpR!$g#BL* z)^u-&y&P9PkiU^bX6Y3w4ts(0KhOVDSXf)Jk^m zK3bS`-091F`t1B{JA*KQSAe;C48R#uH1(leBAa9-Tri0^k)Ws{$?bx4w~Qua{=o zD+kxuZk!uyqKT$>MVFLTlX%sJr>FjiAt(@~$U(k*2kEqIHNTJRvgWlt#A?!e>|Uun(Y@{Lpz_)fLHTe9y{gfO9?!~ zIqd;k_HhnV(P%2-`r4N08o{)BpeRIZE6BB7w<16cN=oKm$#WLFWI><$@TWeH+RJya zc|c>XPoE+;-XdvI*K225L7f*rUtoWN7pwIpyYg$fAOFszIvd=NcDFhihK~o)vN_kX z{>HVetAK62=#`=NTf$HrGJ2g?w!F6sSxhX(6t8>4#dvfpDY%FhW!`-6zKZ!r^(Y`j z-w^o|YzSN-{6Pexm0-0onSRq_UOxoyHy&_NK*D*%S8h^ym~*cG zLy6r5aK`>Ph3K493OQMt!uu_}o|x~W&=fN-KZst1)mvPWX}19Y{|P3pJGf)J8+UB= zTli$)m!kz)5c$^gvK-6F=E~O#Z4iJ94}*d=m~&%(idwc`hh&5Kw{?f2Z}mjf!i-?RC03rMCzUejz4 zighRo@XIoGfll#e+pQouryml@cU0vY&WP0e6bE8)K#RZ% z%s+Pl1plv3Gwmk8Blg5msi!8^BcI2GCQkcErz({_9)0VvHb!|;FNYtHhCjPNGw>lK`3d-4x>rLYZCWp)HQ>gkBLRMF*L_{>&{k*YW zi)qK%t6j-Ty^At`uOtegxZc+(S`FhLa^=Rtk z`-AR*qr~Nm6`9noUMM(~aRbWfRA4O!_i98br8#`(61g8&HMmUNil5-}ZiB)A61i(Go$>-HJxjsxL?Be!BH@csD z(BFPE-!2=^*=`2P7nXe?xMFc7yItc9>Xjo1v&Mv_6?#_{ui7E+Zt+5j_TK>K zkKlYu6Ki0_OBv#Q9^Rp60kAK#AAWfoC5a9Zl*$A?2e!P!RbIF+EG3 zRIhfP`u91z(T`Sy>=mpbClI~uf#WM|08Uum-EL?j?--n9ap!wKPcFbZ-@6s?nuFn)^F$K&X? z1aq{`d9_15<;5KPDb7igfP|Es#Y?JJ=e`AfJvAgV^!O3=HVOzyIa&1sW>O1dg%%tH zhI9r6`f~5c;7=Gi@v7Qrzlmq^YTg@EucwAq*jogJ*bIM)QJC8|_5z_RO!-DAUkP}6 zy64H~-!1G4)AVczuT(iKG&W*t?dj4Rps@l&pT+&V$62M1>I*cL8fC!xT zN{;P-;GfA=A}L;-Q}wi@$#yX&wL6HQG?iV&&Ct3($~TKfB(o!p)-IV7wc~$?fZ-Q& zPxBT`*hesd<}sSOV=~y7;^g&Yxbhb@J+FVG^-K77y8r1#%#ycn_%G|{z50E7c9Lgt zj{7%aJ@1C1eGn_i4ny&@f`5u{DY=?m~XwghrGoWL%4f|M0O!b@xC_oZL6*&!p(kr;XS)@uNs3odTFxRo+QEaH?3e8F6dtXoDPDilc^!~}tET1=Nv6pjIEsJ>nAfye zN@g-!*ZOtuv^)8tG|m3ZS@%4ycf4?TwQUd3fs}n0#cEw8J>Z>x2DvFJUa?O~E&R&Z z`evyVUk=K0GK;YNQJy+NDBz#?CtCC_R?_0&9gwh&d?DA)1D5pXIO-*S^^gOOv` z|LyDWDy7@J0Txpmf>+-F<(m$8#u|I*p~q~GNxRvWTMp~8@)bzPjG1$+3Q&uE_MU|M z`=-rCDXg#Xgq%sZvjZ`8T2IK{KT|0<2P6l&3eykMuadj66X0*T}wQjfjCf=3v2?~D*!MFt`&=tkj)kbUb zQn$|GjPF|TZ*>LXii4{h@O%>u=qhd6?Uulsr)Fo{&oMRMv17e`59A@|DecX(U2Q^- zdEQAhPB&_n{<+URhPtmWAzN@RyCp|C(flmFzODXdw=Ami^%ayGf&nI%w){!Va!Eg< z36}qYDmhQbdQ*okU<*F79>}$L(}_oux08t{7LC|;8YoW?cgdi1wb2Bh0OIf{!6T?Iqf1_e5w_yx>?SagQdd3{Zy@?^1#y z2(9W3u4lYV9MlQIqvi26-sp)WH1_Af z<+m2$kB7i*@Oc!NsY$fCjV7zk&?@|`&~#sEp4uWExg;9?Znt`q(8gNz6NLI0V^ zcKE+XzP9CG&+;9V9?>V7g6lZV7ZZ~;HdsI$Or6uJK;YOIkK~iOT6&Jwktq+iQK_Dh;YwF$ZRCv=u ztr6-=O-+r%+Kg78FgQy~%N^ddU?AhAW)2+$I9~&q$s$4sLYy*5+H(a0jIMc3H ztkGTS@w{xbTLF)FcxK2B-Kxf3J*Jre^B!W&x+gkPR|(Fnu)hVBnF!%aZ4gGQFjw>Q z1>KnwSC%vfui*Z~U2kXD6JSdJiA(w4!YnS4jdlJiKKk-4zQ&_TWz5CF?5bCDEYqs( zo^LhSRs$I_)ElqOlJ7G3Dw*>k6gzUJ{Wng&!3j@x%n6q}C%5~?oYyWba+{Iu60n`q zEr-5Hl;n7*Hs|E#IDGfG45Bc}cUfr#rr8$P=HT*O?J%}uAuNT{>C3kuAPXGkeE6>& z-zPifRD#A^GGk6wIAOdCBRF4}^Bu`(_l;;02DavxUSMV?;*%aucFYN%zC7TVQ~ADp z%ZW7zP2poMsC;`gNvGro(kbGr@c)HRok%t`&(u`cIX)@BAbAs|Mh@l`DM?`=aTGsLEH$O_O(!j@BAkSf9!tbQdVKBc~+?gVx$=m7%4!51<{%48egp z%wj#9Ac<~40=hQvDnZxa6JURJbu|psq~4x;dPWm*BE>E;r4gj86&NCuf5G@9k8AiU zj=Mq=bqB4&|HF=V%6r*%;`Vh$ya79i z3+_kZ!FltctDQ%sl%qPVJr~$gnDtB5XYD_px>0;Jds?nD0mwQSou ztI_^`Xo-#4T!To8qb+NPH|qC9@-647Dx6eboS$WQD1^2(G)r6qCKa4)@pXnKv*-tsSc9TxFo9aqyE+tak`+bIPoZ5 z!WJ;O@spXElzfY)qDgWQgsNo5oa8&%G3U=qZk|yA@r1RNFHSB3@~Bf|j)y|i=_y|870PQ<&c%#o3GoOEW`7Kzt@D}M-I~SB2J32fz|V%K?B^% zDm=g5D>9Kcu_hj@Dl;3L=4@yZV*1Kg`{ZT?2BwH7-*O;RWR<@F1^CdCbo=|Bb+)g< z3#J#jevd{|Bp;l7V{uUm(s#-y9_7=xV0;Q6bHVC}9CNBOUXuLv>eY)~M?)aKYVpvU zev=t55RW9^?An!r@W{zhlJXrwz9mZ@O^M}oLyWoh@*Rw(Uai)_z76ib4BM`QnW^S5Vj=wNo?|6Y);(gUFNk>f|p-X6jPl9R*j2HP3{R#`y2^FWDN*TxXqmYIwG`_sQ1bsNo?!mz|yM z6zk$8OP%uV*RL<-wx>5}dwpTh>PKZX%Qo4*DECXWKSAs8pIzViwQl`*O`0v>Ec55w zPm~AqV*tPZ3IL5}?y>euYqGPsQlwzu1)iLO11stRHdr~ynp8WKKTi1zR;AmY-^>Mc zKF!`flxsd90LjBN8APa9G^te|;Y9XFyqPnBuzQSaM8mm*shzfB)h3gYYI7&}q&6he z4=%U&klw~jezDr!IHeWteHZg7?}y~uyncBqF^VTk(VDZq+puA1N^;D>i1pp>SYs|) zANbz|S%~_1^_ol@k{v(E<_|(oROK7qpbhcfKX?0b*;m-%D_wZCWEmfiPAN*+_RCx2 z6l?d?*`yVXhO~BmiWk}}Al^+hr8{5^&TX*P4&y%TLtN4M$^Y_fCoZ!85KP(Q@aR>D zJ?R}!_%=>MrTpX+CN!xFaQ-@WSd(4;t!f*9QO*>%^Nv(5=c6y zOsHX(?`7SXZSO$rhWMgY#-%6%+t@Y)U8y=!9QYb>phqZQZRvA4m#skYN>!Q@L{5+Q@D14*n%u2J9e(?-zXyoNP&{{3#BkI1rBmJwo|PapmF! zrTeq;blrUOLGfr#`nMJ|NO5s*=WJDt$8%Q{rIePu3D@G~yxC@h9AJm%IJRlc)KWT2 z$}?=*7g;s~Q|m!Q;d$%CO4}NxTf~kp)-|1^ncsy6Sku_M%R+WDXi`lq5dL#iwQU8s zg%m`0C|*Hoenv#5>nVRJX6#oF3qz~gw7RnkT#o*z%+6l&U!&(seVgJyiUXbFKo3#A zK(Vpg)!kWL$I*el3;EHxHg$LkHzJg8F-~FGwrb^S%*6nfI}gYXSp$5*RTXyVYu2oF zxX$u=2G=IQb3H4I79e%(_=WO( zZWk?uoQ$Vkcn56E_flr{O+9CN6+MdV@~1a)ZRY`v_KzbgZ77g?iWA%&iZ>H8^HR=_ z?|duQ9{)1K{)M;nXzn&k{$hc0Y|Q@IXm!I6U+ucL8;y`u#VHPaeL2u0l&^NYx@V?) zf2&rla!6E}T>9?Lq;uH;1Nw7T%Y9+zhF zpPaw`3aH0@09#x-vBnN3{%JPS*%A?5sk1GX@_wK5<7xbN&?^O{76mWd0&9^!F|9gIQS0 zw+`f`takOsqeF4a4Jh?x7#^BMW-oT zCj9sDTUJE@E9u^T@)*h20VJbJ`&%hs&#yktgNa{$v(5b^KS^6 z#Ib1d8rjGCoNPbS6*0$LwDSErlI3f1ZE&?D-Pg(0vHs-G8yEVUY`^hDjE;_~d}~pD zy2C2eokWgF5)9#LN+}8VQfOB(>T2tE5hIUb?M6Mcsg_n`qu#c7$uiDTg-=}At{h=; z>U=elCe<%!yDyi0XuONEOyRY3?GJ)9NGrc*tcIFXEGMPa%7T6w05;ZN>Mwa zCDC14TI$Y?$B*027B2k4c|EI+AgQLh)-4F~ID1Z%RF^Pgm2$y2Ugv!p`^kE)Kned^ zaGIV6cI>?RMb2W?)in+#Q;07?`b`L7qD6=`Z8LD3YU*n1oqXsjnXY8{NoTmVbi0=22Seym+Er+r~pK+M0Q533QhF--dM-y@&S@I?-FNdlV_OsBc{=Ou` z{<&|B?F;sEJy_&rWsUB7TZqUB@!IX=o3S8V@EjcWGKB*hgr>@BH+F<893;h(?`Y44 zk2$qD6HmE#ZBQAJV=h{`;os^0x`z=A>R6UH9^{BOYh}89yey0PLE{djEr4125CeKd z-+CL6S&7qLwuQ1g!ncN(?cPJMWKZ|yHKqg0H!|+zI{@^mFW*_2S*`fj@jEVj%mtP2 zq{kd{k8WHDnl`C1hkWPJ*U65#!1AqmAek|Te9JL5a?Ew;=hiR6bxNYEnUP~Ih)z-9 z9F5W3T;`cXvccTb0EWC`5@>w-I1{mG*Y`p+)O;-DE#a3-R^ldKzR@dAzUjZn6jk|3 z@j7KnB|)5mCFIJlMr1ihruc-3aCJr&5Rkcm!fTzT?*v&^F>k(ON+h9D@OAYbv%-I? zL1^y0>u>hf+wVA2uF8ox1=?$zmHbW*gqmci!0vJEE0fnW)7pO&);;k=&6PmTMM}aM2YvJNsB~H1b&j4c|K+T>1ALWbDHhnM^@X2 z;^tPGeEC*Df^`c5|Jm?YmESD+hEJgk$#*cCG_chN3N#}5PLw3ywe+_Jb~0m5$1@&~ ze0)x+9qY#2IzC0xTr%$W1#JCP)*pTfsnVEKlx$&5M4x5H-$8*|b4 z>3^53PH8{pG&jYUZ(j$=Vwy<#iig^ONoUFTCr#_=_{Afq-n?Xzq?`nqTd9?N3jxu| zk~$_LMOD6v>XRt4k6(@kwFbig{we9Rl1#vApdw937}T*+hMFMte!#$fZg9BF?vJN@ z6&b}lM_u=e-W3wjqtLvl9)2AfkXk)U;a_&?xwhSQ+eVb>mEkj1N>k2Pt5>bHmQn4e zMA6i*zhEc5HYkFHZ&H>r*TO)9`NJ8rY^$xdg#H2CHEnW}afoLdnV=J;pb>6Vj@s6T zyU9V5c#==>2>ny?+Z^+Gx=9na`XNw$GHIo&MNQBo8gzxs15Htzy!*ND6Ta}G*K%yT zq87Uir>YTs)*)3%kt9QtCZ%wiw4<)4E8hGfWM@vzwG)WObQ)Kwbaz?F(UgRI>lw*c zvNXxcl1%dDJIFJ!#$3E-#ixG#i{oVp`%PwL_{w6npjV@3o~JK+=Qi6OERsgzEq>u% zb?_7u98cAugx_73Vb9IYu_>?Q+3QQ{?fiXeY+!+Yjh>u*I}GpWzej$Xw0u)Qd-;w{ zi(gmrW6s)*Ilr8kuaKY(M>4Y1)iD>7marc-gnTEfQ`*y%xbKv|zcy3>lI8#@MEz4r zI9HNK3cddTPd~Va68s4w-%*usf^rl7tbwlkv@gH>y4`W-z4rFBcil7Ro_m%}*libQ zvK%^eurmoOuaX$h8x*S51X%E{?`Wm4j_GQQRyP9SQ0PK!|1}`{_A9p2e|fTdFXb33 z>G=Wuwc7*5_7v*=>UgFf2ZPPeC)C<$b=Iki#spAJ@V5 z9Z_l17l-V0AWEN_2UO`UwGMYXajmHwDGq$|IMD6NS3Ags3m4f9H{NQmy*|yZy5d4- zqSaVkvh+)vIdiVt`EE97klWpbvs_VpnmDi38J-ktc#=YX>8020p@$x|V~#n}j{43a zZnx?3MdS^CF8sX|WXkm8 zKo>`EU2ii9)iGohdk6 zP5b3aDMu=B#n9C5cWp^&Bp=*oDc`r=ewQ71FFW9Xy$NqPkTRNW;J}02qTmmIy53Is z{xR;%SLYovV}JSOmjrBTZ_?Zl3Q0;=p2jaN$h0ds-#r=# z%RlT^hxyX$vG9J2+93hHR6Es{Hx`BL63oo|Zr*5D5{aoVXjMuZqMZTA++?yiu5sq8 zy{~v1nWS(%&PM*?$(xk$+S+vMPaj8nzT;D=Z&DoiW^$lgm9NftUw!pWn>PJDyXNXk zZ5$rK4eSd2$6PzzddT~AOa$Us592&oh%(v?t-Cw z1{3Fn+!4Nf$2vQfNKE-i^*1pnLbCjemS26R^Az=wWZ!*`mNDWx^@X0%S^JYqGwiOt zaQy4m*(IXF)W;MDHgOKbclAuNaZ*e&3mv2C8g;n?Y!T7bGkk83b7Kn$=6?h+qNDx!g(`i<1M(wmcwlJoO!ky$Ep5u zqH0a5Z~8kQ*bd{jbEf0S-K}=M%0CYUDj3T?eR{Q{QCE#ruOckT-0Y`CUo3UbW2c<* zBlnx`+sXNBIQM%i$|^8Df91}SBbB}X{Q7=v03!08CFyo6u!*JB>2~z^I(vS<1}o$a zW{6!3j(VmWHEPkXF$*pMGx`6fqnMv6u#53Z)iodIK+_F`R&oFH!5LY07mih@vlIR9 zICi3(6Uy}6T}h_o=}R&}tIDyVy_@Y(q8)9)tG-W}nY+eif5-+!xYC%bs!y|j&El^1 z2U&Iw4q3;I)j|uI^9$=5NvWq(9QaytpxczMl+nytb8YN)qcQmo=oGW0ytMl*EiXq2 zwz%s`3)t~$xB1hb{D9r42L!P-rsseB;}LeME~SdK%D~@a!o~(ij=gj9O)j{ zf(4(lFxaN`xpnoe&v&9%o7QFQ{{He#u02Am+u!V5XGf##`Zly!({g_Q93HNOR+Mnd z2u#c)(k;}x#YTZ=JcaOi4-hfv)K_xso&#!ZB9VPMYl0T11h}w(fCyKo`9N+xy zDw{ae!%gn4Nm#q|GOoG2xFE~UdOOE1W|8p&cDwo9(@QDc?vXYp_55M!>*QQ=7R_8C z_G$jJ0z=;k`i)^2+QTBowmx(cf^7RO@QtU8Xs{n1 zSZhNmi=+B(OW>r~((*LBo8A2b%R=@K77TlhsK>O~JwX>b5K6<+u#`yg2na&5sm;4y z`Qx^AEiBf)zFOZ?pOH$Gmb;^hc_3XqJU!R0{xrj;?A%~S?NDW#_ex%VI`BR9MT!I8 z5Ds*k^3`2eIV|Z+Rp#T)BwzV1$Be59udJfn-r@}Rm}8G@#d=n$E$)8smMHmIv*+0! zdrW9`tV#nprpE1dz4{}k4R(S|n)&Rk1wE-rKF6N>;Fb<1lg0o%4}fFbKpT>}S8|_3}F7%aC30Qm#!L++@GP)Yo@av!(wV zCGiREmXDjdpcPocCm`)JOweyOTm6w4*36wvAxa&)eZ9T$zg&Cki%dHjb72@u{KsOx zO7X7dJo)ZvIrhv#%)qp&RL%Nq43>E7I*6030j}w5r3aY^(lF(CY2Zy0acv z77c3#W4sox`Vb!ap)I$tmWm2%#$wXUHMOSIYb_n?O4i;JEnUDYU!!fe8#VlKSB)Zs zK_BZ`oIN!s%kIF!kyqGkQ#sEcHyGGgW|CwVZr$E*sRC0R*n~I`Rr$)Ks(+rhal{CW z(l{wDUAK{$SD2-4cMv6C_*e3bmZHl{1y;Qd`5(WIEa zd3kwlrgA+cv$m3G3X=T%YLCxTEf^N8O1EDFn|K(&2B&XdYX$Gam)GdC3ZnGT4)MrM zo>3}EXGff|gnZkivome6&GYMRpCK9c8oSB;wn}qXbSNTb5>1kb7U2Entjw@WU(L0F zARXNeQq^_?yeL88x=3;)tBCs9Z$qrYRj#mpRfpP~iEXo%E`1%v{wol%ehM!0sT1qC zYYKth|E?&XPeJ*bP`;_V35@Z|=U%q@d7oGd#}&=UMh0kL8Qc>O0S}so#UoAHCI+v% zou&w;X>qCrZ@7F%Wa;oRe9U$DvBMYi1LH@>DnOgLUo!~F_~z%CcILDBb~t@;&OX() z846g7utxf=rJ3;t@4SBSP|M_xP)8ruHKsAf(}>j^vO8vH+MYui>}NaHIQE6hcLy@U zzDU?_VR`jdW7?M`)e$7E_kP>i}(1j8pq_0-ePqD<$z z>pT^em3SRj*vqfHVY^S*)tRD|M<(U|>@$_Z#&XUGEyRrn&N={@(H=oHgaoDn~bLcZkUb8H)cIeh0Wc~WaZAfOL4Q3O}o ze-uq6Ys=i1#hgt`ap|1x^O7{X>^0qIZL(jEsI|funEc+;2^~~M>JOfz^=uVWGNvK2{Z}te9h_-oZ$+sB9w0raaHNh3qp3o?sfKUJf<_r z6RF(St|@iO+UHX=+S|V4d0)OIdr@gZCNg&(XZ@}?-pqvW z%(Uiz?Yq-<=tA^~{y3L)S0`11UblOPc33My2SI9dkkDTl4qYwWaRJQINTbXcAv_l-Q?_ zCmZqT7mtKB;JmcZc^1Ecxp~o| zrFQJG-(fK4GD(I|qIuq~j+MvODBMCO1vz=i6Ix1FJ6G+P1#2^XNdN#q07*naRQfIF zEOoT%@?}Y{y2@1Cr?<_SGv8hT{!)0*y+GE|Zm|fa9(LHbY?objaJydta%?etsPt4@ z8R7iMFUYkWcN%BM1H5tFbvIj8wIcq2=EOO%&WJ~j9Nw-|h2Z5nS)(vPl7RHa8(T@M zQSB}Sop?9UiM=vg?2N%R*5^4E4xiE}erw?jI5#a9Q!=3Q>2dl^YlzmX*NWiOkHy1w zc^Ota$804N<*+!A#G+$mOR?SdcAm|y3E9+xYiwscrL`!CRJ@{FZB;~%9D*t&TEuzz zK}5ovz5l>sTUeTD*G$c~wd|T6KeWci3}QD-rf|ipXGD{)OcG6&%CAA=%Xh35smlld z(}5Gs7_o(AFxh0XP;s)vAZ%d)6)y#zl)?(pq$dQnWX9Y&`KD0`l0W8z6`VME)}ua* zlYDlzeo`NANpOmDajg3Jq*_}+poRCAhioR6n8j-{Sd?uM72WK|humZF3 z0~_tO9hz)#pC;>7fU?cgVi7TH@RWLx-IioYi)PI=k|lpk`?N*A>USsKEY{@@k|@8P z4fJ?a>sk>Wiv; zRgveVlZYhmcXfbP4+kBzznyp9<@Pq%$np$UCq-+R@~aWkroV3wKJcjRx9^^IC`wNX zUn?pFYIy#ImqC~sfS2(ACl8`YWcf*^(HdCPO!C1_H|>E9N^huF|zgB=4!YqU1#8OJAHk3Q-!8;GKQ^znbQ zsOW2V-f@E~H?sYHepg?BKjDHT(1m&-LC;ok(Nc9QNa1x?07>hR#u0(zD36Y9ZOI(Zwf^UGxLs|xBi2BwK6%vo(>8z z{AsV>!a6Se$B6eTOO1Jdd9GbVJ$nETdF6yU8^DAuy4R_J_78^hsr@g}Ke>JgLK5=Q z0^`$Az9Ei9nprJ33)34A_e5#E(bQV8qN=TL-1M$7h3RUq_d+{=eH*P zE{Ms3Vo#awFucKS{L-LXxm^t_(aE>~yBAMj7Vi#|8ugjc}Cqt$ZIq*dAh2kv7B zapo)WbtdeNg$6AyYQ7a*DY|`Lrk&8c&L+(TT;yXWxg>%2QjrgT7H2YA}niM&d))FI{d;H~`k)|EOi|xtryG|7c6Y%A*yB%cn_B#FLyE zx;vTT6}v(Is_ANv(3_QR7l3llNyO0Ds^?`wr)W|7bO53-}|NIop4( z-79%pI3udVnv%(}f%8I6MiC-=QryN_QwzrjwFJ{ByZ2#hc>GDr|K-oD;G*AH*0x&{ zsFpBHl$(aXKnpQ=8)we4x=$8b2>Hum5t)Vss9RSh?Haj(KDglkL&eh#RAs7~6bHU( z9Ozc%tKF-V-ah+Ga=TgG*Im41DW1jUmc>p&=v9hlRDh#FE=o2HQ%8G+#Tg-IvLi=s z>2}2GxvLUDBg8c zb^kl&KPv@T;%PuMPONCK{;TBV)Af4Nmcy$x6xGkWKU;tT9FVWwTy)*x>#^=sx@v{W zeRFY!UHw{~ZQHNW{&`fL4K8BeAIr4iN z-BMa^)lWTV<#;$Zf!*D_aEawj+`;yIVYC)Z&rLY_)js>8RbicJ!kH|M zYe|_ShFKr->5O<&)>yu>l|QFsZ&PkdWH+Zir#R4)IMA)iR}GVL(+*bWx7xjKK6oJC zdgd$r7Ow0fm7^wHnT3x4o^sNpT}`3;!a*$}8K>vv#Pod}p5#&NmmOJd$LI8oKg~q` z+Ot0Ei0j>DTyEj5Bkc&h*1+PT_imraz`fGHj#}Ji^MP%dB#a8#xCsuv;Kdj-^ zSr$5VvK1V0kmcZTSM$WP)(9?mdM_O0x}|d>3EXg>oxv&3VG&npLUz&%{HjJg5RpqY@pL> z+-AsnrcNj+x>HZln-#4#XZE0K`@EoF~IrtL)fhNqt&FoM!@k!uZgEl&$Tvrmi z>kN)8ihgy9JTa_s-U6$6^cl;*g3>T!u2uZ!e^z(NpDg`glW?5Bj zwg_~mU8)!(#cbiq)c=mG zvXTARaWl`i*NH6LAf`oIe|hP)|B>1OZQy*j>baM!08e?H^EP7+PRAK4%_&&2pvfDi zy<=-{xZQF&ug(1Z8J_ZuM!V{2^6p?YeTkWY)Ch7}<>UXctX;-i@r*Yt6OfHG-FcOh z74$TI_PJHyh?O;djAgM));;J=JvnvDA6W{t08XjjO}$4`^!HQ_FtepnPvwA2ek-fe ztp-o$0U6!9AkoIM86EQWBJLfs85~Wpg%0|y8yO=x#eozDQXGiEfgZW@jX~=-?rYQ!ad?SFgn77E z>z&DNV*)+Dpfbar2F&8bv2`}2S2OUOs?{ORnWLoD~8ec5S?_Dv@_2@vm{DMEB>S>(Rm zbQ+POG{u2UfCEu?zH*pycNhbXxwiaCG&t#JpvBP?unz5%lF6@PJ(>bm;PNL|hfh;L zwmN!T99&Qi1e_TpIdfrvjMaE3J+nN^dKa|Vfg>8N5yz__DcOEgn?C_s@Ivr_pI;iX zXAiBmgGV_AjEZUbokD~n+dq-I_VKd8by2mmwL1z#+WA$n0*jHy> zWVI;V4CFa$!tPdZ`cJI_Skkics^|@kY&f5te0O5Z1(ol1V=hYl{#UMF=m^~&SPSmA zB6|f%a*ouTA>8aB<4y8Yfg+a}Fb77N=R5FQ z&j=*Muct$XC|@YAo(r19SC6N`o>9oc{=I;H1O9PsBkLsfR*c5z>kJ|dWoN{XDkXB~ z)nwRZnYniIu64HC7J}8}OqKtfsWCxggyxlKHzXe^p;bLHBO3tzOuKN$Dm!X?ljVY@ z5pSN=+#>U>qEtETTLw}K3QXszH8@t4o$@Oym~u6W_gH5R=5Cqee-_HJ0Te1l$*O+l z1q8VHTOPbh1XwZp}xh)cXSXIHNQnlUy%Wz$MKar z;kms*LPL44z4b3vbN@pQDX(_!0?YZ{5!UY~$2$Oyvj4lwvS>s$$Z3iQl&*vIfbt<( z691DPb2?)VkVHn?n2VF&BiECJOvXcI$m?zKAzsq`dhyiZWhctqT9D*hfdhglA@xKC zp6f1xS->$ZUOHKlM?C)pNy$KVidQ~Osw;?YY?JRK$DEU;01fbH%5Za8khw`TtMA08 zbU6|RNd8=@=YpoBbxJEuL3N7e`z*CV&Lshoryta2MO#C<5{QT3kX63ZSqbv`)vuH9 z=rl!DzPWkX1{{8{l@^2u12&6uH>Dt}Gj*CGXavo#e7ZLrG{0!jL?dOYL7RxNDz`H< z=^nFEkTxryf($4H$u9xV1HXFP+!h-|$k@;7fjblyvjoMJ((z9YK^1aB?EYdjSXjHC z)q)MZroaxK++;u4waE&zdr61Id?vgWDK}wbE5)iq=er9*tGem+9Gd~~{@)I+wH=3` zRQNBR;`Qs1a2H9IXhV(e&Jw($?!(zu{f{TD;Exx(Gv0JXIcZ%@YG;~9-g;KzH7LVe zcD(t=9KmwF&KlmEY3ZE#HhqFu@?RgY{Ga{MGEk%;22w8n#cG30%g(D@V}@Np3*jO& zxUN+C(Eqph9RPAx)&6Iv&(`z=2nmoz2oMq=lu$!eMAY{zC_XzDKxqOBPeG;l5JVIo z{uQ6kg8HnWAktf;L+F7}LMSQQ%k1>o|L=Fd`F1C}-^_RK?966%^Ih2N?0omT_ndRj zx#yO1fA=qvy60YLc+Uya@adB!j3aSeULF9=Y3w8yo}u35RliBepwhPz7+tq$P0HQuk1fx z!%am0xuHSk9ff;&zL3+CmtsW z96_SfOux1sz#DDSef=*adeos30URl;DBmd+X*;Etcm@;@){_QmR@Y@eki=b&Oa1$g zkZJe-LxPJJSTK?-i~nKUg)?*i;&~Fpg&qo9dXO8v52m`uQcd1*Ydf1tTPkY32(mCS zQxkej=`SaLIqy`P2UD7K+l}QGrfTzHUOuU_wX2ZQ;-5|GFv+VZp>7wi+VM#_bvPE3 z|5AV5pj0W|v#LoTi@>OZ=Vl}}r%vwg2}#;eW4NS3cl~%@P)>cdQ5G)A$(ev~L_o0C zOjL(4uJrKI`@cLFlGE>~my;Hyh-(vZ z?CPG?(u3vQB%mE}C!O^g>h~kcx#cq-#U3z@Cn5eIwC_?$;{uQPKOU99%;_?KJ+llD zs_1-6CJGEG1E=48={3@J!l_cX#{!AG|44vp01JHf4p{Qe2Y}Htfu=03zD(WqphVt< z053ip?+G%XnkmO?iDSHT;R_&bNTdDDY>>TB)4@0;Y_h8 z>e4ClF_)R!GIjE^jSX_j`Ud&*lC+$2N?ckHh-*CTDH&ux0|^24jI6bRCwhIY^-wWYy2ilt?XGr zB_UnLuS`73Jqc7p0*=eh)u_lTb955e4@=J3bf3$1hjm?%f~)^lmz-Uv|S~>%59? zRE`&wGw3P1;cdwwinRCU+ax$=XKB6)!BUuc@*HmGEqAGXR?ct{1tE2~2`dFODj$v% z`FGwCjuywLe)e5ln9wENzxuN@9Djra@T}yLFc`|LT_?$VACc%u@0F==xOE85;&M}9 z!LHKqnUf`U)lVdh=;;t0E%$nHon`!iN3hR)0_vST$`OZ-)T^6E=@b4@VOEfblYUi~ z0IRr;|>aj0OH_RpK*AP(k z`_6!@!4maSz)_wxHztQI1E9r`SRUO4j<y_%OU88w5UIn39fXrq3E$IErvL{TKH+E_O=`lPY*fPdzT@1B zF%s#M$o~6S`^A{47EK^Ngh=JakG@y3Sh5xd)Y-=bP*&vlRT97ZL5cnH|0J;Y9#~mG zboI^ulmPCWjvjTGwFhnIFItKBz>|O{0Z#%LyL&>YZ3zT$#`ooRzx?OwuzYl3Mou^> zDc_xwlY5@_%PY-cxovHoJoy&R$0i44akNhML%`{ZnQ8g>vOZZhFDsFG2>e~-mn?%g zD?E*f1_tC~%Xm%>7|NJwSIY6K7D1$H@W6c~bnptyR^c$|)NJ~3|8xm6lJ{O@WHSnJXQ%;x#Jil!dM5chl=KJ;GczVN$} z!qtNVaL(y}JtoaqmafC)4_qoA?}@7>Jo;lVJgdLQJ5wJ0o&;)80-p1&!A7x3VleNU zJwCa5bwu{Xa_&c$C1nbZ9)0=9q`WW?k$H1d@}>VsBkss@d?D=dw!k6Qk5=Nq6kJjt8lTcpVaYe9*)5by!p0rvb<}Tmmv(m z;l^<%?*L}Eyq`DzCqyR8bX*g72$rRBUTc^$-MUokFXedcvw~b#FH9H^gbyHi#}U$p zYXqZ594syW^$iIwT{0mY?;xvaSheiTLCD~j-Um+to&+i>0nhnXQkoSki`{-_yiRU- zG$K84t`{7JKq)Ni^33JDsaZL1X-Y1CA}sS~=VZm4Y{4FDodDBoh?4O?85`my|7ifu z(T4!1%-T4xo?}1&!(Q#%?*PYnvD5?kiqX*hh&~Qrb{sw)&XNdK!yV~}QVYJ|F(yPY zk9Y^OZ{M^jQorgD=>*gy1HF{vH7UEGnp*s5k58yU4A}F$Z!NZxN7F=*fMc{X`x5SF z=_boiF;>=pMU`)!U%w90Z~f?UVexE6lcAjQG`Uek8q#pGe|$D9cWw^Ic`Fk#r)6kA zl|U9p&dZcCp zadUv}^x-aF|76_f3z$hd$@Ht38Bd!m+#^;&S@{_)`7Krl5s3U)PR_1>6MM?7%&53z zetzU~ba2JK62WXY##uJ%weu8;!_Hs$U8&Djeygrh`Rr%RSzaA>3C_P2yC|IC12~t3 zF^C>be2;(-h2uWw8iu|#<(Y5t9n(5Y^Q$_B$aMW=l%M2-2eP4?to#NqpkO1K%FJ(4 zhiWzxrt>suzmk`$u1u*DrgAmmmvp$5@4xWEb1oiEFmaLlamF&pPR_;nD4Y}`QZ4*c zbX-`Pb4!dKB}QfzNJ2!%(n-YPjQ1xL8jGtCKvNpfgngJ55tdDdCgPP6$CjNd(N%O( z95N#IDABZBX+nX_p9Jz!D2Q`7ps`ruKJPzX4#|0s_~d&ly5+!KI04!Eg$PLG4EUb) zL3zE+k1P7JQkO}A=YIH^0C;vBR}EIlcFST}w->=kBqkWtYd6Z2__S;{9iE9j+#dr? z$WO>fx5T@g`#=-R_7|fG&oXe1>4%??@Zl>Zj=vLk-Y;QXs*uEyq%@8d)dNy8+l8wE z;h+;Z-|K_U1$f;c5R&43xDF6)LA0Uaa#C2%*xRKZaCRNQ`QZ%s9nx=Lb)gKrDDfZt zuLSnnTLQpw2El`@DgA~nkr!RKLh5%v^xM?tboE=;=4kG3W2|*%d$C_et>c#F1L+;UDW0Z1Z?Yf8Z?C{SBvYH@j7rPK(_Pm}r$7@N7vFVDY+5>YMH7B&=!PmcMMy#@ zqHbbd@}WZ$%Vd5Ub}62zmyf<3kRLxDlCLf7mgO^X>45{wTz;Ox^S{7nzWJSi+_5ew z{g4rP&QU{L5{qO$=BM##CA>rc^Ayg%>Lg`E)TMm8Ij}LJ7%I7+KcyZ~$r;Q@Bdb=*lwVvc^~W5J%NG7u+Rpigq;M=Kjk|c0 zaCU6B;j$%-f!*ffa)eJwXuo}w6Sirx^_$0)g8MBM|G~>7aogRJgG>q&%cYz+NGa9U zh3_c+F30ASeixP0U=^fk$mRyW9`Ql75u)aK$cXKxqZ^bVF`C(DupM+0Z9!j`FyMlo zD*c9z=%hjY22JG1Es=N9qfe9NxNMtKvMW&upWC{mBUe=vUK-M+5{2g4971lriFX&QL4o$lJ>g40B<8|O7pMPgm z_M4TJGY(2f6a&jrXJ+~A&p?*C^y!fN^60pl0c+^r5INLDT>&Ah%5Lxu+l+6S=my^? znRveTkte0|yl+d(IbV=4pd)*(`KiQ!dNm1{%iOB$x#2f5>Acebvo;5}v!0G@S8S31R8j2h4C4*<7MScVw5&{tthX*tIvvq#u4qLMxVA<&-46vJcfj zx5E0(iPEE(^?vWskequ!N)FhG*G=ltU6y^KXcOIVY>QIl8NYzSOy8+;e&gc#f`QGM zmS0NTm3meVP1Wwdt-g%h|WPh>5o-;T@9dPRG=DlLHy1Xx|U8h{m80Y3ZS1Olu| zJ6_h$6_Z^jXC;QE!kbR<*Oz#cDW(#lv$ zjdTi`p0AisPvEPYr7 zwMS{S$?Yhq!g4v0r|4+=Z@*7cFTO0k9cGAs-Y&RQ;YrCp^@2o!I7Np$I10hcmgju^ zK&ooNb%WE_J)!muyFYfeY&zp>()FFIC54-bc%zY4g5Z7Ar%C9b{Ur7D^OAdeBZNNw z%}J>o{z0e}bVz^INK0m3CQkyM1O_Egv1RAM61@*b63DL*$?vdi{6Eizs z;6f+#YRVYP+pEr#fO}Y?C!^|00N(fB*MjoBH6i)dfl1|f%jx7eVLNbkRz44y$FDyY z!Bu{7*?R|oRA|hetIJ@ON(W<{#d3d+ch3@Ix$maiB=m_7N#hB}07?>fC%f^E_k6&F zZUl^F<44|)8SHZs1GaPjA8(P~16Bc0<3I`FrXoSmL=ZFQrt{ChrLu6wd7%>QBLD}D z5M@cfiF3v}OBGcTM>)lE91-9KIRm^SDo&-iI0nho4Qh=j*oxb6vEr5=EC@f#VjYCJzPb+`n<}*sw`JUZV z^1@~uQFu32Osew8i55sJA3NB8lV*nMG0SuOp2N;!%{o5dx zkS7Dds_F29rTa&_N#C#kj=kU~5lpoVfm?^GJhtN{A&l_#&zh;OEKI-px(xL6iWDw& zZ%u7Y{Y4Qa;6!;;?V%SU@-!~UxEXTXrzt1%0p`+#xPu-%UlR+;t9?HCk5HW~nw^%F zi<7bfd%>J3PguRGsh0AHnWz%*obNVjSW#{X44Gd8g04TNKAUwa>=O9p+_5IDg-a=@J00bA~rC;rynL&bNjW^)8N>fJfg9$bUZ+ zl}xfu4uwPg?m_+Xi$*LkV*&Unu$Mm&!MQP?oOfs(0an)DS|uu&(U_B&SSq}3 zO;~1N7PD}gW)M*&DxV-__<*1l#&v~tjrG#?$!FA@RJMnoZJaUVGK z*cwSb^P&01J8B8$tOlI=?+<f+a>xN1FVua-!6VEIZwU*N(IoN&JAl6KbBe8 z_D|sW&;|EI)8>OQZ)67daN8+s#zt^>k$DUaRb#PzF&vh-0WYGkCUgS5SDFB*?-RVjbXdvVp zXEQoj&?K16QS9YF+AT+LD zYb4qaPZI028|6Ky-@tZu!<=XJwtmz8b!jS3zlUtjjcuEzac^^k5k;fuv>jz)s^5ch zf-dR!6xtu_pbz5ZC~nEJAGDjXE{(*4FILx}e$yV<84pX2R1#dgy{%I*Gc5mzKWUuA z9&KxF7lLQ!d!-Ti3ctugP%OU(mn#f*ScMrJJ`?!619-g@np+}G1Z-C{;kOgx!^@zc z+EG61(M<%Bw`g*A?Yu1E`HdO*+TC^XIqb2WusAKH@WrWoU7bDZM|JFOM1f~s7SPt( zp)jP`)+hp(FXZG5;6MLi9d1Z^1=F3p4)8g#rkS7b=?-W*JGw2JSh!1K9R$yBM;(-} zYeIhF{gNhLqM=0-&gzn;o~~Zi*}B!iG6(frmnJMdlcoe{QV~cPP!QjlpdHo^bh1Dm z)bEatF6rq;^mD=YrD&txm1T2Eznx2_N4*I;&f#EgubxXUI<#b9$9i8|K_9w@84 z%8YmmS=0>r)cq6E7|O}_?#)RDf*IKEZb|7k?p$Wund)~6nDB0O@cE#A$Mp1jE1T13 zH`Y;Tb8b8{zpdY32Cc2b*zAv{7DsplnXlrzp9$wL`w{D~T+h zzKZ4ZJ)M4rj-B?&%NW>>Zpqf~j`l7!p>WDybmmKgP@{H@nplz1Yz34U&oaS$4m1Th zlhB~a9@%ij>vn5}5)61qqcirI%zWAT;yt&~A7=K(0QfUv{0s^P2PvY&VP+F;cA7%(uJ|uQh_z8Szqp z=5j*2L6Y;hNQNK-RnPxU!9!*=@Tq(|L(dI1uHdwjL>o@sy>-%h3 znCiEw&DlPP^tjnHeJ5ArNR!FTmlFt+l~JWju)$)tAUQf;TVUSr%1D54kJsT?$D_FV z@0z3gWzHnbn$Rd?m8fi8i8{F$&fkxo@*4<{X~F*Q7?Lnnta|n2B|wMxYP(O)kN4{1jM>hn9wkY@EPd%#Ye_vM?^>KIN)l~RH%YY0-hrBHktDTRdCFcWx<9{(2_!m0Jpx>MOZi}`Ui#ijTI=KZ{-|vItZ3OU2 zwG(H#i*TNN$<(Yoj{BuMu+p-vbiLZVdgXf(sDuPO=UWLWI+VeE-Y0RqQ=f*sp#c=s=0}6|3e9Wfkc7w*@Kr@5jUPJfJN}rOJRY*!NSoNtwyn{a$r{0o2vJ7whGvFE11393|= zNwGvL`Us#bLqY5M!EOZbdTC-wfHTgQal~v6E<$L=&scduMn5k`bo~|_KkA6-9q*f1 zlJ~grB%m(=&-v=hN-HO49Sm-|=HZAm;AGFKSmxz^7-t5xkk~;^YZ#Do4oJ!!nEC!4 z2v{{kTrCJ_0?@!2=SEzHup=BV?|L4q_N9)`0< zS>LkLOW>H%y{7>>a(_fN*YdI(XTMw)KY3{qpbH|u2HkP& z)s1CGT|v=%MHNVZ=z4UzJZ{7R;aJXmSyvjB`nP3tVSy~XkDdf-RRTqwuNz88Aw#Oe z=065KH-kb<>R^4wM;8p}DdflGGkG9guOPtXn+UKvXK_khy+-FY+D^|Z+l&blnQ~ch z2Y?}b^}vMu4w%#bcsZobC70xX4BE|v2Suxyh^$wPl?ksI)MM*KNm&kiXu`K5r3gLL zJsvNL;kZ!>Gf+DlSvIL-7=tqjG3Dkm)o!-L^eQT+ z4!x4|xy;B>FPW-$)p-C_rgd113!-+&v(L@YS9ib6wj98zn zM>ll?ySD>)qVIGM$W@GN#u>*C@10W1ZX+Boz97~w@p5_Q$IYGymqy%ZVuSLtTOyCd zQQo|%6_~b|!fGU9H`)kb;*Y9D@7LD zjaaMXp3mNe%wv^pd;frQ~AY%5;6^)o}-DNeM8_O97gyl>T=98OcvpA82R<-2?EzNT91p~HE#7_ zRm?{jMX^bD?83AhzhhRu|8Q6~B3P{0Wjx`CMN=_#<@fe8Dj?+z1XhIj7tf;Qr>95b@lX2fHw} zInI|OkZX|bFibCp|H*dt)%m2pJ}j^Ggw%QVS8`N(jn+ug?bGkldkS0x^!v0?MGa9$E z(LQL)s;@+TwqvQp=d_=w@(-H*5(=b#(}s%i?1=3=lo?%BX}T26c78V|3K=wg$8x%G zS~>)wBGde&&7w(=;-_P+k|I^SVnjtEzC8ts}kvrbCd-6Z(<*dEZa@<0U?(tozcbxbz<$-6&uYM>D zfDgaI51)Y}ZKc}W=2^epNTq%spmJN4fDS!vGM7<#H0jba8Xin_X(HI1sa#brqoEqM zuChIJ>#*M`mLDfjN2X$#N9MG?G0o4nOy99=M?*?^B2Dv~(!}$!cfAsjpS~QBYYt7w zg6X9luT{SKH&3DauWHN4qREmegTr=g9*{5MT=H4>MrEH@LzoR);2?#R7NhA^?0H{y zdxNyS9h9ahX8$q_u<}|6dhO<`m z?^5NnMH_K(#wr{qy9*GLhwlpPWh|hSddI0Ell&ZfF=GD7jR83dZSLlHS)Zwmn&!9a z(C;(K%dg(zKibJet}L|H@^6ncm8W}3QvAm;`7gZioQoZw)ZmxtT%B~rts^lJoMBX> z;B7!BXLf5g`sMrwB68N=X*mW9A*X##xgPD2MggJ8 z8TshSxa-`@1BTW= zgxn9rk+<0xSXEQp-0AqoOCfmdr>f4kSF^&g6{lC5CxMDfz;W5R;Zy}U;qWFW{jzMAjI3ImR3mKcg^yX{@+@(4zjjwt_Qx{wmk&-z1f3jb!V@KN|N6h~ zkH|Y%y1eY@xRSA3oLhc%Pk4P|1P(T;wzlDr(KZ`__4{UPK%RdyAYa5v!G|yl{>*`K zS&25R71+&*(sni<91Hd%+W9K9V+Y#vo47`DGLWaLp{Jbn(l*b&y#=lp7?v>S;`Wq(toO?ek40n>&~$de{kZG^#v*Nr)yd`e)vGJ| z&c(iHBb-b%I<&FirC1$d3?_D&l9StC2}vjT-3x<^AO;;eiSN=8(^+S+Qo()Srm)D) zC~wKm895#I%JTVl0KZ8DroCns2~g9i%*#_!0vr@hZOF-A*CH4VM~>Kz_8_U`i-r&T z5q$hJ0JXGX;C0S{NvTJ@Uh*X1Nuaa@#+CD>gN?ue&qP4bG4nIB08aQufI~ctE6f(- zb902pkgDT_*=faaSLu(igu0;*Gl|0!GMxb>rR6&=pOPo?HoZP8SFMT2Y|NM_>(L}G zF|+-+_qaDMo5*2S_5fzWD`sb;iA&I{HtKfTCCW9XSwl*k#LjcQp0Hv7SQn^lSkg*#2z~$nDcFxLY0UGkHC&Ka) z_VOx~xIex#-e`Kp!QFI$5%U`E>hJ0dKXOwP&go(-v+g+|k{6t*(Ud498BE_)~;gV&Dbwwm|e_96l2JzoxAX>sEy zMFRusp4vMwL!E_a+Bsa-9OW>a9ms|*L^fl#us_c6p1LAA5;D(FR$RX3wQE&LhO{Ue zT;Ad1={SBg1IS(1J{6XoafWv{peL155OPNrEoVA_-?-WiTLVc1U_A*8>F?ZAFB@_7 z;)ys%oJ{)U^;W;UfoSM=a0jdp?Z^usDm8dgJP!ZIh3Dbf%leyjFjc9kt-_1{%W8@3 z{A0{c*%n_yAXEzi-xgrcmr>^L!0~?Ifv_}o2b50xgE?u!-agxj=w^1?1<@XC?G0#~ zXWj_O^%#U+j{W0Pu#|oFk#SjwSO5muEk_{a64>0;h>3V*3t}*4WTYi(4UUUbY51g^ zcB^(fluOe#(hEb07te0Ww`u<3HJ5lYCY6+^-|W$dqekrXdb;~0-XE7K( z^j(f4H#;KGi!*IIb$9gui#R1yr%h2%cJ}wqzky|o{KN>IGIcVXOKIz)lkNnrGt=a$ zlU(z&xW3+gA(rx#DU&Sdw?blv5ykqGz`yQ9yEQg8NMln2cq?G8AU`S1;L%SJUH+Gs zvU25NU9$HajBtkWznN!VOS zdU~RAUnd-JC?^*z$jCtp(y|+H%z5mNd&;CglgrndL+b5Hu--KK&rmuEgY2YY#08720p-PF{mZF8iF{jjOcv8@$ksdHDO*rqNdU<)QTmrTM&JG)?S z&<()ymP*tmV#oLN^s4+3K%5S@pThThsHa*WK&M8YyD?3=>Fv4he{IyBK?UiEMoGv5LE!0x!@ zA)Ao_KgzH3OA>ojPXZX@R&+L-HU;FQeG~E#EL9V@gNZcJSScjZM3}^%c zk8d1VN<%g9c^_o_>!(6;=i^a{_4}n8GK|4%hoN_kIBK+b zc3PH9%gSP`A}pLdfFnp;1%MXgV|hdv;$t~5r8hmvH|%GR!Mlo z>GLb%a>Amtf*UO$QGKMnF`4T(?9HJwQ-u}$W7DLg-_~mdHpe9Zjb)2!+MJ>Z=0Uky z`proPEv!XGv~6F)QYPxU=M$Kk6ky+0~b;oFYJ z(prDaFRS13$@kyzO9MW?i+hZ7Q?e4volCG>=G2L(GV#yfuy^$x%o?seG9ibeEOt_3 zoycM>w1Lex2R3-4}NO=R0E3+7J2P_gX++euoBtV_}%t&cJHH;+Z%W z2ItGO!V2dZOtIa_8}q%2GQW<9*FmSeG84at4|HrA9DkP~s4`x0th$n4R)Qwl zN-wVT`zGWW!siQ)NMN}cYY{Gr#I|Mqbkc*ig>U#BXSXKpVcX*!>wP-uZdaR}~G+^x8~ySsbPK!BV6=iV=u4`GtYWRv%ud3N_a=XchljDsPWe<{*# z#?bar9xa89Lx=v*we}R5)oh^qYn|v7zRb%P0B}TaIj3XaCq~Cam`Rr}a1_c?O*c&h zNvB?&gWbzjE5x)W(-e23e$N|kCXcjLfMSWF4%9!ec)T7BjLgUYwqm9(0z`3>>5&VhIH9*gTLWyS3wWZ^ScP;lt99Bt_PF%My4*w3SSq3t8Fv|;unn^ zqx87gi?m*`AVb3NG#s!q)=OljOKBPo5K!mCA9_@S_TZ6;AIM`26b_MxcV5c|eEQO@ zl&t41(lb-w$0`G2e(3cYs90>^un+(vUF9IAP6ma-il8j9ahq)|HDtof4lYQeN~N~A zs*K#>!K`-1h?cRi$dAb4@urXKFvx}*;2@X_Emu7eQyc_^7x)^9?t>$BKG8g<00a^3 zr!fB5U|I+7fu}bS8+o2kExYh}jV{sIrzykszN$jqDU07R3A`V)M0pZeDk_a!9%p8+ zY|Y#_!n-cS)>yTFRLywrAL8%g^zMc?i~;`ubKTK7N0ZaL#qs&;)e0bH!P|#A|KBah&q>%o4{0^G z)W49paiS*R6ky~34&9iUX7uY2*PTYa^V>8#O!rjV z`R-J`S=vH*-SRfCgG?0A|FG8y{v8{B;GS!_;jE(e=3s+y9lq#VI(CM+S35fceKN#7 zlEaEAXd5Vpnw7!SO0hS{doWsLk?nHTgEL+NpbGOkThxGwAELar#kGIchqk}tcq55J zV!b9ao`8ZUFJRqBH=Uy#Obo7qqi;Vh(yI&);hUr;8rbQb!G~WyrI3awdQnE?OX~B@hD(`A1NUBF) zZa@l=m(n%|^(T2JdNx`6Ds={lD`=5N+!S^#jgdk@?Yd)?O0sQID#Kuk!*B`RLJ~qX z-@}3~y{TwL{Mcxt$apLDS4#@yzB1HCuD?Nt-pJ$3W4wB;-%C6_MK-~2Y+91@!tBNhhXr@V`V z-8LiaP`rF28LR1NZJs(l`Z34hI`VoCgmK?(fW>GDv3Xg!t^R4~V-drGI1e6gPTw`> zq%Lr%?qNU1b;bdb!Rgj=+$LnhEswYzKC7O;!#ls-Hrw@zk8kz%Gks@TmVd{I>714g zB6JQzpxAB1v9kQ(uKmcN(*Ajhl@LHo6l}31<$A9YS21s~~4zM~dAK;xyosHdtb@pR=yZ=K z6Bbge1sYQwFFNbkkSfcIO|96cs$6YcZL zcz531Hm}As+GsUD+Coaa7$`|m_ky(o^{o{z>)7I@XrG^m&Ie3P@%M8LGy_sbKpla| z7OdPd$?#rh7gD;jb4$u9bianAQWMjSY0SuU8{Y1xXXsK{P+AkLMA9O3=Kg9)C~%@< zwvHxPVST)>0kr^ZF&c40Fvt2CwA+ISx==-I-HH4NQ%6zvA%3kd@vE{+21#~K5aA6g zJcz-&EoQW;R}prC+cL*5C|@ z^t+%AiAjA#z?xEpa*mP7Cp2M3AbAwI6QQ#uM@_p-11D;U0o;vujv3zDQ$tI}6 z=(IpIlXRuoUh@NCD{SgO{{;1v(zW>ymTMm)C*-HU2Ho5!t$knf->_JDR#5xdD732d z@`0+w_E)st%!QHXS7EQ4P0U?jOj_-iz2hbG$xC18iIsV}mviKe?OE|i$?!^Rn8Bv% zNd#f3rnT!OL8iFCC5jox z&5;wTU5T=pOWX~78*c(>GWaV*FDSEE$YC`fwEhx9&Ui6Hyd%t#17Nk=l>Y4FIOXx6 z3m0a^SXjE!F?x^aoUIz20X;k8;@^aO)MPpIkrh*Kxp;{GNxOn5+LAOo`8A!SS6K zf2M46&GiK7C2Q`Z%}Qi@SeTpHg=@AYdq#UE_g_*eDm@ho;tHWHPc*j^B;0?@*M&zA zEN7#s-y!Rj6g24r$Ry?2BJ88|+@KCIGC!P>Db7;?_;m(z1MM0zY_*f{#W!<90^O#i zTlq~a)juI3gB`b=x2KbSO&(!5mP*#*tq=hd zJy&B>glha392-cz4D$8UlvgrT)YD!k@0}jja@~F65-6VZR+v zUxj>(L5`T@$MgsUa)4YvIrtxNy#88$CH+LZ3eC{QtM3G=<&`{mDfHojYt&37CFrI+pq^krE-g~?vp_3ymj|}lCe2I@mD6Hw2awJR$4Z6 zLPFkZ{fooRIyD+BLR?jj07N`qKj(eIK-aq!2w!H1UfwUNN6ELp zz%03V+T?gA*9Mh#L_*nHGy#UN~=>$l)y|EY<4SEQIPRJBA`uI-_qn(h=mNk7e?t5FPXmrWpy>+DrBHXr$ z4`a+shtg%}v)`G#7~fHR&3Z&zA^--_)=$~J7jZqtLxgo@N{2W_{cxKZ(x^X8O<0RB zzcBD5d2gf)LA>x^$?HH}Up5lLPH5!yOYht0Y9n(tBZ=vfWZm1CHKLj7!5>ob zmIK@Jk_{!ejR642$p?pGZGt5mihKLf9*fUVbv?fDcY0{Eu35_3MWCNM5fkdnD);T1`BZxgSA=jeRW2 zyNp+gPA~gf@SW!5&QgQMbnk^y@sF2D$sMc`8GKZf92rnavC`R$;pU~ck-$UjXh2`B zd9B&F>kt6twcsXKgr|T26kOFajRsSB$ zLxS&l)$sU4#H`2zGuMuqPns7S{&mI$M}GX4^^#lY@$C;$w4aYiZIJ$hq(&(kDnObm z6C;cD(j#$*2kyY%-BbE9E}lbcu;|0Fb`f$55s6M$r+%_A3b5Xt<1<=R`0j<2k1N&o z?<)S*_kkKPp z2Z!TYxN6bK6Y<={Br<3|#)bvLP**d>9tj50N?Z@qgbhZ_5?lAKD#ES&6h;HaFPJ(5 ztB5tV_{jRpW_UA&BOG)!Yhuz;+yh#AXLIINTff*fvrrA1E^j_$fy>;ZZpx09n)ptQ zNGv2uDla@ajv$RW`&OL9(t=y6Oizp#SgeavrCEDLp ztnK_e(u`O7OmHw)QmWBcjdI>%`jB7-wO_5OW@3gMLq4mf_8z61!b`Tl)8ftg z%Xd%0NGl<*ho?*fX%p#%v{BbyoK50)3?f5nhwUP!z*cZi1YB-tN%eU$Up%w1qB>yR zCciFindpq>r+<+{RUFG`WB}C*?nAPp>u%fYtBWkuS^I!Ym)SAwokNW4?BbPp#@rp9 z&D}jU_Yn9_>~{@9uM|XA#N3@5+CEArQ*Q<{MlHYFBkcB^Er(WaonM{QXOgk7mEaqV zl*WcIYCbchWL0^8q1fv4=}xTmAGcOREz8RMg}DSbu}K_raK?ZE#DsHe4@Rv?kOiPF zp7dMMeQTm$yE`!Xpq`zn*sy1rHs*|W)lB+p7}t3cctmqQrUtd8+zX`1u?kimUx0&e zy$;U-5d#!_EH+*B&)@33Jcbcc+(%myO!)fElue%-M z!ZxRS(z$Dl=fs})y8!#ORRE;d(I>LZ<}M+%6~xGRm4#xA$e0IgGcD~eFs;@&@cSB$ zLED5chpumVA)%<({x#JKUCXR0z^jX~$99P>$f+9}fPNy~zzZnZNQe=}VlvZU!DaHe z4oPu5a;s;0Dv+3!vH5FvXf<~l#W5P$invH4G+~HWsA{hKGW!A9ZRez*+fvk{^TecNl8?HjoDKDjl4g~u3%#txPHzM+j#=$>cUBy zVwN8vk~~l+QG&dyHBcb=5NyCFC;-?8SC&Q(GiaCm8tJe4L9ur_TH97~K)r1#623il z>*Sy!4;s)ifZzJMQz$P$ULKiw?#WTs8%N!S>PB)0VlKHTqgxWoSTyg^k@{RrH{}S* z%BuD(cX)};EP5l7jy&9@uS;~n3iWHC{$&sy%BNme2W27LIx`ira-X3-I-$pq7`$BKZA3<*)%rS;~o}@I&o)!L6L04``9w7EsZwH##qOBUjC=HKey&ruQ-gdalJ za^=Q1nL;t&7cv0sq(DBf=iNeO>~Sp4OVJ*0@repWLS=uuHkFAPvNxg1@4)BPJdrGM zeQHlSkLnnI_amo`F0K;iN~UfrJ5Z&5G%f`Joa3HIo#&ZiLwDf8U>F=-eui@XGFL3QBVy0* zW5K}-5qsWtJTDr~>;0sg(Mia}PAt2yK}bVwg!$cDjR=!s+7Iq)!*U%?=Iro6M!c-# zRwPMrcIe>8f}kHoC@S@iJv!OPf`}Swkbq54{@iKrk6kp=scY6ufy&X&JYZAG+(AfD zWah9fVaj6855dRu_#QU0qdlhN1Zb-+0b}I=Wkx5FIf6K)hJ%OHkF7pyt8we~12j2n zEOY|m)JeYqWem`h-}wf8NVNz8BXqANuHg0=crn48S|+?tX~(b^r*caS2HG%tv!J>; z-^L9Z7o8b)F8Mi&B}URvW7=HSNs!XMaC}uYA*!>wnmKfSJ0C}-XTIQ(^2kWWpJv?U z_O-P^7Lb+mS~3KTD*x!X=fZ3Vw_8*j4|Om_8%PrJG7`zgXIv8PkL?BbjvxO?c}+in^Q9`zg$8*Q5nnzvI4>@4+-HXMBc4R<~QnX+r!}@=R4#yYTQ?wX=?Nh;XLd9=UB#t&LMbb&%_58KDIpg z>v({Zp{U7Nu1@QZt@5TmT&2Idsnyr@k@ku}oW;DC63_?kUlYJq%JBt%Ii^wk8~HTTpH5sQpJat}seajW zPKhETCx9{wH*TLLxe`ZhN_;jPX_0=+bDK!L`}pra4JPG5;VNSLtTJ3JD<#u~PvoOtQGa_>gTe{Eupr|!H;iIM)i z9UF6*)Mhv}`s2LeD)=oGjpJ78b6+}4yCp z;t28J^72$Qi@l>mPc8QXs`T&!YVJ5woA0DN?B5$y!XNR&gy;u?NPdY*(jR1CiHU7? zo$SUn{}OPMgw(GDo98ud(VVsIY(pc@sK7O6-(f0b{}JG)ivh#EYvEi_P^ZXj`@FS0 zK$W@jDmM{&FRJPQhhsuPeAByX!m(yazXXfV{cbt2)&Gd|)et9eE3*C)-ynNgFF$h9 z`|!yoe~*6LNXK!Xi~JWcyIMd;Y`FCCIN|sATLt^!e`4) zqiS@)r8hi7HS~c8NkBWQdgiew_^rfvFk#wEgJ}2l(}(MK$p_2a(yf0FtOSrD4%9ZH z40Q+HUD8>ItVhiq?s>*Abol4IYGfS(M)X=0alscP2_T@(qjZ+cp|+ESybam%Xu~(n zUYTATMqKEp>V~r>=WN2DlqTjBu6d;HTZs&wH9ps9fJmER>OCH#iJJY&tdl4Nh&C_E z&Afkbf>aS=yY-{bMmnS20Mh5|aMi>9p7h}eop!zTHi7a|r%Z2q2^IK4%gI)sPyA6G zLtAlpC!?&AzH^yN#AYLC&`nWJA4mHYxW2|C>PBocj47j3vTLX-Q47YgE-bRH&dfHT z*KZ(QMpI~!QNvL{eZ63Rl}laziQ z)U%?74Oi1m4FCl$K{#Xj(S*rH(pR58(UzcIJK)2te)&Nv5(9J7W;$|0P-5x>>QKZa z$2swLL9AiS(iH?QO&XPr_gb07cO?mavZ)n5DrhB_Fhs)}5G}&?i}%|m?>|eWAA~*K zKNaWTWQ7w=%=^TYPQ<_hv>33aR})UQZ}3o2+|yZj!H&VU=sq6;6vGpQWQ&P~tOnx1y;^_FSk8YmLii zl8mCRxWnAoF<&~Wy`b-UYt&i7Nf&!8UbFJ~BH67Skxv=JC*?XYyG3u_?!`cucc%(O z4C(Oe&MZC{*I#O0<&4+)jJUA{F4I1$odhS&ud^&UnlN(-g$cDXi8k_oqUFV0r=e|) zJEDttTCb#|VWIfdzADW`t1hl999zI0^$lL58{H=LPvrAo9M{)@IdVP^HkArXN?LQ6 zTLIOznZ2<@Q7S4{;VhPvP_IF@WRztQ!i(PmKYGn+MkvX;K6Kt7)J}~N1~i3BicClA zUI`0W9&nBO8$mr(cHruwyun&`9etL4hNoD394tEeO%)TRS@2fNn8;uyg!knQLN^ve zZNIkvGv~6{7aAo?EXyKy!ex&@v z!iYCtv*nX(KB{xe53%L(9AWGPFSA_lFYaXo+MGC}OE2dTN~ilNzPrV}6L~T%nrh68 zNp1`?1J;!^MRu%JKV*_D;&o`rxpBkCYww)u+Cv0-JJfZQKt$0nQ|(g1we+>&RSifs zx&1~0ElxKcaUvs?K|99_FWdEf&mi0{Riw*FEnjSrR~YlFc(%8~FA#>?;;~U`2k7_Dk#WY zSM4;9?%-0hOqVR~d*HpKfU?g&Ycq7`3{qJ&X-SSisJuUqFxV2E<+7u^-$uKxxTl|@7WIn7c2p=Il>V29#jO)8Wv?~Qc9vn#z96pNLgW5t*(cs?yNfCUcohoUJd1V zP3Ko)PJ_%Z-tCl!ibJi(^YhHkB)fO27&KPPhuNAyGLU4MBW8H+bt-3)j>GCO3YlcS z&T%)j!gwNxq&I}_n$(ciz=wu@zX+RzBr@1micoE*|tSkcz)bIhL^T9}eaz^GKQRLtB)-+d45VDUH2;xG? z*TQS618*?NSFp#*U`tUEQNBPhi;7LcLy36|uJXgO-osQQ$DqGTF)a%$3^WTPK_u7+ zmX0?EOXBH&YD`cJOlhWPHj9|qj0KK|BYhh0fdzU{^Xp_XDr3UK)(RuP!M9v!)eC16lWRDl_e_E3{E-m?(vKXiT2m7zWcS(2_y&R&mWD8FGy0HY~A{89i6UJvh3lW_fsMY6b$kc zVWtTMs3-#%MwlyCgmA|{@{ihJUk>_u;G_CT^0pDnVPK0F<(;kyeeQp*dh zN6E5xe0m8R=2~!C2=el@JL7SgUwMS+fG>Uzq!4Jde5?N>WZf+MqoE(frwENF$gAG3tHR%p0hk6`vH&|*&MH31@B@uZo%I2qwd?cb@H3~119 zeijRUG-f>><=vt(X~z%$T{-7+O}r`Dm+|XQO`nY^nLKF>(d*eloIWCrYRM zDIN11HAoZIvk$$&#OJ!W*?;yI{^eIci~a4dvif=9MYih|eetA(nMzUq$6tWslQ~&E z&gq$(R&UUUUe4~6z(kULt63NEap@1_GW@r=gbr*uSuz4^a5AOi6TqVZA z9_0zKvhI3{)k@;m{l-?zm7dX{5E;v3M*l*L5*&iF`uo#Kg8eJ1iOL~0jnZhgul)YY z(}L zhFkn4!DzDiZf*V0TI4);Jplryg7|o6Y7z7R6+NP&ir+V^>zoE=>JYHBssioiG$^^X zX`3tW^vqaCy;cyMSs{+W2EOulDG_61w+7WtJ6pGBVXAOpksrdMQzgzdsp5hB>N#V< z=~38nE}i4Zm|FRbfCX3&Fuzb8eHF8e}I ze>Vspb^npK`T34eEbWKTq%W`b4%&P8xtUJN2GQgwu+;{1OhT8&!xSFi&TMmXmMFWa z<__>JR!6w{edx1)OByj+5~6TVy8PluT`l9-)B{Xb&~Q8>4Fte--a_X417OhCeVyTB z4aOtoUh$7(b9tq?ynC?=%v-6s?1rodJ)A-KU-EXYQ;KlDRmUPKeoI2OAV5l2IAg`K zTez^2`SzS6ccVWKI>j~e<6E&dPZ#m56Oe!7uEBiqxbiZDY0_u2Nl{Ea=-fQ1hv)U4 zlpi@Vn+lK$O-^%dI>-(R&<9h*3c}ns1{Y?2JkpE&8|GLtT zq7Kh*z>2)ZL2a`%775x%(igG}WVJ<9kU0{tE%p9jEgL*J{B0*MV}SH&z~Z1%3$sD4 ztWv?f6T%=RMZICC+&(CdyrdXMqI}VEB@`jc@Q|qpYm8nVfNfW>Z|v}o(X9F(#8kPs{OMf6)_8yA|IRh zGsd{DQ?G+`bKgpvgJxQD+~d!GL4A$%kjCnw?U=W_114hs=Tfi;6wFE^6$9x2gc&{3 zuY~?EW)Px#b@V7V`WtHB8~)`a8+Ma=;!+cWPmKQ~N7-;&wM{DJg5`VcHgCq5poX51 ziJV^X$ee2@FpQXVnO*9`F9&i<}Z%aC_jI5u2f!9tn!{G_6yx zI^e06Nc{3ON|xBu@NH4?L4XTj1c`C8<-s)AO(>_*HYi;Md8ApsRo-WmZLVG=HaY}K zl37{cK^4S75U#ReUYCY^y~XZm}c|WuG07 zwYL~+D7Iex*5%PcYL_vWH!^$(bf_#Rlz1qRh+MErswDhc2JuP-bi9W04t?Du1g9(L zEazTylPih)Adq6e8t>eA%Av6qdZ;@oE10-o1Wt2>!2jSusnC5}%!~YN*Pn5Du}~6u zhl!K|J}%rOG5!SWrfK!;kB219461#)`!m$6xvAUyRc#%g!z*(igey&&(^<|`dY@>5m_gi0*3!B*Fvd!% zZ9{`(*hL_WX-d$s$`i=Z2jnl))%NQdA-Y+bI)-%*8f zkIM3gR&W#W1?Z79S@EaFMvcQeP(7VGL5WDuC~MEVzgB#T=B3J3@%&_6ebGYQd74xSO=y6JR;Stwm)KMTEJ4@AsA33Y=i`qapPe-o{ zp}gCRP1NFH7biarrTxj|kK?S_ocYbTRgp)ed3|Li*jJ&ZlCalAVedGjqYv!^lRtg#Z78N1lXB*dn=?i$SH+B^+>7m@0`PS?Z;W2OkPmDX z5;Z#&F?UEvy@kjC!Z<1AG2IjL9NsJNIp0c&4C=OK4$>I!w#DPFMDXAZJ(VU!cz842i{1&U{1+E5L#%Q7lFSql+=oHb=o&E7b;HC3q< zKl`gcmgSIg9iL#{#|Gq_W@6b;z0>7bDf+6k8A!9G@lX0QJ>O%mvva?KljPXG|B@Z= zr%O>6-eO}rbvYF1eWv zgrOJIK+gGkM;&Li&sO0YFT>@P?O=HJr&4a*+ns$~d2EoIfqAIO#R1zio; z$`lAmY&CBlp%fDyOu+dk9Av|l{YzZXG8!~Q;bMkn7PxJh$*yMyQnOMS_5^f-{TS6@ z;u5?%@#Ffe4!-ciH`D#5axyf?hJ%=BlDhG{*eDUNA=W1qBn;yk%pGDYV~`IQbMuvA z46)|AS)i+#sNs24qM4^`Z0jDWfKo@gAfh)$4Haa8Q`vX!iPN$55MtV~E`b0!mYu_h z&m$FXs>Z(n{EIpORpG$)fG6rrRnR)YTn;U&(Y#POG0W)jH_&F*{M(JF@U{B&CqVX@ zOKXoT5(lt^2c|C1?c;83yQlHj57=0s;o;LjN#1vSZF~|wAsV-m!v>FO9ix#5F?I(e z%neHXCP%!u!cDfZ>ILM`uPIB5VP4bn#q1WP2MzVIdP&llC$oDiyLp*lcxLq+8aM1L1)ta~P z2WL@hS}{3G{`p;jKd>r8M#LrF1Fe)sh5JU`17i%5^{E+H3GAU{a~g5e!nETLJt3*} zp0n{1)R?VUtrT&*5p^nx*J#6^gENpbBi1U}_#XeNnM}hVtr>|}HDkVT8rd}%fU_Iv5j*)bv_cbPcjWV&* z^BG$`-zmfjc*qS{f-vq9Ysn@M$bDe`FalrkJvWqCF|_tIR4b6Pb(ZQG0XFCBtL2tP zg%QDy{|bK1_s-4Kl!5{;8cLxSPBKN&px^P(#Kh2Rm}E*cwZoDWrPiY;Ed^w8#hh5O zGjK!Smkcn+E)+?$9pJFE2CR<5!#Lanhdb?Rejb>(@U1o=S@a zsUI6}02$JPkv(e)N3tl&#It6pzGCt#{72j4D6)O1sN%@UHDyTO)^W!;tGO3An~vn6 z+y%`a(0Md&Ih=j}bp4$;q!i*YJ(Vt%{AOr-KQfhrI_78THTJ#OQMPD3!l?XwJ zahNJ?mB@n`enZK26_z-EmI|4bYgm;S17SNLE-^Cjw(b`)|2N_Qiy?l=#I|T!@wLNs zJ@V=;y%qfvDY6NRH6rsOMa*ZXwL>{|^HL>vSl)+#_VL_R?vgoedPo2!HFwGWuPDc- zHKus!XZjT7wZ$2#e9~E(S(50xjKBt&_lxKYg;UUXB_rX8wKXUcEs40$!@c;#f7S1Cfwl)il{O>AN z3Ipz;RmPN)SV6CozAJfjG`J+$anEE3DZWbIEdUFi{xjW&Do94#ddbS!foCHP@CW7< ze*5!rXnXug6JpvP^Nse6+}^4)u$@uM85~U6z@)op=BQS9ktoXN9Jb>6*~HYbDe1uW}?$!7={b+(<2#3pNrdTZEoLZ|Xj zYa?f?{;nqhs*&5)GieAjHw1Vdoj_9$tfI>3rn$3`UyC}=V)%EdK>PHrBttB-!3NYh zaHC8j8yZ%&i67yTiCW+aadS@;^BtB~=K$x#%VuIX8~}>g{xd2t)Q^Vhqu$H@20BQX zxmCnQR?fg*6#38<)A38<(ALA4*HtB81Vy*?V>9i9JwbQ2S}T?B)jtiHm4r&g9}*Je zx;Jw!oBJJO8;=K8`epk$SpQX214nUc6o9HQJjukjH-^^IK?Lh~N1B5);-UQWV7^Ee zv|LxnX%egJ#cd$A*q;Bd94-(3m(k}4RsFmQfP&^Ryedm1B>g=~1(8w-k>-GgjPh5k zR1E58I}x`Gsu8{_*$vK(r2>fUhmKu>C{Vwn7Pom-Lx+dZevQ2eP_mk1aU8D#(xvnM zO(aGCW(Bp`n`|G9Vfo-A7nhGRhO1a{;m(}LK2eUCw2b(TVoNFl zd??5I#{P4VzS)c)i#JB9^S_S^vr~&D|2HrFyEK115Tl`1{&;*Bdj9wH`d^AqVz)N{ zvQ-)KL-M`z`@ff35+U0Hs=5f~Ln^+e+uLTt-d3s1j_CoAhR3$Eg@;YuwSc0vsi8R5 zDNraFTzrtRPvf4E5N|1v+MLlEJ?vK5m@(0uU6oR@H6K;Cs+35Zfncx!i#y0I{k#(R zP4*uDxv867H;|8g_FzR{>R_&rP>6?{Q*-Mu`o3*cctE2{D-bh)X(~`|Cr*HW%h1@o z$aGZtSrS~MU+oBdS+D)@Le4}%AiW|Ps|=oz}H79!E@S`-~2 zQ9(&LE9Q%(NPwDcfzbwVrGgwKNM9J)(#6lI`cPO>UN3F;xu4zPb+IT?^uG9cV{?;y z!$8Q95ly%x5Mbs8Ni(r_JLmkf*3WE}o2Ex0#q1IL)NC)^EctqQdMrhpCG|YvxorW@ zFL~pNddQOp(X%-3A#rDJCVy4B6dfid|2-@^VP+HrW=xx}5wVSIU^vVdN8-*L-@*2m zl)PRy>zVp6dW{_}3RZQj5w=H=Gw6-ZI1QJk200_QB* zF1d~j#p4!JBQy7QKdp`_d09j)yO3^Mx()qSg)(in&>hkJLr;C|k%vA8c5;>-S*|qZ zfz8IKM#*YVk@x-b;+3&VBK5Hse`3jqOxM{oju>&mJd@IjKFSIaPOaKW(kx}u*V2A1 zss}Csh0}Pwz&6GQ=uEbsy}l2*cZ31zp96w30_#zW9v*+Lm5D4xP7=lA^w)m`2FtFG$jKhNuc*RoPFQUC-506-f40X%O2v?RfnW&nV^ zJb(!R0K5PoBH#j$;3Wk32M}rrK>nu;0KA3&0su(a2>+ut8}Yx_A`xXH{kx3&_rd2A z0Kbxjy^FoGg}nnc7u!1k|9csEtodBE{ zNVrHuNC-3lL>vSp9E9gy02N#!6oh~1pJwnc1Vkic6jZbqFVQjJ57fPei;jeZh>V1S z^7l0eKJa<~G7bvv8x9FnJmoKFG>-V30kJtRXx~?N5vWW;fLumSfiKYsiHJ!^>E6;a zFfwuT@bd8s2!8k|DFu?2kyTYw*U;3`)-g6QH8Z!cv~qTFb#n)Mcm{n94haqW79JP> zBOx&|E1agrWX!eFGOTyBxJO|dLbaX|5Y3Z8RZQJDz1bw z+80MW8qRg5XN76^>2EHGeLm!fHy{k|Gj#N_VV9# z|K-B-3fwF?pBDj`NCt% zvmef!HF(KpAd?6dE&%n~wo-98U>zIpbZwEfnoYby6HfLud~# z+@@~q#|A8slh}d7!jvj`o4l*o$&F}k9OvuMQLVh_Ke?^f(dQURnam!*`q1$NwI2}< z^1Uu30!U(01@HUt8y9;qBlpl6$35K%hGU2=Iv^=x0hAzlEz9AOT+T0a^_HJll$!}b zfOjWNKH$Y@$^zYc{*?mveN&BEM&O~4{(@)6(TAdvQM%vF(s8dKzc?)21L^{Z_1hGD ztVRjG6}dbE_>t8xoH1hufo#9RQev;G_+7?!fab_9G=&3o-VN(9xZorZWFU&Il`${F zS;dd)aL!TOXmsN{K2-1Mq^ zZKV^SzUD+zAB?R1#`Yvf{o_%hm{2-qH2~oVN`*Dix#ft@s1ey@G8Ji0pJ%PlQq~}R z93fm9(W6qT60bKY-(XTPuW%zoveN|mDuI^zO8}P_(yns?{DT|{>I9>GF0~051&r9NB?OrxU2hmfT z->F?Xiog0_2GkW_3B@dKTOTNc3ezU8ZRuR>jAUCa6sxrDxr93v(W{ZG>0Ca zr=P|+_%za!M`M%EhBIWNPY*hibyrF3mNxyfDB8K<03lz!>k^2J)A^^G zt{o;(THE#82!D5DDz<-`0*crSz~$Rgl z*!1-qk~0N3ud*qaw$r6Gn60fKjS$#so@31 zM(1VO%%+O|0H|B1*wLJ~k7H-Fi&tKt{0S|+n5RrI3kNWq+&V9YGa$C&>b1tRKs;n) z!j{0IM(Y%R28M$Mc#Pmx|D{=quY{nUDi`Y#3nbexF`7CkwT||#YO92vHDCPEncicSZvgD3WCY6wPfZ;AiHMZtng$R6sRYLgx zVR0pMzx0NJE3(hYyZ~uIaoOqQk*?(TW@VF?*@&h3a?bc)%0J(KAW~;;r5}<;-VT~@ z4zG~};44c4G{faW8xsZIEa2LnZ!cq~#9lbgy4_!u;wy{4)@z084${?%dY9zq>jv7< zW)J=*c}id+WGLvLqc$<;7wPw!ZiL$u+%UzSCm!KTy6B9$gJ|Q{^PPG>B9hvLkYfF35QeMR~~y4 z#=-Z(7n7ts+fRg0slsA!9q4!nTLs1+i~3aj#HtPPsMD#PpVW~YE7hKv9DQ~V0?a6mB<{diS6rYAAr zdxC(j07VtZK~HnW^w#`WUb1R0XthxB)ORZNQ8A-`tLgCbp|Yo1LYpQqYv1RMB##=+ zSG^5!Bw&2NsYjv9Q&7A0PVGvT+}ofmS*C^s+WRkUD3O_(@lgY2Tv;vC?(JN9p)uZ8 z-e?7&%4JKw#mw}01V7gBm!`iOsN)?bwuNJJIvr9>(cE4jYrt&iK1pg#;h7UT)80 zs(#PS_p6rhxX+(%Tha|dEx!9)oP=c5Za&3Z9;#8k!A!<{g3&`-8E!u^y1issM*H!N z=lGlZ66b-T0nyoo#4jb9eedye)9lTyh1?gkc1IlX_c!(gqw@Kkgu&gb z(!z#YK4KCz8KeSb-U5ZU!IJ?f^0Nz;Xa=&`hn|{I4{ssnUA9CUe8KHB-ioo6Z0~tm z4HxIR3_jq`P00`?*jgrjq7M5WfoH2upUqQ{{UGs})6NEqP=oBIFWLuWPf_1XF4Sqc z3iX+@#p;q6fC7L{(PRuE)J5NXOE0)^OR7EwPF3i`nLc6o>Yx57&@F3+ac&%q5x6i{$IPbXWD-v~MZ&Kx3l|JfU;!KU-vougLES{SE0#xG;`E7&)~0UaFB#}RvgJ9D zg_8UplVYyfYaFQaXz=&e%?4-cJ_BGMZBCaY{j)<=7-*{+V}0Kze*QjAigLf7soYNx z%{=8N`=H95U9?$%f<`dO=N5mq>)Vi|;pzZQ|5>n7j^}G2arMZ&rx+f3kGDnC-GN`s zP-AdNN-+L~X00pvN7l7T3@x-Whpl|-bXCq$4mnmfuF(4P9nSB{_Y7Kgo@!@-_~zI{j&$t_eJ2bEp(q32zEQ(6H+g0+ zht<#m?5|CkEi$^pZZOm9nU57Q!7<&G-1VWoqPVlHS3+77y`)p0q1iSR75)#A{2QIr zZWWntHWocx$y6dTn`bl}e3k1iFWh{kNC>@DsnnZ)DNjrLRBHMSQi#mXmPge#B-McI z?Gd@-hM7^MClSodjKt9agY*F~&E71`CteFtsy66Y%*F|y2GnPEFQSh5o@c^Ve&j7i zHC}1!o()sWP2{NvS5T~>-MBrPsTD-cFfY!}+5f2OkkFW6VR2_3vHEq+ zlsdxYh9UN+b|%W?z%rp9%-)rMkg}2yF3*BR(Jby1I;^+Ehz{?PB86qlUe>qInvG}_ z42)jun)E6KT^eUf97Ng&*H`~}Fo887;?)b4qrIZFx1kV`9<);g-aM&K9&`{4M6@~y z(?hODU8BT4xsjgM>P0Xc;h!`F%;1Q088vk+md@-2Tneiv8#`((p0N~?s+qnRlV=w5 zMYp@~Y-z}yx~JsB{_N1`O~+n2&U)?%Fx`Hl5ljYwV z3c|LthV{AeWnm*Fs>Q(!)sdt|Lv8q?OhIH5SECzdpFcH%|I2kp@d$1oKUpS>QkRy7 zxJ8vNph|x6;vdnkP7H{ij72#(O6KSQ5&>ba=^{XGDNmWbJH-a;u2iHys*po3Uc$a2 zff;;fE165IUeGP5r3-)SpdY~pjF0m;v_KrC+FJ}S7s=Pe{lF636);>e$MljqTKrHT z8-p7zQ?5T&hQw2?y0w>dd48(aaJ*3H=MgPL05KpF4bBz2@<39;)h@~HTvt{L7_OEe zq>DBYEh!t0LxAd#jSwF{&;}3;XR6WZzj0i}T{W@z4KQxNln^lZ3Kb``fP<(1R4S`c z!2e0AQf|Qiy{8B*?w)?A5osK_+tbw+1WFgksMb~ayx3MkzEo9yPm?`{58!kH-xMk# zNNQMXt)2>X>yAW`05IJ)!swYNGMPpJ2f9S5F0qb`%hx%r@&U4can(j$>3&JF%g9FF?S=@KKGV+aFayk@6C7 z$WStBO|~)smh*_sqeh5c=0M)@#OniS=fROJQs!6VItr$`f_x3f*4QT!{H@mq(uEm43fCX2QNj9TAXdgu5PoJCmKMkv(Kl*<< ztQr=8&1g@Y=oxiuIq9-3j$XaM<6Ad2r{4H^VQ0Af2a*Ijr&B_|zp5mmQy6X=6*5U2 z3OWAE7({E;Ey|6;H@y;A47TjnwGzlsQ70!H=l{!w#*mHuJoz}2TdL?zQ2Tv=+R5B0 zqD}@0kf|s!Rd&e_hi+Ixm(KvPa&P652PsJC0EOq4?A(KDfrTN~Wm-nO?y}XpMFVgk zSn*B5wr2RCg5XB}ozL1&QF^NdjJ~nn3aM`AagG`n;GDob#xJqy%?CCg z$5aU1JAdW73BDBjN=Y$M`05*b-NDJi2XgXc+c&XGBEGQ7iN+5YQVAqm*4$}RoV(!; zbrmOU%?qNbSJhBqWj_Vh70LyQA@4D4OS!z42289*m*Z1{vLz4|K1r&iT+wjqOR(GyMS`CprfB zFh*`)>R-^%m@9rBTad!{(Jx;LwFe3h+?;+TtX5YXn7L}aG0@~kUPl^r6hn3Gz|ubQ z!}q4B;7jxK*nG4)m&0b=Ln^u#s$+i zM46h>QGWca{3AqzHgg~xl0gQ7jjum~`c_{<=tI^6*Lq2hn}cJ**v!A#l(7^BzW9Nm z>h(!+H_h<;{v_=P~Q9#!Y(OxU%9nB zOk(31KzMY>(}4$Ts>wfaJN)i3ZNLF$ohTaWL6-a!*DkHjA_GL)r^5DjE(XV)X+a7j z%E~X-@b*<`R&{k-jS}0lt)UR8ty8Z{0jg0 zB*`bKeV3!mGHtO8Uj|x)jqn=>j-YZPP%pz$AV-FCbx~XcYuN1Nmz6{o`x7il7ANL@ z=8Txv4HBY0Y3(jw;>zO$s3W23PQp@e!B(#%W$H_~w}#HZ{VUXoQ8(@jWJ-nU$~^;k zx~q=A9NJFHOP>J*R|c{JWDtc_R-{e)K0j28&aNEG)aVpfQ=7sY2gM>?61$Jaxs2a2 zsR8VtnGd3|6%w{OUieZSJ|RtAWoY)zyWOL-$Jj_z25QKSafRDt10TH3mfsr$#!q*>h%6h{mvhS3gZfjQ_#*ITDvlgH6 znFbOX-p212yq&sbX2zS4?z-NEZ)VFHQxfC>gBe2=GeAUCC-~%VcjQiOA82A;D59eA zW`&t&d&^B+iG`0l7wxCchh4SFo=z)I*%^#&l6_2H>cPQC-hN+oCTjG~sP~4a-&+}` z3@th8H^6S6nWFlZD)r;$%LX%L0!vj@wBg&Uu6Kf5A6pbADuzRqh&5Mv>+7%I6_n>Q zB6FAkm5V+qv;qJFJnsN5Tg1lxVz&MTqV^=Xlzs`AIAsM5$?BJz&zs7nb zoej|8JYGe^$?;yE`*d!xW{+RY!tWK>lmGaM8fkq*`nxoP&2`<(4SC=_AHgB~5^ z&)him#OuvIcQwk~bH^9Pa#m6IBc)t)oT)h}$daQ8jggkwRNbEi$v8IXfJ0BhZF=de z@it%LlhJ3~PD-xyNJ{I`tMNdwm%@@R4U3h*+zri|+QP8Ugy)H>=`}soX@ySK<60v@ zxI4n~q(8Q&=Qvd~Yihg~&vxDAUZzhf2cv)gq25ksZdWSLE27Y9cZ3Npz?Vo4>1 zWInMW47;FZJp(j-{mN#olp+@+8#JeV`%8j(7zXnf&*$wTYfh%Gp6WIizdjMbKozio zO~XjnG;1Mt9MR1En5RZEGJ9aZziEM4m#G?Zv|@3E&7ol(Rt@@rWgg71r-pq{w3v0d zp$N7NKQV`v!HTNr(f9c3syKRnQ-`H##sa zL|;#qw~B4F5W75zPPz@)<8FYQWVUNKc9P>pJb>{!^-0RBO9dmcLzU@hDv|G`_dQMq z4mAA63p`TBapni;q?i*U-NKh7P2F2lWvm`?_II>jk>k0V+?EV`i1E3bPUWaHkkfOP|KlVaJ6J1=u zE)WiYB&kxak$7~b4uzInn!*J0_7G-D9i+D@y_8T=87l1i4A>ygfIydTSI+=^{qm3u zn<(HsCo}PuI?3>7ym4_pa^^R-JsC;U{pPy%mi&byjcUCQ zD94P#jw=#$wTHhji{cp7O`_V=f4uhGtOFfA`Ebc|<3)U3rfbFxFGbnrYTa)M{k}x} zD}jWX^5y-C$AIj3Xm2}3<6K&g!(pP6RWVMZH9;nq%Nu0I@4aMT@eu@|F%a{dQGl+6 z3ExUapqsUzBk7h*4c;X$t?lVXa>DxyqWjpumq_Ktu=rlM=?n7|!D_U>cm3Vb*Yujm z%an3rqgR_2vGJGWv~8HU3sscA5-hphUh?h3(a+v9pj?lr2m3WFzONl+N?38T^hNFP zqYkadHA4hd&C*EU$<+Jh6b;Zie}{zoR=BavPTPRT3h=;dNvH2N)K*e zys06@u9o?_3SUi4Bxr|4`wb*4BxuRer(%>I%deb%eaMHA^;9>gx3N}{CnK#t_*1&m^y#>>Hr#KrKKW%;9)M&o#t|*E@N9gi`FiD@WoK8F zGC%4Vq_GCRmy$ExX>Q`Q+ZWvxIcg3(Wd8OxgnE6cDk_3eISv6CZ^l{wwfE487KB5M zfHWE>HBMinIME_EyQwky?}Cf;uLT#nkEUbBk{NErA4@Rvni!GuokyV(HQa%mk#kEl zHT25ke7a*LES8g*t~Dx4(&%4n}!{kh(6 z@-i!}W0ipzalx6Q&5xQ&;-6pq?%MUIkR;Hq$knZ_VY*)-=|Y#?kVa#j`1``VhkN)e z*QjldKIdYQ=)@WfRS9L1<{!6%dv9iUsDoq3pI@HUf_KSknPPW`~Ga(~f!+wlWO&sb|! zb;2IS{GixiTCIx8Jd)7+aQU(mEVD`LX>nrSKKczE*=eByO)OzSbt7H-jjbd>#o+Zvgo<&`wUC!y~7T= z^r(9V;2O|H1vg2?nQPc^N8;c!1&)mL0!m);1Z-uI=z*>8xnw47Bx9SVtCj9gk{004)XI8Sx@~dU$441dIhC?fV9&I~L zMz%s7Y)J;hbP}hMjN9hnP`6}?Sjo6F#8YmuWn1Jq1Z&s3lJlTfWLEI5nXJUM+^$XB z`I4xB<1C(z!--8^JM@UWK=!4kDv&YwlIyKHEiCV2Z@W=WrZ;2r(;-xqkk!&CV&!4D z-~V^e99_IfK;rymysobM+xdAUUqok|ysM0=Vf1?JSVD?~8?5NQ3 z(IPkU8IV4o>4t)@JOG1FGsWpd8 z5gY-}Su8}${vcgchId%NeZjStY)hSYh~NRqmYQe4*ADsCIogJ{@V%j$>D~s3pV4oP z@W=6KF}QY6cT#s6;;y5lUwL|=S1UUULrMQMI`v-nNsjv zxrvEykdlbiM(Io!9Wl%#G0D&kzLc>#y=t%>+g!U&fW&;8KBhviJu&QS{t;x_ykyzn zHixi;pyPG0Ax#tJ>W(>r>Q>5uZZg-3asScEfVw$L9+psOsUtixj#BH1?5w978Ax+M zmtGd2DJGy!Pvu-88lk2}{wlA7GHdT)Tl4oCt|-UC+999L=Xo|4Y|KBag9WXNI>L*q zZN)t?f&+5VbRHiaaB)2*g~z#=q9~{7^wkFmPUvnd9ClpQJ(p8l2?%CKnPM~-N)79h z)+M%LLNwZmAmuj^aNw^9HESqb_^4woq?>%{WgX%~@J5<@|70gohWzVC&WsUp^7Of^ z<538+Jj~0!$XjBjR>&5w*MI?iZ2=Ovw%`fw3Yi#Mur%Yx)fc+(fjx zZ;EgY7~KOi^DwaWTuF{n2_?anVzT z=MlU68SwI?|5n&*lbKa;2cgH$Y>A`2?aLu1?+*6;Q%djMINT;JDD3+UXyMqcCj+TR zqn?tgG31XPIQ;OM(O!57yoc9aKQ~VD^^5^KdBBNRTo^mEpziUfx6i$Vq@}aR`Y@~J z#%bjA?e*MEgPQ|yYad|o{Nss(QN57jP!2If&XKrPePa;+jFtEP8Gz(Vv@xjK`{-6r zlkSsFewA3fwA@^CufQiJi4Q^+$3>(@niQwnyL@2Y_9Lr?jYIE2Fl$s3$aqgBZLjZ} zuE*uO{FJBBTH|NHr~ac5)$cukd-x2x2WdTMLLL*dvL6&+5w7KyItBHG#fLg(K?O^e zLpI!C;a!P0e4Gtw4s%f4f#JoIRvh`ql)9{Mo_+zr4c%F2hH!8X70y}|rG~nP?_^HP z@^NnGDDq?;Lf+>~eX?pvCR`i+qDwNad3ef7XZ8#j8s33ro@#bI15}4iGp2i`)Pbon z(gP`tO--^(bj;cYr>uI9#8AITZ|3z^hH2zXB>pgvpPJF5mtf#^ zBF`m;R#=MCO&+&OWUqj{3a#FOT&*367+F;Oe{UVW5Usm-3WiYP7177|avjCN_Ii1x zFLZr!kOifZ9h|R)2;Oo#yc0ga7;?Z`2lI)UG}^s+Om9U_BEfP=PBzbq9pi_5|w77OQSdlK$E92eQ|E)d@#yZZ zzs1Wl3cYR6r%I{B+SngsDpW+@ zlN-ZwK4SMDdP0V!;NY%QWbcF!GVE#U%KK@kl!UFDP-={yG6u^00X7e@?$Sx>ZER;Y zI2zAoajs7)K5)aZ_PZ!~%zF1RE>Bikjidgg*BHL)`-OLqbihplt3IjJTO3LlPxllf zXeDU1G-Aj8^%8igPe-A8eeG*1=EUKm z?b2i5@`&w{rxnq#&u&d`#QpD_XjBd0JD5$%PHU?4Ri*0YkW8$q}qaK4tTl2 zy^{?|sy+CB;Avfyf5Q@jS9wS9=i!A(Ns?!P034RVxm*0roB&*(Jo$Bpi;Xd4BL@9V zijc(ja=?beT;XtBY+Z-77jw-Nk6dirrV#V)dn82B+tFC~c4XgKn-bJwW$ z0Z8G;KPhWd?b_4r6bE9YJZl8tn!b6R09_HIEvX6LJ|B_f>QIGVPC4RlvzT$qFJH2i zPdEVjeB`II6wj^u+YvIJ0k3RNqve(lQ;)Z!^V^HvoNsXq<$oA4twVUAKPU>oQcn$u zSum6sG_IZ=g2=qDWtC*I8kfHe@07>EAYEu>PbGo&g8(cDe7754$~CaDhSU6XyDiDW za#qE$cZ}Re|4_T=SxxQr_`A`|10}D_nLvmn$tln=ay^>KOx?zgq-$KHL(om}8DLoM z(e%?4(`MFAl0id}>-LH?IQF*a+Mkz#fr7P>;q^~o#M!QtM;#29DoMnDq zy>oK=F!Fe^(7){ETFP@FRdX)~_5(@R`sm7bKyJRV1GQMoTBWiUuJhwVQqFwAqT^H= zCT3>qOt=mr^AgavQDuD;ZJFhTR+`0#GW^vU6wU!nvq&vWgk#I`2k~X!07p z)0Sc_^YW}0@4EKDEb1WHucvd5RLfUQ6Yp#bzaUhJ1I^Q^c9eC>yLJ1M?0$X1M>8c; z%la%+{1;>sY-Uzz;%ud1Q(2L^;CPG8+Hj{;^PTN>)LIuAA}5|rSCy1^3+=! zr!R*~k8}kpcLV9;gtX9EYB&SmzllxY<5)NKzo|@VRfaBY`i3VOEp7OW;2ydwYyF7= zsn>;TSD22?N`JY~_eV&HR#%sxs~+_s!rtK@Q8(4ZAg<47+l^Z)F%Qk$P5#76g!w7I zqJ7BymS@+2biBuq035MZ7%D6TCF)NNsf@x_?$GA`Jq z8Gd)xokYJ@s*-=4(nDKzL#BdZRR`6LqWz6kmfmT^pGDPl6X6a-ma>uSfF8jtjrS`3YN zF!tNjH=-cz)^1&}vpcCU2^|Zcr&%RL4=Bj^{vz}}>TKnt^D<@)CaWMvU%&4VhhA-B z`sm5jO1#R(DW${7o-> zp`l1MK2>~hZZP`AmbU;=SAP)GRv72EsdRxU%A^TXaCg19QEBWLnrsXFg!h3N+Vmk& zuR%;L@(e|E$19=9+JkU1fu89-*Q+6HJAV3$gHhRlKn5p_&n5x>^4=Gv-i)xAoI_0m zAj}I&q>A@@oY^uH_@&sgj3mOtx_b~2sgpU5C~~vbm-4}GvTg-Utr0pqmXK{lit^BG zdyfHI?3bZYccg2r&}2AVbIBM23rG7VR$`8U{mMVnpX8Q%z0FTMZSlzKEbQgp2)nD` z6&+HzZjl%Ac=}33Y5HyuvMcTYioSGx2DHz)h~*4y8SD?b*~P|vBz)3Ed!OGTaGy`U zMF8#SuZ-};ov&Scanx+AH<-QO&NInY!Bf}(KBh3TOqD=-ht1okqSYUn5ro(08C=^tLB?Nwds)TdcvbpVO)c-?|LG? zeu+;7TqMt?{CQ(@g7OWin8&%Ed3}dco2R4j>W0cL?T1}LnkaL`=G37f;pu}+fraN< zr16wX@RUmvw~y!t3p+bA54&xyPb&PKI6Z{xy42(*nvBqSUD!g|fgoShl_BZ^*jXOZ zp6klZ$0t{;M+-tO046fjeAUUSqHEh~{s~cs2`Snl|CJMzow!!r_p7P=#$v~Q>dHtHvdY)e#*wmf!A^tR zkr+#lP=%NcFg`M@G7)H}B!0j=_>!BR{<$eFe#dvqZIZeE$z6{s)2_tqQL*C%A7 z3&5thUD^8&BQ{k!@7IGp9=a(%*}W){xNSe{+jLy`X@By@OC@-F zN|r;$rq+_ zP}$@X)p*vPRELRg;jkgGn6+ZCA;xU2wU5q#CX^)~gqlS#RHpn}i_Pv7b-O{5wW-1M zI#8V$;;T>xyC{X#Y=s6sD4Nop^;%w1h-oJ3vZGr#FD)+dzygtRLi4$m&@Bp9@wXz0hSFh(vZy9p9cmQkO-?9y66mIOLkZ0L`gTTJa*It1g~wXn3UWWbs8uD)%%uIiO;3FWBz@~+C79ZAZ>}$Y>pf5cuDp(i z?QH3uA;O$i*EU>}LRmkz%=%8cUmq<<h{h**CExe0ka$ z(v)Vd{7Byh6K?__el63I>IL-W5zF8aqInxt?~^-4Z@wh6rr$wK>91eaHql z!0)fmHU{f$-6jT{QQ8)R2sXP9r*x|M7xwxw;h?{B1l#JI40~~41L%$<2kpICMVa;Q zIe2F=9Xzq@IpZIcXOhd~= zrA$Ohf)=&i4Mw#2$T_@O*(<_45Fz?)iyhy3YUR)3p;BGtl1s#kxVg!4lP|wMnj3Yg4Gdju!En|G8M(LgXQcdcX{Ji9Rvr2R8$Y{P^4bm zgeg&C80X@g0Uv(jES=ZFdn~Ru;j6FlKgV_Yy)I)9z5|`mL9II%`C`u6-*#<$ou~Gy z{%M(tk{`H265WTpTwAur#??ukZn8zcB^N^kj`#p$-b99dGcVH9dQh3?Zh7SDOOkL~ z`J=O{)A^iA%v)gM^R&wu_6ik&)m?eBe8K(`)sm09 zGaf+W6YY!5uhHHM`m_U3O-jmItHB|aUph_#JkdKf`vi*^s%}y@(7lxfgcKPkgd44Sb)Ip;j+T zKrg$rF&`z$C`VZg{UvSd5;e%$5mbBdsoq0{M4`|zn6Cm$%qhpVUqIWjxji_9*mg_0 zd{TvfhKVUEn*knFnJ}*N#CL$Yij=9!&HKU7x_6tl=g_s#<0F@9ZjAABr}w8ceaIH) zb(W(?*``(quRq2)-mLO076M}f;+K|p+bv*M5Z(SPVl#O`#V}5oYL~SY;WI#?s#e+2 ztuMJL@uWZxRD)zT+9rp(MR~PFLEB5Z7gFicfniPGb63z^(p6mkOFzxINe&0|D=ltz z(KwR80Qr;mgVAFqaH5r$)ms8?(hm|)`^c*o+!=3sR6F8W84QLf+9$5RziwC0X9o7- zPWmS=BJ3Eax!kI;wb`DZj`EXc@EaS4MKh|DWVM_+iwRhtma^Kdh7J=^y?DZ*iXt?? zfbnf)7;o~#gcxI&$P)~W+Ljo$lk(FyQ|cGgm6@lQbg?Z&GIot0%!m5ofam*3>$1Yz zg{(B@Bfc={S!Uu-1-*?j2AXpW3fPDoA9SILSNAWN#PD0qLDo989thUukvg9cpc!3t%e1>&%HZ-WHT-rD-YR@7_*>ct~ z=068+sl9v~OG^oeQT^K1Ad+bIZSaZoX4cddE1$Cp8D}EMpqHuN5JL>uZ~7;aJFc9} zup&xKs@7dlXAHpvWj5U}Y zkN_p@tAlb>w3_}xN2*}$yh4RbC4?s)ok_by8g`%zkgXRV`Bf9poW25nu>gJ>;%l=# z^YJehaKfjwANBhK>g16e$DZo{aaW-h!|m7T-tXw(u3)v->f$7Wz?)KT*CR=Qgj2&S zd+J)(Xrp{u!5s62O=YeVcY(r4E1zBcajyUw-l%l6j_={ak@eo_cpm zNN}$gOTy+=ufxl;@V^&s%ynyABIBqV{&YVFF+nAS<@@wWNqhtyx@IE0lzgdx`dbG4Q$6f7$8q6v zrtu?q70S>uPix@hoIv>Z$fE@0Es`z*rvC{%DUKJ={d0-J?|J5N%1oV!*k5bi>pNEf z%r8s9yq}U2a^ru==ndM8h_^Jx0Gjry$o6gXOR7a_|EcEhBzJ}T@*&o`UZLSKd62HuTNg+Qn{B&$(J?4uH<{A*CgE<%KTT$}0Omp`*7ap1gSfT`+R~Pp^ac*^}S+GoYf~5=L8g(2fJc^Vnpb#h{FF+{B3Zm50?mcXt2} zeYMpB#2!5!G0;+^Jmf7*f8bNq{!Cg-EXi%#nV)1G59{4IC5d862{z{$L=i9r@lMM~uCJHhXvoY~Yvx5sPRAXY$NE zpg@W4-+GnWvMp&gv`yh!;p{M>DhRTB~vTHMk|ZzmHA>oef`JR^n)R+d%QfaP--DvIxOu(^^dp zzrnT%Y(GPfV=0g9Lb&OHHQo!`c+;v(-K~Ugu{drt;;dKGr}f4}@+f?K4ALh@O3Mr= zns`R$o3mPoYfnZWcYQ=Q$BDtlor^5()KIfL)HLH40*Pi_#*tqocQVHL)lp);Xk`MR ziRD`nWaV~y63r8r1K(e9R3@{|E|YnroOC~J5N~}pV;R19ogMiQ19k9bn(_9ak1>Je z+qhB?8W-wXA`Vd~Ev)F;M$IiwY5fVYBogX=Z3q-2rtE+)ooyLZmlz(23bwVxcaH;N zK1FC%*H_QJ{qZZ7OVTE9FvdwYl+gKRqvos7!Aw@Uo2a+9GkIoDBX}C|r>8C( zjqx~Pqfcc?O>RldDs9b!+8t8~1Q-`@~Fvf255 z=(>3O9oKQJ?~>p|hdx-CVaE z3r3@($Z7?D<^exZ0NY(}bHj{jP`2YQT##3N5{%5+I_i|V&)<*T$rOPk@vq$5E>~{| zl~a@oJ!RuFX*1n5W(^cZ2g?b{?P(8KZXW!YBu!m0zj9_ukOzubQV`6>c2WoCQzl;) ztp}26sjRLbJNEOIR00qT)8w4bUUnqH|DmQ_;-lPWrT#raQ6s!-~r&=pF2D-*k9@y(zf_kduxsw{Ayjc6T11(#7 zTC76QvuW&v#3=@WaWZ$pNgR2BJw{CZ@|uMC5 z3CIW7d;8ry-?m*9YSr2IUNUZ$7zcfHD|^s@P!N)xnM`5u|tJA#1*g5!qQA6zjL z=h1=T;_3-a$nM1i>i9GO0x19mfTE}mn&=!BT9Zj5E0WaQzW>LC-;gO!6s)XydgT{2 zo+@S;#jZH(B8IrX`1K`E)LJyRoc22HHrUJ(XC@#f;YaKee$e_&bUTGK)p}M0DH+dg zQjhN&^S0@sO0q9WVip0QY}RpAgBB=KXJV$eoC( z5=H75zXG=?Yr7j}@MLicL4qMHuo^k?iC{r4y!6ZY9lsUVu4WQ9u#%`ozVNnOfdn$k z1iNbtk4Ta}A7UHT=AL>g1B(VjBl?cYET0IV4Lv9JpJprVj2rIdlXXv+jmf#!tllHi zAT*W&#JA!N#o@^}Q^^+~5=nP;Hn)mR1T!Rll0%1=5BDna+`N-KeZAkvl>$r8&unplciLBTY2w-epXtlNpb_&$L5-V+fzOzxJ|r=1Q{J%W z>5bR7oMy<*c2Z)col@y-Ra@&fYEuX0$?;F{X-yCTb$>t6DhHYFCB+V_d*M=w(ZVOg zZf1(3+q{wYecS(iqiSRzh{AgKs&Wypr)rf7)thYUCv>cZ3WG4IKg&idzS*ne%Bo3V zC=Q$Y*DNdFx?i{`_2Fx9(skf$lIFX{#Q7dxl)NccMf-Oq+^1ZFb^_E%DkwfuXbiod zA4B-~OZNLSt8`~P*H)sB^zE5h6|?%yxT|F=h*%3wOhtg#fm4g^%`PC?0@yG-J`}~& z)4ht7Q7iUp02zMN8}VLP#fq~(Tb?qB+@D|b^IGedCXgP%;+h(my-Sn~=C^TVj{(ye zWjVGDaf>#P!Qzvl&D8&Mu66DcisUB3r4YhwL0uotP*%md6@>_tkea{|M-V6f>{2?r zwU;h=RrF~165Cut=)7Fl{zT@=FK~f&X7C&o99Q`*tG3*BO>&Vr_rXx<8h_Trs7njC z5ZQ#B>O-LAEHZEX^%=`|siF(sgBOSJL+U5Q_Rlwi2PA=kBX0hjGW#Nr{C86`TuVK! z7)#64aRLaMsuMx*ltb6uaI2Esui^x10Kh(ApK%7TGDQ4_8kZBz+i|=CZ7SnV?G@ZK zU%J6f6F;{Diee}I;HWx*APt~xCD(~0^zW_s30`UKk0 z+!GxnQyMMZ#3YQ?)K2rKPbB(d(A zeei#y?L7nG?6yAc5z$+8qKqJF5WSm7qTh_(OQM%B(TOrj5WN#U34#a{z4uNKy+seA z4^akV@?P$9&U?;t&V8Qe{qlZhuCn&p>)Lzm|N1RCdQ^CAdb%65&}rUX*ui)+`!~pL z^2HC9AM8O)NA;r_l;N>`#6>Z$o}PK7t23B(F_uxnVj9DFmh#y`57qbztB(~PjFmQ% zv~mC%@EB`w(Z#TP7io$Ofg^C9MEO(D=u}BRjU)7B34X6Ym6j^+p_=Zw-BulN*t(uK zx3xxEw)PtoqfZ;iH&$-f-1y~)G}O_B7MgTDh2R%>z=mtTWD~_=9cB|Js@;IK0CDw! z^kE2(Fqw^QAvH~Wwqr->RXH}ZeJImgsthIt^=|PR;b5^OD2fdw~Zg2diQz zpPaeZ@eE=_*a=Q-hN$KB_~^^RzR=$w+a|+;st~2RNq^U3MH7{3meuJ2Qn`hP^c~`A9@&z4cl+fl|a*Zd&CvkH>3y2<2?>x4Q8zoQ?+@s#wvGZ2gRQH>$7iEb!hGTD}-9ScN>foGuNJ7O69sPd!nW@zZhStDL2U zvfL^z2+id^bENo4HyE&38spK+{alc+F;%kjdyDwaZ_q#vqe?QA?Xneu6XotnQ&|-a zO%tj;cj$F>ydIT7#Up2wQDMjhUDOLBk0IVGK|6*H7*)s|Ed!zAj;8axU=SfvHv|iO z7cG086et3$5I>H~kQ`|Ysg1el4&5KLr*U(v9LS|!(o1OMk`Y$+Lf#6t_+T+{If*-u z+o0C_XrlLX^gZxH{T<;$b6Mz1pJ0)T213ppMC*pTkl*-YGWJ_XE$oCy{Vs zf4U==jMCZNTuxN}TA7!cq`s9CCc@^q*hEfc5A4O~pMF6rElLRpXd^O zu5KGOZXVZ|5Cs)yXPDis1>;`UNZ}fTAR#xnkh{)Qi?>8db|4L#gmzOFP9-jseO<<` z?Ue;^-e0Dv?gV>zq$2V>mu8tB(%EgrwoEO1dqM5acN2MUN|W!s$%?x*N%9Sb%c3&&T!9TU9F=)N0#QWThqZM@LZX;$rMtH6ao%bO%Y z72L){$AX?XsjCTy;m+)NpRsuloLi%g7v}mE7rkD zuSkK|dscgHZZUrclCt)66xn$4`~WChl*_|3a=pVXWuqZ%PnBR}S-E7S)F{4JQ&;C} z9U`ifQKzh=&tk=iq?QG-J=8Rc`-ZC`i`P~JHa2hmk0`Cp^NH&zmfj-}X%J~h5R>}% z_aPKmY%Jb=jF&3`+*AMgBAT~%j31DC9V)0>k;L+Fb>Y!eUNqXH@{2Q)52oAy6_#^x_Wtb zw_D{!@A0OCICh7rrt}o>gLsO8TpiXoonow}l!uQWv0DSn;5<{ZLg|y@yVHvY6#Mx) zLfi`QHNx+SsI{VZI3IaSWAbr93Cb+T(l4RF?U$yP#)!Sf0BLOl(S$o=@nH}jxa z=m%Fny{x1JxJ>F@eNA0cjDq{!{@~D{E>ubg*=iK%i;qMBkQA}^w6)eI641(3qNl$+ zE7B!jFzFGgBk!d#I=hII;QR92Eg%f~2>&Y;ja4;P5>)t=z6J&olVw22>OCk0JR3>6ip?VVQ{ zWVS%KDH~rN;+L291Y*@3akRYm`80lPCSdf9lY{rIE+o%^`_|gD^$WZ>Jx0b2hAq6% z+~1&gJ@W1%2_^&VS|VRRsdm4`A^HjiXz; zryomcHNO(3ff9UKa{IpPl#X;;?#?*OWTjS5)mhbs)5KCcYN?Igzra-i)D|hO*;6nn zi`sy!ewe`EFPXjAtg6`DhQn=rCuZA|7xRPXgxuw-B{mFiZU^BHuy|}yQ-4OtHoL1( zJ|21Zb^#|Pw~wBhjq^iPnap?(I{_mfOX^@1H(d-!V?B8SC@f_SCo>xo(K^|lk9Ro% zX=R^&`lkM%@{f4zZq}EdhGUc;k}ArgZuHoirh`a%_KK$yQrtGN%EUjs=u0%y^ehRJ zuy|g@oUM-sF)c8)Z~=9+xxO^pEO)9D`@h=u&liw~u}Kb$Qkjy1*9?OA0$G2OJ3#&9 zQsGvfH19v|h|LNcEq3H2y<^9vv(?vrDKASV`a|tX9J*$t4~-6#m`2;(O;8VdUgU6~ z#8T5t>?Xe*PJME&0Zd@Q_EEN92tR=}(=MDRJF|}2r6$rGQ|DEVyDky2as3Y^8kd$S ziCUzps}CCA1~Mc2BAV|PaU`zBN-d~WL7PZEJ5g*+?qfgjs~C_ScJYJr^VDP?n=Tam zdVF>;_Z1e>bvw?rPu6kR=k!R_N!QbHph0%Q+pa`0R!U2=kSghCwY-9Uu7hRL?KqkQ z)eWPR7)21L>%jImc%pt_jGQAtIu%e@rkJ9YnBo*m3^)CV zhR>hc_%_EfJDGH`ZILf6O||X}>uxKFBNAI>Ab^(h-^MvQ*fvToM_OxtDM-#0)r90U zKuwiDDMA(X%+#9WL`k3z$sAmxy<6+`*|SPNSBaQ`Vzrd~4?37fc2^M*OB9(VKF%kx zv`;F1{p-ms!7DXM~*=r<^OVkZ+=9FT ztm&!EaA2w_tM;LbyN&;*;RHk)z-vQbtq%6@BUXG0>o2KWf+AJS7N^YLszfkAkkKo%OIs6W|0df&I#h#HAymeT>npn{vnX?y`Ep^d zOCp}Zn(xf^gJfz1{@VKxC|~~&?{aEPP?)BYxZ?9#gW9Mf5*Mq#uZ;@JHj1ZZa@=HL zNXAvID+^4z043H%G!@) zyks5jM2i?O0UIucpGyRH<)>vPuIoO{|2+FZtq-wpV!!A7wO&5N@Dw}y?lz2nxPVnR z^5gwfulJxJWt@gS>=yRv8F8Oi*%f)b)d-k0Emt|GE-Dpy__R41IxVA>Kf7qE`lSnJ z_~gzIdt8SeIa3D!3jw{FaqifDYD52m`sJwu`%Xvi^;Aey8P&0hs|X3vhn}hzF^Y5I z#5wg_8;6-y;~7E!9|Ad0LxA^t`le>(`;mf=-6O4&^=&0sA$U5Tg^(-11?%OFuo9>+ z0TTE(y2>cImY+B3$^FqAO(s)o3MfG0QcLOdMpy|*IjH=`l!}>vk&0`Mk|NFoaRCb! zpqNkw(0PJ2IcZ z%zp4{8Dl6%9&)!U{ncccuROd|qBfEd?)zNPvwyu9Q9cABkZpqJIbJZFx$v#!y@AjL zaw|vNt&8l9aNNo_{`s)1QOfQ^Rh7qK=8x_r?J&8+V#7H?3zT`jmd~QuqufR;B%;zmYDpgt_b3GC}+RW zy@jhRQG^$$W%16$N1g zVjh*(r6v~OaSGt+8%JpYoa#@f09;J!n5*a~M1&JN_wCtUVBU{u+xW6=IhHD?YnmP2 zA)8!3s|S27w`<2mgvwVZ3*Phx;IlSBqLx_d0Y(s*29-O7Za68U)NGDzze2!Vj=8tK z1#9|qk9`J;eCs+d*-f5B^(j}yq_IhN^O(IoeK4G6=?kpdhOIXzFJ75kR{ZR`ol8D5 zlQF>F3J75f+0~xQt8__CPj)`58*A&E8zHRXzp|on|>H(s%0;eWm zb%izUg1lcfOwx0^DDWTS6nHO%Q3j*TxJN){X$TT&w;Iv&#zU#Ob!^#a0wy9_A4Q|) zJ5I2g$j_|E|Iu*HNCTg9gAO5&%0l)%MHPK`@?lqezWlAT3(j!OQhWek>?9=)Z;QEb z_=RC?`RA6S?7L%nZqY9d0^+0^w7V>=l<2j%q~+|d21h^5pUs{Gw&3_nt~&$@pjEHm zpF*&G*t#2YlUK<|j2$YRcAtwD#vo0XdH<+18NOdOnH;#~VBP(U89QdCa2s+P!-+DV z=Yw?R(aFfmX0yDGH?69evSmyDr7@-?oa@)nzW#-J4MNc@dj#o#Fo@7KORo7;mteSN z=eMP5tIl*|vKDEeA_I3ThZ)_~o*ft5OAVF6xp1TRaZOH+F{iIPIb?+8B~r=IzJ4$hp_F>NLgH-O7K|T3>Xif%UzwXVwo2Q7$l zS|PBV=BNqPnAn_sxN5J$$^`+U`4ZiGl3Gc)uA zD2BDG&u+~XCy7qpOpa3byKh~-QC41KT)4b(&OW9IP8 zGnv%1yw4*@UHC<&u%5N_@?-8tbJFZwyRHRnN~MfcnOnKDAHJV;eM zZ{9DF1=z5Y^?9Xvu%dME=meSzK@UjmoGsdoi$X+25;(#F*66CsoCHfPd9QreYAwGK zJgN&PP7EC(qc5`)rCN}QAtm)`9E=r+EP^Gq=E7_?eG&V9q!qtG_>izu65Q<~F~iKar}XY0ZD3l~rQ?Wlob(&hZuQak6bMj% z;D&VGBjoK0lmJR2l=>iesEJMs0)J6Tdkj-UDt}Fm;>zcV9Vy14m){JHx)E&knbdl| zf7o{;@pto%1UlR9oIoNpebOyZrE5dWbi0W?POB}nDu7^wyGE_>x|?HOVqRa_@F2^- z?SXyIXi=(mwV9EwR-@WR6B;`C(AVpp&D$5W(^iW4DF;cLIhoP1`=1TEPaTKc_Yg#A zZj{Z+2gE9v(0*PfN^o<|u!}fi=Vx&IWabG7w4(17OM;v(;Ud6dDWL7CqujXLsy{kQD&xDGp$ZV0-EVvbcp5s054FoWvfGna| zZUT0{ErZ?MGIg2K*>luWW@Yk36I;ux*fgyj`+=K=bn@^BKWVG+t%R2zqsx|? zc5@csEemp~mQh?-pPN$C?|a`80&@DE%%{}VVB5O5<*&Z}HAJmC4GT;I>l{VEgOrHhiR|OPl`2~j0p$y+64?0Cq{64AK!wO1 zGx@VDUq18z>o2NuRF+e@U&$73p~C!oHxm$X#el>Cv`h+k5dgK&sD=>Jn~ljege}&t zk*c1v0ZgZxPYu_tmcq6qj_L%n)6)Tq`yY z4tcngpMAFZH%cfGj8&!Jmv!>U%PX@wo|m|Hycq3vZy>7g8bkNRj!iC-6gIidj>Kk6 z&viyfpb8*STF0<~7a*ZN_Vot2>KoC`uyf-!fAgGyrI7FQHm`*@lDywzT=j2CT@Vhi zGc}L8U)EW+fxag0*-5@K9zSJ2^#Gz9hyCV@d&$FT5bpE+*xHDd81dpQ*@jXP;EPE; zbR&Th2=W*7TU)-<9QoX8y*utcNQfpr{vf zaDpq_6_cIVr(>b$15>I&o=2Q4683m4Y)>Z`cS{8xP~o?|qux>xk90tU1;Q{`XMAd8 zT@Jv3!A@J41jeEnO(I>aKGmE+Zyo(ryJ=n8%zaTqLX?MpiYRFoWD}>-=N8~FX<#C! z{9lGU?^t%2L+L`~8<7I@Bs|yt3-vx9X22y4^CJ1h=qRs?dlHm0E(fp1Fh3K5pxO)i zFFt9PeGO5CjJRT;MRdcrk#17%0~n9Al|W6PAZHh-Ukce>_YOsaKLTaS&?BOrw!6&= z&Z`j8d}pW9lFug>9QE}t;yDIqIE*&fK@$CZiI5&h=w%&{TE<%Nmur~;cjqwxDq|+g z_l7oWA(mDA~$K6eF`9)K$?_O^UiEa?6JK>a!bE5vIY zZFPewcPaZQhnXfEE*Z=O>%t}39%N)=vB#99Y0=$NO*Dctx8enUTPAOFfRds5RxuTY zDDTc`X7c(m+$P=(Pg&+Itwz3LQ-|pVuj@)D!}lTFX0KgKyskQMJl#uY(=zhcOG{e$ zowP9hK<%4tvI-Iw&gWeH8w7Tm=Bx17m*SdY`}V+wF`#ktK7n*R>MST5a}*L0IGxKl zCPTRb2_^RloR?!#?84oX$?AOMZg6sG61wBBJk=7#Ab7WUX9v+(BY6W_0 zE+GDoD&oD7UX$q3NR4e57aLfn!zL_K$wg&52*lX7Pm3&R74xS!f_HJ*+%b1Db_Y(? zM*40sDbA&>jc6;eD7jO;P?iL_4%>~Eg{GW&&?(UK1xa$UUju=m)$ckRBk2IAZzge^ zPl+r-Z7D{+@HbiAeiQW@q&D^LmULJW_OAy}EzxZ7jVq=hh+m_~E1%O>)~N?*84`cG$t$WR3vpmfC!6d7s(f z&^mfB(fWG9d9e<{`>JG=^@jO;6Keij6b8V-e-(v`n{@fro?)d)axx8^78ykPG@V7E zq*u(`wz>kjj;QosrRFZnE%)c@tM4$mZ*+I1K2w@b*`h=E&hB)s?5^1iM1&^qrH(p( z`pXz(3JI3uK}(^sVE6liW#p|s`$Bd<)TQ_$w}LmHy0Th_#tsV4x8SC5()0FgUwg7q zhLuHR6&dpj?M;Q$!{3;Lk6@Ah!gA>V{k!dTjkkw=4SQAi)iaCcj|3fxB+KtlSev3G z!HEFRz`aM3ed?`d8IPWoHcjIJ;^JqZ8`=b=e$@8_#k3x4vL@cs^2Ef%OzL8Me6V+9 ze0~#~<`(oSY2Eb!y;k4gOMKD8d4atKCMs}AfPN)JEYS7SBYmNuDF^F3L z@4bCL7?Z+Oe}fv&lCx9=V*-|p zz2?kZmc5$egE7Pw{){Neb!apkHZ5{U;E=Y&70#es&c9xFVObsJa4**M!2WfWBsohv zBWWn}d|pj@r}XA;P$brj=oBZjZN|GD11*XGb`$3^ATF>QBn5t5B1L*E385<1oZ+hD zX&l1Et^2xD{*R!?as5Ui&ATdiEXfqyZwDZuw9cX z`S8;J^hnq0EE;t`Zhy@KO`2PDNqB;Y({5?&h-Xr#@8XOQ)yMl5ZRF(0hj1#d`wd#q zTDPsjh!34C&_yt&UM-2H_IEU=wo~o=F zVcE~7kW>s{7y9OPGgK7?_UBSh^+PNt-XT3t&&HBol$GzHIUV94oU!G9T&aSVyafQ@~u6i^N;d01%9=uT#V zX|%%g2j{O+rq8_)9J%A_>?FQS-RDV<&F{ZOef557CO+&mey>bRYnnK?hJF=xq&F3c&<-P2xzaEk z7#OIb_HB*!CNlDt6>bAcm3Iwt{1s5XAJOtCzj73rZmtz60>)F;9pRtwhjJ3V=FwN7 zFpm=+-ZA(n@ZXS;eDOO)xC&rx-d0zg_y@Iiy{o+X`NpC@%~bhBoe$#Q_+uZ{bui-~ zsShKYO^TFYN8AW2yTj&e z(Q_$daYtZvc%+o-!!IZ@H*=3{R;1M9`%L=y`uS+xri8$o&fZsf3*fFm(3rnUq0g>z zR@XSH&OAw$$BfggF8olVS(C7EzdbR1Z{IpL`K1bjE5j{(>RB`^D&k7epB!19w*td= z6vJ>G-RfpOhLUU_@1z^dz<#M-R7bXJe^)FF`Glj@IWy`$nQEX?odQR+UG4?$E0F{h zruB)vk0_CApLu_VNnRtmNeCLXXTZ$BQ(`c!E*ns=Qn5+gCSkKmKx_h(yuW8#lMSgM;Jfvysb}X+*fLMzHV2N{qH=sfak2mPV7}4o)JZLMt?sy-qyCpQTpHFt zoT8o&=GxE2oLWZl>I|^_)zV!xy5{kZS`fWelI!<8W6zu1CU7454cJv3@H*U!d-P*u zgVr$#7fU8Lw9x3M>z|vd1@!r+Z)Sb2>|-o1pS_H2@B;SR^0G>zc4btczhI;R4M#}+ zm5~PQ4VE3__u-aZ7a;=D(xk%;3$cshb~Q%%t@iJ5n_g>gv4d3F2i9{#%M_enrh6TI z@1@sQAjU4yr$5EZ%)M#yaPDfN0>~RVyt$fm6CM)$IAOYx?0ZPu(AyN4>~B@mx_(y? zQD&rLWOFggXU9%}0+f7Uul2ukj5L6~$>$j@zImh6fP3^OmbjiNNM zlr{r`fZ}=_C$-{3=kZOJop^viSJuIn;JdGH&j_@I(El$sqXGft{IWZL`A|T`z+W+^ zZuX(wZ_3{VwUZ}?4od+Wxhk`#bq=Z_q$cl5MgEQn0R1<(oL(j#kZaT{ zYKodywn~r`Zcvyn2o8dBzS{=2a@eiXage(gPtLxzIzfW#D!BXRPl@R2WxWPAuRM-_ zgAio__t&5lKLH@03$Sf+e!TF<#6G1*ow)V`L9UYr-Nb;-&`qV!HLnX14Q8mxi_fKP zJ;GVstnsf+ANJ*sv|}}Lkdn*HwRROo5Akix4OS;@S@R4B;k-f%=dQXn|01xUm`a(L zT5w`M0C)M%L***sKX|U~nC70tcb}km0cB z#gTG3cgZ+91LL1j`AXxtKl7Fp&upWSbf?w#u1xDKenIGZ|P>i z7mxRxr`3u^9??aYPy;6`$U->4D~itB1~Ub6fC(HZt@8-c;>*tn*IzeGyHF!+z8AfS zCVU)`L@H>$fNVPRLvbR_7}4U$xU2%Rp{9{ZFNRpvl{y{Ky-l?YHx-CXj1aWUrC9uv z`X$@?qN9W3%#u(0^?NxP|ECvnc>Xk#E0xI`>hLw{L6l3s-9h6l&v!>*#YLrqeD(mv z=df@KfI$`QvL4?H6oLS-V#0v;MtK@YNccVbRNWvwPZGU@Lc9s`5=4#oy#t7p=~k<2 zANblOMaq-y%=ki3iCoo~oAZ}aZ~mEB<)j>p#{W6020^o_{Nu7SU?BF}=lF5%w zXG5NYgOc0>F#>H?liz*1%q;sR_gjpwz(p3w!Y!cCx)kihzVGe?fKysW&uFeQVSM8| zOak4X5ZSOJyEo*$1dO4@b~W~#dk~~$*E#0yWHW4a_lum`uz0WWygEG-VTQ}blM^1L zV#F7`KM1+6RL*H427nx#D2xe3wzd@+h>cqAp1}xxsU8=}fp@*?Exi3i$HeIZ=3G?M zoH;L%pYbkj%!os{qX2HLaGZ+CO8F9m_f6RBp9ykS?uGAAnBmejlX>pc5a!K~g~W377pYUPQ7{a*x-g zS+;S{RONzNF_F*ov6|~I{9NY`Pv|7>5wx=vI*%zx2mdFCPA~K3FbMe}0q^4c(=-6e zRJ3^`fi?GVM{`33kA5E@ZT|vlj~W`|W(I#@=Se9)&V5$u1tl^>Dsv5cQDWq4j3YZnEWy{cxUB>o+TrA&0e)grPEvR-sXk1F0>hP^mRF+mCav$LgdO!UOmRxHh6XM zJbl76B-+`LUx1%k#d?5{TAs0j<(8sO4|{fl#UjS8BxH49vh*&*FeD{YKiUoMp>s7t zdA2#xEV;S>yNxP(5-HL~W#JRffYieXsC>WFWv4k7VYXcBv_QVl;N*EdIDHM__soD8SaK zWnEJFLENbs+4uxYJ{6zfk#}HAAEre3daQ55w81@lSHmry$E)(R;gr!=4KHHop`nZz z+k%u^DZM&JWAA{4ep>Ce-)w;Y!cl$?oI+IAWoYHR(@ACT)Y)-iUn)M*Hf%U8x=2_^ z~O#9CRDTw@pfF=I<3D~5onmVTj5VI zDI@93)Yl26-)X%QmLNI4sG~bJ!^W=U?4DkSclAY`BK~07V80v&S$*5=e8y?N++R)H zh4E#mm+9H6QmSW0K~yhkuCyD+oB8;QY^+>AnVJ~Uf2geGs`@VVj#cCrJ*9gt?k2Xx z00J^Qu2;xl|Dg<)XSHvaZA&pwY~U$bC^e;{U7dXH01MzN&xr>VFU$BCo*S~>R*ZAA zpR;8qG!CsmmN3uK^k&Dc|J$%Hqq^Me+|-wtjjt@uw@W49t<3_+&hxI!*K({!kho^0 zHHM~uubpQ*ye7nzsqFLf3NQjq0u~8>#yf7fa)Kz5)%bb8PC34#={o0?*A-A2#~JZ6 zi-pU1rK0UI)9-51o6}!4jtA9>`D%oyK!dzHrO=R9ZBgGX{GE^P_eH(^0^c)vD&-w9 z!5B1Me0YC66j)np4;B^68$Dx5(M@4GIG^*~@oRR9$*!o>bJe}hj57aWx#471CM`DM zT&6XE8Z{n6n_NBhXJ|k!p4OH)Il$JM2JEU*Io>>Y*<;`JiiVz|iI?#TkM(%+ftQXk^Z++O>GpA;HW1(yO@ACyBs`)4t znQ4*x!4D78?zwK6n!Q=ERklnhaG==oRT$#=!56>=u&qvKT$o9EUCbl?4Y#^o*ZM2vv^LY-=n_nVhMfPGvh9hWLId16Z<$32Mb&Ume9FMEAe#5~^ zAG+7dGbVCv3BK5ZJ24Hq@3VeE1Y^Vl2bgKb{4Mg)PXGp2 zh9{EiZ}b1hpvSznI#1mrvbLTRd+gksBdss@Z>wv7Q- zMhWS!>(n=EuuEdG0S6+g-9g2YGMlaM00H&;Rt6tOzj*TRBvw63EZIBeY*XO0#^!{8 z$^P5&gqQ;=5U>FWQAW@LLh!w^&j6x!yRiUH?(e;tW3->26d)z*;ppY%));cs>vC@h z2f}|K95tPH=7Z|~CR+_=Y*tNdOt~oIqd&`)c=@S)y`ClR!^aq2p1AxXzx_`aIrJYn zxl4lz)1MzzM6hmTH*oqI)z&s@8MLJBFYcACf$2HF$*^5L_0f4$bM*p4Jbvl~rtpc@ zP|~p~a?Ff5bSN6VBh$BOI%;IK%Yer-dQH{!f*mBMQ*Um~l@A^y*{{wwvGG&8PTUSXo28>WDUZRC8W_>hZ)%ib z7X2zTKl$bDi&jLn$LbKbQIB|jYvaX!gwah-w0*rdSpDKf}DQu&w?DZxW8Fv zU2Lqb!3)o2(7xz=JRWq6RJ%?1kcfQdO_Zxw?A$L&W}!mjKXg8Ccc9hH&&-;yeDi1m z2QBdAa8SFNN1WZfqomuUGqh@?sjE%1X>017>hfOOP**C8#EKCyyxfVTPHpUcR{?sirNlUceT2O-8ZP5{zZ_wAzb^u4>+^9~+v!se3=JC`i9eDI5WE?)UA3KZ)hl!tc`PXXr z43Qwy*l{%lO+6f*kTK}S4-1Ue{Rq(ajO%eFQ8DP4PJR`*qdmp`x#5)>a0siPyEV16 z*wP0py13R*?H`ko|KO9Q9%_USgMO#yFG6{ZvyC25*W2?j@mzufVUW6eWRlf|h*Z|IXIU0Yo%F$29m& zw~X}$Y@qGTUn0uP>Az9gp#h}+fAU!X?Up;hU~1+qSQL#b`MiDRO%O6>YNkLHU4KjH zb9+o^M|pTX{0>?Y33>Cee)1GTYF{^>-A}vkJ?}v)L=klR`$$;aw}+A|u4eV%PwsUw zn;Ug=HHW``x~Z zA9=>*;mc9&nPG^KyJEO&BBh!Hhw+OiMexq|C;&?K*dU?}sps??)LS}Ts{r)rgdaZ{ zt#zHx!~Ed{?`%hcuZc62FnIF6K|N!C-YV}za2tYR0&YQT2u2pQ(p@9q=zAE3EAiBL zfh*Ppct&1Jo&baE0{!SK0BcGZu?o2+2xR^Z>d->~>-7(FwAZpgvBa&pK1cY4Adqtf z9v}YCYbv21klliR>nni&`8L+#o!~HOjZs`54>A1P+xi7|c$kc{V&_0Iw1Aq=^kGLU zW74yC()`JepP*j^^R^T!1up%5gOYHn;wFECj;*{gG1rq@G zS4Ez$7XpV&M~#qGO*F@E(0kslWfTuEdg~tlc3Dv%-|RyMT=gH%_>Zg7i~QrN_;O@u zA&TL%csw768=Aqk*t<``BhWPWVI$xPo*=U@uMuSMl}|H335?c@XbhmT{t^6Qy#|7Q zJN@S)%KQfP_Z6(SUH-#kfM&R|=t5I_e!iqS1W zhOTP#{F0$vod!zv9rWK(E@O}gaZ};EcQA*110AL~}j>!u5Z=o9i7lEd~ZTk?TOfw>_12|1A&_E3sKj62?$^dQVCj;Tv!3Vf?trgVQ~KcgF1dFELPK^6y6{sw(ZT|Goo-;D4lzC`%MGCF}T z+pFj|DEaR4&4gU;{_nGh(jSbnwh3B5Nq0HiZ4e3{=X+bZ&KP(Ynt3ySLT~1eIWyV= za8B`mcW;xwa&N#q@&7Onu$}xjf0(lWug>#djji&p#)cdVZc7|ua`1o%VD#tP!~f;w zL$+3c)7Z1R1Y^KhiC=YJ+l@P`0ywH*x__Jb00|D5`FSTo4&c8z{0jQ7VGI7x8yS)T!Av@HLuD?MEpK6K#!fZIVOKHH$A;|zlIzuGdMknbdNH8}PyG*2#KNpy)?35T_ z?i5*E2)6w_DhfILJ<6t=yt(IkQpx+wP67s%a`r%wjPl9qn*RzW zWmUK2d-5n=w<*AQLA^1`NENg0ghTu&L22u@E#2*PHjdU;$cX4bT;SV+D*}7nNSesh z7GGoCQa4${^?8bT;6G8aME@7q9pYf6{breFu%Q`d#fl&jk^enmcZ3g4VX%!rh0YHR)cxEFg7{+pBp zt*jQ`Eost;7pxOXteWo(T?Su0K;J#$$Xa1iTU{z$SGQ7PCYyHg*ai?vDljL3Bt_{lM$0-EMb9L6qx!@RgW94P@6}iW9Pwd3>OA(frkEfj_JZ z_)IWay)D5XY0&ifH@b|$G&E9JvZ--&qiDnGB3F{sytbf?#>X2iY|(KKgXp@`8(>vm zAA@n?5`lL~p@o9B)Z+Cgz!jC#HTV^W@zr-AJm*rM)^_)mcUk$qC{o;`xBUJrG~0@K zQt8bviKZ*xfDJX)_ED&Hs|Avb8i)&mC5GrFW>oY#5iQu$Mc~7vB^b$2Y;AS27zI1S z+sFCf{?VuC(GhE0sTq(4R2gb zbjrtIovaH+Zwd$`el~8@Ph!o_2Yho?bvNtT4*b=VUZSiV8!SI;+H79D6oQ;Uz z&5-I7)F#hydzWn`!TK&gx#?&+)@uD)c(rF-BQqCKu%)G2yiK8ayVjy#C@2$N_B&Zbd>-p)qkzpL6@h4*Vkm9bPYGd02>gB|P=f{%AJg5O4-DM*H z71_nKys`NTFSbwND`V=d%Zlr+9{ zn7!y*tA5f0rUSZKu>_tm@D4xeG3Y1bWlqNm`CeDi(EM1qZ_qE;LYdevfHxaT@Y7*! zP6qaa^0Ufw=8Ua$OPXm(X6LAk`KFxXuec_J1f4N28qKl_tP^qC(r$28Bd_kb2SEs< zG^?|KD*Y#I;Mg!n5&MaG^14#zfwmrjr^bLTzqh7IrYh?Q{<;~mK1yPNQtHtUxl);2 zJ9a5MZw|EfU5q_S_55MSBY$2VNp7VOi%b1TQ#MTguUK7$3Y;GHyOSPM9M@B2jb`(Q zNcq0H+=!?IaxIq<=^~*8!f3Yt2B+hBQYu}U5@u<&#$sYxAOUOFFZ)VbXx5AG|_ORKI zpx`?8m>;J-(!sVLGU;3_{rq05uq9Aiza;!3D~~6Mb~G*n;0s+(UOS|<+8l9Sswci6=7!hu{` z9_5-14wRm5TFu4NtA)Kxp!(>&u))z`3!= zj}XzMCFE|J@lH={VyOLL$K2XhD3vpN&>016t467!26yQ3ZDc|uZ@(JzqO}~GD5RRU z(SH91Cl0RxTLK($al+rZ2RsjOI(G{E!}FQ4f5VMTnuX0aoD>w;5)ui{1HG5uou91l zs?B5qKjYe-XrcO_2$AS7O-u^lLMq@#TK|d-QJ6K0&`8lSN>vSKp^;$zLA(+O-Wt2P zw$@A;7}%qmi5k&;(Z5~NL63*`ZRO_bp8Nsa-2a1V^5+XEncIKZe6BGkTgZ923s_L$Ugr6#6%oA3r1Y5TN`eymVZEI^jT*mqZ1QBF^W6Z3Lv*Kqn>AdKxOpWs zAuuo2j|}{JsO9^ut&-`2TA-2=$Y+Qn-ft-3MD_X2POp+CLJcsSmuzXs_+T{WimZr( zImHCa#JdsG-i9<=47!rBInH-T5@-}ynvVcvHtf^Rn5qH?l}*R=+Ox>(?G3{SCSOY& z{{v2H?dt1tR`sDKxln=-6&^#!S6*u9SRRxBhLFsP<~=e?sV0HzmuR78kDG3m12W*% zrNP8}d~aI>jrMiYsP5gCxvScFU048bp8OA7(6urGgxY_Ps#{0AUY~IG7xv6Ia&WIL zB)&}jE|&aVMzj9|IWGIXJnuoX1iKP!c0U=m_#p?|6T1w*Nteka180%3u?%YyjZPm8}GpINypoqi2s372xG57gCV`o6hvM zk%rflb&-VlWNvjq91V@te9H2H26m+(O@#)>8Kk&CKVoyqvoI8R)ua=#7QJZE{epDQ zG5vUe`S9{bxCGFFpdOKtQc%RD9T(Z!1h(p?_rzb@Fkvts_exDM@ph11OxJNTL3JR1 z$-gy*etzQVr7>0Wg~a!z$;8lWNxbVl1Gzv})VayCRx+gQ&f__-!}Nx_EZ%$az+-)I z5JGJXEwGwL^2qYr$&jqrL&+-{?mH5r?8Wrw1LdKzJ&dW~9^O~X!o3^S@L>7j^Q?)3 z*f!xFhNq~FGGa&Odt)b5oT=k`O9y|vg4I83IG^3SbY5oe|g3Vei~k5@WPZ$XNnzjYU{i88Yqhb+N=sW zq#dgj?R+C1E!-i`^6UQ%+RqADkxqF4kumUfcY^uePD^)XNA`b|WJ`R)Te4DmZzc3Q zGjH5cdXT@sx*==4NvO>vUzW)%!$4DAg4s#xV}F9!ifd5G(8&mf2e!ws4Ca~-FG4&3P?$}f`D{Nmr99rw~DlMH-bTz0@6x1 zBHhy6-Q7$&CNP=q8`t~W=k;Bz{oCV=z0VlukL6fnJ`?86e4abM*Y&xCMu_L}IOQ1$ zHkBejS2^muJE)<1iFQo!U^Jn$9%f)5RhU(tjCM?QYq}#JPB4P@F~fwj=i7``^5ZJ{ zXiDj`e69L=B#5($j@MmSxkc9IK8&|bz#|ENU&$b{alc92g(!DI*9ULGdxALJS^svS zW=Ty+eM#VXqstC;l-go69adv;qR`e1@0|%SbODR+_4T+_?j)==JH}M1Mb@n zEIQs>vcbko*GVcp=042PtYFkibFG&106Y0e{i?HMWCQyAcL|w39))=nX9j?0aEX;W zZhy3O=KUm)Yvb%fqgQk)i3dj4Ww}IB;Gs0{c<nqZ}uq<9WxP^>WQq9#S8j34=CKteY*d>-RNbw>WN5HORUk|rU%-1Dj6q{6K5iQ z9f@Dadx>Kh?R1NET6Sv299MN2i7lxKtZoT2Efr39&Mou>)zNr$kMZj$pl+Jw!}N3z z?~`##V%VD~U5$#Wb%H$B-ruT=y&#(=g)Ox;yBMBK!<6!y4wA`WqAemMl}9hrI?Qr( z)@JNE3}8grg`5;B!Zh2qKbJzM72QnW7b?yLd$DBx?fUQDhWhPaT67}lJk*CoDASW- z%uGaT7eijuxQV!Pi1cYR7Om*#k})aGBY6(sntGMgFES?`du^~0wtwyWaXCz z1I~hMgs`S2N|gQr581`bXLHYnEP<+th!s~VrBJ!M?Y&a8;ZKwVjlL!&SoMA%SeaOW z3Sj^i>e0ZveY(uMFN|*`;14a@$kRq>+p#~Uv)2JoPr)1uZD@J3bx66*7J}9%zyZoh z?OjyD?&cXu^b4ZJhhU0D`y$R{4&ReSt-94Bw1@% zwWb+=a&Eq&0^I64xnsFH%zLdgbH(or2R7H#)np7-`xh#8SuU{ocP-s*cf(0c5hHUxUg4I!4qd z!Zo~#wY816!NS;47(`6*0ASA_Y@8Gy>I;_oNw0~OFww39aI8Vty=FZmG<>8acIUN* zawzgmV(P<)4W$N@N8i(Ht8Og?TdL_pZe#%Mq3<=c+TWh@ueYv)5aBDL{3jdk59$yo zs1f{~Go%Wj$H4lILO42lV#89J_ln_@pqdLZJ^dj)k1%-suJ+Wlkg^=H$@}tFg}ox; z_R|&x5J9AR4cX~Rib(=psCp0G!I2^N$<1CDKhDnjdNb$W&_{`9Ui4JYbWPGdju-23 zEWGiBo;dDx{nUumG*iE`0*f~&=W~&P#AER8+HHEfE!`&&=1ss>Vd{DioV9cIlE76q zP2>2-W}hf~TN?&SWX&>^_}KbytCdc9V-iK3 z$kuHiS!!qwIta?}+zHKW>xv0mX{*S<- ztf#~Pqb179w5FX+56>Lojd`h;Qd@FSodvAGdqNfnoZWyrddpeXeX&871bd@};e${? zsv_ zi7+03`a@WJ<|>(laNlVfV$)=+#caKfWa#MC7!^;?QB9AtXb)HU@MXUMDlzh4WLnbX zdEzctvr0y~zDEG`7OO$Lh0&H%uY8;QXyGfubJk?E_a#g1Or)OqF_S!JG;n7s^QrPZ zqL0er!f=Ibg;||3vyP34IwcrGL0=|J3DlPJJtJjR+VT@#(M|cS=J;a;g|?Tb)P82|4|y)w-{W^aNo?zI3(09RXZ*B?e;{WMc&?K zN9y2WPGGt@j}Gh`5lrXkUeYXCmj3JlN<=$)6)0M0N2n=1rbf?!KpY?r_?t}b$*jqW z*YU4X5`O}FrpH7807MSGU@;=|7NVCC#o7YNn&=5gTdpDvFZtTboaft;Le(eVK0TmpNMeWy2+B-lLPctj-UYqJ))-+D}n1=iXPR=^0w0Sj?!+z+x}XzMnJv2*Gyw{K+ow|9tJ56Hwh5c= zQ4e`cMtILMPq`ftB>RMZi#<2{nkh-D0uSYC{DtmHdg;}&i?3)&Q)feb*(EJj*d{Uk zz0E`?a-e(>9ukY1UiN9JHN zeB6UJlL+Y^2#Z!DS@>Ylz*^(DU=Tu8M)aYy7DK(Xa?iU#;r85CRdiNlR!NZNz5s?P zb=3GfslZ15bbjiLMJy~aX!nmzRppk2bT`h)iv&3V45=I&?Ba!W-4i@Y5V9JHxT-FRmggn1lge@81n3vm7D3xp!l)#QE zGQ-XGbY>dEFbNwWp`F|Bx_fo4@~DszBT62xV0~cEv9v%Dtl@_B31eo9^mtKrr33#> z7EMXWql4{nnFlX!VLj%2TfOZUj4(XhGGMtq)U0jeEHl-S{B?<4b32f;!EnQ_H&3M$ z%8;2OKV={}bZ|qEs*MM=HorE-^$*BfQs7qQf%7)O-=TY8vc;7&5AH5j z-@q{xo)k6XrW=l@xx^n+EpQ`S=r~u%mW4cTPY2ZqeLyfz2fW8U1aj zkvt?r`5%@OLUdMr?cOd{%&4W{02|JnKD0wI5* zSAk2LC%=07!IWgiYh~c9Y$m9r+5c=^*rT(#?Owlbj@bCR+P+Pmiw5>UZqaWErN#Xd#j^$eDau`9`kLr8wz0 zLPwO=aptrWzV@r{Ggsky#vbr@|HWpz@`}c3y^f_syQ1aA6NkSb4|d;IH$ArnNru#w zQS-hsuL3e0l)Fg7N!qu$l>eiBzzpAae}?u3q3Hxk@C2EvFMFB^KmTIhz%JmgTxO;C zFlqHY=&6!pX0w7Ow8Ew}&B$1jb>RRL>xQz|?1LNxR=X z#QBhk)R0-~Wn7UiRkJtwBq$3sPfj%gn^Kk5Ml?tA?Cjh$MY!0PHRd*ENvAB9$*S*P zo_)y~_$HxOi^-vxeMChms`aUur6Jaj`?{N zSwBnoJ?o}>CS}CErD}eqzWcS$x2T?lux-O>YWcLGo|Vo=IucG}x%?IG423|#E_qKo ztxUmG3PGmj{gXpTcG1(hmGlS!*~9EHqbQolw=n0$V3+jjvvT9Ry11vz@ancm8Qw#Cdhmro8tvA({nCriLnlviE5ZaUb&vg&oRp=Q#`g zcqC%t)ImRd$&|iYXBR~mpKvOY%ic}BaQvL|bIcq)yzfZo!D(?hJ#zhE&B3AmFkC{= zR2!WqAt=JzVchyhHs5%)j0zK0qEl$?e)^)N_K^bGM+Z7&l{(bmFYRUJDu$O3i zcdSgSgp=N9w!M6P`{`Ni_{y@=N@9GrvCyY86g9kL-4JB|ml+mZdyH_~!RsU7~7EG5a)E$ixbfLFZBf_$%-n;YIyOn)7J?{<6 z6I0TWi&MV%fg!>D<{c~28sC=Q1CwWu?2d&KhDgYtvO}$j?dnzMHeO-G>fZw4aB(IQ z%thHq3876qjCh@S;>uzV6qJ&t-BhyjahFi9g_Z$F!8#;$uJp?G#J^lwE|dNqI#c{* zjx6S1;6QM}Y&H5Jwe*4+N`YFebn}ZF&g4mnXlDc_8$;m7P*h}>pU}2wHJj_aF|;p3 z;zO=n`dUB)v>A7W=$A~ADDJPb^i;ob*J=;lcy>A8U*21-L%nP$jAc<@$hZHoF$@JZ z(z2TU;@&XMhcLwwI*byd^`}8y1e?fKlp~4qo=c~c1$xIsJ($*<)@D+fIa{X*G0m2D zmG+W;Bolf(K#F$Pgy-9JvYmN-*Drvy8u@s1x;${{BQqEECG93c5RM%SbMp)<6mHu8 zy!#>IK}^qc6XFNDHm(HvqPO4{dr9EzbCHY+ccX1Z(?cwhrP*wq&Yz0?q9Q-}oyd(* z59G|v>^xoV07r|{+6w}I>mS-g^LcOPxn3Lk-eiYtd|F<#9o`#KvtVMK^^zJ}(kEHD zo6fkOFcjz~H`8JuBavI6vwmSVJ^?G=mugDB<$>(ER8QFCa6;G_*stAe9J~A(s=Bm7 z^5#x=XX-F19BpWKu9dW9&Ci1*g$m6>sAgmk;eBU(y5cQ;gkgY5eWmB1t9Y}%!=Ta2 zX`#}YQibigwn85-X4q8Lh7wyq%=3XfI!+9!GBZ^oxs0V3;kT`nKJIAklZzJ@#mDW| zk$UwdW7HACM1abVYA|wfPBkEPgq4khr#H2Rz|fZN=JxV}Dr13+BByD?A_wt#M2NoW z%f!maS^ea1JA1R<;Wndk%#9&DI^0obWcpB%v3dj99hds;{JpBN1>Qio=fc!u)@~Iu z!cz@f#x^Tfybjjb`_CgI7^)3e?Aoj_xHy=-MhfE)SQAh7s#^rc8YxuVKBB5V%*S% zs#(OYeC#~S=XkOO>o=PO(b%3v35`<~Eadi1>UWn&I|B(|HOvj0hphu4FKZH6}McL z;ZAxJ>Do(WQMMuvX~b#@zBIkjL$RL4`t?GtCK~ZN!ZlFCL#}j8c=*sy?CyZvpD-OC z?7wJ#fU{)+AQ=}L@$~2QY@IU~b(J&a7c<2h>I{(c)0DWbN-aAL8yZF%NhzgWB^~h- z3l}K7Ev8GcdPOj?XgY}#fKCPNTL`q>twp3?9~y;qdR`b>euL56+2rrDx@u7!`1{fR zsmbO&kbh{hatc(jlEvqy=5m5F{iqMc6>{);$b}f8+rbrE5F9Hp{u2WT;33q+u7jI$g&sVB*O3;MckeT$+~MO~P6=<1)V z`8}f!X5gXkW0kbV7gX_N=3i(8dvFHSXyt9r5wL04ZE}*`A?Jk`4_WH^bVal!Gq8G= zo#g(45IYLyD%{Ha$Q?`KD2k^mk*fWD<@5Bi>^&NkH}3>ZhBeYmC-pKurcJD$ySb{L zC`zF`6QnhVT%vk>u01bXujks$7R^~HD4fhW)A+1jxa&05kt$nA0qk_j!;To1tc^>` zRhHkUS_k>JqR5vv-O!`*%k`ujSKI5f@elmGpyh_q`pbraOCHMJrN?@_jUAoO=HAp& z*jnEvQw{Zk$4m8-4%!WFAAaX1(C*}dIeP^mh>Pbh1r{t<#!AJ(tV*F8kUldCMw69< zCqu7Jj(ePFGCWPmA!yEjDuFBNTrG=6`ng#^ zU>);R^NL%kc0C>{wp%N;d=QW^*L?YevvT@%T=C@S<7t!ZKTbj`Read}zAuSt7mJ~} zUC-D0gX{uOsheop*8`0dQImdyG#S8I?LYCNAQY90fxkgUY~cBg{Nwrc?M$Uz%t+T% z2}+cV)YBZaerZOWbI?YB^rdKu7;e^e>*uU2mD^ccQXl>_XT@RZNm7Kt+5xv>*$*dD zz2p^nw0zaN+MyC1l2T!H7ihlaa0mCnch#p9G9a5(dk}*3R`rxp}6! zOc5jJ%DR`nE^aYFH6UMR#`%)U*wwlv8D*1_xu1Gi=+Tz-qBpiYk1*Ck6-L(En?yp! zOz*mtkz0xHCa43=(k{t3Tx>5iaWNj>^v;4LAoB?U{gttS&TR9e% zV=~~Gtj7J+b;p0oiT`D&bQ}3;AzF#jUf&XPoEu`dX%1I*x=}#Nx^RktGi#j)8Xf{q zj+5>c7#n$EbPUJ*&IbFu%ix;7LRCGhA69ulTzbs>#x?>*Z^WjT%2qFRumj922Q84QRa%awH*_=^u+iJ%ny<~^{%DPwbTyKB&qLpfWMc!}uM*x!I z|GBy8H%C-0Zpv{`&-F(^^Xr2qFkIl+X;cy~=7B;DKbUVur?!i}z$fUsig%*QdAns= zZTLujp8Q2S&PNOp1KOL-=0%ES8kBl|&kl?K_a%@+Y#dlfP#(-u#2HsvMxCdHEY zOzO?)X)Zp*Iptd9+n?MB$X`mBE1GVuf-^x$cpJ5yiCs{s3^F81L3}Xpi0`VV!T?3M zkC?J9RYaPG^Re?uPFG7xqfsZN#z6qA@9*ZIev~7Xe}^D|nXG&=^}=BMJK{x9Z*Nnv zmD7^5+ysCxKvLp%aAgz1k?4`>L*1}S2|!NbRGU4qkrqBXR=TFiFeR9f8FGeZS}bWf z+R0<5Q=rOXKj}a9J6wG={fnVJ_cdU{tWW-ia9i7X9 z2id$R4(!8-?#xC%alX5S83C9n3nC-~?wPS9*jc@TMj2B$FGmb%YTb9oL_=)qG2zs8D0_rK z3y+<949$I4O994ZVVy%0I*E6QLfoDyr)#^iqk1AbY_zVJ@o=U60zMZDg_~xrD(h^eqEYr! zD{p1`EJvWC&-M#_!@E2eE`UpE<_4>fTGq5V74NK$=d4;4)l0k^BBk5)`7Zbbiz{;~ z+b(YpUa8|+$}o70wVZaeKW;#BqK0q+nZD?=1vn*{att-kHqdCPo{x!r zK~g}CHK)fBZzerfV|Kmwma+!A7{8UT5BS8Z2601_@4ii{8_^%!6r6IX^cP57LmJMt zkzS^BSM%j$WVE+)kKg2}OQX}EHxD&E&`hW{PK{nAllnl9^?XN>06hCF9qR(5ASE{- zi#2+;Y$cU5&q#XOXC6uq!2Dv%ukqL|R%x30aLrbW?Y+Ca9bL7o93+)3b4<%}@L#%Q zs<|tadd6{iuAIRrO`^hmlDeuR(Xv}T(Vj_P)4R`~3-hUDq{=^%%{06{^C%WD%Q52p zp_a>);ryDzMdRsVls=C60hJAKh5iDb!rQt%8EkMlhYUSgIomFlk?dI??|R>N&Kf+! zFnb-4aq%{D>%?G_2g9^L(fNkj9lsqeKkbHh5msR7LXGR!epL7n#=eM+*7c2&?CA&( z3tyOo@9JZ}jg_djQlnDUi=<&u_h{K#ekL~=LHH-xU19T@zQx^ltZ*^GE1YVMeJdT7af*IU<(|q19Q_X=D^=(}xRSeqoeQPdTKaDL zf4EPUdFJ)8cgd!xd0|D;z>M2=4jXP@w$yjijFPojfyI%@C|bI@i4$J@)V|j+LJPa1 zply827tU<}d+J5w(zlSCSXSIc6>t>A59(>2Pot_rB-wK*COO((Qp1H?2X_RAIh)BL z+aKLN(|)6lNSfBL@_hG!isXURd{jD>jCmb2Ik8tLhJbNgvnmr zBsiGTY#5BFahngSWjPCL2NH173h;gGW>BxN`l5Zc*R+KJkp9&ysw=h^@j43{5*6Pl zw=s*Yi===~CN&6Z2ss0KQY_6Uodu+KssohqcS(qav1_k>-TxXQB!&gBtH^*$3&8S% z;UXm(9~{uM8B#^pz=$tF?j7>`q@UtYg52#2FCQv+6)JOuYUSGzI|sA4_SJ%y3t@j% z5om(}#R26Nd`L;^tOdLv1@;k*K1gj>K3QE_Ez2WpjXhWx0|}~XifQ&NTz)ToNpu&2)NSc z(%c-s?-t#>g5I!2vk=l-+7C%QH6>f*u3!ouWctxR( zG^AuQWN-vg}*v+A`QqWWld@8pomi^d@R1y zP_X}z&{}!_*O%*qE&vL(_*a&Tt6L@73Z9A+D8jojQ1my*9eDEaAy|CienSeZo6mK} z&Rr_M6Av@%Kp%w-od&?EcG_>NL;dvVDcY&Dg}H`mpQkz+dI+05OG$7esgh5}D$dX` zx3P)g_=xV7Ev$NxJwKWZJ1t;p8Xr8K(P(O3yuaoB23szM9}j8!0m_9{!B8eK)$;+O zolT3-R8mLFJ4v|%`Jx3268N?V9w}mzB(KWC`!G9^uEjzsGsB&h{5Bi3%t=d@X#~nx z!B~U~eON#;&KM%ep$xvA3hIB2xu>a@4kqPM>CCJwBH=*2OCNZtwN>}m6DKc`hb zz%Z^b`sG&b{0iE}zQpB@f$hReQTs2W-{2c^ZeX>6lH5H7T-tJ;^nLolkLf zxWUkO2FPDZQdCRePW_9AMYRTA0h$#`Q?POuI8NP?0;lQ_a4*5J0YB(o3`=m+D>yRb zf8NZmH~awE3+Q6pZLq;gPze;9FrC32@3{H|@b0T00)iocMZ4CME+zjNbaT{eRQt!q zp|z%vELQb}{AI$>qAPc%ZWcXp@2%_&`wcP7KNS0*_Eo0mS?K*G+2o*T1u6*dzJyM+ zPCK=NK?KI(870KqiRIj`pB%a11=k= z5JazcA^AR)9_jeP8O>bLiY5dQNS_@xz|I59q5*+KTVBN$0N1*QRd;`1zR(#Lvew~i zZ$?bt&kVsHtSwZokrS1#s`sw8#QelN$io5<#RuLKn>~4T=rCb}U4_gCQ&hV=Q{3AM z!yR$wLJzW+M>ZWlFHl9L%`K+5xFmaXr=tA`PVU{8-FpMr_X-37rJ}+5gx`xDLp`}< zM%et=r*nqBd{w8$-E6EasIibUDD!X{wNju_*gFpSesZ`&7arDT3eR21osvFF-LZSL z#5kfc@vi>Bs0&nmC|m!EcQ-*s=4pi?j48<@8)*U@AEp#3cngo{{DM&QI7KzN_p8SY7_a4m2Ez#8}!V{+`zOOAo*hD#0 zZPPkUJ`WMjIi?U$($=1&bVysCdfBGz=59g&qU#4|)Q<;c&ZgVZ3u%`ipZZ?_@HZ`E zNtc6>Ps4p$^W|<5SwdYyBZTBF-DG_?LKC+rT4vP7Z|z#h1l%k8iMGIRJg6%^hqf@iHXWhT8Ue=F_NVP!ah zzDz3;{nwvYMPh;somA$Vw{dAS=w5Vc{#YU=-?LY@VF30C$P&-o5!>B$fiGlF^LgHV z95IsHNKTbHA5#IGhfkgTAM7B;vew`sr{hY|NIc%aKDzF!(fC%P+=py!|)1dcJxJJQPIE-O!(Yu+= ztmGR|-&$y@!4|g8xu!e4XKa&?q23#vCOMol|7I=HJ)&L%M&=Q4d-O2(N$xb`OgB8J zZTuLj`r1(#J=_j^LI2?eznq;HuIZ%F(uazHw3D#pxo*Pkpkwp_#}q9+cgo=zZwPZbIY zv=><8J1>}nC?BZMt*}&aj7ZU7x>H6O2c8X0Ujg!&#L6w0XFdGab&1u)QB{!=A{E@O zP+y8D|Bbmt6nIo1Y9>0x4#APsSDx)`X5Gs{EZeZgyn&(2-{lHY@FGX0*fvn}1VTOZ$vE@;#wTus!r5?{W=G8{AlB+sJ{=a)}QpZ%HK@AeRgp zt1%M$XwJKbbG?OmCrhbbC#M7mlWVLpj@M{VzTW=tVl%Hz1Kz6cYM%+2vf~OfFc?f! z^o*W^ioQ8$OI|qx!%>j2efdU`xf|p^eMN(uOxaRMewa9}?SG4I7rXnPo}Uqv(Xvx) z{7;f33zqwz;LMVo!uz12^4os|;sE||0bTc}Wv?UsVG0^NUj3We<`1bIWYcN|6DRyO z3346Z+8FYN{57IGANtEH?T@*D^tS=OhwI|)Aartaa<&(>tTb2x&&0eC@_HHZdNuRw z&0@wVOfhB~;dYXraM8ZhoZI=9JCqOUg1H)}mgr%c!LQvxf+ZHsqESN$%yuz1osWIJ z>YYz$Jxg_5;a&=DIm~c@=_w7nsoNVPNj@e^DzuyN`{Ja`6Y>r-XEe* z_Fd4LiW^8%bD=RO4Yng9|`!sek_a_OzXe>W?Wb-=HpWtASW82-d5yd`S-@I0`jU2rH?T&T2 zc37=Qt}(tl%~`NFs)}CVk0M55!rxh}nJ9}DGfyw8TjSLH`SnC*-Nz`(W&A-Ypg*Z< z+|qL1)dgoz!~pVo1_Mvnhs`M80>nlWDEbP(l_YZ|GA;~|477?3-Uoq zxO%D37zZreBbMJr{3Wf(2fj^tc!_5o#jn;A+JoZzV>#Ct3xplI6--&I3>76Tp_0+m~2` z*+WD2^=+JCZkroN(+=Z7Uioq7&topT$m=&Ie?f-Ag_y@Kw{HD{)ct}S1tjgtnW(ld z-duVcc~fScKU4MY$M!esx}-#cJe29jTdOmWcnOHSMOIAm&vG z;!jNiCYWf6ejJKCe3f#}tz?p7FC1d($D{4Fl4ei^Z1XcAPH7EN$ zv~m~%zJ_lImEFl-gMkj5`p0Rey`_1dhF7WnTM0I8=jK4QeD(R~4p6Cbu(Y~frTM=T zP75j#YY|qFNEqC2f?MB&I7Mz8pv#r3Xgx*Yuk z;e3)pXAiVkmXxW^IAZ{I7M4Vz(G{=a-E*6*vUM(Ac(TT%>8Xx~#ePWTmTQI?FS2m6 zmxn97$DPN;IG?tPw@p@dIV7F5{6hh?^svvMtcgI!+oX%vqEQ|#o{JZvFtnN18n(?! zvWppjiIe^dQkJx)%NpoWPYw&D88yu_GWe>Yu*y`ato4L|DIzg5tIvwbuZC)34(E+k zK(kwVa9Q2#8?;M9ujtYxoO%IgDk`rWIkAEI)Qo{j8qj)(iHh8b-hV-5-EV5X;>tTJ(#y}y|>r$x!Aj) z`sSvB@)+jpwT-GOSyvEYn(9J%?=GtPE3ADVXH5IxeHGN5X=wLq5}nd|Ui}`0=#%dJ zQnD@Y;L}Oj>1QY9`c!3Ap?Gbtt?x8vb?5fuk-t6`GI<+#Y`*WlfrlOT2v52}T>)d} zVaL)+^}A!ZoT-H<5uD%B&DsRT%7OP@`9szirp}7etL1%`dwBD9=!tL$2dg z__@B00seXwdwnI@l*E)q`IAxXXZwBcl6lrb=@1~F$Qtqs;v<3XyufpwsppDLYDi~T3IH&%d9$gs{@uerCRGJ3ewO39nKXw5vv)09=QRSqb#6xi; zCM}6BwBPg1Hj5%6qqc7jOaz4>k##S5;=*z5{qZgy!9B-a{4MAGPqQ2j{q&+c&1ee- zPh#{*j2Uw#4%&7-<}S<@Rw)spcNEIG>sG8UD^ATB$Pcj0OS=!6R$LXiXI}?~l!S%z zYVad)=W0C;g&Y6>7Jd6ST`M<|F#hnrr}1Wjo!LJKTS4mPKWG83>J8WG+O95K>DsPp z#s8#h``;R-ucBv%epd+oXY{ND#s1jQ)j8wh?_|5H%{w{}U|sDjZRh^7G>9a4GNjfC zAU=Z^$$@Es@<<5?_ram%?|-jebY2XE2pZQg&99Rx_}9_6h{#hZ>~mKIzpxSM%X>mG zXgKBi>7dY|5IshO!I z-I}(K@%2Uq*a1*hjSX5*>g~vLFW=CAu>U5JNNdj^6mmKHDGx(7W*u)z`3Z6n)Tf1M z%FTA8#ZF&vuUnsE??diFrL;l0j(}ua%5#1I6r5+pM-UwHEUsX*d5?WN(V}A{_Auff z@!C2yfW1yIn4cI$4#$>f3g0h?w{=eo>OzW#K2obKM~20*X8(fR&<*SS;f3##DwLbZ)kqI+G=ZzO%2*xH1I0cLe`a6UOGBuo7gF`W5QvX+DF!7 zXG1|w#nWw6A42#UKO=6N*LRILqBG2!BqhHmFoCF}1zKBk&tV&ElDcBpT4FqVS0L5V zafy_F-UDb2BWe0mluyeJGDK&UAIe%J^2w`dlXq_Zf@IrG8da1BF4zVr=^ADb8)p<~ zG>+|s-P&-DvCETYUYOo#kh*nKMwk&1wJ3a7C(go?70RkVhkEk50L%4GFm9Vt+?Nh5 z(pNT7FCW%vbP?6d_0$750)voaYQ9#7Rl``=;h95fp~BGj)GQj&d8W^MN%^ihQ=43R z9rfGiQNy_8NEcaC=zQc$>GZTA*$XQS&oU*fn>W`_3&8HQjnp!!_+|*EvTpIT6redQ zb^6NisTs~xhYMhjp6y#j3P~mrqfT!07rj7>&M&EWY@gU7{>CtKG;{LlI-;v(LN)^0 zbFkxZq$E`jj@-^cMMVtN79kk>@x$5=e`xgOV)2trD+)!#Gns;>P`Jk3eCV);M#_dR zr*^>c?T?w!b-J%FwK}Mt#X?`Z@#}g|((sm8vsD`mwi%+xpx`#(O!^1 z@ZunJaI1-F!%L5noARIhj0^RRbU|mbu;A?B^}{#avAa^9&Qs3g>@xwm-VsT;}W4XU~8z%7cGveqXaZ!x0lwX?&4D3V67)z#qk zqc6M{kr9X(GuUjKTjfvSaM2Y(yUQv?%*3;I42%2)8H}uVPs(dU@0mu{m)euUgOOcG z+h2am-i$F&JpJ?nL5;3Qv?wt%8=pJrlKMPeY7F>BSy>leXwOPV$=nrZSXg?+5lSL2 zPHtQxa!2b?@?LclJ6{up2uZxKJ^LY+=fU*F=;kv=8mm5VGUMywXcNWm>S(U!MbG!Z z#FK^BVJt_OE7L1+{i~Y;qC`XdP)cy|(oPf;rUF#qX{duG7r9Nz=P$`bj|v3mqdy=h zVKNKCoG;X0rZ))vJU%RtN@n#uZMWYA;5F!NrWqLFTtnG%P#DqXq}PXdH~#`UY#Z+x z!u^h9>-Gx|B`Fj$OxaQzBsH;C0vCuUswaWL^m6}4?P9B0MfISwL)jf622qQ+PFZtX z*)@8ny7d&WEw6JpeGE>mkvG}~0|l1~uSQ=b5ETjHlBv?c|4KkWu(D_`$5k~I{FnM) zZ@UVfYx(Os7$&bq%fH?R%weH_y)`BD=wAaVcsQwk0smAS$?IqmJQM%NE3t|<$Z>H92SJkO0FSnk9SOEgw|i4Ej8h7OpklhZr>$QwjHAW1!0Ur zQdN7U>4RiAyi~s=51I-@+=VCr?S#RVL;L2#y^sQ(Z$c(CTk2U~k@;7H!(HI#zmN3O z@N{(2IJ-|VD=(LpY&&R8AXsPw##e=<{w~_@?Vp4m6ES!C;LHcVSf*s`Apz6Z9#yD% z3@K$u2KhNB!7mwkR-L4t`jH+*PBr+5NZCXO2+W!#0l#DgCb#AOGjV_0=PkT2L`);t2 zmQJV(4a#ec5Sa^pKGB%t6@=9IYSH;DX_Dcc?Nm{^5(UI;p!VtW@!=AG#~1zjg2H(b z+;%$QkN9bEnvYSX=Y4NMbv>gqUFRnZ2jEX=xPWA7Q8m?{buA{F$Mj4aHCEM=}|VMCWlVHo+HAFxfw$)OU4-LRClps zD#Cqm7Csk{(G0H^Dzl%-@s@`2$wtdAdyFk~-L~Z3V$ob$Rmetx~vt+r}c{Z*695f4HHy(-2~je!5<j(=+MRV9TA0cSu+MZVWISlR?S1Wg+qi&F9a79z}7zR=KqeTxN z?H`qb9`7f%s`JXp)_ZN9csi(WWewmGjGYUalhb*3zXk}-`K+Sl4m%pr$V z=cY?Lg^Mm*Ta(bznbjaqvsbFRa+b`tR`XUyG=)oA`Z#+ngUEQ@ciTz%G%Q3cboOR z+#B$M@Ah8m$ao3BLoeXRJtWloXU8oXB^802lVn*s4t6O536AO{eJkoBrNen61N$mL z!3pjJ`P7k{(H0nr@t%Q zIBYd?1)H_%^kEAAOJCnRcbrv6z%-2Ik%Za#dD>i1toMeA^4L#*^f@6A4tY&SGzZz< zc*4xQJA0+(&Lv)#-U`jzIVCtU_{D;~2LZaAxrVnOkheY}AZt3c*K~D$ujd^lQ_a3z z&4-*{kQ{Jst;~0H7K>S-_XszJDEfuk0SX9!q1kz60A?E1qo4>Me%y0ZD}AnqCjOiF#ArnLO{K5&cllj9So%`PKc(OKP+89}z^ zV!gal@IFD6y2C=d%R4*xBhdSSw+w;)ZEYwkp^2*W1m+Vm-SWpSy;7t3 zj?2zH1nTDpWAZSKs}U7AyzA0&DM-Qc$D5nM<+x2^!JP zz%x{Mr1yUs2UlC8P zRNZa019Z(m2v?FR;^S{ar8I51e;acj|7=g?endqi8pP(W3AMDDvuEW@MMy+95c(at zR!Ws0&2NtU0=TL`9a9`7LYAv$mm#W&v5egZa*G%l*u$=hrvW=G%OCi)2_31WzjS^I zjYT_CJ#q%+Q=UKOdr%#_wqX|hz<3G)4O1`im30ZW>po1}o=PSm3!t_^gMgauRRy() zrCVQBMF`EUY#EvM;WGHju7bIzlik2xl}Q4#Xj*~m`2lnFqh_%w$^pOf-~(5ot2WXJZ6L!&4jKkkKXH$M0T0x95hKY&ppo*X_~W&Sj+AByEG zWTZZQZ1Z9%Zm<&5VAq-gt{2oh`p~Qc11|V_c~+|Q9(<~! ziy)QIrBstfStFiL*1obGx?Ok}9@0eIsYU!3X6SNNg=NIk^w{t6kmWs2IeSXsJ;#q>9yHl53QESIf-t8xPEQ!! zW6Fo&$1~(_b=?D35x6d`Aicti#GMTnHK@4?wP{0O8ab=F{O6&nvrK=0;!%^KknPcU z%kg#QcIV!>!nwI+2LF?gwwD=a}SfTnWr9mNxydd$}) zS8@bF3iDlC6!puW-IcAm2Y-^*%&Cce=JD43S*lKf9tfvWtN*w%*Qe(f~GN2;5=E`5%dy6fFP+J^#LUK;R_yg6_A1!2CTd`OmO zQ{=v_=qGgk1$pE#jwf+tzJiS(-PHYRg!Xius%`&|r(A`PF1eQR;}q(3z!gQ;9MmUtq`F2CAp z8_q{ev9HP#f+0IbjbqM^HvU9%9vb=RSc*KGvb8d?j(M-I6T{-%ZOzwdPO<_{XaIMt zDT%z@#8oJK+mDlkE()+;@7D0$nO&7hd4I}N{Vv=RJe0(q zcG%`cQZ(ZOYW8>-@mX*3m#ZrOdg62-SfCFxa#k@F&b+vFPWgHBA;ewXb4gQ=V_;`* zb(6mPDODVY&-4;STdk>**b+TqI>kU2a3QWWrL|#wbGCnz`-99i_PH%9Ahr40_S+9u zMf5L~AEs`!P_4n^lmef%&*27S>w68RR`2{n50iRxu114ZC&jUJ=hYoDv6>{QDduqL z@Zh^ukMm1xhvNGC-(bb2jBh|szm|tS`UP=SMLr+nFQ`A+sWw`uwyz>Hk=;5FS%1nO z$mwP@jf`0Dai+;6NZ?64r;Kvk{$7-ZcxZ93aX15S0hy{(AhlGnZnfMd5)-%79}`X3 zML4Ig6o}PC6m&pkf*ZeNjK;#%1hqvSiROv z3DBAuUrnV-7*VWnfxuzvefKO!9G5; zF5TtrfX6AJUvy6kCBG_Z+&XCcywLh;Eg+xqa0WqXaKCtF>cOznb6Ap^iA2MSs*k*F zD5v0`Eox*O?`lv0o`3F*$E2N>{K z<2mPkzJd37uKPacpXd7hAzqh^Gi&x7_YU}R3R=iqIyVrI^g1eZZO;+*SRaK)$j{W0W9i`&9rsOucpYy3d=Tbl* z2C!_cACuD^hE*P`6cJTeClL`-`f|m|Tx* zf_W|%NXC4KfrD#PsWf3 zMF<{JU81pVaq|y z+cTo1r{p*H`62d{0FqpSyv0C%m0ex!9vhxQi+GEplVG2{9a24M$f7GHQ#-Pr@o#rg z@DBJtfer2dI6w+0^oh{Brg-YT2S)jWB0@G|&=yEr2$6k-sT<-E+Nd_R0lYr#982KJPM)r>WLub6bojLZv1-SS;c7i;?Psq0qpVjv$(aiT{vcG6V zFN-Dh6DYuIdPOl;lM`K^_1KQREsWvq!DjBz9Xly5sKYHM-{qc+su+#ZP0??%Z@Z&m z!Nmt2o+$et=kQL<5XbTD?P{YnQaUlK zQlB(sjoPzJa*(m4$;VGo(4HqRqjM_wi6i#50-NCQQfB&*IpR!cz-umr&_s`Y@Wm)X z$T7|_8h2Z~i*mhtM8ioLg@W0${#n~k2;QMQnd*m55u7BJO5>BAiZS}vl@b)AW%et(jzay01e{EC6jAOqL0(;(t55yg3uJk_$p zLRpP$aK|itk77QQP^5inyof5g|3H?n1AC!So=WSo^Zy-I^1XdjkUh&>nf_b;(Q)8K z@%Ge-UADmW*4(4l;b!e;PC@njduAUg%-Za0D|K{IsrCoiP(7YSuj%e6h$K;n$R?}y zA22Q~W^8WI^BuV%l2=;?5pro8;urMCHlM<7(>QkdpJ%?lk0`J^JXPm#o3r3jk1`r% zEn1=PjHF?R<77m=(7N|yEcu!-6|Q-L%}lDfoiApv8;s3B_{{?~QIVUnd)n*zA3v*J zkWc9w=bw$8P;>&9fHko|U+Crw=j{sn+GtZ8n-|m(s2w5>cO*r8RMr*>um&WylC#j> zllhFx^6wmr=dKI&%BJ{~;!xGmddqxLDZ(Uju&WFY}lWQC^L z!qQAw%$Vt^UP|U*coE!(1$iYXy_UEN_IU;>bS29C5yiU zC;r3iM^z37j~Ld|BN@xdtz`pv*E}>}nnB-BKqaJ3J|)g(UhaJ_7nvPVLS*k+tmZjqsp=6j3#F@%Yc1OmB_!M9Lp+lUEsi1V)C8Dd>D{}7*4%w9rA z)$pk{E}lN(v~-ofxp|X0|8H_*+MtA|rnTL6)!glaDQv`7e?lCtHPxSXuMCxyF`Szq zzZl{$JJkXy{UxP+qiDCu+$+rB{1b9<-QqUk;8sW0JjF}>Qj-L;l!W!IPBl~#zdQR~ zoe;*YcBffuRU6fXN8a@*Kh_a(&sJ>S*J+rsHK@O8DuEmL!DH-1+QJDZ5w`{wU%b2p z#B{fG+NAgF&s);Va2x3BU+m*9J|@{CQEwDOd(basWpTTmP?msO^h$beGX(EGq=UH! z#D`wlXs$Dkb8@Zo%gg)9dQ|J)^`tuC?f32in<_fgS0<3FsWu4*r-xjLhRouqzD`++ zCHpc6<&%Rw>HWQWRz)}BKs^LV;VO#jF8Od3oX6Y1&>?q&IEpR`hwT-B zO-|Y`H5wrIMJYJwdZ<-sX9Wa*C6K`>MMpuklp+1P5d`+#-;WCzxsmpt^nyzi@sM() ze@M)>`kEDWg+tiOOj>~@5WiLv zR!e8hPz?53$|=+x3AImh*#S8G1pK`B=!ZWt;Zr{kGr7_ST3RV~z+JY0NMNdvvu9)A zk`6_+*n4_!3K>w5?6RnuGW!2~EWbE_DHShBKZEHej?*p^97c?%ryqxrPEKiKUkK79*rUOex-^KYMc@}jNl z(~FT!uZg&-^V(TipLgy@w3I!GpqnauxRP>1m{QaESfQFjM<&bMRmE>ZdZeg%f3uh) zwDoLP0JS->-9J9OBxYPdbIvebzmvn$YLTn_nhjipVW}&*M@O2<6;b zuM>$}g(`5t2lPZ>$MZtldAahlB9xPzneaXZ`N7FNnwh876znYVwa(g9oO=TgRQ(|- z&r5jkcNaV_IAiM83w=E_o-@MLgc_a`l$}55Des_It|xZkYE)m|sgI}d$$>b?o!Q|$ z9H2jFrcZ+5b|Vw>i@Nqk*`WkMks0#$hFd6H@# zZam|~1z(e2%qj-7w()YojoU_>zF#m7jqy6-d1~IQINJINVWoNPKsw1M*Fft9n_m8K_QSFi*v6iP{DD@ds^{vBQ$+@)!lgEESN&fonp4zVZ>e0_Dw*U zXP+Th&0>$A2(RNVvQJw=HnbWsV607VQMd_Op7k+DMztMKU_NIq21?`W-oK)1#xT+LpIx<7 zOm;gG*p2tSZ9k2Vn&~-Q*EyU_v!&32a?qETD{Za_ zU)H&a$aaz$o^RVW05-9v_qkXXgFeHtZ~fYK%Zyw*S<2xUBDKAK&V66g%A> z4HeV=(9A=?v=s|#Q|>nDMt>wT92*@q4z(3Iv)ibeggd+1b&hJ(tq(82q?(RXR_m~b za!AvE`3Nj&`F6H#5U_iIeN}rvyiTY*L^RT&OM8-aS+O(}y`g{`_G`5B#MuJdnSK@bq6901-T3S^e9GIjsThL`A!U z&AaE#1lVYlQkK{Naw2I1GLGs}yCX8FUmYyYdR9Qz?m$t8a1Ft4(s zz}GK^xz8%cS#GkaocWAsIH>7dw-%dKZ}95L>k1z(-AG87m?0EgI4w$vT?r5AzMFq; zj&Wk2duRP=oK&R*fbWizs8naADlEl}aYS7gJrVc8jYStf{E0ZWnos*!kLz;h5I8U6(3)P|1>pC4EnU~`-jb(|X4!Dm_@AM-A2>$FYu7Q%mNUWqX8 z71V@Pe@$vldX`^c+m>h zLzmGN^oA}V*Zl0UtN7$)-O3xfWS-f+Y_sdV_=CKA()qymAgLROjE{X4eUWjZ#0B!?q>ZM3+CZoG8`chs+XVXs)9WB zxwz6f-C)a?5yU|#dxP*f6AZZ0D3gbal(kob9XRW$J|~$Tdv1De&GdE#gUMaHi+&)m z({3Sk=DBxw|IW}nrCN;H%;qBnL)x>w=uWdE=kzd=QO0*PAc3GBf+@=J-7$}AO%g*S zM(3X7LrPCxu9BeY3eWX%R)PbuNg_10s-qp2kCM6j_f1J`YD>MM4~Xc>+R>~8w@W)o zShm}k^1Y&DgdpV0^`I^`ANy(HLv8&-nB*v{SccuTmB3<<`S?mR^7t*?^XVs<){z&R z1UQYH%wyeqiIN=E@>ax=K-R$4Loi<~tjic`-}LZ6to zREO1QHgt=21NT$aK|ZVBZ4qz7+EL@06z$!+=_2zlie~1vSAIfXI8PEXBRHt9LP)=o zmdIW-m=6`j_csqYyI0Rci4;n@M7o-Y$4XZQx;N&t3zl!wR|v54{GEcst;Y_vIKp9)SSrkDcI40sh;OwX}R@Nm(*Q@@}t`brfB2>D1|K$RW53^&QK=M-CW5bSY2&&DFoz+sqhI^7DgkKvbVXP*YJ;k?!hCJ$;0L z53fBjIdLa!f+tjt_>QZkK@^k=8HgihV{YX{612<{iHeEhzk3gjs+9;d-2r|B1KAk}-TwSCa<%MRLVHX=!+JNdX*d1`Oo^Li|=GqhQ$T`IQTYWz?yJVOx0 zlhL`mnPIbuq~h)^ndaTQzT|OQF8Vt<&8RwBDazuV$sy>j+tKq$#BFMhb#Z={X(OA( zAE->rW9UOMu)D82Q_tQQrmW#3>W{!`S@m!!p%@d!gma!Lc|cnwH$DptCsw7Ub{{>6 zSP^M_i{brTQJ<4jv4m$+P*Oc?w1R^4IIPsO^oM)=iW_bxP7(3ei}5w~=y61!LElN= z{z2BF0VYO0aUUE|%+X+L`qy96Uhus)IV~2MkYYE#E0iF3xF9HxzlAaz%&*qn(QlS~ ztamWoLo>2L~PQ{6RJ=pLx_oemFrL!(mLx9)3-C?+93(bR5ar%)9*hf>&qv1U?LSva7qnLxq~M#d*iJYAMn=`W3!*ElrxFbl z;&{;zNl80_b`sU+l7zd!d8mD{5Gkbq)q9_Jq_iG7Dnd9~Nq<}#cw6%R8kJ--!eJttYIahcsRIoOAv*wHbZxcHx%(cm`RNu8~i}T^d#48^^R? z3sRoXp4?$`aSUogpiUMSYmKL$4+%Vcv51Bq@I0v}dML!G-c18OlO~+T?teisuH!tT z9lqquou1u0mF%~C*kp6PkILnPNUMtaY~@Z6R?7TJ;7+|lrk{Xr6GG13D@^o3f6_k0 zt(z8g%CW?FkXx6wb@Ya*E77~#7MZj+TFePrZ+j43@j5p*#4W%qu&h60cck*%Su((6 z=_AfG*i8Ge!T!l`Ur>SFw~-m{#iZ|UG!pA3)Up8U2-~^!{{5my_OmMODiSn5=391e zX-le1?`w?%285A@27PE!@||kw5#^hd1L3UCe3klf?Tfhj2%%d0`?xbVLSz#U{H2R% z8g&ulGu~aRFG?8A8S0ZucJPbD?3i27qS|jhS~Ycl*-i`Y0>qD~r(WuT0UwCq71+6(DkTRWhspALeE^ew0s8OP3Z(e(?};&oTT zWUfkMhIJNcW=sK0da-dV6?2zY_CB48MW(w~U2PvM?0g+bdfJ*sO3rV}u|(50?_wn~ zl^YP?qDF>$GWAd?02LV;F=zdC85Sk(-XKi_WmJ9&KQom-FI}Jm?Xswy`Q}j%87;>L zTC)gA!jKgP!G9zjATGFpM(j7^0>Am)xSpbH0d(CzFU`Qu1rIo=oB2tOLGsAK0(hLh z?2x^={kE*&x=IB0vti?EAZ-D??>@m``v@$}j8{fnuPl_YK1U`lt^l}v10e*O0-~Dx zSlf(bQr&DR;>>5G2qW+*!nMk!YCtDnSCPJ6Y~DA=Vm<5W8_}02meR9;8I=mz?aTt! z2BP$28MeD#Y4#db7Lfsycjuz3$q^0vYOY`v|NFqQ{&Eg~ZRJQ~^+FRsu&2e!yokK( z{FY5K26Cr`q~!}ZZm`}rzg%gmm)H;h>zrKasZQJRtvzvapvRA(dtxZl`NRj2d&Tu$ z?$z`Hf;I>aWe#YU-v-4DRja%Dl^??S5lz4(Vg10e*Xf|w&7l*C*ah*{*0M3U>eQjF zi8m8(2aVpNt_~wL1XgW~$lcn2!{#e*7&5{TN~+m@n)H5;=Useeu@AY!4#2dVayAo=bc}!BTguypXf$P^>IxBwK>7DFcj5diV1PvGE z5Hvh&BrcPjred#Vr!oZ<%3X)BxF$LwK<&r#ovOMw=rj1nj}SZ%zuqy%+Mmo7c?c}O z+z_`@B}r*PPY)Z_OSRG9W32htP6sYOe9%53!v0pfo8mUNyU9WX>ipCw-%?hx5?SXl z3Y$FSG{)+&?a`%_C`4ewC5nD{R6%hkv~&;86q1@0J~)-cn+&JxSP-4Ru0H>c)grLZ>d9}{Z3x#2QbYDFDZ1GuB`A>)`7Ib7o55E>9a8DR+f)|p1 zns3NoCQhD~rj1E6Lc_j}o5!~nAql-2PngeC$|4FWU6xuo4W&P4TWY!*Cl6fyHE`jeG~lRd`I#Y*hf z1`7lUgeG*blay|}YvZWwc0xL86m%qbU{5m}sGGEXzNB9WjNIN&IiYQb&Z)rnmC4+t zcE#HWN*so$%Z5ZCUr}qQU@T`t3+Kt6x8<3p;8EAa+lJDhC&dokq?DWx+UF06 zvqZJhJlVz4DQAL+dvo|iI2Z5)b6@@KWdG8J4RFRFHOU`25C^I(BGuWL;=ws1hsU82$g^wD5VGiDa%F_j zSa9GR-wcAZqy1V1{x&`&PWm_FTL--`r%wIBpdvH^36|dd`gC>N{O_M35bEdnAaEfA zP;=iW&reGm#H1N3qXCNmn7hyzWQX!k0`FARgY^7*g31XUmfqaRG7`TBwU%#p6T^$N zdRvl7}6J#_oR4d(qJ=JX4Nx?_4t7hH`7#&QPOQ}Jh*8NoJsjg0ou@(JD_v;{fmL6|w zOa`xLWR{1dx`e}7AqtiFU=ldW`deVWo1fwB%(!@3PEpk+8Vd;=^_l@o;4@us=7%05 z=z#~Q2|*LfWZll&MU(EzxvyT|i0}vpsw`3fLvR6!UK~#*wVdt&IK%sE-xqRF8$l}< z%ph!k^L|i@@@A#v7YDx4129DXw^}}+$&$EK%U6K{taOJ*Km%7| z?qua*S*=#o$k035LfS$N6BUxsNJZsVHQiy|%JjSU!CYa9mW06$~cXXNH^JElekP`C>v57v~jF)Mc6+J`}=Q?lnzn@P*RCvoqp-K)EFVZ z8yAukA9T5e0IW{HgrIVX!Vt-T`GXh}lqW7dft7&t4#b#6;Ox1P#*QDSI))_P*uO&! zvv#II(l;&@Vm?I=0^W(Mzd3zC&+wb+uAIS~UUxnU2~S%?@`ek?V%O|r72pYvO^K{s zRH<(!8hC^C2+YcAQXF^8?x}o+9d9F#T_it5w4X72bX2avLF@1c1#1e49D@T?Z-o4b0`(C*IW;P}M3u@}2$hj+6 z)IkACLOp1G+B~qx;B~iE^*0@=IOncCQB2zYU2wvIiT;@vh0ZC{ta#A2wDZgSP88gDc>qr0q7z!pS5Oqi);k|(S3nnywdI;EV zLD38FcDa#dDrh3|r_BuFUxs2N@EJS`NO2>X!APgENC%h|;0yyb4IlEag(f&yLH>mo z7RpV3gJ*(dLxcAL%2Q>u#jU-Ha<4k&C9zX)VJDfJKaOJmdX`e z{J)Mt=gA)i2xKO}r1L)<+`qsl!HM|4;NV^^miiA-G4Xy4>~f7Sn9XXJoy&|IS%?6# zihHSwOW+Wh#;NUB9ib)A$)S8B$u>37fR85Yk38d(gG}&fD)0|fYGVhUuguGp?FhRN zPa>nRq=(=>jzVT_D-ldsAmys4R&B74@^s?7Qt*|pneKq(AI9=aD7JmF0`}lSDgsp4 za+f{YH0u|tXhcsjY-NPjdnjD{L5%6&V4cqfR|emZ`~%W!31oZj&%kBJ{JVjHYXd%F zE>WiuP#;Mb@#*^0>kk$q6O(I@RyWmRg0=dRvM;6cs+^X}lNl5$w)Z{rCuGwwx3oXf2Fa@6wiClVjwJ^pTyw%uSnMa z0FXM#vS*M}+Iz+T^HFB0-LW)(hsafclm@&ARD>Cz{9ZC55D8~$KY(IPBXxI)t}Yf` zY!UZHk7fqnnkc5-wjEf>(M@7kbrg&uZ(~d@rar5+7PjaV-2YM_QiN3aGh2`D;YevL zGdEsMVj4!vU%4g(oI|5!!h(o14(Z zYCDhIHu^z}R|t}BU_?T9u)Y!AGN?d_QWV=+>l}?M;rS~ea5(4>t)NuQzerFVE@=!A zqKF_v{!o<$CGbK>6(8Y=<*3{m9X+yUt^Bjd0m2inlKT?Hz-wEy7jy2ygW{>Yxs~;< z4EKxVTQj60pW6&*XNZI#|6M9>7s(xJ0!~bKo4#Vq!K71_OPYQCDF0ogX-cQQ;y&C) zb*{3y+T|61e1b;4lp3`GI6?DN6>J&vMeHrE7BfC29~6f%1God;dIfcK^L*~OrCamu z$tG&voS!Xoe^=RwL8XB~6Zpe`BI&7=g%#o8loW}k@#He!Y*mZz z*CVhh{Ta8bS3k@(+3J8ZIYk}CkD~qzuy&Q1@);iks1XG34W9QKieK$(Wd6%`>wYqVW+v7upcLO46Q@!s| zyi!)A{*rlruG#?AQqhtMRbbdmEv#Sm^w@EzafQ|0P(byLq;|K&o_unagxY@Anf`da z{~n@*tGBQF6W{p8rv}a9yAJ4tWArLzp>0=0(OyLe*aZcRswYqLX9lJjKYe21-KA&{ z5(G&G1&Dn)!U#I+3U76$Z<#OeqdW{#RPaH7dK{?Mv>Kc9{Aj@@#2WlWHK&3W4ZoTK zvZ0;Fwy@_NVBsw(x6E3OWKZp5ts`9aOR%aR3AIE}weqYkk=$G07`Cn$nOcmS-n3qJ zu9^E7V{;RF#cErf*Yi3&PHQ*3)dQzp@6LDjN^QqFo7kWu4Lb`c6x7$M z&Lnw*j30GxZ2F+P@dI)!W}?QlAA4l~*sY0KPFl!KFA&^g9TdG|^uI8Ul6KL_zluaV z6Ua6|;-1cA=AYr8$ST3_j#c@=8u)LFM?06%KanMsztcaFWv@T?Yd{m_@}3)brV~0- zy)48VStwAwJj5IMP%fPG5H#K1T;0{5AhdwX=l{TOFt*FqyLYix-BcYd0^f4O{d+f# z`3uy2K{$_|sv zrC~=Ogv*Pkfh}s1ZLQdnPGeqdi2i-pUXK-4sLYq*E|7MoS!H@f|$jPr;vfaNw z$V(oPihFyb_0`j$(@|3qW0?l-`m770$(~g^^_J8z*>k)5 zCZ-fh%)7 zq;5B;Q#F}I`VxWC>#v@*o6{eA*2qfYKQORbV$3l{${Zw+q)vt$u?q=JKmrC;g3Du_ zL8}II)Vg3|bfu4n1nwDzO5-j%k|NtdX)O6|M08hF4oSB! zrs91+)0m$hnH33&43|ebBMVh(waFUpB}^C}zC|ikMebp&uZVnpc#Qni|00}t|Cgty zGFdy|TeRrW;zPEv7P@=Xln*I?T`-puOOb`o|7)1@rMzThoiKbKJO*Bp#f`iWFKxJj zU!)=%uAt!dyM`;M^8CAo>pzn;`+o}u#ba)3yv5Te;A=sOy!BFv!u2P4=(*}n-HQzGl{8;Yi(%InAI;gC&4jue zX29`V$0%t=>qmobNvC_GiD zek-GbnOQ%)vLUQE2v(31q{k0CEOgxobH8yOlUDJuQ>dpZk7%nWwZACeZFp&+&U-R6x`4 z=NQbp{WK^#W^+jGSar$C&7{(p>ged&qi2bUKxsUtTd}|Dnncv@F0$Jjw|leo)&>3G zLhPj5SM;8&=1HNfZ`aB+3@MUGZfxKGam{uQ;Rff&_{8A1EvTK{3dQv!)}&`9_>zPE zqz$VYwS{aCA2Xr#>?Y-UZ-}W(7v5l5L*qimnKnk=ql$cb($|xfeR?H6P)iES_2br4 zW3P&#SVef!I+;wDb|;f&GoC;oL(STxrTKP-!|SS_kk_1@M;?BP53R>P;%@&K0>HHn z5dp;UZcTJYGWxDa`=>S<_FK;Wl7kh7)?&K1KOYkCwm?cI=m})IJi?!-Pr!}+RqWmy zY_Q&8%yOvD+>FcD0s7x+#mI$CsmgA8pVY$ytBW79Tc^B+`yygn)NNzlc=AfG!adj3kLL8-3qSiW$0?3}Df|0%c+066JdyeH3t>`5CVXibOps*k(Yc2{Zds$l$KfC zvzo7_l$)4|Q8MV7Ahn+8poX6u3IaR&7W7c&4u(9L*R&Mk@>gYS=FWK)1Fd?CUWzNa z_P;$7yl3t8PSkerORD?a4VgAC<%Kz`pnCK&fWDnB7Z4+iJV_=Sz3bM%DJ{qN0Z>qY;hLzZtPfJbj*m4oOpN96{Eja zIvcoG8`K##Z=)O(o$gX79bXJkQoSKR5hfVPq#fU3i4%eEtmzf2dWX^2JsX!)+}84B zNQ!^C^oYayM;G&sDdi7P@YYjW^+onlk#piHic}3)EJI%YI?c#ajgQ38?u7k1|59K= z{A=of8g>w}4&L#rz6^Si|9Ty=%8r~X-~|J~Xa&mH|9l;?FpsQ7gFg>{mEDow4q3$q z;?T=<6#o%cXQTM1UB8?(_m^;=xu&ZU6k|bx;t%|-vZdHhKRAT7#TT!1(vUga3A?Ww zl)6-NdR8jzlW>wTJAB{SXTG{!grd(R(1Eg?%0Kl3T3u^)>uqVmw)m$kO^QOGt0Z|EaM%O8sQr*g3jcjq-W}49~~V zj%Pco5MDgG|E#{|>KO6R_g0~)YR)Q7>Ae^tyGlaer;q|D2}15g4niI7lD+O&J$B@3 zYvwwnxpow-*F*nJI`*iL##gt=aqyERHAHl|4j9qyk2DIwMV{y--10Bjz{3k-eKG zAFK85l+;KR+*R0%VG38ba@AR5J{TO`ocO-G>wNbkJYY^WDi1xq=@X^ekGk>cpAfFQ z>oXl9B$YT=4nns#K2PHf70(URhbw@R;MbOC&%}-Q8daR8Dp$l1V?z2U~{6uc9@6T4jynJsEt)JzBYnM1suFj ztU7BDdrg2U^Q7;uzX#1&JLL^H{M4Yc!Dbkz zTqW0&Exl01NW+=^BX{f0Q~r**ppH;YKGhbrrPNvr!s$SM1_lr9=&A;bv<6x8wRDc3x$_UUNlOZ_4D(8#I11UFy5zLY z_;5@ja7Ns3!uI;7)+sHjGU{B=;skt$d2jS^M?d+_DbFbWwYeA4+)TV9%ni@buhgZQ z+wrOwc9d#YAYeE%mzChFX}zxx)}_t;*- z*4wj;l$k37l{@H~&V9{gaN3S2s7a@bF;T9gq$?@>#H^)ngO?fkuiA_e^##or z;@Z3y_!u*Cuh=oJfi{Ixrx+; zlzjvsU0N_CgVT|w!5T%#Y9l9X`@`MP`7I*~7gkM!j}6z~vn^JmqF6Q>NyfNZ=~$xD zS>FBB=r*?Oyv~uO_4Ms<#z1k-^c+){y}`ZCSlwr9=T6lBUR~k@8ooLqYyUfV;8)D> zzGASX?LZ+{>@ zJB}#kIJD8ciBN&Rut=$JZh90<;k2&SjaV#>iC$Q$#BMqRSy_?cN5$BtTR?y8#lHXW z+b>LU!KH^p&w{rT-zUQ3CxmPjlWJ=CIrJQ*$GCb69i}7zAChL6n5A0MW~2I+{M`lY z(CmniWV<)|d#56^W;Y%>fg)1UtCd|pnMrpXv z)0;&EbBJE1?YB*^TQ~yUGl<6U>F{UiHPXV22(H@B@p|nvx#SN#%tn1n^yaM#R9I8M z<5g9gBMbfhDX{#6=jEQe>qvjf#g(6sF9Sw343!#SWYUwD5h+I)9Vi4gg57cr`;O_< z&QS{DF%uVE$GBk*>F29FdqxB8{mGHJjR)cm|0Gr80#Y?(D)X3}5_&a8>?#sceXY}5 zdS~_CI4Na?8ke%d;LNvaHh?mtzEtk0R=S4Bb3F??WYxBfvjH^Ae@@7VpwS2!3(JUZ zt|`uy>3BuEuFHAmVB`AxoyvfgC*;GVPxyA5? ztKIoQe1^0CLTstwdYtqe z+99I-T4~dS&g|Kkzc^XSgsbjgeWRlHlOQsZ@Gaum=g;x5{do@XI664=Fz0p-nkF8$ zA7iF`bT*f&JariYcXUyi7u9OF=`k)8l;rjq_>_SlJM+h60^%k#Z6^uj9S{G~qJHZy z_fCI|Y8$;4xuqvHuYb#V@+thy%ryl5d6EHZV+>xAQ~o;Eu^53%mhX$OQQo(4cZDXu zeGvUJp}>V!XVrOz#x-GnK|C^!F?X#a&d#`rqW(+q@^{5N$?EENiVY8 zi1&o4F*ZNAFB`#+QLE^$$Kf-N@68P*6|)=-&Y#2%!JR}@f5l6KPo=%{eT^GJ$rUsw ze6?%(j!#<(fziX6w$q+3l~(c(pE#CRDy`zj?zs{y9=99qxeVn5#L`O1|TI@dF-kph16)_ir~P-*Q4`? z18WB*1S|RV--vb}1WezBVxH$%7RQ?A;y9_vAN6ig9vGqMFtd@|qqnW?kaV!1c5|+h zdDtsg?&tmrgU+j&9HrfvVGBPL=h1*Ljp?_Sqwc(g--9)YeOQQx=qr25T{~H<_VM_i zijkD0aV48ibS}YiyfZ?xDz+1#J!JYzMopBR@je~B&iOT3!5ZV)b$NO-JjQTzwHiOo z`X(l0|L#cLDu`3=x<56{Z6U?AT*7(UKO1>ld+EwN@IS!W|1NNL@IMcnwO%i~GyA5? zm7Hoc_q(Z)!O|C{pgC^anbK@C*ic9>Sfr%N!NbryJrGnqJ+tbf5x6Wo-inX4XK(RoW`Htz zVma*1&M<4-aC|hvEVGdb)<$c8+Te|URBQkqa%@h<@I0~HNkXiw&{rX@Ny7N+6|ul# zCX5|_wFTJ9uRTm#gc@t{W3E0O4L&1apN>(C3Se>>j(+z7AMw7w7TyBOZtIFmzCS?C zkyKcw|2Z?d7h;UwggeH|zC{ExrO2q>C3ot@yZT*wYC7>0n$b@0bR>)hdl2t8l?h+U@Rd2NGirP)`T%q_rg(ia{2T)#)Y!iWZA$c z&L*Hb;W`&Tqx>{5Zw#kIH!tuUNXV-D@qMik$D6o!h;=)43&>Whx~JS!F7&s+P5j>e ztO?f|Mg|Af$t{6nE;?!JP2%snDk~%0la`ij=>gDcYN~G|jdVdX*JRjX&=zk0Ya_{# zMXF#I=tG3#*Z3a=`DwhY8LOwlnc|oJycX9Ni)ur9Cew-9pdmoDMa(e0tL{f5BrH$q z)Omhr&pcEtXfxZb7`vf6^y0`ZH}2$PVZ0}cJG;LyH28qKQ+FZ;JOuNj%gwh{Wk^6L zgAu*CFiB4R{c{A!TDa;?w7a)J32jRf9ug|57rII5fm_WYBCg7ML52_;p-Z5Un(wV- z7M-KNrR5PCJ4#J{h1#J1h-b38qr@jNx~Wr`OviP7G~*}4Y{U`10h9MU4o7f`Y;%}` zn>;h(Tk|w0d1pLpB+y9xbqeDwSsufUzMl}tGIUNnu-AbqfRexd@LA#e>le3nB~-VY zjKlpRCcior>1>RZwq+%4JA68xwRM*9;sF=<=TkV<%sjC#u;1GOgF~mO|H4jl*4fMr zK_=n4o`|22iDAW%{d>$FFQ*d=_9UdHNd|#zGPIPe|>u$c49GY1~Z%!$u~3I3V(IrCAGs>2hD>gaLs%J`cn9vN-W+ zt$X6UR@Q-jA@gi}mGb&0FU!J;0#pFd#?ct#qocfvI;`#sZGGw48+uXFKG6LWqEooN z*f;bFBLVuF{f+Va!|rjBjpX3G8WH&_zjBug`klaNP*6=dNhrSBX5Ru`Oo8F2;`<`F zf7pKjW3U|f3EAZdh0f0S7w$^r!lAN}#pE5{a#;F6t4(Dc=F{NZiFiQVY|S}QmFaWV zlV;YHvHRe;y87JAg!U|Z5V?33d___-aDw_%tu}w)!3`Z3OU0^tQo?N|{x{hX*gqlf z^R0F5O9ZJdWWa>kxC?&>i?Vg!L3eiP%NyLXJ2`PFtZhVfCrQAR0&p6CmuY10IrP{~I)%+r?!8~73?7h_M$4xMX3**RV)U6DrbLmZ6 zlb-(Gyqilf9OWoy_0NtEXRV{KzV&auM8&UL7qDw75rP}S)Ms=moz z90Q4}O5HUjioR8ypgqCtS=w&a;|g<4(TAVS%WHp5!K{}rSyjJg;bCFY_+)p%-bj<+ zf#JdPLTeA38IpaGasPIKTcI%V&sy^5F!K{Vr6UL7*I&lQswHWWn)#b+|rOy4GIgFc|_78MopRiOgkdBrrP_m~2RCZz7uT$QxybZjl9>mvBm=<(I@? z*``DF8Vfp=O0ExYJvfKPxU963xfO(CDU4n}IkwT6kg-g)JfBS#c0TI!jPKJK>s)qs zNqTYLf%$XJ!w~KA5Z$dI%Le?sW|*U@{>`fjH86e9Rmo_|H=2U!OkLZI-_F@5yxC|umqzR0*mm^y6!K`bq6!&b)E+vEf#ID*f8 zID;Y}kGoNNAmtxxMQ zr&R8D8@Ft|w$bX*&Wi-`yI53PxW&@T4P+^4MEfh9P#k&lZ1G*Y&(;BmXR|v8!_FO} z4MPjd>w_;**urnkr+SOy$C2_J*T~iynJT@=kxdSjYXYqBU|W21J*v0Cl;BWur}3<_!@xC^JFl3qpMo#Vtm?&8HTd@#<_mT*G- z3325g7KmQ8b}8~~Dmgi4UNTcoVk*9=m1C7492TRYnw>*zKQ=qC`w1?kzPqsIgsJ0I zFF(ubraCm(spBVihLg<+Xt3QR4i3<=3JdaDI@~v0J+8x^g7A#Fh3bxE)TmQJh|rE7 z+u(`z%w{!}aSfHkvpjd)Wi4Y#989>O=Xt1fx-If;qlIeUoNQKRV%5ChdoL48nk3o+f#f z!&jQUoZ%~D)%KvPspEv}1!n8u=X1%-%q2$o^UT@|x(apOEwJHn6~ao|@zI<=Z&ftV zDq-hK;>cuAOVB5sdJUf^%o)7%n(}4d(er?vj4muRwY!u@;_8uCVODpWb47@d3ULf3 zxuk3uVf1Bu}qCepB8N)>~#kuUhUCw2V;SO%kSE+(h!-#?$2jc`eo^C%0n5krGwU z9FNy=*H@GY&25L0i?p>5mps_vyf0op zq)S*4zS3%y<$eR^5*f?q7i!@^TZ*FIqr^<$iV{l~?R73Br#ZM)*+X+C(J*bXv$a$i z_oCIs?v7-OAgZ^uXUx825{#^~T8k|OnC06q_<0+z4$+2vH$C-uUsl^t<$vY>VedV| z;adBL?GX`@5WTkq(M$9;3=utu-bwTlMDIokq6_xPe&sv`Y}xrMFwXKc?nkT!1n3Jq_@QU^pqSP6iFjRp zUqkgoPF0P^?#x^Vr38Lp*H{`}6xXYFvXw^!-d!HHn!5lPk z)qHL1aI8kWf^GaB+B?QU3tV2AxtpeRn{m{JTQd>yrMa_KGfo5cmhJ?O9b6QJT{J-& z=)?ZltFLA)E)~+Eldy`jakoaq*fd6Hl|jDjgJ}kQd$Zk~;r52Y)7MWCrAwUj9}m;J ziK5+{v(2l=stTnVtU+rr@y9IpOzvLi-H6Ec2~Xt5n|-f3DYnH0YqjKU^{Z@Ex#5L}rtD+s3b%Y`Zj@7dJk<%b= zjqhqrIy<4;RmYs>C{Y4{N_Vd=Z9?TTzw6a2BjVlVZr4E_Xpg|EVsq6Q&w-wDN|0RTVYiq*-0}GZ>TfJMCl7v?<=@tSvc&)pRCnkb*kX=kP8{CS z(@bn-zgPq18G^|mD_^x;`ydsGhOoq zzZtG~(%;_)w6!e(-Q->)Vubtb8C6HuXR{l`oNSL}1GcOne}^&TIQVW9VR%+DMcg~#Wxs6rs9R}} zJtR}XkzZhmd^T6iyPr>lWe7}pW#`3Ib=aJ2y{emzGg#blr^i(!H_$oxv$;vHcHG`> z_J@m5!d?yG`!hfeVJ`h_6+tlC{<;H zR&Q}htr~AH5&wvg=~Zrl0{`9hf*qe0+QMI;Aj9FRww4vcutv>Qsn?kC=a)tC@xl#z zRb^K^uRSRj_0;nrCWh08G&ce5(Oa=S$dVn!+S-cx=R$-@q$*<4lXVb;t(`AAQU?Ki z8^#{=7bqG?JqN8LP=0|#yfgvbic1TyGa>Awz~U+HyG-R3$l^(F?1*wf+Ai~ zv5l%lpN$s5e0{gC59NojX(zMjNxShf)Gq-s6-Xth8t37gns ze{(~iNsGSMbI2;snYP-wAJ`VC*_MQ0t_7{#_--ZvmDpH=hp4&9E2Y=8RR9u4b5x6< znY>gA*m>x1mRFQyLEz6h;8jB@@>hmBIAj3gDzAwv)=J}%_gST@1kmXYY|jm6nnYEX z(lG{*qt;VTptQzGYql-6N`BaOG&6c`nYYdYBo-W%QKVe7O@(1^;1Gi*IH60@7xZyy z-s_I%FVH}+oS{nkvHStYjdAYTw@>Le^;2s@iKQ)XAN~R*P01bJiwO>&TiE6=%Dwrq zdi`k7| zppb;_7u6b917F>2hwwxK=49VNUc2XcU z9J{}OZKjCV{~iEjxvm-HbnK-Wb%px$ksITO54FjMU3Hu0!j*cIe@f`psVG6(L7EvA89AZLh3a`d&sPI@HIf?L*50H3YXYOLiBc@ z1tF+P;PM|hL`8c1?|YK@Vft+Bl7wz=bpjRR zEq9wg!1)Z6V*FSO0DhbTNiUkKfGcYtfRug=OivEdeB}ON;c~dSlMmkT_+?4DE#ypY zB)C=dUd=C16cpRi-uNosp5sX8q8MUp=qpYDUSMMLs|E0}OZbaOJ>WW?YXN9OrJ*f{ zkyF1w7k8oxdM-5Q7*dQEPJzd=ALLjxJF3HgGWZS~--t*&0rhA}&)2OHXhC%dbY2XS z;}!b}4k)1qfz)Es16+e9Y}x=y8_TFFp+(cWhr^Tbo5&8#J9aVZ>ZWefHFv($YvLDqX(1}Elr6~OD-PL8yciC@ zb}v}Yc242S+Y}+bEIl8z$$7q@SM8GQC(Azj_PfKk-I+mcGNR<=bbl!3DI4+f!k1+> z3Au3|c;0qB&j0~gXNWV2G3(&Ni*xq7$zk$Wt+j1eRqt9?tkl$gDm%vS%-1g#Y&WEf zf0PSni|8~`dz{lhmK^4xpTizib(yuP@4B=ZiDc>@yB0dM4O^0V99@zH%*v0r(_X%4 zQC&-CYXLRL;eNH3=SfM;@fNr!`%rWY@Cgr^W^Y08yqs531uJ#+C6wUQ0Vje_8U?NG-?43~+Tf=6(xz!WjZ>@bxUkY9 zU?m;_Kg`+w1tJF9yJi?#L1%nOq{=25^3+h*lD_g9T{EsWaeh>*K5@UDbTzu>&^rZ8D}Do~)Df55k26<&PM z)~)F}LFb zo{h0DjZmyPDsoGPnVaW3>5tf0n8ybE9&qKW#LIuwO)7R958JHpe-$x1)wEh_c14ZV zo;b;k+hxZG%U&mQGF3F#u58*gt)84xaF)5q+yqQ;)L{NI$x$y;^WvF~yh=^%JY8{P zaJ7p68~;%}%$M8CI52yzB>|VWd?TK1hE&MM7CQ4oaqC+(ud2GQ8Ym4|_Jmbqwsq|w zd{cPcXRgXzPaw4%6?ap@H8U-#(BXjd`fw+WX>`CXSgX2Xta!Koz5%GWpsPpnU4hts z)1mC0DrCapjwV7r0}KaW^v=uL2C*X7us-uGEU1TYmV66c_k#k;J_=|~ESu$ht{%pIH@ z%mgf-rMuNbJDY^n5Y7d2Tv??b-p)MKPQf%2MqCeQ6X^Nz> zfsW>2b3_I1{Ey?LD=?pRaADY)?U4O+)qv;1b<-5IrEFDm;G1g4l_pG5$E1MI>vb7 zb*$8QqVx;x;>KAs+i8nvsz!Az$XVGikByZf=C#q`LNTy^RjtNxKQ>@q*pjhzc=8LR zSj9nB82xUP)w*pnAgVCvX})0gn9g3!pyiK?{zhJ%Y>xN&WQAAdz~dUlC1J@KddCDv zk!^-FV_H1|qUIQJOUd$aA@mBgDr{`Eee2;0&3qyP6dpIYeLIuQR)M`+6$(~qKgciSlk}Aw zS?U7`h@pcGFKp~?wRcAyN=W^F<*9PpfwiJ$iHb{x+gFF$Hrx#avz#zQSj$B;oGu)Nf7D3 zi7@~I#h=9(a(`*3euWBT>jg6Z)arfPKLWgW184=H``oDv*PTZ8iOb`R$2NVmf+B!b z6nNzTkNj&_HRzU%p#F!c14`{zuPyR`;92n+QDoV7wfE+Fc?={&7`I&zUzcwEEaV@6 zC7)m$K=CmC%cKGL1c0f=Hrgq<7D5;J!{67hhAw>Vvo;m9iG0ZOm`A?yG;2+_u+9_Ec&%-+ooB~=u9=eFbvMNtLz z0BKBwapPP#{qA=iFir~tWhIX#r(+qVx19*kr%L{~r!*Rw`VYfGSlOK3 zsJFl%!QUH7!^-r0EE#VYGk5PK@N_zTl*qaVG}J{~jypbkz^!1W&P?K~wd5Ji?T3J- zORH|YCQt^v8>eG`!{}!v`d*Kk+%RUFJ$T4D1L|YQI6qn4k>*D6aLO5EFt7mr4jh=> zGWpZ9=VEjwj}WWrde}L_J3S{^iKp1Asc`8qu<+6#TU9CkqGaw2y4J*6AD7I-CQdmo93vMI#m7+d}Uw5&6rWa?xD_z~a=i3V=6_Zsgd>S$RYgx2xjqI9( zAqyO-x`X6mSQ9=|%^Z`weLU0;0PE_K9cfP2UJMDUo`Mm_@)c_hPJ#DMp~c$Al~)q1 zey%p8ytzwQ&siYomXJG05(L-GSVujWB}baR5Uo4s5dwCgvsIK4GjB`w9L5yyENW>q zt7tu&M&#e7nu<|3Zknwjx-u)GtFE*wVxSMv8FwmslxySgM7=CAGhBR4kGbPsYqOethSoS5DQa5BvU!^@ z6dRGCIpXEM!bRw}`E6W5@7uk*FS@mGo0f?`7gMy)2E32nbXfyZ8KBL_Uy z;OWG_jn*!Rt~zWw4ogtpx8h#0E3j7wfjN zpIYbBmW>vTW1ZIrwoTh%^b}I0OWqANZ%@BN9gM^eQ)v9Gzr#P;muJmidr?wF9#C(2 zzqJ>A%|LWJlBLgw9?`MPA1F$1>BEbNSPhd&7O!-xYT$awP7> zEOp@krRELEGn}Y_k6$_XI$jMd`?U`w zsh$_`&Kt%<*lr9zuC32KO^d7&yTbO!7v+L!TPtOH+X+bWfDQ8s%q12u=7wJ+*DJ_rEC+%ei zD)AFmc3Zd?*5JW`Gy<{O-<}HvIFj6O8wy%Mu^M^v-SY4Gt!Pn8w=~y|o0Z4!ld6nv zFL!*mF@6|r22I~!D=Qy}L~|*;dgcRrMh{&!{7Ejhp4QKIE&FD6M_C^^KwZ(a%k~g~ zDj{hf-epnt4VFcZA-XgrDilde7?_4;Nut>?&WY2h8mH*?HP$|$ zhO1%}X*Z;Qb0R8VTy5qxi%Kuvod!iUdlNP*5iSa zS*B6d)?3@)S$B;$ZqY~JO%2r6ghDDQ4rnA@X9nM+kyDaP6}T0ixx!oCKamHvc|tQZ zvs>pLu4nW$bQN@G=X#%XySe%?-R?Yfe*4w9;e%a_<+*w$E3?PdXmeRr!)aZs zKG6<--JAV#qU~eJto7i>%kuQfTr?&Fr3IUOg@O3<7Va9gm}7`SkhIroj@LTeXknl| z4RYAi`S2%gg5*ToVZsOFI0+z^R-`j3t#RQZX&+|<4SFs>c%0A%n>B9NfZQo5K|a}b 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 yeLDF)0C5EKw;q#F)!fZs;H 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 ew$! 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 z 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�+vNHmT32VL$}ZmjoZ1BN?b+Np>`NRmDL8_A&yQCM;$v>gT;(ufG6`}QZxDeYEcxjecl(Y zPfDs{jb|D8hv`@3mPs(Gcs;+J03iwG6mx=j;8uFJ-=DJa#ZIlgOFv=Io|QsCNelhs zoRf+Gm;jHuLy~(_9z&DI3&{7UtRazr{7^Hjf08+CT}m42RY9jF-n7Q-bm|@ zdTjBtWuK5o`Nc3D#F5aaZh7{g4FwT-fmy*PBl4%Jq5@E3ALokAgUwg@_bFa^_NjNt z9~1O$GJX9h15eCfFKUmQ`TNy-hf}qrP+Sj}zG@>N5rrU-xcq6QmP5N3Y)}IXYOJJz zy9Aun5=d@lZy;lD80>LQk)~b922W2~i1}+DQX3iLsm%Z&ka?vKew82&T!GWlssIu| z}Uc%BrJYY;4me(9+*C~(pzeIjkz0^%Y z@H*fhty;MZ3rNTc^!MY^fHJ2tte8-G2K*{@nmJQ*aprO`O(e(3DIghFQhi9pS8KST z1)K~6j-Tfg0c^smHOl;b@12mb)CPeT+WC-AE61HOAyM`4#Bg+5-vo`jRviU5;;K)Apo zYZKSo6+6t0BbEV4eEVjr#;ji|GmH;x)qCBnxg#vQiyqVgF)KQm-L{Z<^vybHRf(54 z1E*2?(_!-BU93392=AY*B#DPbkYtnh2dw}s5(gpx!wJVH=HyiG8-!%WbMs?9pN&Af zGx^U-zB^oQ07byp8co-jE{g=*OUBj@V|;YdGMoH@IQm6OKnF~xALKu zS7^}~k%C=A5C=VueXG?8^G`fg87AB|jE;7Zj(GH-4m04-f_47@hrb5=Iq>tux9h3u zIz6x1ZZ1*Sq@jM{QouF>;0%s{4%O&FB#d*_YgRi?vc@4~`O}Bp=z4yY5ZcSVfWs1T z$4UUIlB`Jao>;F2vu-X8y6s+EfrHw#f_Y~MG70qH3V_?kD{N%|D8K}F{AdH8xxTuz ziRM*#i5LJ5hxyW5J=NNoZ`a9UaIt~TJ!_#8!)Bi%mSNnUbM5O@UPO{_-jA4dJMg{G4_DYTde+_gnyT zj)#hko-#oo=NQLe1w-dA1&_)&&vGaNT$Yo~lN*m6XnQA8k0anQ{7pg+o0o+NJw{Jz zmK&CN)W$N0f)7A`rhq;Z{{VuOd_*1t{hM#nIhHedELQFa1hj9-1Jj}AzY0I#kX{;x z#b36?o}(13!$^u*+ipN7X&5=@)AO&_FZe7@f-Zk&80EBV%x(}jJ9e%|^4(va{{Zkp z1k!IlKX|&~;YGN#)8u{qIDMc{HM#vR%XD7lTdI`r>Zk~Zl>;9+>tfM@1z@>@2xjd;)m>cFJ&~&C@yp@!Zxk<)5=ZXNXSq$wd2h%6D z2IRmS%ukVd9{g1KjfY-H$I-niq~)MYN^-d7fEfg?9U0epa6vtQsUBY;b_FMQ&BtNu zQ6<~Ia7HnXz*Xc%B#*g}c|Xd4G~|jOFMK&wVVa|>+(#CLc{REh#4-$jyr=rp9o{(B zBbErG4eePTFVz!F@U8Xx6B>xy2ev>h{HQ0f{3B~H>Hh!~KWlAAOh4$hy0*C`tM|Yd zyri>5>;GVcWPkdEKayHfG zQRRl{a&UcUnb~0bq;2om(-$G~56g^u)zpm1wm!?#nvs;O-IFEoe~Gy3Opr%#!FO;5 zed_-Jm9k|K@t@`IRc22uw&RjdN&sOvIRFv{b5a6XGRJYpBeg*q@yQtc#wtuR1GgCM zj<^&6#8z@+v>sZ4xaYkqB8Cz-?#EwT{xx-xLbAR{DUy9FIw>wBg-ai&9fbf`Bnbly zV;pgx^NOW(;qKMd&&$|#U;hAISpDNR#=#_KCxCvKtbrGqIen#ra#xZ~09{;3g)Z67 zaogXDn&w4lJeJ|W;B_Q7aa085ZVYXcwQKQf5w0>?v`c3 zx?^`y&jYcnsb=~7t>IZlNa{vu_L8GaV^P67K~cxPX#q(lGn5;Y>`V@Wu`~f)T#{p5 z>P4J<1Bgi zBmLT?G#Q0kaXWd*Aa(T5rCp6;WLXaG_z%Y?p!_@2QPxR+(xX=+kP&h+KC}T)tRabB z9WZhUIUdznrjj_z$ATY>j-xb_hlUjL8+whPD<9=jK(orLCAZuFvmXBdN&uEeRk$;Z zfcOKBhaD=U_YPakW&o>WKZk0#_U=H0^pJw9$pi7GTf|_MkIHw0j&sws07AC2mR-Q@ zW&6N#dB;kc+S1xPaWt&ki!j{1u-G4+O>uh+YFgFQsK(ak9_R3^=8!V9R{)6d$zOBS zPzCSZ6Z5ak%lP)D+6!r}Oh7Q$NISXX+xgJ4$b7#z2HBi3 z{^<3f3HC-TN0lQn^Ec%C_cbcDvcNZj#FLy4Us}L-c^_}^WFCFT8TPAD8;~<@xFivR zI%a?`Pb7{`+zf%V9{KJ*m6Fg-!a(0K-GHUAKD0@yO$44wWTayQj0VqIuA0Y}Doj+a zRJK9RXah#x28ql!VPgXuNa>o6QzSPHjyVj4PvKOJ(oH9vrMH8SPu&2HhO0*;Qrx7H z1GfMUdK29HPzU7a{1xuzMfg>w%8!PEM%;aPTz+RY@^AbQ^TE1ixA8Z{{v^J&Nt)Iq zXe4FkIVOC3hp{03mGpo76@y)|)4VY*opwZkwo)_C1Obuno|W+@{1YSgfN$Bl%Ij9u z?4I@we^#=vl1Rt`6lNoFC*>b_AHa$L{-5t!dt1G-;lThP9B@6wIL?-~&cp^S{{Vet zp5DAwc^3I2YiY{m9EHK;1Jgc-6`0mrJl2flh>MK!RlU6^1EE<|`9W|5=PizYl|vxF zw!%g{oys~9_;jf)=P}0?)%lVzquBb>qJJ$)ArZ2D+;O;?0Ip&uFA|Wv5ywn+sjseN z`yxrebk8TA54ADxZezNR+>pCeoaY?${7qK4n3Y&1ApZakO#oyy%#p|E0l1;(lZ<=Q zo?E$)UOFnE!)^ly9+)+3Y4;@>Nb%+K-#iZ0BoeWOp$8=AsPz7H0Wq+=wz86WBtj+_ zQUM<~VrwSU{esve>GQYn4^!#du1j>{*X*qLk9I=!JHH-qJt>O}s@Z1R!~#g*0n?9q z0FE08;)qD>%2@6I4`0{trJ7q?VfJXH4Bf~e?LF#gx6EU4Dccd`^Ughg#<4E+dq5s| zH+g_$^yqs2Gy!H^M&s<#MQ-e+xZ|cil=$sl*a(cRAjZ-L2jiaq0EKh6SJ!%V#7h8E z3Xom479RVJb-!pvwn^dIs{D{WKE0>{Xf6sw?{L7XkJ#bRB!I9lelxZ}UHk91|#U5LQW zTNpo~uBI54@TdL@lc`!o;7Kb{2yBg4PoklHkwm+iTyO=hK*!V8I*uowhFz;j>KY}%A}b4&8_uCB#+ zB#?I+{$~FG;D@#kb@BVeH}1Qd-%gkjAs;I@OnPx&(n2M}UdNkp`@#W`G0!v?Gh#r9 zSPbBDGyQ56c-Jog3P;Rw$e?mhmNU3_7?TZG zmRbD8QIJO?C(@$==&RjNwZaD~5MYif2-Y~z+Q+e25J@KkKh}Vgvt+SVPzr$E822CG zXc~4kG?^p$VwyY`QrOR@Jp0qpe$c?E2yg&n*97N}b6AoK#d6X~xXwVq$Qd@RT~NbCurq> z89C&d`nKM9L-{fXEUZ@`WRfYTa5iE~m~GVu${ZH^+>Fy?1dWIeTOmp2fF>|21ThsH zk~7z(I7z5&{{TutP_a_o0{tn06vdUwO~~7U@9R-oJnLw&DgEFKp+`paCakP6%WhsA zu=~euGml!Lvci*#co~_A+yNNR+$CP42eNRLFG|a{S04&sy21)Ca=tpWfP+gC@EpT56!muFq;CICVnWyrj zKQSB(ee8PrQ(<6a%CW;Q{qvr@_o-2#LS%Ep5^#SiIZ$ds(*%<-D(;MY#~D^$;10RX zM-naEsAC2o4^ny&)}%{I6SVnd-E;E>=dD-o10IrTy8jVO}k_oIG zjFFYV?a1r?HDcdOduU~~v?>V;!uKD@Q_YcqBAPN@DT!53Fxd1br)pJ(8<-wTr*$ik zLUE0~kJ6wLWjNO6E2(oCBmho$Kb<6ZdoS3@(-@Gc@7om|f@pCit1~mNAoIJ@r--{c z28^g;MsbGS>p+V7wdvEKcirYRXQ1S#H(X=2Rx!bS77+6m zSx7u_=~;mc@I9~b9E@Y?eSf87TqW6*?kslhV5M>fIuFLW3lT2)GD@oaz_&k*WL>Db zwVXjKESm{ZIs$s)fDvvl+TJ)B6r_Y@&--8CIIe<7k|{PuFsFf>bC0JrgqnPIx_!O7 z%FOYBlh7QT_x^RZ^2H<`Yq5@IEZD|=UY-8{n4kkjAM)%%#+OX6o<(p18CYENB$8a@ZRiiEsgPUl0I}cc+xbuh z3G7g*j{!Wm!x4ki>q`D&-UoqB6?bQm#yu-qD3?z(z`2L5bG-h4X_0lNliFHNVu=Fzl6>Dx zbgz}aV1FNY_u>!iv7`9Y<5_6DM?LNI6EyIMW!ntQi-c8G2Z5Xb2X2-0rQrpkj4pm{ z!Iip^=~e_x9^IW-dX5i8H26lJ1197MGN&h~+f8jb*}-QhkIpw_R070F}-& z^sKVjlJVa2Rn;6HS6?NRaVqAxOkjFe{6_aZKF-UEL?C-qupXh4ctc!03)g-T( zliq+Vw5XAO@q!j?Z&8jHx8qs1>%QsaLQ0&4-raC`$JU)AE64=o9m9Ht=Zbh_x&7o! zr+X<Fk_UVtLEk~k4J#8-G`E!U~yi7es2)C{a}`v%nqzxCp*NGFa!vm6CdFfe-7 zMYGL=Z*B6C!EXC~zO|*06~Lb1O2`->Jn`3@Ri%yzVg1SSw@>&**BLLx%4|Q)}=Sw7Q_H_}Kk(>O}}-%wFR_WH7G8wP)MlD zBZ9kuQgB8+F;F{hhjBcq#du%sMSt-hNd24qW37BLGs)rzboXmdvo7aTkPg)&leC_l zKUxZr{N8@hmiOK{{{Vu8LE*_H22}9^Sw#;}0hAUe>Ki2cSM{gjr`@crt-kLr7uXkf zXjN5zJXi8x@MLPw`*V0lSk@Lxol{WOG^=S|Kv?U*%tRwfuDp;q_lQFaDp(y#(Y`P-0l>O1`~Y9tJiyu7!ld}BY>oi)k1 z^CO4us_=T9-k2QK4MEx%Il_>enCGW%osMX`0vTDZq+cPwcOEwoI1GCqtzEL)<|r$L zPPpuS{{Wq3+oIdrfpY^YYjJHNoNWUc4ZLF~rh3(wBz2u9jq@2( zo!;a8@l~E8mnPo}(*@6R2Tx;1D*|a`xREwZAlo4%fIE++QMb8-5e2zj>~@gA_wVgm z!o^D~I~|f001?Rtu5r?z=GubN!ya96j>oPz{HWz%RPrS9S_GM#5JuCC7CFH6>0gx} z@K{R^wSLV09k{eB9O>dHU9bk{0da%tfCu0QrGBihmTnWAKli^{{2%`Sg3oK3-M@|g z75EC$@$GcIQu6*uLh$MD11E#q@cbwMifL^MJZ?j;0gpU?TC;a?c_U?8dh^KnMh`sI5fj5O z48SPE0#7@AsnH3fQta%@l0Y~gDd2r;FbM8TKF|vY*X9K0mOZ|d-?9-HyH{eQ9D|Z~ zbjE46Z1LHwATDKct``8O>&;8%GFZC6#g}&(JvpmL3Qq*Csv*c9FFkex#!ur?%4f2T z6m1UYD#5b5k5i0#RhWF}<9ClC+Z^YwwrexZv|J*~v&>xl#3&f)oY2?~^8`+?1?Dr< zoPq1~!No@pnQ&ANh(7q>A79d}M{dSQ;&w5I`IG_49lt(m>9g_|V-i=WB#eGF08*67 z3dHPo0>QTP)1E6h#R*NYvnbpHHyP*C@T+%wJg+7qcW34};OD(jS={+*ge#ntILJI; zVt^(=BxQ|~?Gb#3Jntv3J$UA)wlXOyIpi@o>^%q5ts=@9q=t0)`6sBy1DyA(O*B)q zYrHPRbCZL~;CqU$Ry(q=w{6H2vl!PqcJwC$p8aYGqw^G|5G!DibCP@0Mb*p*TGyEh zgk@8>laNXLs=e*PJdXUUh6{t!9-iEFqm_l&mlGoH5i0!1SFjidIQsUbk4<|UYylsX zR3Jf(q@GCQjDyW)UbUfk=avR&L#R7OLCFKRr&{?t_BOHjm;V3=?~gTKitBX%y77J6 zSevcf+U!MB7VcRUKt&*J`9NNj(y>Y0`r29J+@(NfBmze`=dDL4obj+mT(e+jxUB`S zj#oC2k1e=3U*aE~WX88IJds8+5QDf5Pdz%*AgvO{tXAORg8YpiPg>lyxlNncV|E)O zkTNS8Hl9e?(1j%K01i8k)~(q^9EtagY&zs|^7ItBkP|WT(|y6ldE4p@P>I$lCb_ja z!gJ`Pe_Ebpo_oiITzO$ZUc+Gb`sSfVkAB#gFPWCzj;FEw=;lB>$!D~W%9H|7fW95RFd06ljA+2^M?sBInvw6>1uV`v#u_lswWy}H&kG32q2EZ~fueLla^pa(&= zXatjt?Pl5EA78CXsEZVABN6#$f=&Tp-mmG68runi@r}fTz&Pkftt8UCik@%*e)56Q zK>q+50MB^k^06a=W(7g&a1L?p>s6ZMPZWyhg~V%)GGDjpPKQugE`&&d5Th{P*Mt3P zY35k18g@|1hjCTzbH_fE0LiBwN<$M3#AoH`LE|5XdPcY&U_z`3;E-|w?tcy{K_O=b z)i6quxaWUwz;n%2wuz#Vu4f@keL)>hu17#ReP{vxTIqTOw`&IaYf0ex5$zr;Ui(?X`Mt0b^;|BzB)0(beGFt9acjpE2{{ZEe z&5}xwU@^^IWb@WMt_i^;_5=A=Z1eZTKH96*>$P#(y*UPz7%|q(^#}J8%n=l1RrMnC6<6!%(|bL&O-wON;;s<30Kc zaVmtB`GQ~$!~vgQQAreya(uXAV2#rQDUP^f>ybbeZ|08j?pWGi-6G*aW4EPB&SAL{ z>EuMgR5Q5k-#?B$Dw|m;(bJPKlQf0|h=%U@?+Qb{+Zp)HB61-Zz%+o?pw*fyn8_RJ}J4qO!6T18*4s0C)$~ z`gEx*r2B3>lPrwx9PVy#I41z{k9<%`q+F6fAzDyISdal65yo@uYH=!%W4BUA8?(>U zcRy26T}KtIx(UGZ8JLrwx$WFj?BZEY`K38k1#$OJe0L^*Da@%1ZM1?2`4{-QJT zO;EW3Zd%ozLFWAL^AM`5&QDAX2N&xyP+Swp6TLsy-8dsUgq{_>@ybaTh-cC5?)4;`d2W+SgS4UhgexvoU@71LdUv)iR6K0E zi#Jo#p5Iykx2RkZI5uF)8-@g)qx7u#-(m9PY!Cwxo`<(=*11t`9grM>@_%Pd(`Gm3t$p;+cp#GI& z;z$zZtz&KJ7*#8`8A3ombTK`>J@Zjq zNwNZ{GRu+Fj1OEM)k<+8BH}3-SE8;CcH^(P&s@?>W|fszLaIjaa2s(veglq_0b1OZ z{p72a7!8i+83g+C(w_@mO(&YebS;%^j^5R9TuB-%QOB^m5Ws!m#|D^);ATOwNZ3mg z*mKADPz9I-OC(}4SReFX8b_WZhS#`@Q1{*2L94PCA@Nf6o^jTgWNKK?VA1Jx4OExxwp`*6UvqwbyZW0 zDu6iKfJQOX{Ez4F_KE$KJ|TY0UOJ!SN5Te@`pG03gmz#tF&!;hr8pg5Oq5j|`jD}vkb{vCTv^kQqJ?!aHt1oX# zTchszEi}7gk;;JssB#q!H}mh-v*fY5+-_A2QKrxc1mqlc$u+7ci0992v$0}FsrTuc zS#AWd0d98&Qrki50rmB+)8$!CIAkvID}-@@yq-#f#wphJscj;*;#`uX?&>kg_M~fG zBwPhpRDxUIpT?T=H1oqc;2doL^jXDZN5vOTLw+Qs9tl&p#*%ykJ0H>Zdk}%Gf3S)BOoXl=bppfo#we_ z49ebD-EG^t`c*=1ZS8ZrIR^j_eDhgSqY7=fqq`TGSH#=fO7_@?%97ykb}GbR1J`Km zYQ(V!?IVR)ksIz~*y5U}Lvx%sO6?c{GdU<{g{&1A*I)qndAlg#IJ&PKDxWq7f#k zWgY9r&BCmz8w2T@>7+<_OJzfp8N%djJ*MaP|1YLpIaUKTcW9oB)JvglR zJQ)l#c@wM>IUqLhann2w{{W48Sullp+CMdc+NDp+x3|CLnxeKB4|VpS${81yA1Eic zu5dc=Ds>%^$S;GeptMtZf`f{SZbDN{>(f09dZB`|Wo& zr7f9voM(~;JPc?2YB->jY)i~3PT!|K*`O?pcktD;1IvOmj36L6W)2DJPJ7mU&W$!2 zEU}G9E0dnRTcZAuG2afrS|LBD#gQiqNvg zaVCCdAH+VDEv3>yA(5~~diFU!hJl`SscACX6Ahz2;s)j;jQ7duRb$e1m{b`qcCL2e z47&~yl2=g~V$7klpTng}WQd>iNYuD01HTBrTGN~kA}t#3Br{!3>{BXoNy~qY zPd=A-9lKvmAYU~~ZpKD_p0(aW(WSDBz=UorIOCssf@$q8AXt@#Lzed9i-pe&@i)T1 z4|vjB4M)bhdg~DBPv=1ia)@MJjOoB^duQK+T`r@n_>$)3{{XZg7O}`lD!3z&jt@TE zRyW39jD8gOMP+YyttG?FcXJ)ANe~3?bCbXwG1!rw)#+N)bKKf}g4Q)aT%&WHq;>sh zxcQlZqFrB42ih|1kuhF*2Oaa)w{Pa3K4rKvDv&^obOYDDQnigV`(bQ^tCnH&bja(9 z*S1xT0A$ALGxKiX?dzHdx0%be)}aJ)#WlR!$QU6@9p2~Cs6j5Qmu7Qr?xO&fCnxx_dK!0O%5d#O_?qqkwlw*rUEKZH{jrW}YyB$P*`8a;)*qA3n}5m`0LkQ> zb{tpFemDK7J_2|W-+r^Lm1vl(u8_#d&q0u^Gw;CnqzAl3;SPhgoGBeb^j<;qC+k+26)m-k8L=}!QR5|o{o|GFK9$fx;~3mWB#`-W z7Ya!^IO&`U%ZI~OrtDs%`*N&=4vUfR^{H+AGZYdu@=umi@*Hu(_xw#Txu-9RG~xTr zn|1;MZUY4UdX6dxyjh~I8cEU;epgOmm$+z(3hJKZYU?l}&j51R6QYk2N8 zeRwf}RzH*~jxt6@Ta%wfpbtgUyhEi=D4pbHEAvQIIrbT@-X9X%-Ap8g23~{_(+8rD z>s&za%yw+SPT3z0tcNNGs@C?GXx5;?V!UlR-^dM|KFd5{MD7?7hXA>FP_@)Dvz0Q z!1+%@_3cI29OU;J?DnD-`1@n0t*?h| zr8Bci#5bB1urNUWEPERLk&%^Tog+p>hhlHWGE{Mopy|y^CCp0!5Av4bTO1Dg_UTb5 zr@7sP$IlNLMjcg|g>S6trr|~HysMHK-Fgx_pT@gL?(Od;X^Jof!3h1x{{R}#w25#o zURFB*Jbz!UZN_7U67Ur)&JQQ$`hGP>Gk13zaNDI+l20r%F(a1q-orPmFgr_zATyInUv{2m9&GCh5$0vIK@fm#VR zlFSbsF_WC}->q!HaV5r{(5k4FPCjo^at?9MYa)0OMj)>xxCa1%)aI^4i7X=8-HS4G z$pCifeW+{;cT(HJRwiL1=V)Vq`8=LII@NTV-HTfm`K3^;gT^`k0P9mjn@iVRD-88+ zcJAjPhpuYW_i))l!bMQ5y-#EP?_QNWzk2l21L{{Rs_B6yqO&xByPl3xrh zvrTx|5nQyygRxI5wDkV)1e|ay)IZfr{7<{`sRF_>$9Ak2OMB(qzX(bdkh}^!E%uA5i+xjBZ9BnU zAGc_g9=fp`jXIXN`g8b-H%!T*o{?~4VysVuT10H zrD($xWRoNDjBV+I$4=B)>82+eqDfq*I6P$fR8h$cQMS>w)Z_p+bf5`hv$eC!zzfLV z!VU@cs$%snE+vb~Xx#=GTadW-_p0zK#dI#D`F0Wj&-aHVkQa&o z&etY;Xg5-Nuuf2(_8-fIbDd{r?4K?o8v2%f;fX`%g*Ksc>%bs?+f2E z>CwSH;UFbWIsiIj-heivwzQr@g(x+Mq}sK!-6lyWwf##b5s zzO>txvQ4nv5WDbH{{RrrudXT}W08a-ls_pQI1~X5xJaXEd2qb}_3l49r>$PDpAcCw z^W{J%fDSv>jQXvfi*L5z`D`<>RAlj-@m_s%t~ZIIHZk+e9m_DJXUN_n5~lCNR6Dc5!>52tMDO$FFl(MNCXa}6ah}+ z8@bt|Mgdr3E1Z5c!|0z1d>P?SAL?Ha^owSXSJf>R%6SZgM$nDFC{A&mfS!FouTOoE z+Ao~nA$_2)`$oL8MEJ$<_r_lmwabfdz=jmFHZtuCJK&0bmryLGNQ(#>%s>}?Pa zEP@YWRZlpq#d2w7Ap^=rLve${{{T9gC1+w#GdUR?5^$cw;qrb{ zp4^^*Rp7}g>`)W}M$kHX3WcPaa>gUdl5x`mxaW+1Gy%r^Lh$JEuY_*AEN)B!Y%8|h ze3=CDIqBQ4(!MSIlE2`ap8@{>W?vYm#NP<&H@BLltoIi%dGZv5NijTa1m|W*0GyC{ z=DzlpWP4+5+e3M5K3s9_$?IHPpAkF_p!ml~_-}WpNByy_D+_CU9KO&=Ioebl20t+X zyrGv|C<8*714;}N+@l4|ge8NFecVm+My}DEv4$UA?tL8V&fz%ILh&XJ# zWR%(i91)hH0@7S8j7d;F_CO#HUT6+t$W5fHwlVGOiJj1i5&XidR2sj zV;h+l_nj3_8T@Dh1uX(9!gj8AdJ~Q@Rt%7-2m+%X0;s|KO-8FUaRYF;1cd+`;2z}A zS~HI+esw#6@1EKApoh5W00TJrm|$m~ooSKDD_}w8oCAd;u=S=O zjz5?K@`KZnlj&A1p`0I^|`98Phle=26s>^!#coShCWTC0hjhIl^UBWEPx#VMvdeykDCNmX{c9j7BbOxtM1>|a_M$mJUg#-NbslM92-<5Ig zCCZ(sGATUk&+dxR2>;Xm(xs7CfmKVNy;h}zJX8iPqZQ6*LS!e3jbvd`vH(3Phygs% z1lx(=)pOLF~l#n*`?^2K^ zQo!JjlmSk5^N>n7RqawlS%y$!9jXoka5Im}qy>uzqUD>fpcDaOH3hdY=}^cryUFX) zo3>b)iyhxeg+!-5XCU+*lmPsM47)FJp0*LID1st!xR|;K}2fU}F*U&~u)n(uS^GI+BCtgR?$7 zz5f7$cmB#ABG+Z{F1_K1F0ba0%`A_Txxd;N+DFtL20B;ScDinrqv>|qK8FyuwXp?a zi8xTa9+({GB>L5ryoszY<#hNo>udb!5;l+0a00j z3@Br^FsHH2A~P;VDkjX1MF1-!5Lu2n;}u^}cSx|OIUwihQW3m>rw5Tyyq4`4ONINR z6ah`vLn&o##qe-?Py(xv04gGRQN|L2i{A6qAxLSKERq@h~4N{J7)_0J|;~nMVul-l#N@M9t<9?0N&*rv&-T zNd4Ob*V?E|sKtQb@Oky11(DrVa^L>CWOoCkgRkjP4d~$pHx3V=r>Yk|SRsi!ayrlk zhUAr5uv;Sns<@U{-76iV2kB77Zz#wE0eX;X7rt=&G4hT*=mTB_U7lMxEIS`+k1{i| zON9XOie;3h;Ia^SI2rWCPUy)d&^a04bf5^B9m9jP)C0?Q%wI9j9<^<^AKkCZk5lVe zldQ2e6nvobj!SLE}Za9tgCsg>-;n+i23^RN=ya&PZk>aU&oc zabIFcUSWq{m7C=!k|}=8BMt22kT3`E`{a82&<4b9_Lu~$K4aFRSmP>IQPS=8*+F6a$)W z$H3Y~MmE&(UE8?`LrCm?VpjlXtpGkl=Iz4Z*B$XDKM}8ib$PrkCzYw2Ib*bN18tqx z2-qNlf^*RQ4@&FA@Vt#QeXdI;_}Z!$NUSe0C-pIp{D#&(LM(09vt|)HN@Ke zgHD$(blz-)JkID0nQh=H01!?(brtW7_agnHRsGtoe?R`cTv%j+6_+@WfDU-zbmFQV z(sIq#fC&$lrXiK%lj>@ma?LL?0kC(^HDX9sY@s;|&U47Cl3m)pn#2%>+xNR1PzG#( z0yi(o{`V%RG4mY8M?D98eQLv%Dh_j=fDV-!D}3>m0Z#|lGyyDf#TZyq?|097w{s*? z+l*pDxEyu*)e#Z3h(e3=4!Pu!>r(xiK)53f)Sj8oY5;68%NAR9MgXQVvMFHX^UXaa zV7p=~z&OoTX*ae;Pf$SZ??4l^%!N`okOlYeO!*y2m=ZIOr8qjS2+02c3W1#nDyUdL zCmc`&u93&R2h2t~^c56-dY>oE+q;pTa4JU`QMlmsBCf(CV5(Oq1OxS;563_FEIza1 z4Ikjvji+hq(?NZA`}fPIYxdFR&RaEzI9`EHM?al?A^!jc zpz)Q@hdvT%njM^eaGrH6{{H}Xit|7CAYjxc@PChIlrfD~G+7V#yv7*M(t-Vx_j2SU z>|=`no@uZxu!t}?Cxf5!%{W0LA2S09!Oy3yX5U|1SfGkR06d;Mdizji&E|Y-@$2CK z0E|8+d}8n?i#$1S%WL7AwYi*cz$Ylg<0B-6ABIPKAGGeS<9pd>gMwI)2Py&Je>(EH z{9>zi*6R+*2izx}$DqLDITfX#>-UWO>;PyX-4J>FCh`>F+`t=}nnLNN$GW1{mztVz-Z(z6t6ypVYuhyLTc^%l5*@6&v zsG0Y$DmJD%9)_F>i%9d!?ma!t07mjE@=jSvJPyaTS2HJ{MiM%1<$Yb zsBT=#9@P1|XWJE226+T<3=f-=$u+SW1WztLpTwWUas4O)jBz1G3^~BYJx5xwvI6)y zDtRja%5ZSlKA?gR(yHYY z4A$JF1iJ>>+!2q`wQZ#sB3|5M8Kt|^)Mhko#g0?v&IfGPO|9n3uOx+5T#u>m+N2G+ zr1GQ^MV{;VRY?Od51fpV?@tWn$WVLoIRMpnl~z$O1zUFje-zyFSN zvwH+4Dt3O@AMs#e&IO#XqxX-e3W-f3^=^9PZZ~Q<`Ul7hdC>KMcVYnUD)sO%MY-A8 zx!k#tU*F0MFts*qTh#qx{KE-sG$SVQsmck|Qw~D&(nQ29C4Yu6xgRoTG`Pv1ZY&(@ zDV~Q#uC#!(B)U}!i7FV%!IbVE3xb3RsD%BElvFGF^$64^=Co>uL$(#?oJLX zDfY$xCW-%m(!Va!@la@Or`G2EUy?-s`0j8w7heaL!XKC@-rrNBZ|_|<6eC=#(b?gR z-B451zg+?o7gW~Pm-Ge{JC1cR82U8uMy_qVoe@OD%3|up4^5oa`s?g$E5x~5%(=E( zq-dWwift?I0awe`^IkR>)muYh0pNrq)H?>h8rl`~#dH$l3-?}1k#C42Gz<-RPw;#w z^{Sdq+zN3^K|!X941$sN95FMZg;ud8P(eFje4R#q1@m~tl;jQIanHVm1BwB#x{$Qg zDd|>bAiFrj*$6;cAW?~K8eh$4*TA{=Mnn2B+Q7-It|G7y0V4ko2 z*}xldO%+x%3O+b|)a@9W#uTwo;K4(H+_y9BV@z2*Z|})hUKlk{fn$o2n#*lcYQa^X zFcYkn&(!uF0|C@cYRjxlZb?egU>lK5+a~=ODY}kZt-)RZwa-7qmW->+6#Ioj&G0v; zAq*o^2qybeC$8G}V5W`{eVK*@&_g)#ujp>dL!)ZM=MT)tR3CE0FHOO(U`_jh^e>6? z$Z>9WtmUVYji$cF1OliEJUrL`m0gXjEk>QoEE|u1I$50WqME`p(5SPwPYm(`Kz#W>z|st(s&d&;`e zXcG9~7hrJ!Vl75^dPxjnix^@-xzAK>+s&K!jT12RGJGW20nuFjEDvd1*?l|z0t^p7e?2!U z^aoo=nA%^c^ z2`|34cjxL2iixcB&4|4rr{~T0T#J~YdZLv9go?i>4Z2+3LhceK4u@v%9BZevNZVx8 z#UpQS#U1GH5VqoDvU%H9t9Q>doLR{yNRvx%QhH6bT<2r;afFg%w<(I>-rW@Cd|q3m zOr_mKgc7%?sIHu!JV)3fE5(H3shwW)fr_79@syhfeBtJWy=2BANW1-D6sNGS`H)vT#)$gAxWEXdQxkJQPm%T z^!t8fKSWq>Xsh@-k5&)!`>CWVS;A&c&3AU>NtmC%OJAxSO{s(Ap#S6w+xWT^w zZtDcUd&9D$A^)B~yI~l;>*%xMrcKdkn}~G84@-GL%s9OsO{HAH4#C)RgowB-Dv58= zhuw&P5}SPdAjB&`_0Rh*7!;sgYQkdGHfzQqB6jZ$FRl3}ExgRNla#`PjE65`4m>oA zGP{ruMnC#3xDgeg?(-bCL=UY6<5+=FZKw55$GNRZ$7{qunC3WnJ~-|`L~9n20y7K@ zW~kZ9^nIKjqx?>)1f;K2hD6e$gy5}um;WbP)u8x}vc_Hc_;wK8O6_AJG3Kzzsm&1| z58~e_E0v?{XHR{Uy?YI0CDx#^R+d4F-%O$6MI7sTPQwif)&b2ySFoO^U=_e(*p*l) zdylUIUE4oJ8f`<>y^rs}8rzo79d3N0h=(%Ry6=3SqupAUhR>6M>iJ!!$j^GhUax+0 z5v-Ds0WS$VB)OqP%mPSAsCZ>SK_IZ&Lqi#FK|G+`?LTpkQ{B@g!dwiUEplj5nAgqD z%l?lDzM>>F&W2y}$4Q4PC@qL1?n)u_gJuQsy?S@sc}%^K!f-iBV%ve3GRk~@qLQtl z`9aC3%w8)Zi(#RnZ+`b<6r8XbEBhWUrLOJ=sB@G^ZzUX-7W0m$kl+gzEpwNgv2?T< zu*~VqVip(<^Zf*I5{ldu5)A`Ww;d}BHnn~K$QcP_6?LhX2_B)gd=!oQ1rD^|UG}sKiSn41y}Y&h#_Y@2!_pFNckpD*$egf1d#A z)X}(|QAz5~bp?wg08%$3Djsx?m`{>_4iqr2e(&u4Ll^U>^sY(owvbw;fYUSrPu{u- zUX1OX@k-FEJW51YSe5cdF@}41-9^mR#V>q-q_+YV2jhA;y>Hj0;&s$-$+IZ#;J>MY zlb8S~julLbjqAe#?+-geNz2AfH^>y|+%SG)3Vnyszt?$OEXFtIgE9Z~OJoVjV@NW+ ztmPvJGCbuPT&3q0_6014X$j+zy?;5pHsLTpNz)GNUT20m=&Abbt*hPR@Zo>-Mp=iM z^Uqi^2Di}}Ga~xHg9HUQzBI(JhuA>cJQi&qJkIr!)N3<6TQHD%>Ebm1v7&`yg!;%2 zW3RSU+wCK#H$}fBIN&M$Q>45K95ifhNdK@UJ8|uz@y!;cm~+5idvpY3z9g~o!U{bm z`2rv9NQ%>(r4ECcqlevUsPrR+SRZ8Hlj&;?+dl2Cp22cF7-%YkUZLia?2u5T%E7v2EXcZ0Qa*9 zlah5UXKN%_^9!t6t#{)%eGaM}qzmsv-Up0-Hk5=k?zsM9Nx7tiD4f1OlbM=SZ#&lK z#)?Z0Dc9d~nRp`^hLT+|{wW(lIdD-E3q6!3weieIU0*$mZrHcXS-daj?{(mS&L^f@ z>w_d3j$w;cN`)F%kx?A8w&vR3X+0(9QgI^o%+*jk>KH`eRREQ~(WOEkb+%UB;Y}Po zbaej1M{`|8thyh@R``<#@z5kh#YIB5MK`QV{5AiDbbC#8TcqW`O#JBTuRgi+gaDp_ z7#+gA^rT_tY@XYi>H+zktF2Gb?SdvfG9s->fvq1Hav~*w3!ri`o1^u;pGo#mfEAlZ zcA%r__M`#Uu;k}m{0_*JQRH~cD*94<8_s&}u4ftNi4X(RE);rPixUFg^cvLbiZ=f- z^=-HGal3cde?}ymDkke=hVyeRIleTT-WtC<`dN<0_gnffoRQ3ZpIlW>%f>KGbhTM+ zLwQevubKGV2Q>V_-YZVLs-9f+IRs&Y+y9%f zJY7#cogHte2=@LemA`FAGu2xh0G9gB)+p4X>Qds57N9&$nG29W*n+8_-nP~2hEBfK z0qGzuSNT}6Y4Mh5lmUB4qGb{lL1 z)W}T981ZpTQ4`aa0_`O_(M4zHd7Mk06&5~ypCfQHo__Mj0yzEmpFP$ORM`SmG+kgf zGYWOdZTT`RhxAC`S=vJMYtJ23Cw^5x4#J`hxlB7ndj_lSY*4_R@k)OWPDGv&4B=>C z+%;p0aFE~h^rB)t)%(|0e~3*HM}nz?%lDCvnaU%+u`B}~BRTMkh3uf3io7@|$N-_6q8 zKsbR%6h1c1-FD1DpOr<#16F6&){T474^S(Jifo~XdibWMA}!TuVWk~UneV(%kg+~B@{aa$(xp^r~_I< z2wN#_%UUoP;+xJ()aox*HE!sos?_4G9BYo%c}LiqSk zUfeb+;&zz-ivxG)1YYFj$E1+uck1&k4z@iX! z;3^`AEby`=ri(HF|1xfX8!g}2Okw7XdA87Vy+%?}myO3*WE0OJCIJz<6~H|sh)8;P zV7ra`?o9d9p89=jyN(k;hLPR!xu5h^#0O^JDri5ydZOpaAfAmzez2;4_4k?n;cjQp z>_WQ+_#$&j8BH}`+iHt*8K9F z&~Tb`8KLgLd5031{ljMtWA%&;FPQLjxRf$|sW?4s+=sg3=E>dRzi0rx(BlP$+y+%- z6Trbh+9G2V2jsDj^Rm)*c&cL^Hy);>MzO!V!L4}~ST?*M^kXk|^+a*JWPv8X$h)x~ z8u;5*S#^){Wh@i$)i(`YXjR7GJ_<_>}2lPbqd~u#o(3mStg&q_{n;X`GH^azOeXd9$L6AIn>c z(ojqNw`M2aNAF;)ow_P;af|&&$8mSs9+Xg633G{G32wU_ZJQ#91u!LkFy}=%AHrt5 zBA?vGo=UFO8TX*;1Z=b`3FZ={s24pDsAkL|w88Ea79RFTS;*5?Q!R?KOkt_Y`3B8% z@}rzadpPI(Bi+iK#vH;6^C|t3QSHK4+zkCiv7R*i>6q1hFj{8F-%3Xn6dg12otEor ztzqg|dmITcI6u3x_saf=D18g7KlWNaKh;N!zQDR`x{LX27Z8;qw}9g`@!wi^q!-60 z0!gdP*le$ffiyOlj}*7ZRB&-H8_k856rq_<|J}_u`-BF`91bBOXK^wZBY=1s*%)v$ z#LtMh*m}J`hiYOaz*6nYb4lhS%CKfT?() z=9h>(_!^N1j(N@t^**iTQcR&}SK7XiqnK8dUuQgl4QGyjm?OWs1!fbrCaRZE{o60Aw)300FoX!^XSke{p|*~+|Tktu*5-pi44sof}BGQ zaTljR<$oR%2`u$`X>)TB)BW-Hujou-nevR6eYJN2NXezH>vAB9kbZU|C5Fd?DqC`{ z<*mX<8n*K+rJvp`}^*u7$feyO(LL@G0~6R zwiJfGsJZx($;Z6SX77O(2Y8Au5-cb*O1$feQOQ3uR9qx~OdS}FUmG(f$`<0kKkd&~ z3kmcvBAeO;c@Gg&1KaKBN03#g!DxFQQ1LzZt=pmaB3_PG1hi z4>@(RqGHN#miaJE-~RgjMVlD+@3Q)FA4&aV;o`2eh6&g0&xhSpRNf&;xjCep!T-#^ z7_aNg-5=~| zjde11&?usF({Bbz1MX}|fb;{oCwyuwx8zu7DzB_9MsKC@z#X;*IX4P+Cc7deM#F_# zd7jBDw{qVjq3M_h-^K!LvUoUfYFJ(5SmDgnT^Uut->>To(B@6dw||4|Jq34X za4HP&0U}eWhI)RLZvdIXn-Whl8OiiW#M~h4Q)dVlaII(Rwyf%mUieShGJR|t?E!O@ z?la?m-aK>(+BP0=j*|5(oaWelU-A!#3Zyd9w?@fzrq*ZzRJ4 zBlV*C)8|{RrRA&sq<5Gs^1NRx{URQhS`@Vra0>APdV7KcOf+^6Stt?FLPGRMX zr1)Elg3frU^KnKdkJIgWa;7j|;;pIrovOFLzic@MDiQdG)RcmlhiFA=EZa3mj&P+D zAOm4D{>SU; z{M@>VUo%TNn>(nrxC+8tu2hie1rL{N`VRLk>5z$N71`3r-E4=nIc<#5C47OCQ$c!n zGwE^)eM>@{zjzbV4(VJ#-h6)^VVw4+^PMPYM~Kk*-yEMFtCS`QXF;xTkIKo-JvXy+ zS>7cW-CMUqcEqikLCkHi1@?-#N*Hn1LN=WX@n z9o!UMXOP)^JC8(tw2VNRqx74m-^%WJGZjwlEAXV_6PvBthi$8Ky&oe?>zOj`@V=YS zhWQ>eOl7=5)r3fq7P&2aULaa4W4O(iAe`XV*xcNbyuJ_)5c9LSu?8?%80?WVaK{V_ zpM}m7ABsvA2zVMuW z7wccKcGsRu;~E=QWjT4cGVd??y#+daRbA2eL5t2e7&WBc%{)_48~ZuemdFZ+ z`b7OfH)`Cgz9!W>3{Uw$PSG-}1IXkzOH;0XXyegeobN8xDL+>3jA8eV z-cFU6HeL;K?0&hgi!jN>|EO)zO2{@vxQid}hxdqJw^c0GhFyY2uS!?RU2Yi=!bLkg zD>;S;bv`fDo%?{Bl?9aALE+Jr)}CFi6XNNcx6U&9R70C39QRZg3K8Hx^)Fh+oaG!} z@Ge>V{s*X+O52eh>PVdqrTo%A$|FY^`rtn|<_h*eKe?fZo`g(Frg+hH@h7%99Y~05 zdMrrr>MYShMOO-F!b@vko$JD}G7! ztL2UU2wM`H@ZhJzQ4yen-&b0#J^AuP z)zpK0*NDqp>7ElQu32bYNvF_O#?3?@}BY~E2{vQ+38N;>*!K(6=_TU5_MaC z3AO-el=2uu69fM-DLIJODWUpm$F|2iZ$9fH{BjH!F*;vS%6iXpGf1@z10Jc0L`*Sm zXm-@17b7wvHVcuWj$w+_5n+`Is`A)y0NKm<8FmVT#B(E8pWiOK*Wy`By>DkWNrsYqFtBUOx&V}X9m2!)>xf^93jW%^|ESkdvAr-rq5e$@*VC11)fjuI z;e)}JNN>uDL*3Lx8Ev*#KECesH$Unhu0M_0`f;1;<#6nRw&^!n%DonF)c#$$$5e{3 zN_Zfk)$$;+xr0mmh(>h+GgM_kXG!*bdCCYkJSo$^4UQ#`^D9iFW#(QrK$Mb40i>*h z(Q7t@-bf`btrR@M++@Z=XCu?<;$?v^lUsOXZ!=REZCKf{R&p-6skU>hyXRk&k*Nqa zAw+1hF4sfq1j=h!aY%+jcuey?-U;TubDM&=4Tf9Nnv>p@a)q;zU1K-EjKKhu=|DEC z+1x8kGW%v12B0|c?RH2#_rT>)lDOPt%A^}`74<@~$|A63!aI5?=DkXVH*+*mU3Pch+8{2&3if+#P8% zVJbdD&_ROC)Y>qWgzuo3b_nsivdpnwF(SKoO&>B4YgTsInTB3V zOa{CS$44_iBAe?Oa;6tLh_JvzEYxlnb2j!NrguVKK@?` zsB$IN;+*;83_TLT)i~dV=D88l-W&IW;${uavBr@pXZUHbx!r#FeRX;UZ$ux@6vKRH zw2?iiro_|M0@AWidA-r;<2|SzD@pjE>sb6hfTIl4?o-N<5!w$5(!AJ-#ZXvyr~gT& ze>n$V`MDn37Wy=AT)+4>Nsrel6`*vCpLhXAl&Cj3B$%&5f|* z+%LhhzwYOg{Z3fD*cKdq9CMex6Lc`{{8UXxcS%v<1_|@`ST3#=?1;!+vQ69Pns^(T z^rOBR1ZAqGxb5{&NFU|}JCr{CV1?GQ8Pmxyf2UHuufVi-CgBdaIz`Fp_StIR&<S zv`=)Mr}9Grd(|LW$$CVeEPpXRf%Io01y@L;2kH&!Uaw;EewzR0J3X&E}`=T%qP z6dJBch+ICX2!y>@*3<|B+QYX0Bq~8IWID6+Iw)Y_635a~#2v;L+JkxZQ*d^C@&G2g z!r3z}t@rggqo>zAARy3f1>X9C8?l{cQHa z_@KW1@WQaYMAak~B|crdd4g~}_nLjw@3vc>eQ57}GK&&#z;a+ol#M(mU(Ci6iw9N( zeF<7Nt6$srA+8J@aK(lTo}Or(CSqG%gObj1@K)SBa=ZRMeZDvX)<5{>%U+J)+|6qi z%JY#p_aH$j2^9Uzy?71esCr=1C=FjAaV(VH_4-lb=r0rYBs#KICjsi|EN!e!{UF+%9^-AmLpU3fL z3sg9TfAwT`6d^LUm%Ye5Oa~5~FtIV|8^-;d8 zA+j*o6#*Q>Jmc+rYI4XP55#&iBKzp9G%kuCiB&TIT_$?8CW@FkmRIda@yaJ+L4tlt z-$oOR&Uzj*{13!w;7uBdj;S6H!gUN}js8?%E%TF3eEm|VKXZ{^Pjgf<2^zORVCvclxaj!;qSA{666F$ zQN@-yDDES$g68u1#U<}7SFCdAV^g|OL-|)gPZx@}Wyo_{s$Ps;U7FaC{_I={$l}}A zMCq31SZv&?;aGfGu~dfa+_}eXdmV{^=P<$)^WezCh0OAk=H~B));#c3I&xbCp*a@= zKrEnzm@V)!rTge!rEn`#FQ}~p77=s!sI5b4-uZrRo8~n6)jU(Ei3X6Qy zoji&G2+8eFjeu;-&#g98Q|f({ST&yYkOOy`e0a%BWuIlT)dBS?N^a}@FN2kaA%mQJ zqT(lKc(Hzmbu(|Jd3`M0nzbvR4UsO6FEEFOMyQy#97 z_SJ!aNR9udN+ipVMu14i-7o2I0^nN{7eH8m@Df$shrfKHkVtt^U=7bM}OXwo9{q8ccDj;2kOl%<7-D(i4=5 zE~=C)j2C?Vn+u-nMWZ>Z-PBp_S_}>Nbg+N`Le_KWL_L=k`xGy{`*F} z&qAfhAb`~F?3Os-QZ1|;o^TGAI%xXL)+bwA8XE&BqM2+>|COb>dVP&;mCFx(!tV!F zIdZ=>DP zN-Ex`d05bK1kXFiPK~OGhU(9#Dw`;1)PPq@;)3^j@^PmmWcgag+lIA!4qv|OX5R4= zP5${FxPnQuMs-xg8`n)?OLJ&#ht?QXHcf#!gze%Ew$5Ip}LtSw!!Li8;e>3i9O&6M76 znB#4-fHe1TkePd6Th(WwzL`Plxgir)6iZ0Y;q8R}XJy`9@zV2ltoGk|mlBQ&!WnaE zJ=Smkc0Gm=3VE4n;=AwWzl2ONhQXUV$NC)G*UaA8G^{~d%FpBK$MB%Pd9JwO;#F=+ z1`($jBhH;cDGVkV4Eikt4sMzFM zV7k=aIv+42f5_^~#fRx<^>dQwyNjNFn#n-_uZy1oUmJ?(lUZLeboALlIo~q&62U^q z)6I+y73!^de=GdbaqB@JQruf_HEw4$@4Rx-NhU|d3rSdfvW=^o0&w`w@YiqNkDI(2(vh{Go^=k1AKRC1qH`B)=gqtt?K~@!3X@nP}rOnwmk9Q zD+^HfF$5?Q9PFVb#~RhF9B@T~^QyR`&Z`h6Z-E+G51CQ}S8BVz6AB3jO$y`rd6EL0 zedk%maEcmOcjKi|ac)XKoU{yq)%dRqG*2@}Wdyt4$%H+kdTeyD>k1MhS0=LU@f3Pf ziB0RXHc=lYS;lpTEp0mA6e~2v8ZGfs4>5x#6(4kfnr*%x{ekScKnphev;0KVxGxHT zmmd6di?B!mw{~Ye-i~}UhWUJ$1)Zbb@{epGk3_{9qtXJaSS^hp%lKEJxXUsvwAP?p zbG;ER2)vsFsbGH?8jq$m%0vDFr!iSb{v3dHv3EWgNU{A^;0<|SmM_C7lzOD|!N{6D z)tpZn^)j~vT%(eD*u4LjPxTb=Qe_e#Me1$a#g8G=ad7N5|)A2 z2p}EKPvY!#>4=O4<8O-2=4c7{U+1o~@?`4Sqpa-*uYR|HhS;^>! zA->|z)Am+sTDG*4D2%hOPqq1FQ;(fCzLw%9CFE&J z8)B2>s#sI(v-f)Cu1^?4ngBTT z3-H%0?d^1lIlr?V_`IMJ^tzCYMzc{!YzTMT!9LXk5RSOB93nD@KO!sy5 z^4xCa3~5qgs-VmqqYjyb7s$xEYYPiJT)^ux|FmaG6*tz|DKDUwSa;pY;|69#7%u?w zO$KSSguU!X>NPXPc(GTbaQD~QT&dx*0etMoQl3(bgY1}Sr{z6Uc?v!mX^)vO-yc|I zycqh}?IO1fFAj!5qt5BhOY8(BH$&=16{zUsU6WJU#M1}Jl@?$WIASZk3z748pAv~wy{2U1)cw9HU5vH3p_IWT*#7ekf88#Zne?T_FGl7n zp8M_DC&$B8T#tO^-a&XH7<@{$cmKhwF`P|lNTPy|0c}7T{Y;-tUF}y2!-q(x{Ks@L z!?>*&tbLBY6$3JwQ1NiR?NIA@>JO#7i5?5_Qi$0?k%;O1m|PElMFI~C6Cql zmcH~es{m3EM3fC^LO5X_hHnILN`QQ>5lBbKMjeU zW%D|y_@#-?(PVB)6V=q8b* z((7+Xvcjz)&}p=K@z${#k5Em?hlLUvBR>^#w%oY}2Jq@DPz5k$V+)>oUuL4rRJtg$ zd|PcHzatT7Z&DfEY(2?>@*ep!Pd{k8hN?VhvLjAg%NMJxi;H(k5Os$QJ8)~#4ynGc z4N$FeQ%YK-j{}_l6{CeNGwA>-=G}pLOaM%kH#itKsgwU%#cJc{HsyFyCJl6H^d9Rm z5Cce`?(?y6dXyJvpJ$2+D7>qLWV3uEB#w9)M20Cj0mj^jCKi>-8MH}}oz4%}bv-EL zf;yYm?cjqu+yF=E*&yaeVbcp)&1nQy#OEdO{j!vqM2H@GPY zZz?WQ6z!faGXbH+DHthl<|QP5qVXusbJdFtd<(qUaxlr^9-rD0^!V9IQG*QgftaZq zY)5AQ5Adq^Qf*sn$Vhn~IbdWOCX*iLnHfPS2vu%O-TjlKu_+`24tqWy0PxoL3tLmD zrHRAv_gVXK+@V4|y$G`Q{bqqQ4iDsbN(JzU0M$;>Dqh4MmNs3#Eju@Q82coipWM4B zaTSIXD4MGV48U>_#A7)kn@lf4suiDf(DcE-|Nf0Oa!@#xM`G>wHYf)9Z~+m*+&iQo zQeEc)ok$o2Fnk!5g|-VrG+#zn43(s|)cAePz-Un-sJdQh{!ZRQ>g31LM1Y#M=pi1r zK(>ZaM(2uab90o{8S&6;b}LGRAGs)g7&bk?1E#&t$0%+!ShCnlP{#e#>N60g6ul*V zI3mcAYZ%PO3r9iJ=V{e*k%n$w*de1Pg4e>Urv<5x0l-Kux zY@RVZs_g$+@FF};;a^MlC`uVnW(t$h2ReJH6dh`l8Z-2Ou&!GY`5cS@MExa<1u3Co zNYbp@|U`*<4_{-({>eIhgz|wQ>)d3n`?vhtRxfAbVW9~1Iu9(Na#<~?GYz%6k6xU zA8{$FK6!y>PX8CAOv~a7Z_Njac+wKcKJ9mjA_l4MsHct7{U9X4rr!^uRCvZClpj9! zxs~^SZLbB=BEfF&mcxk{{Y zSK7`1X!asfKQ-fob9%hg2q@5%2ecXuIEewkZ(j59v@f= za3ZLzh)YYjIn*?-y;_oH%qjBI*`u0fPhIzQEbbO3B;D{Gm_?q&gfQ`p7E|3158HKmpj#OLr2uh<}~n zwIM>MjP1FSI98jn3f;98L2_3t=93TM;Vs1uQ<5k}#uvtNZ%+sO=PAl!VKO{JMm~g( zoKVDq-oG$Ad;BqV3xxGMjH09opvdq={leUec#70!U6Xv}y|UCmS43$#6uL^#9`xl{ z{Zk!1hgI4T?*eQN>0t$7#b|75M$9+DKUWLmFIUMQ?in7j8W2s?q8-i6uNg0D7AS#T zrFi}cd2gK_!54-rd(9U%aV3*W(V$&jsew&SeS|!SVQGryPIt})<)ch&1mG;NqPBUKpeJFp*su-dNiQcNrjDqP;&%`U zC@(9oNxwG_DnwsL4pZ7|2YAH1vbMq~KFOVG zC{$CmJ^Bkj=;AgXP4PTGK6ZD`R4ak)g};9OtCiA26+V)vuzIQPAM))qUa1oUPG97c z^@V6RvOQe@G7eOQz2cGHR{fCM$ z&C=45q=;o92>4tz4OXW_<*6zbXeeWJwh*5Lo3-}UOB-icVF7Xo3aiewpSdl~tAiid zr$1hYjG|pf#-vtzHsNt*j1aexx8GgSY&3*xCD9iUR=Ef_@k`RK9<)qIf+n55Iy4p4 z4gKQ!4nv_%`ErI`2SpT?ZN%;30<;|yW+6i-)M8#G3XHN|#0d)wb)|H%^jh`VJX3FC z>PUa+-S>T5z5vg1ZWUSInZ%0rSy*qeWj^0_6?**NbgAJST0diDWo%$rH@ zW+F9ZYu9UOhnRyUu1m`g@hF90ukwMofl#wWt1iZwqQp;GAMIXs|Hg!&3nR_Ke9Iwq z1%C!66^BpGvtQm)VmYgA_zA<*w&ILp76wE=&-yyjGFpPjcjlh|whQWY+BhXl1s`ak zjX)ZFIKvm+q*N3VSK;CBDQ)d&FC{Q938;*P?G+i@4@`d>mue><;h6LPkn(+abBnFgRbw4hu=Hw^>eGCJf5JfG7&f^-NZ*j1N zF@8-nP7NW2EL7?k9z#aPPooWQ!~;l_`&63~L^Cnvq;qZcOxVidc4u2@=|;03Cd^U$ zO`{g){Ittd7t}w?HbsOm7D`{9^hFzn z?$ObLt(jZTZ}M@YCSn`S9Ae*GuO|ZbiV-{RTFEJ8u>H{Qwojj(U>Qumk#?IJLuweW z6(KyJy54^f_2^`!UWCrTA#e7&{9V=c;WUWe zq*grP9}oVXjI5dIvSC0AR~fUKq!a!jyvk$YjaHdqrG&tWjSt_=G1{!jCr-=uQ3i62 zvuW-Bd^zZ8~QwR7K$HxtvggKC}htbD`OY{w0OQ2%hTJ6%mC4V9#@+w zNL(7^{No%aQ>u&zdlQ8Z%G_TiuKgA!%OS6qB}y#7q9rn|q z$>G>ypDo=~B(dX4%7>pvP@o5WnXR%hRYfgzInXkqr$O~R&cy`;i<({NGjMDWJ28h- zn=KLVNe#kpYHFl5Gyey`6lb_Bxl`#x_z_{w6Z5H0`SF9TWqdejy;QutQ(G{{{f!59 zmv~ok|NN<6eRWCXTIbVcD77~=`Tw8$MA^Y~p?F6*C+@wyxNcDC`76dcuAFMDai^R4 zV#p5VPNZ@~+!6Fhze1EWt?(cD{h?7P7t{A#gM~3UD3P%F4o#j>fqm(sVXYm=? zLVV>v1M3VcKpA!Vgn_*A5^hu5GHGA;eO4~-@p=d?%yE|MKp{4v8S1Ve;oxORL!_kY zDqgk;5TmIv^339BZ{ABL!aLbzxxFv@6^X~BH?)t6g77AZ zc{c%L>?@-07vJy4M0U{WT+1agCi9hGcF*IG($e2(vDziEcF()gQM0vZR||7uF#}>K z(#`p~GOI2Sos}!pEHkw*_wK;+p*W{d=+TD3j-inHv8p0#B;_+= zr(2YwJz&U%OzoJgwrB<0`9iTC9T>s8)JyPUfH!NPIN9Zg=&SG8?WhSYx$8~hm#Zdl zLg2o3?7-8_;i{ga&}pkVL#)DfCtsk%Cwma~vhQe+8_MR5WPg{U5kP$Axhlw3YT)mX z&ySCFmy%gr;Wb88w<)_$Nh{-RF-qB%j!ixGC5r1o>wAeEv#!!O|6n_&1h zK5;B@pJ+);h|Mz&kqN40PA|F=6_3wOCZJ+d3hmz;(I2N5iY--xn^VyZ_kL%<051p3 zN`%VYAZdjvLZoIl{0*C%DruQ3v)Sm61ZwlbqUBFMwA$cOI%_RkQX-^PaCMR@TnZv;me zZzj{gGkru%&ga?N^U%z-s@)*n7yiC?Iy8vTuc>CmT|fQfwc2FNA@7bzM@U;*7t+(h z-o^`&cW+t#+jv?KZMz1S>p4PmahX8AHv7-<7O6N4jYw>(ZS++MG}Qz!%skVJ`pH%& zLU|4KeA4F>Y`W^d`|e)e9(6DawP?0!`wdfQ%F4~>d)E2HelE64h4k2pdYeCP?3Msx zj8T6RP4U&xG(v->E3a8KO59emp@<$s z6+qivi@QcLj-*KqR{x?dG2mIY7M?-)&v*CsrPIMb=TFOW)tu9pCYS=!Y3Rm!0k#t( zwNgLNE?x;@&oUn5v1QLb?IrJZ()$|h(vmFLgQoh$&94p-S*lm*wa52mG#*p3DA+%9 zlKP`C-sDO$fx?*^Z}uBe<>xoMy(7@2(0f=O2`DsY8{mciAQ2pAS>jS^`_vODB?!m}bCBPYp#=a&kJHnMQ`w z_C!ECFKiE?j7fp>dTQ?EXAB4%xN5#)5_C%S`#|=st6HWS3FE(eb)(a;pAuAv|aT;TAdtZAlS2G(Wi; zs1_XS8;QgSJ!Z?Ia6n6t$ioqRY0L@GQyN8#pUq;F->wzc4j!k`m4#!mqt*WY9{@2y z&c05$>f)iZm`Rd=`FS8I=jt(AF6xe3oKngB_;_Jaqp6IG_lS`IBv2 zxi}z>HiO^m#S+~l2@|$ineY%CWF9%DTwKp;vaP&joO7Q~@+wmtvcqpM3RpSajym&> zd(Z-3-N4s5ec_1t7!EQxJXBju#V#$f4sxNfjE`SRwHh=}H=F_AgN6CI_0PRa_63dr z5>l+qmT)tZKpBupChxOe6jJhU0eK`Iyw^!AZ5#_Egb}Gl*hnY2^u=hrp{7_t=VsuY z#(LK^HT|S=7$i-zXNCuWF~&szX~%J63$4VGKH!{#>qX?OkhHe40g>{vbH|{nD(-PX+6EB^z-ZhA{kJXB( z19?Arx}K*suWJ?DaDG)Pf+>Tpxc-w=@93RB>HKV$Fljb}@ z;{>SNjxqJ9kU5A6)l{QwFUC$sPC1~ru*qefSrSZ)1U>LDe+p!A#3LlJB%b}3`qS2N zl!b#v} z1<7rLfO+r!MO?asEGE)LIc7Y${J8B@aXeP*Bx;J=a69r3LF{M&{!O*yau);T10duP zo_l}w>h>&>5UAiwkXXM$J;)!GMKHLEV1!?Ed}9aDW3a*LPBKDa5kyNk+Isdq z=mI-vr?=D=2U0_P$XBNW)BI{#CRm&aNx}J#wko_rN4q!fDc-?E{`Ky2D*LjpD-+V3OiPCx0WXtGlRBls)ZieAm)H1x@hE*H%G_HL1Vz( z{{YuDJhvCoKm(_k>^5#a^WX5Q68X}oP>iE~L1Doonvy$r2rlI=WO8>X{uSv!6_z6v zfM)&P%;fbYs*rZKlXEudSxGE=FVot!@8%-ZEb$bNBWWiD0p7BOx?F;}-Wf`gy$C(Y zpa~#LLv+E3Rw`p$gM;gjdb7^ffNoUWRZpPx`kJp4D{C@C9>4)OVaXo66V!^bzEn!k zZfp_LJd;2ZnC+vE7ma~JcAdvOp4j%L?wClTB?Oa^##cY!DO+Sg11`{*`Bxn0*FEaw ztpvy=E#>5Jgkv83Q$SQPT-nZHxhh$JDyn(`*FRdemJ6!tR@!ywBHBq4%wPr?0R)bx zoMw{dRV;1@+F$sMd8fsXi1!}~J`nh$;v_cW^6y8}<+`_l+=P+h8-O_N>sC~c=7z@h z^TJ=Zv>rFqv`5l3`TR>UvSA*@^5B@`Zv*?FdUMAef2<8&=GG4tN+t!6xIH-Bz+=BS z?_bF8#-AT}%Ut-Y;J+X0x`T^tP2;}%D;5^kZ*by5B3366AD9Lt@znIM>wCqqSYKU5 zsoBc1eWEz01rBnOM4y*q_|{~Z#?nb|X1#y_l6;6eoOSEaW1Ll2iZ!?sL;~c6VmW2c zU_E`RgtK3yXY9-7MW7W*hH)y$3{E~0F>EVS;iO34#hGR z$;UpTp3%oPB}OCU1nn6Bo;rI}QF(9WjreQ~^Ug>=pEYC1M8-)fBj^qX9^GoWfXnh0 zSY(W+bvxN`1`i@f=s#c;=Op^_5o7rnbJNs+I*1r8u71t{F_D~}?0@?I09vti0fD@YJNIYq zhUJMk?^#ybMeVF5uN1T6apwdEJQ9DMJFo;c?(BmOsJc=&Bksfie!~XGKAdZ9I9`z06 ztd}ND*ivvf$ld;VsP|&`DA?c?J+|YTjg0q~W>}jF6?Wit&wPHAfYr6PlJ8Klk7+w+ zUFSVjhy?ys{G)tOm;M$P?Y-j96WgjhcU~sBvx5zhm}6|?w*@--{cHN3pI>hc>DRjL z!|z)dWR>yI2*yw0!0BJfckI!tzlgtU-v#LRNG_9G@uYW5t;zD9R+2;4r|_^oqcjy5 z-2S*UJ7%%)eutynuaP~Dhi7j%7#n0r({TL3=M>AE>Ecu|usmQBj2u>$wGfwFlWVMO z^E_;D2g(L>>Cb%ks*7cEk?v6+mNSE&&*`4{>p>+yEGz~U`|A1JdY@Xfzi5@gjR{~d zK7yLN%9#%w?c+TUOw&xV!3kaG?~IRctpG{6oGfoCK-u|rk(2##=|pbCl^m`I2aKNQ z9+hI*?uxvT@&L+_>VICH>M2$@rP%~yA$E{?&ws4|A_iiRIs+MPgma#Ky$x2C8c7#W zk#?%902G|<2Ll7AJuyyb)!fZz^0aZQVMgq8{SSIrUCR%%{HUjLpW!}gCXpq1CMDdml*+RnTiECNRB*`*yQPts%h4OJ$PRIi#8u-0&kx!G z56%XA4^n6Xl;6E0vM&T4pZ$Cqm4fXX6P3sq$Q?3IwraG9W|dj7=jrxq;tp_86TfC0O0oO1j7S>ReKYh(??3eGU`HW8B|+8331|*t@nvv=}0YNjRX%VW>v@?F}tb!DJQm6Xs%$9 zh{*(Fk~;D4??uoS-c(~9q%NfGEsjCJ;Qe`_e68hWlr|JP`jzRQz|=B{E;RvlZby{3 zP&yI^CqCJywYoLvAOS8msUwYsqzBwV=0hM=;c~!^fsa~ZY8N(^_eo}@q#zDC1EAy@ zbnuC6=a$*Q3lZ2kA2933eg#Ks8pdIH2HE7;&QHJiW`HzfW&0}{CBgP(fKK58V9 zP4i&yE7<#c`_!fj#gU}EZLjyTr#$*&wIsi3JML!rRmcjYWx8Nc1(@2}2WO5ExGxQZ z(T7Y^EsRZKS7NKkhaiv%=eB>&DXQ}W=9K7|89Q@>&mHO~4#3GWD=Lt~1NeW>Uupok zcLlImmc?=#9OsR_I{MZv{1HbHlq$T0lw9>b{{ULkx_Irv!o9JT2k&RFtoz_n58Vc7 zm=!tx5!8S^Xaa@25Wxa!axP_+mK9~jK|M)0(2xV}p6^SeWI2i;HUtemG*^7z($;vIms{a7HfwcZ0 z=72IhiAof4`_@svKBN5gsy5ehLZ%sZhh8zr$hc(m(E2fUq3c+jCUO< z0W~d&Ee@y*OI#qb2hTYaeidDW& zPBD|~S1#{v0_GTwA9nr&U=hYM>^aY+06}y1O+C?X)!mrmE6xBMV;#PgQ677lMEl!r z&{2mN_53mGP|I_9G|KGcEMvd8?VmwYTE}d*S8naJU}1;9_|OFlnIv0y)ey8mZqCtx zo}(D1m=@0QlG|u6!uJE$*A-$F^ALTMh35mD6MYB>JebYr>L5JFf(k+==O0gb?o%t;3oyra&JQ6ueB zl~>3E~@Gs9ycuyQ!)M-&0+ z+EHt{iMu6%>Ivf~pvdik&~&YNQs9W;jd+b$cpb`<$UVk*uQvEOsOugq_(S0j5Nq=P z0L0T(&}^?RT&P{rP4h9@F@ipTeAVhhD-uH#%f1#RdHHtsAC&-BhR{#*FatPZI=1ir zxTR=W#EOcfkTRrXq55^?b*Z2}V+f-GQzVwp%A=~Em;IqCLd18tR`Cehc_>;unY@jyvsc%-py^u?AeO0PHY3W`Yjw?xRT#@Kw$-0nT>!$F(+5 zb|V*HHq{`IdX@T9Q6z(MTB4~6LN`;-_|{B!ck8RkCCND1ku+K^@EtUsa@2%t+Mk-f5G1DHRtjyOiF3X6Oc-#+Mdyj9eJ>a#oou+U% zzTSAqC)j^FhHJ^Algf!UvH41$x<_;C`OpT$5xRcka9z#7Zg&7V8)dpQYAY}Gq6SH2OPFZ#~7dwM7DbkHp&e;5U7^c>amT)?LoqTdGxE1sEnB( zcQ!W$BlvQETBmOf+-&ov_8V|trUrU@{uOFik)dfM z`G_3tIOEvjod%#_$hcPstM@bV=hS^ZyifySnO;wohe876lb)Fw?^G@{i+jt+{OR2N zor?wGxg&y49ct~|^T~2#RgyAB04eb3URSQ^zsMpiZih{(Y^bDn*(PSctaf;Brs9Fk7$r}FA) zw_;1&#}gF?(6#1j41WN73$Wu(KJRo zw=!*Vakpa=jPe@C!-CoW06l8Kf?bHJ2_b+D zj+pOID_`5n)6E$^SQyF2Us{&u?Q^2s{KIw-s5#y1$MvWIS`jjjm9ZNXIX``K&Ii(> zxYMn-7_A-5ETkSXa!($-3T3_24$BNo8Z;pE>FxeCckJeNHxiK;1ge$7;YV;g=dA!| z2&S}&>|{Ha1E|Rz`t;|eCDptztRVjYs!{TDfI{<=jGhfxzD2Vs1Z>P?RVqOYNC&Py zoYh8K*O?gQA8y`x!9Px){d&+3lK%i}Z-*K`i#{CPTTd$oMKi^)6Cz0;KQFmB0Q%SD z7r-yu+vBv~5;UI#i`#Y3>{!4cnl|5XqvgurjN}duPIHmZPw2AoBEK?OYB4O4kC$T( z=clm*8uM)%;Ge+_KgH5`jBh=vi9VJ5fj&_0NAw^4%}tH-^9AW?KAS)!}y4bl5H+h2dt} zkd#BZ|?IpNp zL6nJL+{_L#%zjgVpy%FzJvu8@n&G8}GaL)@fWwydJ@HFDt;NyuqmcPQ!vx#%f;i*b zn$!&pQ7g{nr6d9ragaGD@HwQok^_2XjZ9@E00sH76dYr>JxxzD9hi@&?M1b0=1Bnq zr~m_#pL31{REo`Gm@I4$%-dL#lA!u^{AonjFY`J1$=avW9R35XS|4Y&h&96ompem_ za1ZKnib-57##`H_=JJ_YbMp28{XKKv(zFay%;3%xFg$GF`{(hee)ItGg+b6Zc|be+ zihy4kFMiJ&1z5owSC+}{KAmX@m057a;4_W9bk9M7+N2xfVgSe}0Xz`rxZ<)_T}$mm z#S3wfmKi4;cjKJ#R$z+t;|z#)t7iw_p~tVi0BAEa#;+p)cVO*2ocH{_Y2hF;e9~YX z4twLc_Ne5J3s6kVShJYOIRJn&_?+=s*%vSrw^BhNMsh=L>4V!HFl$DD)V@!(1xWt( z;#mIx4Wc&B@6(C6zFx@DauF$w_vCa?mrpYItm5cXkNf|gJ3_nh3(W*EeV+BCl zh&f;g>-4J9YLQu82%lt%GEPSU4+96k;XoX3fxaAgGvWRIzv3?r!6?1)Ea^4u&ns;$ z4niU)K&!dVPFR*bfCIj?ZzWw&;0!90k}=fd`d5|wIQZ@1PmB7mh;$DP+uYk+_;Pry zu4b4Zj%go%+`-+zQh6NLtqF)5V^!YL1>5MqN&tTK*sQ9<1oCQDA}y@QNe2TS^vPar z?f_tOjz{yMpq4yF%s@CDd-~DM<^`0>k+=A{Ur;?e)d}ZmTr_wm<{dc5{R6zGl(Z6&wXjd&+#g?RtDqeel6{qx#z<1l^7i)>vSuT(CB&U}oRUBK)sb@p zOSu;%kdR2p1wBa_>smmxq)HU9AaWZ#{{TuZfR=bcw=*y-Tr^DC7c@sZO2XRRf;8!H5HTbrgVM@3>eIqQscs!g?m zT1s5+Z09&Q`twu9_aYZTA=<}}T%NhAZv*UD=bI#v_jmw~pN&`(3y7swh%cB9ag)>6 z-mVLC9h_6$eA0u28NkPE0sU(}2woK491=*u>B;NOJ#OWBFr((=9m6;S-@O1%cKMqb zu-L&k!8qsq;-4h@VAu`|uYSYdy=DQPmngy1VYY0niGSw{+iyl5Hk(3sg_AtfD~>ZU}q%rf!ezft-MET3BP$;7h22fLqCx71JZJ!NDH10myh>#vL;8qL*~w?38X8XelTfr?V5M{I&mAYgh>2G`iFEoCGLAS!S& zdE@ZUQ9v9p)GhTDiKRFSnr8XQAxEel^=b!rKrko~bt-*2&;^&w&77$!MsP-cZ}6=9^_<(W zhz4VjNzWr6&b7p7ZA(U@jQqo)@6YF4?x<$9gU^w&7-VzzbHxC8Zh@sXpQtoaE?IEE zu_pu{@;;UATa5ALa54bhoQ$5;!D%q+dbUl=qC$a`F(w8*%P^N2sqa_;v87!XFA}*6+M7ulD}{6G;o* zv$1gBXJ#voFsuZOK8LTbq#691XS$vIsJO;^1?~7(1Mv6aw}O5r-D|M;KkWzp5$o}% zTr|tIUQR${IXMSu>w|%ub3h&JT2`i)QOz&Rfwl#Yx4HH-ucyavXz6mIQ^J*u?LvuJqP~)s-U-z?G9BKs+`~v$ohVUoh_iY0$a9j zTbz#HO3CU3mX~W3f#hA=$v8iI*N}SDD#;bc&V-YY!G|DzJW(91>*k_-tmI@2f!hRk z_olFTkRVbx1P14yK|x%ld6MGd@rn$nJGtO==Yg78qcR1yh zBxau^0!UIV#|l(2&sCTZCcVsamcn2J3=|CQ#bttu)%60|UhVPOo$+cD^a^EinRAl2c z`}xiE?{Nb}0m9+3$3C?jNb^VKyKcr974;McFOhmVtmc=?!r{j4zzqEjFj~WIhIphb zgoXLX-TGErso#OhlboDjXX#e0rjg|G$t6eKIsTLdiODe#xZT&UBObl#TWfhIj}XQ% zqbdUAey6QMb_XQ^9q^|F{xvH_77IGDR{4i*zT=t##A_ig1V;|Xl{^vkC(@v})NU>0 z^5alfb{m4(&v1HG-?W*o$}$pql2{yn`s%_$wrjAG0OSVbbJ~J=ibB_RWqe~e&M}kk z=~70l1am|{E~J%jx;Fay3WQz9dmy)r{oYVxpMS!vLRtvKPD+J189ZRnQDB%FMv_G@ z^58RZh3k>{)6Kj@`I+8;dVm2vYOmTc&%yC@= zjE^s!%GvAc4O%x6Tt4g&r|y&21B$F*id8W}aCqI0KDeMob8kATA1z;}ew})IP){j5 zjEvhDa0mBuyFW^iLdFRh$r<#jv$R?AV=cIbB&p;8d8ColL9p(}L%8!nM4<1Dt|ef( z%78xb6gemjxWJLJ#B|Re)`Tc9n9msWe8y2NLB>rap*fz1SAhRir|bWIO*tWdwFKHW-zzS+_yb*)O{!}$h;wr7xJ@^ z6b_{1`hSH_4&A%dV=|JDA`D58qzG%Grulp>MR zp2sGTHrfEN#~=!=A=*wU?Ckgz69NIC2#LwfK>q-Grl8}!06^d=sMYe=t1O{~LR2ec zPz3(~FkH1p&JQa~B)MD~s#~0`06Cr5WC~bIIm6WPN|?bE)(gAkpa`9Jbf=_zW`ccb z>iFQ$1Y=fmP zV|AyErMC)Wv3B`r0yZuiDr!RIPWCkuZYXw+l~l;*mly#&M z=j7@Sb3hm62*?NJOh!4&RB=fem&qr3HOpB6w9@Shf8!O0O-OT`K`I{FjP7k{z z^%W4{hCBi@icTBm&kaBju{*FZM^n#ANTh6)z`^7Yc;=Yu!Thh~-jqbila3EK^vwWD zTNqq*HD3s%9OP!BNhBw0jIhs2jz`*{x%o~yPz3G!$)Lb*kb?@-hbBLEAI|eGp587zd^)(FRz=Q()z~4%AzyM+p5nAor;d2VuM)mnMKA zeXi1o7t;+?ZqjB=*7@`#dj9~0Sr1`Xc;dBT z+bn=j(Mc*gWL8G;CQD~&_v#HzEQDhxE6^XM0A9I}N{W%h10G2Ns{nEPusZXauPZX+ zaOc?6krLyBf(Kdvo?AxSy>Osp;;1`d1;E1&Mry^x&J%2|3g@WrS@JtvFbKHVdU}cg z@Gp-403SR#@G8SeeOA_cw$-nqvqgxn?)<~cHhXQ!z~_&~zK&E7Z_h$NQ|*ood1s8i z9e7*EcedAFFS1Gg!0RjvA>0Im__5OJp)LB}50r3m{w9DRk}NQcH{a|HNo)eQ z%s||DAo@@S*#VFYjs`_RBQouB00`L5C;~9EZaE)#^gPrCM1_k3v@rQ{dV1B#Bw5g4 zpIWc>Yf0EVpD{cRdQbyIvF!%~905_8+(rV6d-4&olsz>&Yi*AY-*MV#7Z%BO?TR z)QZ{T_<{TdL}ONS8snc{$20);K!EQ%O8^M!0jTD=-y+83?C(}CN0%PS21YolQM9fw z=m;kqcAyC5xI~eiI3ATrreb!kdi6c)NZFQC6KxsfbI178zRHM*%ENy^zM1u)2tMd4 zx#WJd=V-Q&I-i^ALaBV9=%=r#q$?Y~05}u?w-OluG5on7TKSX2A0G7&4gS%782BhO z)s$=2@<{hBE(}`(Ha3yS`8`H+pRdy2^49{m+rJ6;c25{5j_xdDn^d$$NN12`;aNWL zUciyYagYhYNIw8Mu;cKk z1JB_=5i}At!z&Yo7$j8dYa0(Sk8TI3sN;?llzCoebCRq^0QdE${`4yr!O6e`jAPn> z5UBw9E4$m%H6*7Igp`0|7#aRl*7;pp-#bVEXVrVs1rj%zGUc;_@1FDkvCSBKl2u8= zD|M*d$aX>ZK;tzOXp%3P$Yum{&;I~iQo$6ggmTJQ07pNkQ9uhD$Z!ri^!{~T>P?Up zWhByj2q9DqLQ58O{gHJNnQA-|VR=&qo9jKfHV5qF|{Q=PV8h9kWD;8c#Qt zVmg8SJ*qh*32)}G!BK;b`R_mjOc#&`Jy(FJ|O&CPa9fz+B8@2?y9zytRXQLjPA%eCpZCd^{=ZIK^kvyhV-gh zObKF=nL;UY7?l3^IcEO=AL&=&`J-ui@%&T)R(X<4dFpna*z~EQCMcigJ5_idxu_oD zn1`E{9IvRVGTb}4IKn61VacEk2_)KpvmcwBfAy-QsAL)7^Mj7KsTfHhc5*<#KKL~P z6%V-^fH^(zC;{lf9c4}#f3K}sh15rhv9qr{V>MD-#(?MjVLvGy2Wo~h8@9~yJ2y;F z1^F(3E{q23V?A;zBQ6LhEu0cZYHY3}+=@39I5_Q^tdhBB+}l-pf4q870$kqtAA6`6 zTB8Jp-~o`MZ#W#(62{ZE{086-4+5it-fKy=MVy>`)B({%?1O7DE3{yD=A8jXnR0R% zo=3G;JCwAFKx_bg=^>Cr`;kh8{{M8GZox z$~EC(xVM*|?>mrc&-@mRN_bDgaz>dh@`ul0!B|%x{{RFjktX^u1-S9fd?+whs0W;8gF+;@g(DJ1#N^{X)f{fG z_r6k3ewe5mDtN&d=r|ay7i20O#@v8DlmIlR04E2~d(Ls15>`JaRkn^{HA?k@=~G+H=#W`c*fLCztnU45V{xZ>^VtK|0UY$AqbO883Dxw}jeBPXQugL!Z_$_9kHkJD$ zOK%U~xwupS`;cq(y)4;5K;Z5K9o!spYw-L23vI47*TG92EIHe8JSd~Kl3TzGje#CVi~!)Ss8vpvnBJDHgUmgCsWbh~rGJISN0A z^Q@LwUg-Sn#I8cOK(yFd0*lDYfHDg<2R?(nIzwuX_fjt0e{`Ij`ukL^#t5MpnAZaX z+Zd-i6+UM53`b7h{{UJRNNzyEVs{^qb@s-4R8N740O3@wPxSYz0qZlt5perK2d6mn z$9g22Dq@$A*yMK}=e-0kma0&lfZ!emYAxH-%s>z+;E|jka z^2;IJwlz4$ex3QMo?^*1&DRz4 zUx>eFy)(ogv>uWBK)$0rz5b03$nDn*lOR@6yC4ya=RTv@SJBP0<}k0^{O%(J!R9bn_Jc@p4G+SHI<30!dBkx~SR@3gfS?J^8GCJ(L(NcLw=L z-Z&tN=;6EbP>VZ7o1P?#AVeQKS<1pxx(i{$5^Q;vOj zt3e!3vHt*eufQXb^s18xZtfmVO2x=-ng0OmPyu=NQZ~+~JT5)^Rt#2>-aLv(+`+Ov zdFxxT$Pl*NGcPN<_57-x_=jWH6an}>{{RJe^EAH=_-9f70GEj7nOu)U zumSjgGfe*gf?0et@bAYD*^|b<4ZLgSOQ*|y9l{8oV+p}HKKL2n@O#yt_$(%kJa)P@ z^0Uov5N+TtK+YR+{CKKg@JNq{{vY^n@O#G|CGl0#Lt}4yYD+QN6<$URe>|Lipil?y z{{V*cyFDww+IEL-zb>6`6ez9KDuAF7#(H(dXvI8M#7H38zGmz$Kqo%=&mNUS!#DA$WeVxPx!Wdst6$*22zI~F5W(0e@Y4F z7H4^tU^rJ}j!sB8t2<;8B1xU=z$2XF)Kx3HnC;_hjjOgU7%A#cOy|9ExBe`b?FPk5 zhGIT&x!by(m~$PwUFp$Cg6K;8o^itcd*D|$s`#0M$u^wJggCIi`trNPv)A zBp~W~98}XWw3SRxx*_*--1ivupgEDV_GFo!@y-ylI1G6W>Bf8YtnF6YOxJYF-wo<3 zm~NslPZ`MEvJ7e!R$5)O+Lh@L#(=vx$>BS9{3sd4 zd^+$SgT4m%20sY+4hFK(^yZRCZ9_8vW_EV@oRi68U&H6dy+nAU_K5L@xAPRASY*yJ z!^`&`{8{ipmTOoeo-rfF(GN1zZeSIM)AQ!Pj2#ByJYVr{ zO--a&-&fSGrhTB5Qq9M&y<9;4xIf^X-Wa^_$LyDW3doSCSNW%meMJN5>4Skmp z4QuvWu2KGGYT!Nq=~3w4v)_cY`BQ9=>8Tu}8%ZnkbB??f80~}WUGq&0wvB9n?j&Qm zBA}TU?PHQyN12=tko%vlJ~Wah1hSDHdBDX>e6g_3cGb$!5hBC=z-DjG*1s^zyHG7n?ZnnjxmWZXlI z!vy5>+v)V63(?)fwA;*|yivVZjARqfG{lvpu%8IqoQ76Dna()%sGca`K3e>*)Rs8p zbRg5M-}mao-Ymyq{|O9=Mm%NJo3FL4rXoH*?HCg$mU0o9G<@}dFlM? zCOZl3#Ec1Nk0YlXAO5vw8?bbcKPl_a*F0Af9nPgZB2wgSEOMQfsXtnl!7nZo z$bwf@VpWOc1#zEI>xycuaY%N2#AV1Fe7^p$PW<;LaSq{+QLhVjAf$#4@T%~oE_)DCCp>RR!R;?_uN0OjpZb8pHQzB@D zX5E`IV6e7Tc5MI??Zz=kM1?TRwK6)M zxb&%G@?L8B`ah5E0spwZZ{4qcf1{P{=LEsRro=F+@rf>5~`8*tf zwTC&+T7AM=bl z0YS~x%!W5pm14QiKZQNCgjaSUqbxC&#^T=C_pOL!-p;6UTx2o%SZ6$OQeIklmhrn} zJZB+@EuZi-0gq{QFO}rsm=TXcN%a*&RTmbm1Z%xk5*+1*bM05;fWdB}GIs(toM7bk z{Hnu1^WB}Oa(EfX9^!yF?}nZh@PC4#)u!;(j8>9smqOz8;~(qh`H5yd*p@u!`d47E zEvS+!azebHFC^^)8SCHkub=)8e0uPY#h()R=fWNwvc0mq@IIjxmD#vNSf`ULo@8nX zE0&Fp2`6q2c_4i&6{x$9?MmP)0B||y{AdEQ&l=jKR?elyNe71JpC6J&)=~%<+uv~S zRZY98GL^^6j=ray`c$Qg&k`s=NXf@7k4gZzE+i(n2re?A9}ic$fOavjp4eEq#kqraX=AEYdbNBz)W~NgZGK)+ltJ& zKWN(vmLxXZxy*fkjmIB`3G@4kHbCccDFIWo?74q1mo2DPz8IK zp2^YNsE**02>$?Qr&_IVZvrO8l;=B+4+lMotI9GKNeRLO%V72Nto?#X^KF%kb^{y% z&=Eivq4Qn7%sI))BdPk;tBd&>0&U{u6bz1Wk6O%*(%47{8zjJHDozp_9Rb58;e&#C=~O^t&yC7r;(hD8r*2*1Q^>T zhH|`uqoDSxAL!QRC<>f202mGf9)f@|G!G8wUKrD7)4VNb1)Y@hH0>3%YZ4jT1)S^v z7C0F_NgSHiGQ}*ojrKY(%)eUsi}rW@q4e*Mo)GaCqXwNmlKvg>1>T9U$Q;S!1t{bN zQl){xTppYgUr<|1BU$-&q=_RZJ;RT4-`ap5bs4%xm0#|t;F8@cZ7x`C2FrowHyGnM z9)`0+O=>>MaE#-V$>Xmkq)AI$ENj$`SpNVO0A8A8dzPK{JIX-9a!04r-l)y~g=Vne z<9RA`f)8+NORMLrn) z#^h`S@5NVW#jV46D~Q2V0Cyl_n*RW7g85^!Un_syC4nUS)25F0LlmpE1GWKElbrH> zGe8oHxX`L73ZR|2$Kjt!F3P-ePa`haS0`xXmgq$!^IR>@*zQQiLhdWj`+aJ}EpK$w zTg@9rP!E*<0C03P0a_UgrLE)Yh4y}SPUu47)(ZS{K(vEM|K!c?orAPlV=^#mRW zHPVO)o6Y_%n`@T%o#R^{hF=W)LGcRu%+GJ(?K1OHcmw>>{gxvxz{jTTxaZcasUOe3 z{1zj@HhvEHvEgk`!}gKdSZf+`Ta}GMq(&0BL;wH)8NlcXHT&oAXID=X{0Z=9i6FsS ztrpW`0fu0agy-@dtMUW>3RB`+Z;YR^55vFOc`SUFyaHE$Q~NhG`1}ko90=Ua54hPz{gwwarNoNW=Ztj!@|m1*}h?hW1M6T zoP8@nm86(7Bjp@`G5FLs5nHU`Zc!tAmJFkkGmhOUl1Uq}XcgH}aqo{&-heLda~eq^ z3>>k?Tqk}iV=S*AxVJHse_jrH9<@c8lvrOu%!Y5)A&~)!rCymMoJl4Tsp5y%Hw5_9U zvdeX~*sjrmfVt$c2AMzEWB|sjq@yTi{vZdp9XrqlO~TrJoE7Dj!2osJ>G)KiYmNy3 zJ3++0_gj!QgMtogMB7^lMCx}Df=MH$Kdn}p%lH0dU~Ry1z=A%M0rI!)wc~4Fh99!u zi#5n@Jgd9SG2nm>36aVU4{mUO40o@_FZd(pgDj8jPo?VKAcO4}7WUJarXvdskfCW$ zx{>nsSxk>R18J zed_hfH0CFSfR2l_HadZhpW#{8aJ+8TX%I-&!Z8^q1E+pLr$!{TQ6OAx7y(BufsdzN zXe3#cCI$%P3i-@~&oPQUN=cBPZYdYew6AlQUcbvbX?(06j7M z`KtR&N=V7d5tZ%JKSSw25n8}tjcsxRqhW~XH-C?6o+AoA=eXRsE4#YnU>y3@CAA3? z-c08?`3LY4eL$+qBW~D)M%{=RTzU@l0jQT2mPm_lBKgUTl1>Vq2q183l*G*w?Hkw( zl78u4{{T$ViS4A5%O@FMpyYG^0M@9cj_N>T3xJjFBo@tb?4#vGK*hT$UZ?RL>B}r&84dtH-utY7od9LtX_8vTk#9T3 z9b4b1!K*)PytTDRHxlYICPsRmKf<(OdzOjU<=lfg@0IrcRRg@2>LzoNr)gy88@pqz z07bI(wDUH?ftdzJBO{u6$t1Hh+Z$sJ{{T1X_*RUwiEW|sGaP%cH-0@p_pHU3+eg#^ z)SUDOjQ;?h^Z^~Vo?B7haLu~}t9^S4jbkS7?Kg6Wo?JJV$;WThRfyT6k#?yuaq^zT z9=@b=SyMivJj^0t@)M2Yk*m1t1TUX9Jw`o_{J+1U8@Q!;QZ- z=R3Xgj+x2*YVEWbm`eL|^0)h|n)w&@Tln4LpN)FI#On=xqc+|Z@l)yAenQ6o0A>Zj z$>VS(IL|$OMN~lg%MA(%1A!pM(7)|e_qPz;k!^F5K^sW@DFik#s=d39v;ufOnZT;; zYXD{1Tg(9S+Zp1d2qIaPn9AoQ<$&*wI&|i>G;-hjup5t$NR#= zpg6@@Z8fE}6TGb)Xxa6~IKdPFMp?{8Nx%#lw*}jrpIWIi%2^{-^8RoO9;!Wkt3``T z5Vm54c-o`ye5d>>X^@0G?kq?L(<6`4fHCHFj%K%oN~(>!w{TCXq&`%aOoJ-%vc{u1 z$nQ*Z3^N_Axp9mUop29;cVyLRmz54}}3{{Ur* zCX5#dxHOJPzH^xHhW`9C21sw1Lelh z2XpvTQQpAer78x}c4T0YRnkA5p@0Is0sz1m=s!Lw>uB;EE3A*u?%`B=&;#Mp+(hh< zN9IU3`I*lrl6^V;bj6b6$^QUPJ7$rxbJUJOB=qN?`eMFw`1$dJ#Gej)Vet3E-Uo^+ zn=cXgf-OH%`8P7#lMrk$17>%UPX_>;;2eD~t|isG$)&;r#)t80Fr$3DVM$zgjO|r360B#`UY|l6+9WhaTrrlNL3fOGMtVuj~J%&if zda)(UP9?NP3`je+ z4DrAiXMa^43uoWoy-yIojXb-;q%=XXw>*#V_oWs9=3h0K_4)ZA_Q5#o^sMwV$8dhu ziWn(!q;eE>$NvDXfF?7oyu?QkE*LRwzbG8%r+Q{!AUGL+n6^L%jAI~GhQFAPCBP>D zlfdJ+`qQF@%j}PG&B+98&Pie06cx%>lIU7Qf>j~k{j7e1mK_sDx3+7SM4x!ZW&`BU zpdgObdTU!U;iU&IgsODG=n28&IOEd1cjH%#Ps8tnz9aFygiAHujhHs*Nnl->P!obP z$pif6f=@u2^4i8yVs~j2V3uH2QI8;C0qKrDm8}ix%zn@#1%nb!Kr9E>x4(MkJ{;;W zYkv(qG2#oD0MvC|BHHrh9x|w2RR<~vKBN#yAlF+xs@au}?8fY?w>TJIZ2Jt*2F=8c zdvChcKvq@21Dtg})t6`zNfPQpORH?b9EI!;YKAeG76_P*2?M7&=A)i7xgt_GC(LpD zg$9BPwUx}JU(3cBhpvC6Tx)0|c39DVY;4b{{V`SVkxZo!;afRZJbskPl1p%12I#Op zar`a*dr)SPZRD48&pH4w07dEmsNUXrAtE){@q@u2XFQHStyH+amI+0y3IYb$TW`(I zJ$?Jt@iby)S8yDFtX%a6r%z8>3gs(L1*N>7WVDo)-U%dd#~I-I4A3p&MA%LnlEi)O zpz-?B++A&r;gDoT2pJrP^w0IERxsiQwj_ypah#O{wnYUOz=>i>6zoviIPIMAimPm8Yi60*RQ=pB`9K7d&vQf(JkhtFOiBPGA={Qb`WwpMdU+qyJnOCOK_qz1{wDn@p?NA9HH$4qogXOi!kQD?1 z+4;wCIiL#YSh~IIY$?yoyr2I7P^mYpaLDfaVU-9hSeE0V6xqOd)>a~6k_Zix$>S!n zuiV{DDDihekc;g`crd&c%@9QT$Ma!VXiHWi$9_srsGVBVk>ml+Uld06HePxQ*3|LGl*C?T=q$P&MPL0U$X- z3gBRE1Gl|6TCK#m$#M67_7ffIDI<|)Dj2aWQ~}ibPzA`+L%8hZ51WoKeJOmiCGr`6 z)s?}=3>Vk`0M$?nmI`Brd4XiW9Ir(!y2#&Et zlRD%{z$f@f=xSSlv%}`cFCTOq_0M0zl2}y7DsomPS8QYEE$#KDM{g1tWQlk}q><2^ zbByso73E|qOW-Pxm4NGxn5isE%^;rOmnJ+6FUyawtw|+}Hwvref%6Uz0FKlYcx}zS zxCjP*UqSWjiU6yAjwexXf)n^lbtk`Uf!q0458|H%Xg)E8^#1@6+8fv>bv{Em^3E}U z*gTAk*Pzb~X%@(%%&mivNe8}3C$G0^^Ph@dKheGwcoOr*n%|hs046A7`IyPOZ%{b= zr~|KSl()2lPKq?OhA2c~BU~yf3q z6H96K88u57uSy}#(K3eT+yh-He=XQryKZs%JBwcV2)2z&!QO zdX3U(`5 zCQJgo3XFq~r>$E1MYND_j1}4k0G+4TrB{J1aU$UDDhm$m{W3i2G<3H0NjsxYu{ESf%8;282BJ@*ex){(Y~ z$8>SPB*`Ct41Wp$fg8w$lXgoU`Q-aj2xM3ucwRT!Ks&xdc;I!Vf>|R|vMul3RGjnb zPfyCJPiG|U<;)lxc2+ne8SRtB05miUJ5CNrJhwkD<=EA!OgL1SkO=-3$t(U8vDgTJ zl;lM@!YRRS2Ogb0vrrfs>vWCs1;Tm(`A`M8BHYnQ9!HYdTyw!4Dn%s9$k|byq!K!I z@5M~y#}??+mEm@dgWuk%JnJ07;^e!&Ku|G{t};4y%>Yj=wc395qX@XhK>#19?^O-7 z(l6Q|P#t;X@K2^H;vbb|VqYBm*uXT)fU-=`$VqH{;l>ZG0C=B?J`H$B$9^ET);xBG zMAGML*byC~0)Lc)m2lZ7ob=k^e)WCVvn4t!6zhp4)x{V5dJLqZ{gL>nWfz< zx3{|G%Gttza3ll)xRabNdB$^IuMU`r8?D5lw;#MXA%XSoYd|Sm#W`lQl|*U){t`#c z?e*_h)>!WT)eDcA86qvv1szYn(zK?SnM{#4&zy{W+Jlo&xLp=Ig^eD6XGaL>(4Et3=!c{H^X^u!^(lCFE9qP@c&Jd_h zGmJNII%DfffW$K}0a2Kt?s9XE{VJLQq;VE4ZwM?lZrpu(idL|RH6a}5fV_|IAL&=& zy^R^vk`!kW0l@Fli)#qlf3>**2moU_Vts!KU|&lOIt6*Hqun+D>&YPZszUiPQUm6c z<8T=tH@#hg_fCH?ZkQl%YXX2&<1tXH)1z? zXJ4JWuipGCi_-oXctc9@fcTp{Epg&Ft)AB2e3eC6Gq?l?85tlGp1zge4Qkrmh?_Bu zrd;E93)>y*&qu}o00m$CPPOT=VX0<>!?_={eM_ly%deh=dVYvA_*-yA3y4IRO1XpI}BE%-{-80|m{uK?( zXvb;*(r(_&4+MJS)}JZ@)VFao0!YI-k%{ub>U}=}#W^OrXC$DHAd`-9pYW|ua4E0BgIA8;A?~*72jI-O=Ja?9dbZp^H{GF=YkVmys)bwpLSkou5j0<;gP{|H* zI^!RS%~^&WK1+p!t4KDMRdb!iy|LD`E_GWSBG>y$_=2qAbAU+br}g5YpgiZ{pTbWG zd^tLu$Aqog3H6J?dwD#~yu7Li8&?}t4acDG#d=J?x;|XpeSeGcuQT{%@x#GC7jHa8 zY2a~nEPfol7IWNAf;i=n=jKt%V<7O@Y+#Tp(arRc&P3bGlafX;gV2M=6o9t_7R;M) z9D(zHI#%r@NC#*>{k`g($L$e~jsa8hpImx&H6t?z48vwI+W-^je_8;s z6v#xLc2$=h1~KhZO0pG63aJC4w{L%X&A8N>-P$;IGVphG&#yG^wIU~(FU`4kF5W>o z=|CEBti-To0Gx8e0B6#(gljF-%DMSi5so<&*st!U%5CK3Km(~hhNp&kVu_YE1;+#u zGm-V63kw~&k<6^0JZFukaDLw3twx0sJ>pC@26}bqM>Qlj@!Wi_yK+AH=t$=kUVU1| z&vN-oD=OwNRD8tspXE?IyB+s(-2fbe^{hp^xtd2hgKXSO zE)IA;{RL{Eh4z@)dCnD%4R|E0C<2Qo70r)Ha67L+X z)y=S;C`494Ow7_B;od+PT#@Q{_a3QrZ*gTI`y^4w(`<3(511)Xc~R(2C<78(eL`Mm zPz17Jn*(tA=D91qO3y~TGLXVlkQY$guwLT5O`*E;SuUMPOCZmslNh8FPx z{Bx1Qk?K!00f(e`+TU8#R?-NItkM)x{0w6x*L=_{EiV18K2d@9K?A*b&F_JrhG{h| zJj$xapq z#@fkzrao$NryMprlk~1{PS^DNi-`Q?!b$v0a6S6;HPEHbojj7-leES%S-Nw_QSDi< zEZi#Z*itS$y+2O3xw}@AcGtlw=cpaO4zvNA0C6677{GnGZlHRfbLm!3kq{f@JJ&mo zF`nnAwOy6Ow_#xiYPUPPlfcK&RbMrrT&o9To-xO-^Pmi^UqQCjtkwxszj2lzj-7`+ zGCK4ovwQ*Y^THntG>u-*!L~nQI@X}tjppYvW^7;qpSp?*ZC*&p%N{Y*+}zq)Vq4~p z8*mkiXXae=Jby0r!hAINso?L7z73nko&z@@VvhPt7W+zVV=N8PD#+1n;vM@0{oBSYl}rT2u32bv%rpe`*E9zEpBcm0^v_c_Wj^ z`p^bMmPrh)HgdkT5a; z^)+r}S8T?i3or2WDtY_}=~7zQhU4uGvewH1<6^;x`?(zd0QKs;QY-;{(Ye>LJ@eM3 zoZ6vdBR1uaY593!+o9`LAvWbayQD7P!MJcg9<&p7U5poxX8f)?4mW>|Mp#D3jE8`D z13ZuO>riv^Z9Ve6e-4$RBZ<@P7eP)i2;6dhfO=3DWj2;aKWV_&+y(3T=BH$tRD@o= zMmn7H$E7-dvdgv+w4gh^#~cAsM0()RODceGhS=({{Z0s z0E2!X_{UK3?X*+NscMm}yWB}8L~(4+MWY z;ygF;U*X@xFC6P$0q|7vOMBtfPq*xdh{H?5?JQ1t1RrpE;(?va60nU`uoXrJJ^uj4 zwF4tVu?7JfM<=NDst}uGDQ;xW@05N%l;Jc{OXaJA5a9cR>+e7o8<|iRf;nB8fZTC_c*w>_<(gYq8~2TRGOj*OdQdkM zTJl-A%XH3h%@8A?z`?=JeLcF>n><{;+tw}yKiMaDr9S2;h)4h#40-Fp>}VB-qDT>4 z$S0-%&lOr?>vF5R<>0OluU>wfQ_;js+nWkNA1_izziK6h*J7~!<32L2=nVm6HEmT; zx}1^@(a0Qn(lSe*w0D1-*Nj!AE|CS}k+&rM-*2WWx=14m>bSt%anA3h0nCPr){R3( zfR@g4)O(E7@J}pK{h@w!W!r=4j{cvG5wZxkqKO+h4W60rk4k@%)9oYoWSlTO=bYq! z_2>>{Tl1xz730B&lkNvk$BG5Q6?oYT5CD%<|Qp} zfXc%;JkT=Svqn@&xTpXCzL*_{^{X+wai&QjvALI^{5^h^nF2vB_0HxemL0+4ujN-& zipI9HsT%^eNWtScKb-(xiQq-vhi?9GYF|Dt?~2SXvC58U^G~Pw{HsJ}fB)A0&iAz@ z_NJWD4c+UU&_>+v`IG?^sM*NrQ2fKKT~<~Gs=I}33IJ$g z4M;+_PPG_PdQ?nGw-f;+k@3wy$VUlQ)DpOALY#3x712mJH6fe(Yz~fG&BB>zZFXYXAjT&z5=bQzGwN zH(CI)&YO6sjDQS^Zr_(Cq)@wP0wCT`ApQP78q5;Bmjug^vv40;(ilg~od+Z9S@X{G zNEfFW{Ad6r818YL^~FVX1d)!v{;HM@*&9zz{*@~ga>i5FfIqDOL2qzZX_WEMeid=! zM?)li{{Wq4wY0kkjEo9wEh$x1Jv)2Q1>J;&>~rZ*G|dUvxx;V?p~Jh0S0fxAX^Oc8 z!RPBh79?^aB;z1+^`}|F)4HJqq3UtXG!nz+&rWJJy7EX!&&m!@Gy!(*1-EQNp8aZ= zN01G~lkd`{n&Zp>u^V$xo0$Btu`Ye+0uv&q$|%FgK3*wy_cYQ7;dr14BSO66tvtAe zz)|xWkImkLcitW7+Iq0*Ko*4QCgoqksXIvSA&(>0m&_T+;M9@4itNlcPz2FN1h^yE zbC1fYTs_B_z>Kd>wHUm$c^8raY^2Xl=6<&I4zEQW7?hM!Xw;U0B3j9D*rjW3;rRj{NnhXP10s&u-cL zYdx-4%fRkWIPcbg9U}mt*BB&lI@20ekdz~CPvmN|`HWeShya6{SpzzPha~gG09uky zEkijB-3C3W72g4qf!98{sM;eM?PI;0u6tBviYJ)gDk(irGyx}?#!SZFG2;fTf21NY zUZ8dDS@xc8p*NVJagIXP!8lWHK42&VD&k9rPn&MhjsU3{T*M?K4EFCyAmNC0}0Yt?K*PiF?90n9V1 zx_Xe~jy-F~{x5te@YlutHrGV)gp!+kS=QhP-)LrD&D3M?HR`Tnh8V4(&zA};Yo2&f zfj}0^lw!c14}NM1CPv~yesRue9^j%B!1XPOda3`kz& zR46US%(&#|tw!>y%difoGy!{bt~|CpdJeS5Su^uC*3WvZtmT-Y!jDe0<}*s_h`D3y z)_@ULClL=`57(tKb#TO-fH~uiX=7O84VKP25_tN3Y8fUjvKa{k4zvK%Gov(_EFZ6^ zs|h@72$hs6VnNThO3ZnJ4>69wdY<{M2xVy_+q*lDQ$PeJONsoG)QITSv)0TR6jU_yRkEqwxUsu%1=JLaeIDa6LY?Ui8N@ zsy7(PVh?(PTZfzpU*%=(>MFda%^O=Jj(8LR^jJCagSBM;fyXlfmN@0TMP&{)ZH(;EkKR(v?MsoyP{5u@QUF1(sJ}z_)G%Nf`3T zC!d!D`_^2t5(ml-I(qX`!y+MUF>W#HF+dY#02ulG#8S#yuE3*>ahxMm~U`p}<>O14TSeNGAmf5uN>+A(Jq*;Ds2QAgT z=mKb&V|8frl^-@wQhL zF*Upfc^{l(^Qz9JkQl}?Fi*2}s3v!n6_4IMNB;m?rC93EFoafM=Rkebek1CmG|^bgIG6lFBkhanC;}?LZ$k{?Gpav^C$yKZxEo z_909P^x?PJXGjiYQ?FF*z8)C*HX~4(J{q&~E0` zv}+h`E^ZeSNepWlkY|kGdiBR%^{|e}PETGa0bXP>nB!ye4n4uBS;0ma0ZH#x0FF#5 zyCfE;&3HwCDmr643?8|t=O`mCe)I9qy&;xojI$i= zRMkfD3xl33)1<%Es6H(^g#niw~zJ$v;P3G)JpP;uOzxS$5N$_xrg zEy?duN|GKXW3_oW@99b&AgYM@Wj(u7<8ZP7F@fCopaL)5D=bGFhfl(stu%3lM%=^- zM#5Y%EtLRZeiY_%hycz=7@!LZ%^K{G<&Pu|)f0(O`A_oW=RZn{JBZYY9ZpxM9q72Z zStrY|DtP2`iU9nS{{Vu<*+PC5SZhp$*4%|(Y^cxkuaZCDhCVBjJKr1WF^?@}wcgG> zLvj4;^hf>*qhV`t`zY#KhM<7FErk48NAj=BpZFm4<*c4L@m7y?Fw@(HDt!QK{-9Qa z`zQ1ZJ>I>lUnQrOBtQc01C0Lw^@VOPgd@7tV4qWqF@+-p{{TwqEL|+^VYRk9b~7CM zhWGZZ7m(aEZdfxa;EzmJW=G1uwKt4BUGSsffBYpM3$2vuO+0(lL}n~HAD5HIU&6kK z@XhV+x#68JQ*f&!ma$6vMpw*W3uD_oKDDhSj6(12N08a$uU@=Tye)3x1tk{&LW~Rr z-~s7C7n*YO4Z~?(Fh8ALIV7`XfbW`)D5AF?K1uy}rpiGJaO3i&}dc-8br>A zE}-`BQ^7ji;ggUylb)HX%t8_KU=Vp8nX56)B0!Qj0|$>n1pr%fCrFOdj=rP66-IdE zanId6f%NsONOw6XK;ZG)idZ)(R^7PgpQb1RFD;e7cu8%!&UrNDc~zBVB!)dn?M`Js zF;kLzXOT^G^ZxK4ujfDr%$$`ZfyR9*v6%2w50vn8-k)(O4iGCYK3oy^s*G-{^L*Qz zvksqy0BJ<~)5)8$=dd2$^;PB;(5cC1U`bxM=iAnk%_yOi6P$f|^&d)lvWeTvARWgi zJ%7((Kn{v)nb-Gf69+#q=dU>WRT=Ijj_Fk&U+d zX(S$p9kcD)fHWf9Zz3!kt_eNzGhfb!{1;zak_~6UUJrpoSlakMRMTxE+jAN`v&=i8 z+@p_n_pj0K*+WJ6<)-WYIllP9CYH|j=Gf@+$jHhe4KCzRrzx>YgS=$qa&ccH{{X=r zd^x1(zXr8`9NYwsd$Ap}V1LUsC;tFuIs9w&*G<$`4H7Tigc0X)#uc;A1o59<^+tm( zE+lmXl8f7pJAPuk_r$kw++5p7XiGb@ecnkNgY>OUe_n!HLR6OCO7MPec)%QDu)H~? zHO<(X@Dvbd3`eoXdgt?@nVx~72_m;l$K|Szm>#=&^Xf%gyqH~F605aQ0S)(6vU8E? zP+HxOvxxl7yGcCs!RyfXsbIu1ODh6A!~hI(59wJ*wXrp#GLsaCYmVxzVyo?LdLD!C&kq5l9H0D|#k ziR4tl1v13&amU^D`d7!l5kF_Sej@(Uz6|*HaeR^6_*K`;wZpWMAc&zH3-+s+FA04P43@lnQEm&^^0INj4dxT%p5gCw8^ZoRU3=A>N28ie9$ z7Uo0qV=PI?9Q3Xy#F>KFh=2k1vkv>cPqlUOY>^~^m7F?^40g|7t#f+Ki!^*Gc4LNK zgsAQ)88(q?8)@-Cynw3gLE*Fi0N1S{w8|oYD9I0uc3<(YJKj`G$-c2Gb&zUe)3DYdDYcTjEdOS=jjs4JXtk@IKzR|^G%mlsPJ8&wGo z2>Yv(j(zG~V^W%UT_BkmSgAvgnQ%e;v&L%9gKKjsjb%rZb_<2b3zqCChL6ka(Q&O3c7l+eAL+ehv|B}m3W91?!M^cE$&wm?@3s^52aJ^uj4 zg4V^tL2$7Wk&bvcNKww`J#yUV-{>kQU9x84L4`jq-k3g>pC0)mky$xo zmOVM3W`)T4@T^KP2aa)^b*fS=!MXCHJ9n-^bOa8g@u@#Qe|RXY{)I0-*gQ3=hBJ4(UA0`sNeWDgZ*D@#{A_ZJ$*Ce0Hz7YQaf@b(; z&*Kh-<8Oeo%5C7*ZR4FK7~GOYDoDH@qvbqgX1`;@GyQ9d)%6zAjB%ja(d9`UPEUT=uJN@<+5~%# z-H8b*SEfIyuQ}J6OUcEXAXX%t9@#u+{3rvf(LzeEBxrJ{W)P8*dx7X{THe;l)WdLx zB=Dnyka_%T4$Y^tRzx63!2{suBz7G?O4y3n5bdcRD3D~&g ze1i%*XB>H6oFIH26Pp|pS zOGPF~_Lp)-_HNOJVZx}uTy*BAfn2M3yP2a0fyO}nI@HjK<++aFx689TeE=PO>IQZP zW1Y+f?5V*kQb_`!muAH^q>hYC)sp`uG~x49ldkxX{I|>v7XXpc6A$LWHAQQaTE4(jrB%Sl^pRa2DdH(={ zy#CQ24?Zn?De(UQ!{3Mcgtst3tGpM*BOw}O01&&epDY8Mh2^jT9M{f2@Jasw1OEWR zLHk2Nsu+xkXiJU51o;55{{ZWK1pt3lHt;@=Z3c`ZR!c|{GFOa~&OpaZ@s6UZA|E*Y zm~eSM-~PJPo;Hr>?C`5e!j{5fvo5V=wvi{k0YE!&dN3V+n4p;sf^g2T$&4JZ=r;X- z8k|O|e|X#;M+2X4tx4oS)1-^aWH9Hq_4-wdw^vv4W9I~pdwTx>^{6DynM=>?Gr-3r zbtko4jyT%rMzWS6F}xmrZ1Ijq6_q=*vKZk9CjgRhxP$5M>MD4w; zZY0|zj85E+eMaN?(_`KoLm0xUvku`&8K5~?LjG8-jM{(&i{VMe^~z_Tr%J`Njtyl6 zi4PAWiW{d`8>^yfz)Fl)fp|G+fRxZ z+j6MOW1qWMMYF&m5w`3eKN<}NT)Mv1jY)WZQhFYGckU`nClFj=c`SDp;GReHr!|zT z587}@>IgZ{r{!6#Cd@w49XV|A!T$gn49^Wmv!jj5>w(UC@(nWj=G~@Jjy%zU#{qq40@B8jN9Dkr6*w)%GtPZ`)oBj!E!o!{ z^UqIDt|~YTutNSxEaVboA2vzkb*Q1#W|5jVOtOu^urhsk??4hs2xVJk3$&73J;%N} zR&UwvZOh(72;bDH$>8t@NyNWKiB_zz%WFeJL63g|f!d`H!@WFB@^mpbBYm zad14FgkX*WR=qD5HnZQdEFq`JLViCQpM&u=dylB9b2imcOI+(RAZsNCzpRv-=! zIHsL5?Ic{Zj`9ZHLXJL}pbK%$g=uf_W56L(fzMxhbW_7G$_R+yC`IlEzpYk59B%MD zLP8K@J^TA}T?`s@7Oc98;IWJn7qK3laX=V%C79x1g-I9yWPmv6YGxi-RYWKlj;e4! zrYdQi-1&~t>^n~+WB&lJSvk9&`^~g>R86X&a+$}W%>Zb5aYO+i?ipNUlZ1XjZ5a2}bfHnGkcX(b^Yj#DE$MF2If#4;E-!YZ5t$j7B;-%EWd z2Gn9QN8KZFJ+g7uwb>FWoLl_mhu;7mKBlP2X4m^{W4Kt@Fv-CgVtei6PzQr(9s$z6 z8|hcpo))u;z-m`AUfzYz@2+IV=}t-cn;iS_02r@M@U+^B=+Vh=HJR`0D0AgIpazOK0cLM68k@F(}GTdO-)cPf~+GUDq=)|%D>yx{1 zZg~7L#azJ9iKTXDar5MrIQyskDoe#?5zA`B&5WJ^>OQ`eI728K+$@CS1dQ?A3W*{r z(hPyLdB&it4G~1~_G289^*+KIR`f>SIywc38^ENl|ayoi* z+L;S1wr?98Y#8VMxSHe4!N)=f>7Vo3fFz19u*e!T+OmK_>_#}L=AKl69Y!Q`w2{fk{*;rM zZuInuB1YB$(S}F^(-e_Jve|BV3kZlMar5!UN8vyfZKk)jp6cX6M&O`#ZauqGCPHj? zNLOU4Hf`&Z?0;I!yqZyLB1cp`NNx$w{{UL9%$C-AVqZxA0P6AbH`kyi-heO7aU)9c z#0;ZvD#Igp^}wpJBWx3yRgyp#%qnsM^Z;2?%5&93u$Qiby803o!QAJp1H3J{{VtAYs){u-yP^X zgK2tY<-GQVdTesb)3!j*>(akPybG;(U-p~*m>&At61Ltt(x!$eTn7=z9phzUxcNkh z@*I8Kcdx?V_#{_~ZhjR0)IKx#2jWQ@Hj>rgSR^}ENiEwT;Er3%85sT(?OBq4MDrvO z+`$XwWGX`BWMuK%-3?atRp&BkP`Oq@bAw6-UaU&U)bU$Gu5B;1KaMd9gki zuK=LvPdMPzw$O%QadROo&5hl%zoh_dT3j--dCT&k+=r<5sM={7XE9+gLvLIKUj6?7 zm0&Ym>G$#5T4j-e%C{NkIjg2gTo~n0Ndr51!us*nfG$aMBepG$cMeGy+|AVcRcD-A zh~sx9MnO2|>7L@E7v@XD85=y6U7?Qz4*983B%gr5q9*2Jf_OcBg#bC0B`PK%RH!A7 z&5qgpy=t`cMI?%RrbGl`j!KpG9`z(M28kFr7y#ou^WXeMJ_#U5 zj-V6hEA3zSCpUn!tIvejpAo!GVv@&YuEhF0Hz*(Ml0u*5&vQ{Ct*lV1ws<_?oSwY?f0YCZ*HT=u z40mzC0E`~Jg=gJvf)tFBq_#U}IR1v873au?50eZ>yL34J06b!%m&}${NfYk?#1WDX zbJN~{DC&Bomevnszw1zMPR9eN$FHSa(3z`35@UsUxQ&rC3|Iu2ap6V_|}wyf;3+)B&F!qb1zN+5l5$%e8n1J^gxjsJ_@D zEfa8150#DvI%IV}<4=X5eNJiB!jbZ$oDA{lQrKGBz$BeyQp=36ByiuL?LZHTd#g4V z8O{gExMbnFd;8*~f+*m$`&4YeIXl4T>OE@OU5h41i2(p0?w`H}puA`y&dAfBJ4XImNLjyq@$@cVvl z6oPvG8RS-kVde9bU`Y@lfyo|#=ij{mW=|ZFUYm(d(m?C&)P6M@d8R{g49SpwW63%H z06(Q^`TlYgMG-V=xol+Q^*-Enth?9@S8xk{Qes(^x?z9Ar`CWb^0WKkTYI+FU+*h* z#bIeyP-yLUX{M-(8K*Z>f~pdCjEpTK13Znxkl&4J zLX3fx*_GT3`ePr?sHEe}(KYrUyCtRfuie;v^VZI+ku&fzQ%}K{?)BZDqhx!2ukF|gg!jgJ%*QeHzr5;|?1eR@!^gfkNGvq}h58bF>hj$}^ z$@SRMGwMGDr|?8xAA;KTd`03|bgQE{A)$fB8)(SqExU2{9D`p^1&~SQ z$^mE_Xl#7B01?kY*No5w87)P_tWpr9A;@u)liTn$TgbCnSs;{pVMhawdH(zczyRe;BKg(nA;1Fu|Q_Mi(<+u5wk=J2YxJ%)Q9@u{vc8u^fo=Pi$y zAe`rn(kM*ju)A`2IVYty_Ti1dDo2oT6!ym*Xabz1Lp8mqz%p(mk;m!BwLC`!(p*6i zM`ZaF9u7xtFn?NcSS|`iK16a=itxR;9X}dKp@UC|#}sIoB>+*G8HZ!<+|U6uka^~3 zLnr{?=kWl0=dBBDjUm)-GG$+pTRBwq{4v)xM8hnf=|}G?ZpUMaH3yb43PgT(4Iy7# z^!d8}bOCNDB}^~fX2wUkq%+&Y=3FB(b>kxK^a(AYU61sjQtN|nz%{`5-32E zBaHQ2={-&#}%_o?$?Oo4+F~XYC zNY2)oz>9Cny~BIb+2T`t zBooG7&PFCknSSuba6sUU^!isp8$zX*qO0I9Mjn_Q{{X_gpX1NO+h2ws3U&Vg6=`uL z&Zl8vBU+5@Qy?EH+uc;0@IGt-k&!_st}WoUm2IU`n-roe4Y-W<0|Ns!KrW^i{V6t~ zZd-==vBu&niugyaYJMsBLE%pr_?03zIS&nbpxH*-#@?)Zq9W)uj~1E-0x$Gpm5!9g)uAZ>-xV!f0J+W{>}x+xDEJk z7I%h8nVO;&=SDfG*U`&zr#T*j{7hy`1JxpJ%KqNt)|$rYKNbcoKSP$neL}FsvfEWY z-v=@>b{bWOB<$Ow^UcUMpZ@53*?>g6hcD%uRe3*~_KMprm@j2$0kjCG6??WTMkLbn z9!6X6TmGWLUnn+>{4d{PxEMi)Xe(#l$wc?N;Z0Qhq%sn7!hJf%&u3wYJ}Z%?$9*1G zoR}h7kD_=wR7zD6o#fjC#C{9y#zV@S3qhAIW54F|hhQ8{fxj1^Lai)YrR?h8575Ud zQQb{PE#s`EQB(YjzY54IRph<=&#_{TyoxY*>vBr>R(a&~H5uq@Q`m|oMVBz-=>SUl ze7$tou_oZGFY%1OdQZ+SWcFKKTwh^+yJ2#K{akj)@`Cx(@auP(GI)ystCmXI{6MKB zuIf$0EZN8x;midI&1!0^0(P^dsef(_qx_3XQ?rn&f9v;p=v8P?@h!R_R(i^U1RHyX zo*TuBFD0SE2Ud+(UiZ)QsaR+5-`C!|X8FW7Cgm5`Yw{m%LdyH;ADE4P zY=xVU0HdDhs{4dO3egp@bSZ{HI)w9G5O3N zRw(l=j4NB49aDXqAu_jXi_MHk!qjOCI9Jr@JyvRq2q_(Y6MSePI1K4;G4tn%BrtNf z4shFZE!1ICMZF(m;BbQ5>1$-}?S2)=`bRA>U524;UOA{26cX(C$$Y=mrw|MaI@1Ug(_0Hpp8ufKmu_k_D@~<|0DE@j@1`Y+fU;A=dtx= z_W?6V=}$)xtGDi=Wo4Hr6_xUmQ;DaoLXx!r`Ei|tBoUPB?K^-=ZB!V4uP%fCHI}85 z`sBqlb6vCx>bbtK9oW58;!~a z>Sg(JoqeJGWY^*vF^uXn7?=s=Q??g;XXJ_#y1fpqG$#nxR{KY!=<;KN>7Lsw7D3{r ze5*~E*u$lwpL-mV1adF{X)zO0C}cV8DG)bGTi_vktb9okyY5f%=JK_F&z;kR9&6s` z=Ub~9n=dklbB_vYS%LNcsd-`golE!*Q1GdFe(2OoDZNh5{ySVCeeap|$45+{QXEB6 zfvi?=yYiTbL+j&jc1Gd}so;{YHJlg2hde45Vwg{>jDN|_Yus|yn^YFegGkzvWqinK z#=sq*VDWT!&my<@`^?YWCsB_TBU$ud4-mOVfu7tUUBcgpA;YjCA;xB=C*>E8uTPUf z+u@H|n7OAbksZQLdmjzOWe>9_C+}~Dcs|aIQI;hJGjRm#6787NN2zV3Y+x74W6t1c zc?-jOw=@Bh0m>BbCHpRIoho6j3>mdx|F$Os&8LLE`JSi>a^?=?$hz7S9rQ; zmSj;N!l0|L)9?JgNtiCM$2XTYOgh;N`MoqDMp~W1-9swaNV8+$bAE1Q6l5r=-~dT^ zQEcv)(ogf8mxMVt*|qFAw;|e}gb+9i2W1o*9vuT@#Jj)wBYx{jPi#=gipN@x(EGN{ z0S(odOVkjOO~-nuQlR36VEhQl zpOVEAu4-O9*o!^A&!us>PnOZ(sodmVdiCbm1$It#ktj1U$XEy>#K11ruvMv3t6v-A zJ2)PSi-^(Kx@V>mk$Y;p6nqtKh^L12dqZ{Ur;wsEA{253)GUV%hdeMKe7S?M2mOq5f%(iH73w%mDD#h-V0*}ddeN&~nLxXK4+9fclO_)rD@rC4?=l#Gbjl+@z ztf*#NJ~{!HJ_qm36z#${ZOsJ!1-Ef#VRsX7uIIN$tQA zmArNqH(I{)MR{de_l*fW!xuiCix<6PRrpWem{ug3Lrz0b+aEq*&w`zHtPkz*N z?iAl1-FJ8_S^zuX3)a7?_VD(B&_k405#)rG???ljeShgg z&c@FZf>udzhlobY*XQ&hg*}U_>`>o+@$PR9Ezrq=D0&!U4bMqY{3~PL@?V>I06~wTKRJGS<0@H;h3Qf9Xui4=51AV!hvM7<&n*2J31Wm#0Ltiz5_6pfN-D1XNXf96}Tr}%ce_B+2U>8XW2AEw-(!<1&>L}s| zLAX0>Gf;2W)Wf$**$npliIso-foej)Q4dcE*23w%9LdFV#lymUhBZ@EqikV@63&so zw9gB4_3$)gE^1}Q!^5(GtUI)8*IttK%H)%aHIs~V&5dr$glG-w==Ub!mUddAQ#`sD%x~8?%L0KurK^fIux>9iESgA%zbDQck7MyV9 zBYN}q%`r(xYY~58tzPrSm~==)3`mwcfp#~qM?C+m!&_4V{}n&zB|37#{`-x~1hc)! zWg$Z{a zv?K+na&w!%-842b>0uW+%suZZKg#$RJ_b{c$33v0I@p0S#TtJIC8OFC-(|tqDJe2H zuX*w+YdUj!%jJ(6%b6_y)#bV#3q_27hW#AqDkQ(iC`+?$AKpv_CSU?Cj^o^Vv2mdH zLOoWbic#_pL!iIG3MuTvmq``m8ovMP6YCS zMB5YZ1}kdoo4DG&dU}TO;IZ4$JKJdWu-UKo;WmyfFMn0o^Dr(*BU-yp_SOD@vu^}} z>}>w~>?cKUF!f$L)hmJp{`DH0wP}PHFC<>teA=qm_Gm!Us*g&#L1IM@=-TGp3ByJ{ zl^p+t2G%H}tUOSTDRoh!O*~d3vNl@@MWU-iK_crrE;CoGrGuzZtxJQEX&c6uuV>z`zNO|K$ZeN3_oj8|!g~;;S&q3I!+V;s+_% zgDC7{31rwtqjjFRuc&wKB7M(;#?@0*IfWY}IpnQ9eDjNxHXYoVeX1JxDYjN$;1v)> z=00dwdNb@hRbrj#YdX1r7GAtJpG%jPs=6Hw9M!TXt%18%0pl56d>9YO9n)T8jf&Ki z$aD}qDHE_WNTF;TjWe5kBkLJGLk*KD+=1u(maWJ2X%{oE*MCr%&R`*gHd~NW1|dp< z`tMFp^F!@dU@T{cg8~x58LKqpjoQi~2+;V}%W_gt+PycAzqAmvzL>9aipl;n&?ace z+J(;VEmFfRNo@-7Cx1?D2ZaUR*)`yeJ{o%EBz-F+6(&8!B2Za$A^nl_M-2P$i|uds z>zEXtE;TEp%`JQl+D!|}sd&y+x>cmZ`+%%ZmGTH%Qp}gud8V3Sq?gi-+uGjOc5Fi6 z3AmEzjjd3#-S+F!+?F43hxq7>7%&nh@uw0DhYQ^BA2j#3tWCCie0gw2qs|jQ>TvY! zn4Yq7q#$58N{EDz4&kLz-r4-*>+}2uzO0wG`@)@iN#;!QSvAxby@y>ttx4QpEOs$G z-sqX}BRQG>+C(BQ%BJB7fv~_)VJc?lCsSNgd)=Q2Nr3Gs_wz{@$MxgU16svL4#i87 z5b0pw9m9;@oB57j>~G~+O4)%3V{Wfwl?M)BLFFw5Fv_o-lt4)(Ldrxt#G;cZ!J{u8GJ_A*-b-~VAj0WpZPN^Fr{vT5YctI z2&V8(GfZ8XCBcI$R^}4#N8Sup-Fv97$=Q@NO<9^RQu?z#6@NG%H?6pDbs=N$q)3+Fjq_7IU8AUA#v*kzbn8G#Rr0+K8e@^Q--k$gmBn4Vb z#R#~Wo*%cehP#CX$Gg=Ec-uW+eiGoLEu^AT(`eL`M5uMioN1GbA!~cc3NXQpWTK?P zfiM`}_|8KXvk@)UrKG~Ty0}4$ate2BliGT#bxZ_R`{RSOpW~QS;>BSiWNYfb%E>I& zVlNSM2nz-;@^o;pdd_g>#VYmd@yZ>lXS?q9EaW03nsZh7qDG4PDZ zdOht?S(7E>2dr~3WSJO^4!SF>9d`;PlHUh zym1@8Q7Sq`kl(}Kv!m;arA^_h%>;ogMo-w6(1S&ukOhb; z8wwNd6O?$)eiKpUK2G5;rZV)7G*A!yJu5tYh}QIz4bdNfFP0{hw}yhubNO}@WO}(A z)1((S(JWLd7Y5Ol(LNNa(cFk$`6}-6_m_e~q75{+Q~HYBQOb$yoOm1(%V_peq-2u4 znR!m0>^J5+M?W90T;88p&S~9x{Z;Pt=MDcw4JP7KYG9rWr$ACC^AB^i1;hEIHXYZJ#)=Zac`9J7p4_#xIPs z!A_kZB|oTINtk?8l=e-)=BsCBByiW^*KSe%VZ5R$VW9WS0Q-Xm(5=OCoT)0ur1voC z0M}5v0W9ol9Kkm^2$gQ-PH>t-D5++DJj$TK1BYw)_3ZfwPfgZWb+_FfVvZXQbf&;8 z*)FM)M#dv`nXzGU+l#H|NXbu>0!K^h_D7N31Z6V*h0RI*i({>Sb(ppzyLsp@48{N8 z2JFX&fq5f_1SEl=7F2;|JWlV~_!lT-^r_n&;G+({uurhDTCVnJ0yoa;j&f z->XY_Hcz&bcMKGn)dNs+UJ|TJK2q@P-@Nt1IF8#zUT%Ay5+IM6pd%{J|7v{xaBd<@ z_K))?ls&&_Dnw@OgP7gB)RpIt>lhPpX_3(=xpYJ6!nYe`&IgPE-E4Qou;+zM2i>dA z;ODJ99tv+5xBn^uArR%~4I=+IeJYYWRu9-_^o<4d*uRDLa+RLQtEWG1O-Og-o2Tk~ zMs)mWxBW;tE`fnK7%wTzg)8bn)l0%N1$Py>e_GrdoN*M2gL7a&qEj64Z|VI8Agk$N zov;Xbp!S*g=;sq*1S)OJ+Vl8g=1pt8)nlJl9Ia?R3Ycl7??R}rw}4oK*(2)z=I+KM zx7G1v$b?kP@VMX>o3MdyBMCwl#0=8MAbUI)a3N+=^omiQaFh&d32rfd#Q|ect`?hczgj7MCKdgHld%TvBq> z&>U$(OL1lB+5L?1f5r}?O)nvBQGi8zx%0YtPKSayR_(>DTu{-65m_aW%XnMBa6hm7 z6VYhh2gdA@JtemO8_D=ErVYV>$iWwXFv5A5E#gcM5DPXb{n1!yTO143?H^F87>`Ie z;`5&sp#Yw>9i!r`Jc1{pN#81zydGpoj)GidQbphVKzyE66aIpuDn>#bF0p?kM-^U- z^0NWj>{O?OCx$q(BoZz@En7KcTyChF($p@jUX2=aM-d|iSXA<7c_OD^G zvTighZ*z+Q+XNV^rz(-R2(&sCydr`Fxe|Pha-XI;@JMbOGvq)}0NPtxK_9ZVxAlqq^Fn&gkEMtp$AJCn} zRAIcH;Ip(SAVsA8&^cw0$;u0F`?PG=L!an5FULJ%mC!3)!UNUA7y%&_$y3>~R9Bi5 zLkGHa$Z0v@!b_$nhwDS~+c$0YP# zskGWyfcHW{puP+74Gx=cT?Nu&8VPp@Eh(UV9n-S~p3Gv_iG;`SL{FWRHEXo_ z9(=9e9|Z}8ZUpsMk0I1GNz#gaA|8G;bIN=L9-@|OsYrdrgjyon1FM57D7;PCMVZ*9 zw|U%uqb61ZRx18wrZwah0=v!!R4d*~7+mrJk`S?{Y8dx`RrZgIM6pQ|HN9%5>F_-r zgM3B(-|0#mc+oxQNUG;(HpoGKZ$7zYAR6`Msgtb})6yO}MLv?}kMO9)FF$gvfZkav zj!7KtqV>07x}=0^Ji>6|_WHB<3qSkAlJ0YB@>7kH@6DZlw8M;-Q3VyY3gGG`HULqw z-%hv22oNF8UmZ~9jzfO^D`=pT9~$Fg9Ats%G=ls{pHh&v^kBD*F#_nfM@haHv#$tK zOGn{L*E65taX$}_!(YPg+mhA4XAVwAmDi>XcdvaM3yJsr)^{0^Nu?zh5c@iG{&FiR zc!Kb29-gFS9|gQ0y6epy$>nH-_D~X&02@8)VM)p=(SFmcc#r9h6S#fayogo8(5jt{ ziXkNJ-*6+=YPSsoH0Wre6d<6hnfIBMyal|&h|a5RO3F`8Kq4pWc+*(EU)W~KlSoWzJT@&IG|YC@G-K{2*1)08og-J___|OydE{#niA!o z>pifI5Jj7vp<14%J@Cz)iw^a_pj(q)Af804AGRMCH74wM)Bb#ErzAP9i8qSG^ zq00-4eLd?ulu>f;jbA55Bl3kAud+jrL>(Ci`C+~%41lx(McNZea1jskI3`Q%t_O5p z)Q~-jUM~+21NWo`S3>TQx9+!AinX7FOu%@a(n7xRXcx_mXcXLZ4sC>thlZyk#yKwa z&c%bTZe2%P^M@YKX91L9kR5(+wMyvpCr%LcI?s2Up}|rgiTIW;mD(TbMiUXKGLH2B z*_9k$XFU)!t)H6{%iF580A3IxceD})s_}i(77_evT!HL%$5ROG3sA**a{|EJnksNF zED-mdWA#fbZ)V&8^$ zr947|97bs&k-q{N0l?r{OCoF$7PymLCMnomb9j1M*53DSsbZYCAR_Awo%`I=7fSs) z9;)n*!Q{KXL+B|mv(%lxK$9r@sK4WCMXP7)m!t@{ypwCdQ+|E6R)9--eao-m@W&8$ zi$NnxLgPb6Li<8j(jn3*{0U*Qyac$_MeNU6IquufjX<|n+-!1W0ORk#uM|!Rl5);HvJES#4V;cZ|Io=u#3hr+$90yZ6 z?!rL7E`79SL=_J(`puTP{K(sgOT=-+;a#fUj5>n3u2paJ51;?^e4qUxsh#KHXowBN zO_^c3-vBsroPg(G*D|7KpVifx?v6IlbNxwm83U@>mUZb+WeBx(VUmE|(HnC={SPEU zX$;wbtuZ78L7%eyzgFoTeA>peRdS=dwDgD2QAA`0@+ZJjJu`< zn!bKM0v+TkmgT3G?IY8TZn3Rjlyw=3Z~9}e9i6rWhtl=Zvw%D5z8pr?|$wkwL- zwrmH;ep?$(5cGE-SW?HC@l;!)LTKDruJ=YuZgM$wUXjbq(fW&w*AhVU(ywUC;`B@* zm`lLkxIA`0B+nEcB=B76=BW~44vBMkyN^2u=G+;LyD9>$yLtgGf)duhF61h_&I16k+6#PGJj|@B)$Z^_Wn~`@Kq|gv zOScpz{qFR)$(Q)fb2WDaWaf#=XRF0L7gQ7`SOdtV{r>}@TW+6TbMkLv-`^B7E4$TPzoH0dLQ>CAUvNK**(Nw&A!9B?tWt=1f;EZFzT_X|IMD(sx=JK7qsl&97oEUHkLh>EH(qUby#SmI}C zE@?>^>e&?s_LmTls_Ry~&x7~XOF?)`!JGA=GZ{LUR$83aX2OT#L5pd}HP<`=&x-Y^L7aRT);|FbKQC zk|E8~f|}DY3(ki=*AElsl3LW4QtHy|u@?w1{f(btJ>~NX5TeuYt8hOPsLG?#M4pdO z6v@&Ob~2C9|IiT%@gFo{;=Wohh+nsUKJ+@bo{E&YPD$CF?Jdwn{Rk8A?cuo6dq=c- z+Nw{b!^28?Ubt|`8jm+H073C4ZF4??Qh`vid|WLFZT0Q)QP)`IjT41`u~@LUw*e22-r^QlQR}pF(2+v|U27 z{0%~d%m{IU5gBaK=WRi5{$Wzxejl>qysmZrn0iY&`#3NU(MJnjf*t6C!YHx&6fE6+ zLSmkjj;@DXmo_h<6!aU))I8ZW*I52aWQu5Xf{lOC(oyT{FaC-`x`A@}SxAy_mmaV1 z=+>G~UC#MYD}onghfdv{PbN0B5X{s1r{A3T9TF)#hB}DV5~#nP)YK>EQCPQKM#Lqn zSJ}m#|Ds=f3R?{K9B0r=hs{nq#;))0-iMa?J93lFC}$vYH}|bDBH-$_?kX z8y>LAyOqD1F$M9s@B|+j1%sS7MaAt~BVlPgqk4lUJk?=4Pd3S`)TUerh9Qd4@7b|N zl%vz6xJy$H;U_{!zZ-2=;%QI!%zAuPqB@;Jzj5}VBzwig*_+3YXC~TG{|${!r~fsH z9tQ;I6Wrs?A5vWVh7A3#Pb@gk6m@RVc z?ao_*v&hCl+8P;u?D4jxf4--TYNz9pO|H}CKvm$)sp`7lr9BGD_$+xRevB^4N~E$a z_cMoA=kGF5XCh$;4xR%ubb^3p{iYM($a-Qem>U>o&h?~$h0k8pyUi7Ta&p3uQ#x{S z6pw`V`ueDDLur+KMNwUzPdE1$(2QI=y9RM)K^5UD4i8PGJ89s)36ecyAF}ZUk?)iQh zSP-2!>o>?=-!w{vi~+p!ztnR(TEa_$k3RbhcMlL!0KC9Sm|W0p`OQ=6xK4_<=l6#w z%AC6glay6?PR2L(t%vfv{{vAd@$3>gtHn68uG zAEYx={e40v3D`!Do*lRzvE$wSLa@(-s>^(OOKGZal8;lmjN`7wP~A=A-M$SUmm})9 z2s(J%D^I!i_?TU}>00i_o|m0pIBkN(`{Lp0TW3uo4*3Klt={#Vt#o$V@l}I(?*#XnZj%{Uw}g z)r;ugabivhWgaq{MDWF6X4z!63>mPhiBQZ)9`wQ(^f{X$C z+IqqO@v5ihbur2V%L6x*hEW<7rTOoa4hpG+r>_75co3|aI5Zz}JH7_s0;;qYNW1HPKl#)Qpz9VrUoViKX;Y%A$_Im24pX}ABpgu>I+`-09=Rz9}( zXYNr?)5}Dg@lLfzGAIiDEvTjrHN>OKXpLpe8X}ZrWL*C1szwttk&8dH9E7<>@Eulq zsqth-#KD=y6*XA<*qzv&aDpl_Hdlbb>{ZQ6m5+y!?cvYw4GA);{^<_6N6z7e~^9i<+h`f+cfY$&{^GK zCCct-8?dXthxzX&_}@@QyktL6TLnbP*TO4*uNuFvmM%xZk9=xRJ?E0Ei1N$kQkKk- z2>d##2RICT|DF!VWH^@`ySup2Fa)a)l*6`PTJ{Vds`>pS&<}Yx6=cMp)DH4H&A{s_@v~Ek}9ov}XShs`w`xCo9RdHpz%Pr_V zdG$My9)nXmriqMNIr#_PTipd<7({*-GzXpL`Q#S{V~1>IQ4Z#BetQV-DM;=~Z801< z^~hfc{LAR%jJwg8dieBd^an=>gk29I+q3<;tN!^7&FZ>!ALWx(gNusN=kNd3&{&iu z?>?x?&%CcYZzT~?iA&0>_%qHD(L>tKP<7#oxu8SMJuh4Ic8Eqp8n9f-uOs_r-GOKhz=PzFt zxPG@^3ZZaBQndYnHjo&qJ;Wr<%Uh4tH7qO7s>Rbw{smvFL;~%k1`ne`TJ8&_gkp>o zZ5XAE)$a(Wjy0@tACvdnj7o|%G1&fdA62<4H{o#A`y%XIpG@=c$`uR zcQPh?Z_4{#$_}NZx*yXcRIldL-_XTvDIKjq%OCiA1MUb=;A$^>^vZ(^-}Qawi)*C} zm*+Qr{1%q`(kTs(2Y6c;2YnN^U?N(6Y!1L&IVkU!Gkh7LUQm2vd_Y{a?(Vy`l3pgT zFdqBfdf^_5%9hS63$i%BMWK#p87OObAFUtJ7_~@itk-Z)&Fa0=&e8<9q@TOG8iu3r zAC&wn|L|Ac(M=k+%l9afEf7r7tS?S=u{eez^kf%tve9x>0M}sg#FN!lB96H%eCjbk z%;2NF(mKwdyg57HO=H>KE$OxuAPcJeSS{#~p!Fi$G|`aFH`hBm(P)oL{8C3avu-QF z1C-<}DrFowqHGDd8Jd@|Ii9NVn6WHr7w=OiR>XSiT_lfHNz9{DGe#6aio$NG!9KFd zVx$)4FU}PsGWz4jL_}v{jNjvC*B+BqhTGpR*_WP(Y0th0GTxLKA+TpDCEquz8+8f! z64|qaXQOR?@Q+B>p0Y5K^eN*w1f_$8J_yaCh|%QYK3J>c53*bEmlNsEjfQWVTG{{J zbuOS~?--YVZV{|+X|Z`AdOx8q_1+N}XbJJD7H91$2#lh6*zbO1JYGP!_u2@8xsFEP z5DKb%)@beFxx}1R@wBM+K4nQ8WE@`xV$S}~DazHBY7Uo1YBE4c+?nV3msW}x7zZ!* zm_fu`v@C_tLSosf_tFT$_$l^1SicYf>^P+CU}AR7rWi?P@tff>>hC?3JJT&K^3E^u zp`s_UKV}AcqDPWUDE11-sGsin0`KqT=gJGr_HP8mg=uXAu|U#b-HPaf2Z(mcKfG}| ztbdhZ-F&e(H2L(;5BKBj)Js(lgy2faywTA(UJYO!wDI`q(O>AXMu> z;^Q6X+X(U#^LgA{sPtQg(bG&BG{sP5UTpZ)9>-b$o>kN*Cx+UVyeUFlc@o~9>L^HN z)cx5HH_R)MK$L_Z%Z#WmVUDBL&~7@R#F`1>vG}*cFF3dg_mR$2mF{tSri8XQdcuwA z|J~NLA%x)${%jqL40z4+c1O<5Of)tYV+PI>?m+MvSUKYHfgO8s4qv!GV{JLvY z)cV?v_En61!1eGERukL-9bDu0X|3lbwL7}9f1b2TNCaExQq@uK(h49V**h1DXt5f!Onzk8O*H<1JG9it#cf=)%K2m`DK zgPknT;t?TDVldX^wc^IMik0A-tH|eZM*ul=o{Jw_JEj1{XqYWxR(Op1<+A+M3EmOv z!$D53HIj+>BpH8-R;;+mVu3w#Hthy-C^5-6( ztL|EX3q##5LJrCMI{ALdu~`oX`K^&+>t|lUMS?`e9LP87@!B25!2}5e0~~X|g4tf_ zYKb%ZBrPxAoFl=RJx^sPVGOrHk|+C`Ey*PZH)d-&Ae2U6|`4iq0igiNBB+ zT)Yo;g)D4%6luI)@XyNyJV0g*_(D0t1L3mH1h%&6?h+^@Z2s92cCiESi8RvS5)xYo zbBRv7%aDk@-!i??j9cD+`Ezai%5dyCX}J!^z)kpT%XpUH`1#w^L+keqt4tT#$GzD% zb)UkNN!=ZRl7#byex*^HI5lDPxNflV*=8+P`fqhf^`c8B%e3F9zJ%(#>mWhP?lIcO z0)aadfXV})s~o7r+)-VyD_sO&4!K;eRD~A>##>S6E>!EFJv30zkC0kzO#FJAEsrUC z=+w`+p8l>weVx+kej<~JfaoK(`LWaPKcEw_Tf$KGi-NWN#0c^i&*N9f9nGIM+mY;AXIdYa$%Ef|g>oJ2qvi2l6`w<=3!6Fubo2kr@n-^CcD^@E5Dels zvc+HCT5!K$1{?i4mSbWm^sxDw0#82zBk+`daT9m5dho<@)Jp#PS*S5Pv%KST!q8Vu z&CZiy&+Jn`ff>u~l`LD_G2oiuvrA3d=fgZ1z5Brv8homs$QnD4?vp7#-nn6X#mb2k zlfp!d_sXTO;0smU?#!HyA~p!`?YV7>zTR=i&u#eHq6o-#z8RrMyXtwqvyTFR#c>9m z5lj{ZnKpAjZQvsSMUTn4)>{uV_i~%^zRu4nvv|idZCv?9J?q$nOwLc4i{tDn4NA{o zGA?Xc$_skhVuM%;7ZYwd+N1D5n8^j_e~z4o>wX*Os`U|1f3^+8)EzX5>MaiMCHt}@ ze>puz63b3RYIs3;wpjdRW96&dAPq^=bpuA$dA(^Z`8w)rPHovC>2DK)n3iK0amhMW zerE1{X}`D+j`(lD*K-$4)=*_q4kUg2rBl!Tn%V;F!T!L@p zrJkqbN3Xd6kv&tD0o8Gy$U9#H%O#5kvF4#qeVC)5CrGk$Z)>Q`EYGvd;r~F57OM%3 zmp6ErDizchE!v*qpB@%z$KiiGnAmXdFo^WoB})-#hKJ&D$B)~;7ZG=4T8BiTkFOtI z)C%D4sg;=*AyaZ`Hl>cJ?Sw$Pqo8oc@SaX^{#oj6Me$6#>BA-S6;~~P8ha|4Cij2; zL?95W4v~J^Om+iY zRH6hzr6*qGne>Ir{qRpS%F$_#r%PV0)a=RRW1%I{_41)6?lK6M3=Np*Bvo1a*f@ZL zw`*0K{%QLA-u7YWO<(R!K`}4Ein@k)6-`TK+fuq0KE{n}su{oZFGbU=CjkVGhfNSZ zWh+>zT8VH*2cCI0$QES2&*XYceYz(rrV@Hbn?48nyOs;u>m*(Ql?+7Ub zk6d;dqzI4mY|qxjdWs3od?wNcxuy7~UA-$4%rmy;AKChD;oY+(+u1&8o)hiP)uL;3 zz!V5M+dV-N_sYX5T&p(vbFcCT{L2KbXtGEyYlrn~y)Q0d@$Ah# zjG~ld;n$dZZOP3Y=5?)^ux3K;JaDxXK0l<$&nF|kw4GQcuU}_lHM{zk`M~~JlfFqh zXv>8)IiiRKX_NmEO?QH@0h2=Mh;z}iEwLn{g7CLx-TR)A&(6%dm z;{0;L4R*)qTROMDxxGkt@~d=yFe$XRcrnDWKQG(8doi3w2!G*=Py4721|I31I^2cc zQxaMk$(JgXe8b9kb!Bw1SG^g@B-9F#x60!$Y#X~k5-D~D)C__C`0i_X=cuNrR{zl! z&BX+-!=AiNHRi*;(WCuLc;?wVThTUB+0UfjvYQMlp(DhV4v7qVqL`cJay!vnC&}mj=ZK_SWwbGz$>x$ab;0 zUPfx$wHN`cE|X$eso)uJaE_a8Ttmo*5oBmPyM-_G-pd3J#oHP5OJYXAD7B+bUKHBT zw?G_7Fn7FdWMTa?#gzXe>7alLh^pkET%UkhMwn=jQ9nAC7$!xZ`t#MBoPC0H@P#j$ zt%E-YrMH2Yz)3PLqLk&e@u~$awcG=9-NGu4Lzx4Z;qAz4+$P6?tU*o|avhplaO)-^KQkkbxjzz zvv)3K5Nt7r>$fuQ&rL?tD|3+xGAh6JIOAz{1=-MAJ`pe@f{_e(!CLaO?vx1o7cUdrRBKw7*8iBfFL<@E<4ojA~T#W zlyBya({!=NFQoW)W1n&An^&p$QrKKjkgg&dv9d3e4Y|HBW_W~sjp6u)YA0g+1BODr z254{kct7!}$_2@DEp`PT?|)$9X}N$OV1FVc+sG+bS_>6Qbx3&}JfCwD%#~+4I z+d>u;3H!3-KH|o&LYNgPzl0uo{oI*E7W0>ra#^;D z+}uA?%h`X%%lbH`x+i;qGd%n9z4u`el2IQI1Y-0%A4E1J*d?-$avUwP^P*N-x0210 zW*KoSy`XRRsLOcf7OSi>4BJ~IL?KjLt*E7kQKk;B+gl8G?M!5wlDaaHj-e@w&og4= zUaD6I10!KFUo){*%2Ni9O>DEV^~{cPS9c>59!bkO?vb3cdW!_o;?gaNtCVe$0v~M zLCxSO(h?AP-lh>m?Jfa_5^Me+4qvM3uVBsUj@#qr_VBnkd$2#U!M?M$&1oYf@uhzm zPscC&?JI)55U;iRu`+s5Pc~Fl@dUlHd-?N)48W2}mDZBR3FU^iqInQohe$FJrYG>| z2g5c%)ts%7SIrKlyf;)%A}i;1S|LHRs6jel?7%|n1(xl1TpTXbaMfRZdud9*5sH?% z!-vrd%Tzu)JR+p}8VCXm-ZSr*I34lMg+L5w{xBtIzI&FY@AHiI+66D!2&t?hjy-<$ zW<1}FM=$}^2;WYwM*E?t&b*Ft7t+?A=58lR&i$iNg`j&QC_+)HCelgTrgMLEavyrplBd@3~zOADe zIUf(-QyXOc0FX{ZJv}|R*o;aoZ$yAv7=Uj)oy!b7UJH*rG*JzaXZaFhyf8}H_E`kv zqsZbQ7(zk!S9rYS@6p#rnnI;F23IsSE&GY3Ob`t3OxNkHqm1ZXuxj-u zum0-Ey8cspigrMP=)B)kZ1i(VLoH*9GKv1>xRv(~l)h={)xgmJV;SmSE(=>UWOv)> zO&nXAO8L`u{-r!AUv|+P_8!h<2l!S+I!BT<(}zHFx`!u6Hrq$MXnOd3*COg@@)0 z{>c?=eP;wkAWg1R$=3qkRJ#ZNemFeoC--~Y!q2&oocR8xn+=EPN_>3ceh*k9`tz*t zv~H#KOZ{H(vUyq4me>J8%LX9{btFCfha?ihX13F|7n<1L6uw+$u(xgx$^8#xjjEpo zcmZEpez?Q&8axICbS4hBv-3K=jFpX#McVKN82?J{ZpVXA**xjr#DA)yUVo4m57S`# z50vO!kaFD(l!+pHxPyK5EG-LZE?p^X$0d%5PrWuHr}9RvabsC+!CACsJ%Xb2K+*CW_aHH#~SKP6IyNNqQ$_iFb{zM_ku z)W0{6O_fi;8BDhOg3l-ItD*Nz*+ zi4!*=lD!ueGCQrOCWA2kMM9p}^CLw%7*Es2HaaxZg*_#rJ*@WT55axX>dg;Zpf7_4 zEfh5+YldHIV|RZ?H~4T;b_C}h#*FK9&wMn}SE4Pp_oon2KuO&-+6OwjV;eN>1%#)M zrxxQu@n?bmaH`*+5B#-5`2GXQHIxa6#}tM(;jso0EEapoCMx=JYRIOdKWcu}mi#}8 z&cdO|whQAM4N}s`$PG!Qlul7Xl5T#*sOZN!r?s&iF`xlO%_n=MgX=A!j6mSm@E6JvdjBV~7C6Mk zTPV0q*;2v6)lUNuu1{ZB`+->T#$@DHRxh5}S&R|G%3IJ0{t3I2a0l zBd}<)Jd(mTQkS4;IpPBM{dRVOtk{it3OL2j?z#I7?qfx}dY>4OQaxAdgJA#j+eF%c zEc9jE9r*L%^s4?3882b9M3qf&5=4Rm(7st@)fg+(C8Z-@F&G{HYaa7r*au}1=_p;}wCt1?CSeHEm>J{foa@Z*(8yop^ zTTiR~1E@JikP@YMOgRl)t{~G{+spJX7|qa^%p@;F4V~XR&#h_F5#;H&VJG3Ks;#1~ za>>*_Ydm{l4&`@I6J2+&i&%bXu`{=}pG6mJkQsI?s1YG>Dm-7LW0+A4!zE2DgByj&M(28B@5w@8Z{Zg8VvanqK}<|i*9qXt zob-AKHS&+(f4ke6o*iRz{IfHtANPZdSag5Vq7b>j%aFkp1ov5wE6Nf}AaoT#y7Cr| ziclhR!9a*A{_JGGYs+zhRUnyRz&9U~4l8rc9sBaaC2ETX*u5P69ITlI!WM|=Kgg?LZ-T&Db z!m0g0LUDhFEY#544gmZJ9Ka&4^~8E4$o>PFSnS+*qne$v-j5N5%dx;t82#|W33m~; z%msGJo9Bxs2XnVkq6dBtDYxai3`$VNB=%DVhja=5k=<=1w-r9~(djDs;{%mn$d>$3 z7rW{=ziA-}1g#C4u?-L*OY!_sGI!5xGvf*|&ASemP74yf8Uoh8pC6v2cR!G*L{6;! zaumaz^Y?%{<9kFd2xn(|s6p2LDD;8iT0+-&8miG#`2>qt%*ojh@BR0Ixfw8gUNIK0 z6011M$Dq!LrHnoJ>Peo@(6q|D5;`$&M31?wOy}b_V=8>bFh0xGiHpazkJrV zzkPUClBTRFs7|f{*A&Bto)yO2W&gsu-g-71O7tAh=Qg8&s5yl+LJVKZVZZ#g2cqz! z`4*LXt5eYY@s%;nu=F;X>8jLbMJbLKj)k|1%qIdhIZ`Sa>J4AqHr>vgkNgKREitvf zjI2isM$`$?aL~ID_7)i#D}1olZo}9o<1pP35l>z0;CzDmi}kIlnJcO~Oki=;w#F&3 z7r;F7?@&O+>&W-}mH^H8U4TQ(*#?~|2tOUN*4O@U3U|+OQNt_xAl9?6hvPC#rn0XCHvnH}-(D0N3(7IP zxs0us8yUL3paO3$iCxL9Fvkkcs9{tDij8I#gMU#ueu{e2XbP4#!*LTwMg4Ku&f5GB zBm^P9Jz@A3L>BUMWtmc1=1K;*bLahgaz|;pw446OmFP8C$DUC~*=LK+J_`OS9LTCA*!pu}BS$n`0^D>rZb&_WnoAy6l|(7`v|G(ZU&qcF|8EKFu9FqofKV1V zk+%rr@e=eHBn`X?Ntv*B8kgs^0JuBnM0q6~t)m+K@PHX(!McQ?etd~|4%A|GY`DNi zcpFj_atZ`UD@1tpOh_B%toDFG=ZqzW!nzh2h^n@>9=yQwyi`zwh|kGuO>5ScodgLo zHB&B4j0e2Yrp*SwNlNH|YwA>b9F1**Cl&kF%u2bjmGLM z!$6@86V(2ead{rgesO3(Vo0@a55;?my$Qu1^)B8R#;{@BwnvGx%*7W!MAN?wzm`zi zJ!{)F>VF=eaLDv`KKv2H>ay*C2lx52^~8t`Jr);61;3tA3G7Z_@R2IsgU=blRnpSl)FfUtpAQaR{?R zHSVw4i~>=eL!?7d#?Bf&10i+rmh%pJD7 z{hsD^Js!Ut?3|A2r-#?A7-tR1qU=TS{+dda zvzOY7$rV@U_n>Qww72vg`=zuR}CyhmJ}!3TbK!8_S*y(@()iY&e`%#Av} zn7ifu_kCBtxW;uJa391IIEmh_wGamJ9Tl~=lI|M1encsz8%<6g}qfMYmNs#3f9Y7CZrtU0;ZaR6=P3selZ z)vq&09+f!~0O}L2&|t?-l?WT5d+@FX*Ei@|nLUf=1?r_?uGiz_$Hs}<6C88VR^cns z*I2#T|Hb947?^CK?Ii#g84hq7>raQQq?B63_iiXOR3SS-4^DGrL=9cw>ZkM&Cv1{-+jq>#%o zDvua8ZPhe2`f@`%x%t~zjucw}x6*^LI{?S@ZQuFRSj5(&I=GeFBX+r#`n+YvL!WCH zPeF8qs&E)DXaDI3CJ?J9oKzwURPB~ntnsAQLsjw7Br&iyeVtFE$7C7SBkkh3yW6c) zRji{8jX>l=rHlSgf^jaY(=wzmm`rkSO8w>a514t8@~cP&!jkF5U`IM?4V6@B$MP4! z8Q?H>|BV_6)S`U{=1@t&3`V&;k@MCnzQu=Yn0Dh*64}}hXUlRv#t|LZg8A-8Xk^SS zg1-3BCFP^UL$c4xc>Arq@NtOi{dyD>+|}#8L9LSoS+0>_R$n&(SsG`yk9aIeLW@i+zGP9=#~BGJ6?1Mev0^95Vq--AU`KPs!``PaMz} zzPEpErtB`#oKhwEMguT^3{Lm&$#!-6@&6lr7=;-VRVHR@cYo#@vQc4GtnhrbEA~ix z{`qXdsY)eeLaP!0&xyoa;tjp_V8;FSaGd+bFSVEd2qFsQG56>y`IlR@?_qz=rS5+%t*!m21&g$kUEZL91D zysic?$lifyE;0I1t0N*pv-?R}$6c=WSl;6#E@ZQtAsjzOu5Epi0Yd8E{r(h;mRBW( z(zC(2oRy_5`0WSX#QsUy*I2b?<>5<`85TiZ%|{Z4Kql&gf(urj$iF(Y*&=i+PcmV1 zd7+~B4)_^DG-7DA9ysKZA|g`M>|nebmPCxim&}TnwmnorI|Mn+3n4~vtiutAt=!^q z!5`YmBLP)KteRRK+3`II4VkP;S31mJK_Wv?1cbEZoS~0yfDZ>iQfX`wcm27!)ph~5 zS!1Sw9BPj(ROVSxns-0ST}|ucYqsSS+_!!cGKyEh|4d*vSf!Wpm=QkYUVu#iKT2t#AwYu_ShMD8>93ea&6zJ@-^!s0WS%_yAsG%`= zBNszo>^8F$aw(_VGc%gpqrip@vY(ca3R zJF#rVm*nE@!?7x8VJCq%?&?DVw}~KuNmMpb=C_5QJp_|BY0-b6a&0TwPnP7qkoB8e z%}rUu=yQ$zzQZh(Q3mv*=z#Yf!TCk$SXmDkyLkT}U_hNs!GPuHB>|B;Jk2qhiMJYB zAv7Idpws|Pwi{^(;gRekXRyI}F5%7bM=$Cy$&wDg$nqUY8W92U?1*{jS1IGts#n5W zl?B=cL}ICJ;9r+(g}zGt`#tm?p+um}t&Vlic_|?swk&0aKF^O@%jIm5^BX8N(fr3{ zy>z5ea2^RBNLf%(t3!g4j?iEKwKV;_R~~ZsImX%o9BChuo0I(aII+byoXe9;-rn&( z?jrOzJAjJ~hvpQhSQl?+O{J2S=NlJHQXb5+@tZ42t{_R=WauUNM35~{c9tmW8Xf(; zdF-Dh0Ro|Xx;{V~aUTFQt+q0em&>><1a_gs=PCs)jT5?>r^R#hg^Afm%A$ZH#xaHk z0gOBim4`i!QH!Nqv;&`6m7!TwWyRd$o@jD&ayyQBRUyuEm)7J*b zM)3A43T)0!+l`A{oKs7aVW1V$pl34pB=!tlV63A*ntydlrs`Mt+fm5hzU$LL;=~Iu zZzY&}+=@czYRW(1$E}7x9b3+yrwIs%hu9f4tRlkBlwb6`Ef?n*G>O#B|3)iAk%DSN z(fIr+oW4H6k0j!(FdE~&>CputGv@@a@HWnMffur@#t&9Dv=jSwqzI^@^pa&b+hAKo zFO2|gq9qc|D0FWJu288wxN3u7B(vONK!U6Tg+geTv*MFCVEq&tV@rH|{0av;Q@@1^ z(H;r&QM`QJW~!RIKga55?l`oBf`Wsq=ymazY7SWZwm~R`)kk6R!Qey~(qE?LNgw}i8i>L<+!hzjn)E2WKgaB7eC3SuSJ zE0pa+6F{&!TNIpD9Or#uL}O#bqw{m24ePZzkTkaTqt2nZ$1MnA(TR??_$WN&r9a7QC_z9d|xj1)oJ$s^JLQZ5tR038Ry-a%3B== z3OL>)?z_6|Yob+v~>~-KJsE( zsslqB2x$os*^lE5oqyCQjBG)wZ*x(TNv!Xb`ffZ(RAbwP`I&MfMyNo%iRsrfOyW$W z+-d?iKkl-R<6R5%h`f)YSy;eA^E)2=Nxj47Vf{edO;gn0?Q-VuUiluiau%}8t zAr%B0xZ8la35}w_9#1&6|41b;N+0BhwvlF_TXXZlMxv^+y-<|hsVsfSAF}E~MebVq zbcs)5fVY8$RfFwtPt`5>z2;2%aEFlfB0HPo5 zj0Te)*@0wlvukNiA?67(+&U(ipp(1ALs@KB>r<#`@8Rgp1i?uL#}eKCQtsm8IeiRc zOWmDPO;Fr4U`HhmTW8Rw(j;J()21Lnh(O59%I(dY%*CI2W>tF0B5K0jL`@rWar{1t z&21gT+8Ct9Lio<}L!X%nkC2cmR+og=@^KVzA+TjBjN-16oE8FzLiUFqgNi5(im z8ig+eYL~%fKV+Yt0Xe4zJ)S+JGTbPRTXE)tt+Ub@06=tB@&pKe5Fk=I{AY*7M=9$~ zhPyN8)adT*(%X_9Vb)9Av3vD^AF_C3z4@cXEb|ACa>H#wbmi_;zgfM_l=^FrYW&$Z zq0rWbr_s_+LgpwP8HHh>+48P9LSFiJ+6rFJta<96eE2^{b9^qmPz7R z)%EJt9a)KAU&`BGUQe}X7Z)2il1Jz+woR>XC9fW~FpBWCL}~Rwp-l0A}>$+3+L(g)VIG-kw%r4IsL`|o(RXRzJIdZxkMMWG~9#Rr9NM* zG)b9U2f`!lyUD6B=be==exV}tb>_Bb)?_RdNBsF1~<+ldEP+es2yqKr5l3uf!tOuXyZ=phqieK_a zDa(FY@59W7pS=J@uS9ZsqSefHIEB#IKi(1Y^?}^-3f0WU^SF1yH5J?ur1`!>s%ibj zHPr+BZQKG05`rAx< zSA}k3A3DCF=jPQKdEz2)Zk{XO3z>C)+D~6=3bMYnyvot~c)gE1KA#G???#`!0N(>! zuy)}e!Vi6OS}#_3+*!lA5% zUvqaQDTtH8i8uf7TqqqyHbltSs6E=g*#Fd6FVrhlV6pz-q_}Fjh5I{J$C~#MzYez; zP;<{Nf&4mMy2OgfCNU^1aWcSt`KWZ7)-A>|612rFyF&DQb(yVc6&bJ&$qA^i=xXtv znWG1rddL_)#|c+Nz&=OuBv9Qi_=@e0mku}*?}bm+Jok{>ZKxL*dP{nxuo^{zxQREj ze4ljxy1$oSr^=6GgVF5`$d3J+9o{yG5j|1xa#GGEnOH)GUU%fBrpmR8h~P#PS${5t zp7hsa?ZRe(cyT~;jB34i0FBeeQH2;=6^6Lrk-AU3=(S8)Q>4T3k^-GmXEJ?nkdZ3U zUlx7sGIMyC^{a-b@zo#|xe_B`F8+|?Mzaw7nq_N3(*15{@>Ea=-ORD^sF&wwqgW~B z@`Ao8VBvYK#sDY6_MC1l@Q@a64&)=;xv5dxFz&Q{+EIQN+6f4MA$ovOb2$u!+x$ci zAt~=_?b*m_T9k}b@Q`kH-+2?Tcph#ck^1y?s$_4zCXqNwPV1lJ75=gB=OA0ma*TL- zbkO@^wPHt+h7;N*&$M3GL>)hDI*_>=zc|suSg1K;Ao^x`udi@6NQ?bxO@~1rhh8-4 zA5}0KWFDxF|95CzzblD~RC&b0`ahT&HXvLL(fLf4OYG z?qlk7dr6vxWuo9ObDf7>pe$v?VGG#GxO%?n&PklPY5g ziDLHZWMKKn4N{3A0u$%-ygK*~6wo4YUwMartk~7UJg(Le7*l>O#ixl})2+Ap97F_! z(kS)E|3S*J9B18<4_k2za>%@M-&Kd5y#FQfeg>3%F7q6?#qIC!e^yPFX9)_|_iTg0 z9XPX;_UB|jR)3h7(ZoqJXqgx3M_`i$`M!Ahw~hVvC(9%`shEe9M~Mmi$UrgYjf66* z>}p7A9ru|Sj7CIP^1G)+fsIn znKlQHD4;@l{to$qC^y|Q!}jP7p^zP+X*v#HaP0!7oPFcRgXwNic(c_rRM9u;0_rXi z3#IaD5>h48j{)j5mNrQoM9G65*POCj*yZwD1m%N;@7CS&&0Ts6?4COMI=35K_x;No zWe$kbRhX+xXDR}22$fXe$HC1)sgTo2X2Yu3)x=F4VP#EzIcTAD>f6`es~HFkAdG{A zp6{F?PhQg~8uy5hd>bTegRa_GwH z^~r?yl!I|jE#^3%cqT|5=ABT%ST47SLVTjwy+&l$3ieZ-g zDA6suVZmSrE^LMFS$((?{?hly8#$XnTWONMTd_eE@Axi!Y|$;Uz_}r$SyL^rVDwJy zFtH<25`m$=$=NdN(c72$zTiiDft(7WE`d@xHlF0K`ZP)&@8(Rk{$$VKMtiWG#(u~Q z+^P&UZH)}&GCR_#B#z^`NKWse`B(k9?qdlD{oJ=tY6nOeBG5ymj5YJ8hEO10$X15r z%4cW$xeJSdwS6+XQo3W+byeW$;dy25^TVgo>OexQiRL`sQS9Dt?^~fOo~{I? zB$uk0RikhV=gjQ|#Pn}8F|05&{;DA~uxLZ}$?aD}=yPn(UNoco`H<4H+)aEs5O(|e zu_U?iTPK`|6MA$k{49>yXkblq;dG+*xYEJPRCa5R~;lk8Z zPCU$~Jf+v|d@*31m?jXuRlPmlY{K_e*k_1e?hn13jNh@*jc;V#GV#1JV>XB~)i1HZ zeI_Ww#>R@% z`{zAsY_toK-I$}Tm)EDjQx-Yi`wv7SV`WBRV(`s&@_?qDOty(-i%}F3Do$Ycpknzo z$Y||ePrGGcsMvvG5V7ocC^KsQ@bbR?p)Z7}@rZV>bLE~{`{SH(d0rpPiNAADqGxqS z%Q=)er#3xezaoTx`^oE1`y%et9t_`nokW;bBN%yZ{oF3ZoeOguUfrXpKduww=@7}C zp)1|xtTUc{n*BWqfbVUYyLSRlHLepkv>8tXdZuJB-MR)-c=pu4H)DJ$7?{x1CKZP+ zNSKa3M$F9ENBWFDy=dZnwxbujnZU_G{`rXYC3U2e1=T|{U7Mj^4h|vL#~nGz&9h(*N(N|g+NP?ElLfW{=qwR zrFiMdm({I1DxNOlh)cut*~5sc9!7uY(f)bm9?z<3rF;1usp!-fJU;WLXISAi0K-;RD@mGh5FZD_9;+@G{ zg&bD>(`fQ}ILjpl6*^*=EbS_E{Q)oy^xIcmd0w0yZFNadKb9`|;QC@O!k&+^G{GH# zNxqssn_rb75ADzc~t}n`rVnn=j6BU%t`_5k8bpTzZnWQ~gT&t5aZTkg+ zzOGC(F@+Q-*%>4Aseus~4};o|4pvW(D-4I{Y! z0syGq`VaJjTcwH34^|&1lB@Moc^$&!_*|l_Rc!EBK(AMaQPG&vP*e4mAi)I#tNb7f zd0J3lGQSA`UVBzis%k|OR6SD%&z@l#aa)bMbd&nHl}aR^l2WLd5(AFuJLpybVmkvAE6k-dOBhh?-xk_0^hg3R>9^ zOJ>vUU++6W1S&nZbS9)8(r|f(2=eTIE z^Qd!=iO?}H*wr|p+iASmlMZv4(L+WrV@!GtV(LCdU({S_+)BcJnZ^F(jLO52wr^Pc z*>NHEVL0@cSa;B8+B+Ju3;uBnqa4b`og4?|P8^0YwFdbs^Jze+5ZQwDFlq+iojzM1 zL&R;$)|zjln1avdHJ`R&E|Kl8RW0LG5oPQE0nO>xX5EUAHTXo?Y##TZN0jfdS3>v3=}&ODUwzdt>FcPLK|#eblcl+d4_I?W!9tQEg#e5o|% zL-&I$YbPRUFn^s?0@z!BdLXR4)x7Gw2)_UBRTLXK+z36j8nH-)OJg`d2}LtAJu3QY39 zOe$;AL2klqi*74GKD5Sq}4AdURhPsd6jFds6qnJ8nLH07XPR@&6#g z55vRsz4PYam}^N*u}>%O&1b}vh=HTXG{&1W)|QD){ZM9DhNg1^74}m-C&5xKREsd2 z$W!8ApD0%4J*5#1Bi#n!!u_C%B(7W%PpH46YglxG^IQ{4fY*;*?~h!_#pB@xlqc%9 zZk>AXDc&648^7HMHX>0mteayu`Oo{b){t#(z$`T>cV<>$zE)4slO#bDyXL;F?OaZycSHh=mxt z>q+JIxM^Ce?Qo{wDV#POAlE?k~RB!h&???#i)O3 zCAq{g=VW|Zfdtats>1QBFN0lJv%ol-ch}n!r5+Q$=ae;1>!1bjJWXG>5A(^DS z3U`LsvUpCA@IY$!q_*cj(2>!9Ai^)Rb*^}RehcDa@giR`RhNo*kS#;8p!*vnSJ;Wh ztU>ExmOf>mXtK)^&vEkwK&%b#3L-dODxr;(W;Ie?{d|4F+4!|{Zh*D7&AhdFw`UJ7 z-Vkt)sA`-zH!^yrrPgGS`}<82NBqIBTc3*;;8GKu;jx_b$Pc67JzQ8#<;|;C1PgeA zN;nY@RM*ZOc*(@w3yBShCr5s}Q+Zzv%Hf<_^-5cn+p<*oi3TfKtBcAk#2$GlHR?Wh3pPYG;K+8yg0hKIa--BW+h%o{7WNMIHeR9zG3 zn2uk#dw*nFf-$jeXQG{4{q^?+Rs8L%IgWug7$|Pw42nWWM3^?@4_9q}H@6B}P0cw3 zrsjj5k{-$u!sB{&SU-MnZXn|4SuRR@X2&S(yz;!?a4esVJP#)Z<3g((+# z1}+kPJom#B_xeHSfxEK_HQrD7^Sx4yJe_NfJqsIRBN~UZZO4sAes2%A(fYdM{&2N& zYyN=`dXF;iZi$_- zJi}&dO{ydX8Ue{r2Q}ua=giSl(p0UDHIr0*L>VaNMgu~UVSgMqQunY#Gw~fmK6E8K zMC|9pzMk$;eN$m=Q$y+;G%gQ8L*zl`bQGwgAcB1x89P4LztKSdZdKq@FAZ4R4$BWTVLyw2uH??ceCCXHm!bMCUbbV?^-f9;>d|lwlNsV zY`;ZPm;K~#meeg2A#xdFcJP;;!%;=?59&?0=;L*N=G-^9F?XO`GN~(}qk#@H><8+9 zIRrsZFZqhL30Y!|(idShDqNW}`yk?G2uKv4nt7l7Xo@e+tQIJ7ArPf--N_dheq+M~ zX>5!FNI7EZeQ+B7r4Hld6=)Qg*r8>IH8`BM6`2bW!)F( zH!OTc97$UQt5vR=jXZC7dAJ7%dvVjM|6&MjS6dks!YUY|ml(bW^<4kL5wj3aMChFv zlvOOsQIHhZh@7lH)M4|8C03}eS$@Vw_#SrKf?X=utvX7cof2CSjrunF&9C3@WYdfI zO8+%=)N6E$|2fRBB-K31D&sZ$@a~f*Q)qM8)!$A1jYNw^HsLwd#av72-&0P)wQH-Z zb4%(VJW0>_a;>SuJr?UfKLMQ;Lrfd7l>dV^xRT^pCF03JKT1k;`+8bp&5Xjxez?pv zhFy1n>jC1uwR@$Pqgb&Mko@S%P>nB%+D$=EGI50Cc;&o2bHBp1Jhbj9Tp_=hZ^8~6 z2YH8zSb}peEnK^mz3O=7A&B-_U=n2%WlEj0(<785T$d5r+IXOm+Kp_=c^m%nB%33% z|3pD)yKURV_LC`f?L0&Gx)An>G^XvkaaWcpj0#o+5a3VRh`FHj_!G%Dv1R@(+8Q)E z83}K_SUg9rU+S`>yd6zo>Anp5yzhI|=tstjtg>Z4G^RZ3Add$^&t8FY37!`r1{nM^ zPW;`GXu9*Kt#qv`)h#k(>sP+3z?&TrX8)6B)L^GwkD=2b2PJrTv>}eCe};@2&eSY* zQ$ntn{ab(kylW3_mkqKA;eYsha}j6T&^uxKNv&3F07}qvVdg@RTimm??R!T-*;!-H z4Dyx=P#!Jl9u%%Z(-T_~rgo33Qc-^ZgG*6Y~6u zXQef&F4(iDR+%bbxEwFhb_2ah|J)V^cT)iA0JYrQ!wz}vg!_x3ziL<{ zcrO5Qs$W08^oBrRIRz>7AhzR}|JUhzZJLp&!6nb0+rnLEp>*z6!5j8wtIWI^4|)-% z-xuf*PHZN@%fx;-H9Q?;-oD^un6){{^UHyVwdFgw=n1)U$dDxmd?+t4OMGKb<=HLJx+s*e*-o z=`u$+zl;-6Ng@d_6Sr{}l>Y0)vY*q@u$pi!+938S+zB&22ysU~(g=C$j3Sdq5+6`ppfGIl+yv4ZUmf=4?WK zm0nl?jG2L-o0Ao|p(wix&fAIYGB5O@?*?w6+A=A?_cn}Lmlno zFH+H3gF%gp!~BZ$4?4cRVQbIoBKRaSfC1$L)E;_E+ZlmKlOJ!MpjnedTm=Z&WqT#p zzH_;;u)-Jg4=zpH0!JmPAC5+Fsl(aKwMw0YaUO`Zak*xTF?MFLXG)95@ThyrDZ4MC7Wv=o=kvO*) zDYLp>eJRDAFQ}xkF3{2^(Cm&G^(t?kUHx>~;e^VKU%iPfhZO87EXmz|UTh_E02Me& z>Q0lqAZ4s~+GqmZ1Uq=_agd4e&T?$WhZ>eVfe|O>2NJ`7$4y%Pl$Wfk$xnVbAotMr z7Rx25cya&Aa#IlR89b~B=DU6GAXmhns0o{WPQXjH$Wgg5S40TgrtUaUSH%OEGAGmO z{`2gE#vq2YK4AOm0NOgQe6;cT(~4rT#HJZHl)MAw%W;lOnYzfFP+KWcngHfUyx}2sxBqI6E}Bspi7{g-+fS z7~tzCG!5Cl`8!_b67>eh3ELi9N=-Eo^%G~8u`S$&SX0<33d4FNC?24Wr}JCWD6J_? z7Q4bH!Ho{}`_^5LRWHrWsy~JfE-(SX#AdA;4I7xUTV!gAP`o{VG{PLGofmm1mBKtNtsltdAG1+oKOjbX|$T!@4T?6dUt3)7gbF{QHTWXkd? z4!Zel(aWsHIx=(RJugUh<3)eFlZr1FmS_JJjnQ3v!kk?7HiMqni8zM`Bp8q#D(&z?bxaQ8*vO-#Kz3|(hQGb5 ziS{^dB9)Srn`T;Ym!(F4Ra796W_GMf*e5GF{nZ;)nci3gABbbi>yngZjFUp2Y`?z) z25$A|_@3Ck%;S|R9BE~e=F!pXC0qYGV?i4gFLvFOQ@^mQ$@c_$)8FkfcQetA-su%c zN0xO%F0_Jb&|K_Rs;gnEpWel*4gcbqOf1w>%kg9`F%H0-?3%hCTcYP|J6%5+PJe#> zI+>BXUnMmr{ZP9%z4W-tPYcbfRdLhT|}tS#0wlO3}6E2393U`03kaS2>i&r?QsSnv%< zx6vQ=X0gG%A5S#{jZ^P;$7!ES=a;FEagkebVFnPdZxV5Y0~1oQE3o+w7as4bW|92h zS0;;+3WFm39<*r^R;d>%UYGx&N??GjBSU%J-&0i1#wzqTZpE+3n6?(M{b+TxbF8rjvE7c`c<5E>`% z-SiZ>h?PRm+qe>VI?R3l%c!l@`3;dMPGS$fr0sGn?x0qKej1ytN%<(2=b_FTgz|}st6OT&{dkRhF%#pazH$dN($}gq*9)^MoWuNNI&tzHajk#`%)InG;CB5$w0cKK0MR~p@9*f;B(*?SlqE4uP;+e zliP(-S^qSm|EZMOGMq0SSJB%D!%}{fjEV~X9w1ejN;PN@ua)zqj7hX~xjDvgO1>#} zrS#Ubue8E&(^Ys2F2+J^{@_hq9sje(IXy;D3DBT%R+-o&yjn?ZQ&(!k@s%+btlv3xT$RjU}Oyq$vW}{o0K0JnI%c)}B)~y5Kbtp?-SJhmcCD}>8BvMaG z@K5H6ZN@SHDbb!I^~~wI=Xr&jw5>f@l7f@CKNFiwLe*kD2+y{40n~v+rVdF^b02V$ zK*au#f&W0yqp!UZ-q_NpvzkT2H_m^qVF?QEVKcGLWs1IbHA&Qh@{rS!cd?-0@evpG z8Z3T5`~-x9_zDt!w}*mf%o7pyOXs=7HT`45rHYjr4fWh0XY(YLO|vBh;cxg6SL&c< z1se}f7P0m%=2g|qB?5Ut7h4QtfbWeqAHTt4OCZBy-HZMp*i*-*QG;G^pc=GZa-AIz zf(K`h!7!}TTh9r0Vl#EVbl=KU)MzYLXGo3$Fz-(WO(uHaAE-Ut#4$frNOF;recl61 zYTt`54}y!azHYQRqIDNx&UO0;b5;nm8URTOdcUF)3NiS~(cRB9G)w(;`rbK&hYgE9gr8RdgpCr< znv{9o^%=y!L@0LM9I+70!=RS6?%dD<^LHK)k>5o+Oy_I~BsM%off%a3!y&Y|1>OwG zeK;=r^DytCnc2S0bOg!BDY>8ISvyW_X+wJS!|Red3jg`T>BLd(W8)0yEia<2*XMx4 zZRAQFw>Y8K&`b!I7Kcx5x?J0=XbScDW%_W z#V~JZECh!8mnIl3_*1@|u?ccsQc#c*-8xw-kZ`IkHPU1)ZPk5kE2L9;*HLQ*PbE`bf05y!>KdZ7d^bto7I&;<2isxyzl@JE zrJp_@;_E`O(b9U_c>suMvY*&i{LjKr1S2JtHdW2dX^Mfhn|&gDJ#rkCj7=}sLwK)h zzg;nCjeEsuaEOQ>d}EAk{76cFgA6@vIu!sF4U(O0cMIC(do&1% zvmhuuM{OG!g=BFqrhR<{hb`wyQWli16;1I1CKKm>zY?J!A5XJPJWUX#XXKvx%Grc) zb#4m>eWw@T;i2yI5LiAgbEN*gTOXPb5uf6W z|2L#=+x0B%SJI+b3hJXXM4Mn#87kMu+lk8O+_A%Ie*QHuo(*F^&>WV089L1QUVM0i zhK*Y1!I%S^WFheErT6}rx)HCrD}LfMQx06p;l<-`abusIKb(XmZl41Q=?MeWe}4OH zyA1T2428cv$9P!KS1CtoHQp#-E4Q__Gpc(bRp?{}&Bwcw-v%4xB&pYmr zmi9hSVE(o;-L;oYbH?cmO*iaUrn(X^h9p$hx0t)*)Rp9}#4akA_jklOq4(W~tz53V z$ClVqm#3WAyiOn|rIk!Hto;Seq?Ew6#ZFAaO6R9XKN5hG>PdL^gg()i@7f{7=3`Zp zL~a(mrW_u(eRin?ZTNOpw%Xxr;GgUdV+t|N=|`IL5tZ0Fk(CKucO38@c^po2*LPvj4sfTlY zt_CEWK)P_kiM5daCR!WY(+%Hp;UT3^4ED86A|XKmUp}^+y`Viom5BWFNy!MuRHjrZ zG`Q3;KDGW(u18gzcoe5U%gt3FKUBn?RWCvR^6+lQ@5L-@SWw&JD%rjPY7Qx}7X#il za2O2Uc?j;^j6UTS6k_JDTr&3qwueeqX>$tEcg-Fln~o{RI$w5$x0ExHZEnMWE3q>% zn?k~CM{!yzvN3J`^5aJ6+`ageYF==WzTCyWj=F4QL^Z>*`v4?C>W_quC%7|6^oTU< zXkJbYQ2yc9HP{HfkCE(7QiLTbj~HK6>cy@uEjyR85t5EBc-;kT{{Fm5)=h$s;fq*5 zF8XAiwluYLpz;dV#@sB!V@bau>%{ai(X{L#nf#X1l;O(H`i@J)jVc{n=)`C0P%5Oz zy2wG-hQGY@gPcapr_o2kBhXVP31-o*`YM4yCNS1`$z0uE^&~%rS|8+z#>A^RB=PtS z5UwXw?+{8d_t(K<3FzOW0oxrZf3W|~8#$O8-;Go)3uM(JfU>O{B=tN2%8}9?L*$c$ zCoomefOz*#aG=%=?0ItQyQ_hl!0Upxpb&npsyIDW+feM*N$ere{Ou+{!(5!UHk?b- zhNuk!agUgPiLK@<^b6+5okpaz(e@vRXgK!BaF!-Li7twxb-bvyF>Sm3PUVz z#q_;Am&JY&c9O+XaHL&@6K~FA{QiFcfI)x0Yq6n7a6rcV^O4(*l^XoAM)}?kAPn+7 zX^X!PB(Jx5ByAZr047e~v!OArdPaHc(;oELz?76I!O(o!KX?zPdPUqORfsc4FhRz5 z5I8*gcQrH~f7%J1gJ&#uoUTv5_||}1i~zZu$xcVr|}d!VHiUlhfSy6amHfhv6T9{AJ=zKgOOcu!{EcN0uv# zKRMY}DWV{UAxO_493PjCK^#}9&2{#P8uCIJSMEcBcDy#>OYk=6MJP@0O^I~pYWgvS|G76%5d2^BY**` za7}9jr~|0nbCdUY>M``7+M_Uqw}~BcNNx`AUwWuzRV}a$`?ItW>5gau^qz1ZWr47& z+_y~U{{XE_mOGvn2KjoneFvpT34fR!yZJv+PYvbm5{#!~>z`TxtYngAD|`af0om){zb1etOG)n#vLBG- zG42?1k6}cl`iLKID|rd! zh8d9j`N!cv8TVGJ=9`GvNb)WQMgY%Te=4Ymk=*?36sRNsat|M+UPpGoCjykdDsrKk70^D&Ii_MGX+&IThJ-uqYd^$phXe@KnIrOR3e3dX;V3p*K z+4uCQntg~`d^>@=JQ4xxKpS&U95(EO1<2s>!TQ!m-jGIl;|y{}4u73eGLIlmKh?Pa z41C!?UdEcV8a89hUx}8`c?Ctp7Kr2z1~>|-Y1W`pePvQ71`=W3n-rQOe|61nDAXm8R=ea@Q>oBhdwg+PJbEr z7Af0Lw!CXyv#5>QL;<$}kZ?l-laEf+0qT~v)2>;L0N@56d)>3rsk|V`n7(4CpzZYR zYVyr@l#Lt9Y<268Y;#QeUZCtl&E_va09E|@8UW2(W_HQrcT#vb9nD^j*`;m61xH+Q zik8~jZ_57wF~=*6U>ct1$+nU#5M*PFe+eCX&;=Wq1gW`{w!_cOjw>of*&3ERHyoS} zO8t7)>^@}EVUq(SsBQ_zpcP_E77Lxq3a)b9Kt9v~iyia?Dk_#{<-p_x&suNU-s*Oo zjHoPEI43^9?9roTHm(38ue|_AZ*2p)xSjA@ zg~`A!dja&Tk0fqHs^GH{s&mfo<;6wzDR1W=Yx4r9A0Wmv)a2Fp(%#A=BqdC%kgh&r z4tn76$e;u4(ju`Va2db{Bvi56lFafQy9P@GmdDb8btIsu3WS`Uy@04%Uz-i{ZzL1y z4FFycl$J?k$XtR73@JaveR|VlAyBgX#Rvdnk&~aT5jdT9NVo%U1AsvG_Y~>pfNC2c z`Is-~sbDEkE zs@tZ{?Sr0}1kePNT3o{F(6;qFh8X#W1N5llm64j#AOw!wzf5f$XR+p{Sx1=6qy*SQ zdJKBh$#ZgJ4;ck<##bZ^e=N`hHiaRPE-)}k=Oa5$e0tNYB9(2^&Ep&J(b}Q*eoYaeM=(}63FOt=wGe7^){?0NRIP0Ehdvugz zp{Nk53=VTvGr#X1JNs8Tp+-UF0uXhmP_SUK92&bL68Tz=NCU3-AUA3Ntot`$aqsC* zR#YD;thr6VY=O9Rt3SN*i(?&#pbJRmLV4>{B|kO>L914&EQ39|8jwPY0dHJT21_YX zfs!+ta!SE=k&<{BtHBYD&_aN7ODiC3fG`hQ0I41njog~7v%j0O0D4unWj`n!=Ab(P zC58z-XaXiPkDrh|YD2lBEm8)KMA`?;KPq#n5t6+}zghr=dguI_f>|(1p7gUwQ9=%L z*mkBYBcbYhPyrY2%Deo>6%!*!Oo+dC)~3KLcJc>bsHQBN3pNQSj0ym*V|;bM9Mh(b zAfRU%6z42c<`@iWuKZ#)ZoC=*d@QS#lkWG;IyVtyfJ$SfF;tO*j+i2nLRDMK8O8vh z2BvfS!-0yf^Z86RjC-DyaU%tGKRM=@>WT9XcXsrk2seK0;l5+ufMmxUoOG!&fCmfD zr71XHFmQ9$fGa$K2xl0;=kTH_%YiBCf0bF16_J2u;L*W<<}vb91ePCzZ9UXpLgXv zl6^hTuM`1JG8+MyhuWnN46=OS^uPo9(}Z6!7$tgDnITBX&s=h7 z0ur|7F|m1E<&PMuvIrQUPyiXp`cvHQ0yw!Ooac^}Ahu|u5>5xr#s^B!1XYt^T!K4i zr6FT8D@4PR31QN#G*QfsnC>y3Z%V4M$7GUDFxkZbOE&nV!XI*T(x5W!2g~)~^{UA+ zxCa9`CnS5+(Z-v$DZuys8UTE3uII}iQ}wAG3|}SyX61gALjF<0@;7h?zgmY;o<^U{ zhmdeF=|Bxr<|$@TxHdkc)Kg)(SykqQg1>iy4p zCir{t1L5bv%iSa5e9~NMbLvyv2bNDUo;Gil^V@bak9q+5qkF#@$9#&*nnpr#!0Cfq z0V5>sAC*y`bGR7f{Ui zJ^qy}UdZXu|nP&Q48HA&5Rv95!jO zA24}{q=UeujJ&(aQVNnN0#*s-f;*h^QJB@vPhpN~C0&e5dUvOX7|%Q!0C36@migx( z?)Ir#-z~a4=Wams^s14W);DelakOKoB;ZmaOB9%5ep7-N^`H#-?Cw_iOa!u$Mt#Rx zvK~|N;h9O|tsqo?nDjLN0K4~yz~+E3e$K|@AmXmv-syIB@?KsQfg>L~xx#>>Ir;!U z04h7QIWk9_j+Nmbv}eQ3d*Z*r?O)-(l`=s3tU?higq21tI_(+98Sk0^`VQK7Z*1e# ztfX0>f0lWl+o6ytA!j(^$o`cex7?dyXHwGO?V?Ywe9L}n- z@Wj)a<1BsX0Co|SmBt3_9CsA2orX*d=L&Pl zs%4O{!C{`_h?+R@y&EUx_2z&q0VJR*o_q68kOopR-t?=xKPVh^8LI|3);4w-BfS7n znUUx74g!ILj+8|sIu9*Nz6M1jkKFEY)P91jL3C}{tej_)j-%3mAk4c;o-@N{ueQkY ztBjvPQAu$d;Hr>V@Ob2oX|}V8*oes(>PVmf#F0t6aNVABS<-D>VC@8&)s%pRh6wkn zEwuck1t1g60D0E2@i*c2f#W?p;l{0~Exx&{7h79aRwhp^ceWS;qYKX@XSI4nfC)I^ zhxx^LKa73`cx%RA6nr`HYW`^=)ciW-<4EvhkP)=!xXR;^+H2M3y(G?GETrW%kJ zL6WEC=Leyw{!trx9>?B*9iXF;(T3Nbwz_oQ_YYG|N=Hh!&gX zCm;`M0DcKS?t(u$n{o9YH9WvN%I@APsN}j}eqv-9#s@gB=NtYDBk zo=mcyM;I$#(ZsPtTV%>4K4#EQ1m_~ZE&l-EupSrHFMnqtb8iuGYU*6CB|_qo1Ka-q z;FkXY6i38A*&j`|o-k+8Ze@yGo=F%O`T%S0k0;NBwhm>_IpZCFoqi2}!41A7THRQ9 z$Kl=G!hnpD+J--Wc6Wj90Tuhv6~5UdfGZ?xhC)x?29O;0iggt5mxb?j^1f)YvGYw#oE7lnUlpN50tpMaIco6jYyiBv1Bu`$TO;PHcydx6%yS5(m~HC-y} zO1xHNx=AB-+(*d3f^&|%@#)sM--TZYJQ?s~!T$j8f&4tT{?5|8=ba%8TnQv4nTc*m z$-u$DPyoOcpdN#3bh0)TbH_Md1!%3qO2H?L5X0u%^5@s|sL}}RkfM@!`Sx&q>dYZd zBtJIc^5=pxKo#eiUU0;dv=RkYy_~^?P(ES?Pd$3onGn35a3EyhfzL`wH1Nt@!EA%c z2mlVxv{6d}|GEi0Y^;Ez&pMF4&86^qECIlzgrgS&u8>OU%ltdZs| z^F)PtWgK8v^OgH2f5BS*H|yURBhmgdNn@yZYV`RpZ4_w`fsP1ukOIVk{o}U;@xZU# zzl)z8{t+Lc+Z&`w;+AO@9&Pw+#;6Mr2?|a)&!No#dmMH*_X_fu*m-M{ z^d0a|Pk!}ET~5nQ!Pc+gx7e&%<&{){)0~lsGb9r*e6`^Zi}oW?{5pp(KQVLl-=1pfg2ynZ13 z6!D&);ja>EEqkC(G;uT%63D^&k(2VV@83Mv^>~`$yM`OxE)n)ykRBHwF)1JfHb=@j z@yQecvLtnobO8PCIt>1N(UGcT;&cE^VUAv95CH}JPIM2uk8T~O|+V8~; zPV>Xx4*W&pIdT4t6EkDbBV>LZYxukH9;FVu@e*xSVBIX&?d6dmXYq!Vf}a~!S} zrH`)xh~5Fo;2cl}h`mKXlCcM_Jwd7mTMZGMAG^i}OxC;>qTW}QRwR`hurL9~O30f@ ziJNppl73KEFe=KC#pVe&w_%gpJabbC6;MR`8QU$$&mR7@ zSuNTLKY5%f&gL7r_Z6nltXn49RZq-AD9=54&l#W!MB-N12SM|Z!Kp}P1qoD z&~kI>Q$++U4j*nZdF6npr$4$5gUrrI%>ZQTzuGqeRaI0H#FiQ499NP2eZ9K1_!Hti zNr6Wee>~eHZo3>4l?OQ{ynFVFwRyj1PZdYWDQM_0dbcKkKZ#F+wlQm8 z8Z_NDPncZl@~A$bNOAcLSNBDr)==wz zw4a1@&AwjUVT1nwz@){0b^7cvwxcAdcm0@PBM!JgKb-(^b5Esim1rf_TYXt_K}J_Vu6+N>O!d8MN5SGr%K^ zcLJ+kTwln_u}I_hWRSdIit8>Qj%Y;J2j{>e1n?^|OE-~(h}kd38>T%y%>Yu7m?#Cp zyMKH5tK=`+BgB6jbT5U8seBH(xwF=6u5mfBRh6DB6<`AbNXZR>&lUBg@yuMS$CW>L zgMt9)N7LT2?(E?%Wf)dvVt!ED&N`grcAyTX#z{4e4#xLuERtKJI6M&}D9AXb2-Y?h zr2g|c!Rwz&xe_y5#6WGVh`{vco<=BmmC)V-C3QJ(Q$QF~TwKL)#~_C|4hKAXRaoxk zgnsT!NEr3+$3K@9s|+xMAPS%`;IYBxtjTVV3mk4EDna9~tpH&y{p-r8*iwTd9D|Cl zZ+zBwNi$`nbMtLKGY-6V#b_8JDDkK#uu^fK{{U4>Gyu-f!5WZqa7SJ{e}w=&H8pmT z8}9DM13Vs_^r@0w8-7U*(DeTR3Ub436hR89Qlt&Or`nWQ#{@sPY(HQ|PG|xwktDQ*zXA)!&-3GuRhjK{94i8`t=qB^U-WbvIX?>{LX{A^l)5;W;>yEwq*6)Wr zL#AqW?Qy2vTiq%%ubTt;pUS_Je+qudpSBOg?+LfXKO1WIdVhw54R!sms@#={;tazp zxzvzZNCX4adlNsw-xS#V6Y&$?Y5xEfp`H~XgjUiyjpPTT0uD!C>Ca2$CzSrSn^LlO z^DY&^Bn|AO8f;pPt>ZV6-*9CK7|uG1{O0g?{1lh=QSnZdr|BLf@i2o~^3`XE#^NBu z89VXMPfnHgSAslY;V+4LXp_L2wYI9;hc?p*Hso|*IT-`LUTO+GSNl!enA2`gL5z(5 z09t?BjM3s&Bb}H7uj#<99qqMSS(ZDD5Dwjna7XFIY(kPWg+}Zu?)*QgpbZEv-qLu} zaofM=8OB!x9uHo*AEkdjU+`C7h8I@eAkn;4bs$?=QNlR~0h9rPMtX|=fd|=@1H!mLctx(8B7QhI~*ufZSqBc8PKX&xr@b5*)xM>6h zfcbkieegwbl4>q3eAtU*FnzC$-ko^sTa3?yoS_bLf-#Sq*Xco-UgjOQlF1I`*%{iu zch{QyH~#>Fw*J_k8@>wo)59MDz82iYrQ7(6O?#`oNFCFvvD>u<01Ppmz~`J-?aYPe zWs2fWu&BcS0Fz(O*Zdbp!55a=zr*i}_ONe)+9uOwbtm}#Vd=pEe_GHFEB%PS;G@41 zz8LCPUJv-`sb2V}M7o$q7S%IN2|c4z)1F8zj(YKm{VMoz@VCVuwMXqCH^u(|8Crdh z!`dahNo8*#0ay>axF{QjdF#$Qcl?q60D^b^&sulwJE)xl`$eojv#u8Gg+NOoV7#1z z#y1WRIPIGLrTi`7T|2<`jiC5kViXFj%A+!E7##ou1CA;hu~LnWuI5?T5LsCW3LB8v z#yWQ5rMt1TyVF|EV9b)j(UoDxBOOgvNlmrcx0Hs!2a$jebLmCenO2{<`;DNh6tgU)^%V9y(xVzpAU0g58qV7EswLpEX z+y{IfYxhRYV-tvVA()sEfJkHX$6tE>Q-9#BzY}bHcl%mJ;T(jr@YR|k1IZ5HZvApT zfOMb=zwk*9hI%KDKWL`8)+Ik_(yiL&$|f0Er-fO9k~tW`Z1czfgPQ)YwM|Ci_fV2q zB*M!3zE#e5^Zt9+^TGcB1YPhJn|0&Od*YBTZY-l@h=%zT%B6W2=jG40t$#qVKx2?! z1A;KXRXErUnO#Ip_I;?k@IgIE>-g0>yXjin$c#4hJHBsfh0VE_bgRpJgpPUZ{QK6V zUubJZwwNZ|720IvoE1O0f;gL6Ip6 zk%5Njeuknqwjg3OB4!|jJgEnd%7EoSVvVKVkamv0u zg#j&3(@B~T;Klr4lpcU`Kb=C;{{Y0VbZ)W95G4BG{{Z#CrIINEq|JbO5!e8FepTcj zwBN=(5B7Zc5#nEpS22y+WDVs5$dY0(fPcVK>q-OSo|*6{x$yA5&TBf(D_;x z?ON($0Rm?yVCSjaMgZ)+EBd#UbVMAAIzI?EB=^CB+5v4ReA*~Za~ zpRoSd8cL=;-1E3rMY2TqBTto)Z;=d*5ytjKINh}JM?G*yH9gB4C12hUNy!-Dx^?gW z0P3K*7Yj(!KH!M$%91*dsHIu%fgXOr+i*QcrYVs-$f1A%5OcKkKAhAkFOej1`D)zd zex9VzL9I3Ixe`lqm`2 z1oz7J`**th%6byK_vU~SJTB4li5*E$dy(t<^GO*&EOL+)x3}FMoVV*%m&;kqNJ(iM z%Vs>0jPO3SJ13PATw4Ulm07)`Z(qxtPzU7a?fL%z1t`*gWNWB=3E*8Fd{5&&NXEwA zX<8^PRj@-b11xrD10WJX>DTc?E_uCy3#7OWPSX6{67_L~B=uSpBtX~NDCqwXs zkg)K*vT4@h5daVXq@okIoC0yrr&C=_JL7;W;O-jlJ^uhY{$fAiwjLhRz8(J4ei!j?fniNQR=!g}_u#NAzJ_Kzq7?>UV@{BjBWe?Gyy>u2*~E>#yS3uig#I#(;(KYyJTpQl^Lxb?_f^Zqr^jYG{C`Bjy_iw#mirD)Pg2l`Otx9JGOUqVE3yzJ*s;D|9Vy*kC7{^7Sfm zGJ1?~dsW+;T~6xJA_cMcw{H8?0VSrS_E+9iNU{P>(8DBtB9iY^p4A^vSVElq!AAq> zn$24`gK9v2bR3lglb*GD8)@cq3g%(Q0OKI_>*+uZic5>6lIbSFMchfj9Quwje>%4W zet-HrfW+Kx&R87#a52qYmN6Pf0f-{*+q8kWf&K4ZeKAzNWKFJo)sHx1{nPwCeSWk6 zh=r$`G)=CY@J<;|`S+^ONTM(y0b?0LF`dBoB!iBAwCSUfU`vRkF>T!36Ujf1AbV6q zH`$_(BRfvuM>##f_Mi@O`Cju`wesc&;I>8yRwo$g&+A@)`$POpgW!+B?Ptf@lB2Da ztdaoO%SoI@z4&jZO7)>?IvB^v_q$2>8vG#t0D{zh(RO-vfunxSRu@n9?N~kC>Z=80 zP@`@@>4Eg?p0ok@>vac+zi1y5Uwlvav8+2udQHm4WC5j#v+}7e#xdx6fsAlHv*7;# z!%x{a;upjnJHU`?+Ppg6rp6eSTX8BE7~zR4)05XeoY#te%pbEi#t+()S{?-WcWn1I z+G;Azbl~|=jNk&?0oSiz|05iBD)KX;Ln^6fnd75xDR zwA3vwtu+mjtih#qal;=@oex4fViQcO zw!e-$l|%mkJmx^?N2Wt(tt<@QZcv56UD@e_)P58hjFL!%k}TUu4THu>{A#7d;@-$S zC6SY(Ambl}X)VRLl#~cd9Jbzg@7Ac9V>1vX%I7Kw zhW69O*7m|HWr>xeXvi{#B$7aJmBuos1PpWb=Z9Lx{{Tjc@8-rOx4?4dzh_ENMmh>f~T=P zC;}uXuCYZP)3+=Kap_rCUSeJ|50!Ur&!ERj)GVtbT@@Yub8uNvLnU0(~>BA+BGKnRH#gPp1d&{U}d7{N9BL;nB;zt!eXf*ua=+>`9LyS|=j zkq^xNTBbAXGHd6L_#;>Bo$zbpmVx7+iN6!{TYX~JO8YLK9hJiGibtH5`Nsr+pfLfI zmK|}BLrCa-oBJDo!B%`t@w3KO9|}Bk;hUIsD~4em#)A-h8&s1dF-!v#YH%FovQAeW zEA5}!ANFqeS^HS{LhDNL#*UV^%De6LTYN3$yo<`PVfU9LmR2}!c?X*J?*Mp1z&{E! z>GU6ldL6EVZX-o8*g~j{Ig5paURYo_Y zfk^}D{cG%>_$98jsCdKn4AE{U3~p>L=e3PVC--u=loRMOSbh`@9No3|UErL`MIXJ8DY>??t9n571G6B;Er2-|lxmEq{ zM#lMu2P5fNI>*`dJttAqrC>$ft;9>al6=)DKb>vuf#vc``9>ufAZIivNu*~R0UVw& z!0SLBBl|G?B+-9opMY8q!HX%r*=?k~)axVt;`ft0(gTh-W;np?4_w!_#kcLh=>Gt_ zAKm-kFQsw64m^3_--{j-xACuoZlSx=CXz^mk)7(#5yJ*K>JMBTV;JjQU>{~O7x|r= zwE%ul{{X>bKWE$j0E-_2w7-m=4up+sz;iUr$fJ3-J3|mhIFE(^bs6-proZ5ypB|z8 zrGI8W4}3(vSs~Q)#Qw~_NqHV+x_~7gJCd%2NarV$g%$O$iL{$v6!=p6!k3v?udUwQ zk6)3&1a$ZOtMG^Z35Vk?fA(AbqC8jo4}45nEylBPG}u4YEWRiliRES_InusI;$kZbox_ILjP zf_(nZ{uB5^qfO$?HLkTiOGUK2kX``M{`qoQLXbzz!1;0qCm@4grur3%p9n{w?_VNF z(Ik#FQ5F+!0-(yK0;mcG0O{*Mxl#N~OX6SJf8n)@>k;_JS+SZCl~=iWIR5}^aX9>I z_M`p@!T$gST)Oe@qi67E_O!XThgG`*3r$_sVS?bCfV1)PNzV@(wsjPHI9{2TFSk0(HlqgyjZ#rG?_0fWH*0BXOM zU)i%l@mIyq+Dk`$a>b|q)sWoDBOHRVWDar(;j_j~eTnfO_PN!5Du2N=H17%O_bA%k ztngUeOp>Ebd20_5x0VzDp#qGO#ha3PS7rYI1bFyMb>fSSU-pdEA-PLEF(k3lW1Bok z4##88Ff)J-I3S9Ei_rbpmQ6QG(yX*Qa8B4Ff)!8z3mS}Zz{ed0cn8NHfxZm*`J-q$ z7mluPAdADA(rZxtk;HrFL5;3mTja(%e8BWI?iP>>-C4Cs{z&4J0DG{nAo!#4JHTHD z^jlvPcE)?gUI|D%nwO-s^UEV$P(XX3(nF$A`M?>`O zR7a9-mNOfEg57|iuY)EXiwtg5Dcif|9r*O=N0iKV%nW}oegOXf>sFLe%#sC& zZ6J=lG2CLRTrIuSGBl~YFe*7Y2l>zhGuzouZy+wtLXDewJRWd8Ju4X^nVF-FM%-s; z;0*r&Us~1E?c=v8Y|MUS!w^U#9Z&QXR@gymuE-lK*iTG){{W2uQ-sTFnA8ANoq&M%N0O-d4DGu$2S%iDwa{VP!}p6@9()*1OmI(;OB#Jaw1t!S){ZI7YyVK_K8* zn1IcZlYoCp)-5cLwTIpcKs@qC^s14hw$reIc8*Tt)A07EUwMf+7Yw6&ecqg7gPzm@ zA)UltN8eY%kUI}t)fITBS>kmn(2p#;3=%ylOpbvT=WrOuZj{+KB%Vn_^AX2jI+L0{(k7iA2MOkIxyxV?&S@@|XChCP zn>aZ*!5#kq8UR*~;HioTcv4#}*B+qy(tOZPsOnpJDjOUV>-Y{S(O*a>XSb7fIr(|& zJ^G5=x;FA!M=Zg}BWc=lK<;tcfH6+!u2eDF2Vut_;Y^oH`+8=16$V=f1~9GDB=@PV zq>@Rzt9bVAIAc*juD@BB$& z4f*i>&)V#ka#%-kl`A5zP3lvFjEtOPHR!kco&Dn~$O3H`86%PD(?6YfPsV?Zx-Y@B z@M>!Mbl0uo-w;~pijXiv5t#DivbQV2+kg*E!>xO?tuCK`HkBiSV7Pl_b@@X)XBZvv zo}ADEw6hkGP=(sN8P#v*?0U6-X0hqMdP1VB^(R1&E>~r|mO!Aqchj!^AVouh;1orejYRkLHaLaU6 z4;WLHD&4So8O?M0>Q8QFyAq~Q1LdjCara5iIr>lsC8Oz95=>{AL~kG=mmhe8*F6S3 zE7a_w@)u-rDRn14V*Jbppsp{&HgVm{F$%>4F3rRY1Cnw_QavlSh6x657?3(EauvN# ztpG=NBJJ}e3a!C!_lE-=y{b5_?(LPXZc}fafB-mbgU&kfP-+lLA_5QIfPU`Wa60wx znvPi|xr9q<7zNr6dC#}`GywaZLh58g5!~di+@8bSckM|WF83mN&|rXvj*L$&)2&*z zic=vWS{{LpI6eE)+qARXGuysne5qFGG0^er)_@{Mk$_NlGUWj7MMh(aI6SpxjzDph zJd%2Y+Z4El*$RMn-2cIV7+dIpYJ@-kQ5uc?Lz3=Ewj7bNct71)W)4 z9DfPpuPdC_DXRE$MDa)3G+z+fE%k)^R%qC;jnrd?+tp8XJRacmu7(?lrMi|or7Gy5 zm3oYG-viRQuZkWw(|#0uE%67$%b32<`aYdC;J42byh)Wpdf>NG2qU!sS+~<6(X^z| zEf*GWK$e#AM}Z7*#r~}n000OupaG66eh6(6RJA+ueq*qZS3SCZ6~p`_@$A16{ttL# z;zjfeWiGp?rT3BdmNk7S)`_WFg){{X!Nal(PdKgNJGTQ<;Q0$8e-0zsah zz4KTST>ZOIj@+>lvS5M639XloNE^uv%_to09CO>!pxWysb1Pti7=Ss=1#*=nWPWam zV9n1R7Z@B>h=^bme8CiDk4z6rf#kY30$DnfmJHmUKU!2^v8+~cg<{_@#tB~e9Y0zM zCbLk}iGUJr>GVD7?2ikW$^y);P65fmA_dV(@&R3ih7 zk^cbKrL;Cy;^Jct*y0@L8?sIYKNu_1SF-aU5WhNCWY#pB#AV z%fMb2yzy1i2Nrg+&d{jkgeqI*KAd!{kAeRH5a;;2@ViU+g{fO5fYnwJJMW*lTmZuzcmyAM0IHI_unVij@>$0y z58YAF{#B=SEvsAG%HW9Ian26|x%T$1X8G3Uc;t5>Q-)E3q>N`izgphAj#-f~!DDWU z4nq0?Ko#3;-{|N(fs=p-2Aq=GO&Y|J?u-nuY-FG7%~`jb$#HO_b0^9H^_NYAJBpb6UE0V<85GlBr)KVHGZ2#XBQ*wN(*cxmFf?mpbUGvWxiP~BL4toS-*$n=DEKd{59}z#9Kq4_>wVuYCdxt z5{r?H0!BNI)!4=MJ7$_k-X><=qZlX9W0CoORpvhwel6&K3j7PKc=KMiGqt2~yfH7z z%_F!#3BkbUo)6(b9-hkr!xTDXA_!F@w?$LLYJeyM*8-%5-o`thI%D>RL}iUKOB^2K ziibhCpH)Z063Rd#nt=hEUh*S`B&VSm^zt*RDBRgK-<}Jc{5PEx$eAX_jtD@TZqD9+) znPZNB6VkaWdz*p&eex`mVzDqAy3V;f01E598ED3?&vjhjb4 zAG;wSVET-Atf{n{n}AYvcvU!8ToA{(9rIl6#4=k?^M>*x&cC$#`-XwkHn zFM10ymL-t;_s?8cpgPGEUvH96ERVdzNi=A!Ab-3ZXl3z*FCB$m<&WU`wNL1Ay{-$I|J6VY_4aHM6!%B zsUJQukI3T{U7!+2wTkSJwlkBS+2@J?q_)pIDKv4E3Z!tozZzKWRwoi$F7EEd`6T^m zvPErlqAQK;rL*#!eu9(>J4Rb*^6w*UAY`yp^q>zj)&3CpLtgP7pW?p|`L}Xu7b|mR zADUJ%G;A4MkU=CIaCkWGI6k*;=eZIvX^vRuIl(=@3i00>{ABQ7fSW|{-lnqM-fP#Q z-WcEj>`lQ-v1|^cd-dysk7to%xtGpm@|5mSGn|q1pbFC1$gSs1wNaaH%yY*|9@SPd zpt~?|S0}LSDdnywmN+gqFpffVjP3)crAYp8ky+bzNyY{M_34kL08oKtmTj#V;F1G+ zd)C|OkX*oJXXOUwKivcme$|$i>O9Md|$i#vmp*wB~Ct~t=vqK#Oj1| zmd4@okFWHiBOHjL!E>Aj&sSXV4FFh<=GsP!U}i1Uo{OLGt0kd3-N7X~0!hmM0EZP` z3B=D7vjKt&V0Pn-RmtN?89_Uh&KwR23Of69KomqbB@NWW%x1yC900uI-_o8fl}u?1 zFY%0y!_)A|sY#M4ng~af1AN0d$vrvkOcLBQj3HiR1RNZ0^!$12KodtFlNd-ycF8Qq zoa54^lg=AjHaph`@${)yDO2S|+^8|f>sHh4Q62IgatR%HGy#CIT}v#sa1tWiPEQ9U zasl)QrFn;e{tb91z+N=G@wSkcQ|gy6h+1ozOoSk8>>OZ*;C$IUb+2N3u@?A>mU1)l z_6!d{L0&nfd~fi^zwuUogL+k^+?RHceX8c^LZmCS24Dtv9th_jdyHcysvvr~f*7uR z)QzP~5?h=w&&oe4Sf#m1H^xEdU<3{iwmGdN+^(?3nGv>5=Hr3EBkN9zHf_kD5i0?M z#@u!0qzG1GlV(10Nj<;^*VdwEZLG18hU$6@pXEs;s~x&c8mJNtne0B4&GV{_gN7hu zs3X>ZERB;qk=-CI8u#?=Q6}V(rB^*NSD@#o6yQeIjffkE-p)_9e;SF9t18?QbH?mr zp8Y#e1<5UAl1wB6u+M4$rb@*g(X)Q`-|5Go`g+qLM$$2)=BoG=~pKo(Zw@Rhl?$@|}TqkVgESQ^Eo8t$I< z7oKBBkKQyyD;%Gj_)bAwsmRC#k%NLX?M$)BB%wr7ZQJty01u`OL#=8S-X7C#wR`A` zTieCw&cVKKEDRisWY7jj!=DIvQ{jh&kA{3BX!bg4J5D0=9zxG4%Qjym=jw4@iVne* z8(fZrecJL5f`1b4pWjb!2ld%f=J25dW2G7v~nCA zle;+|LG+*q?qRlYa&V;JjB;^V^D+e4xa=KB{vqELZh29I0L(z@#B|M5isIkR2tHeBpT5pz3q=AxqS&z&%m2eSu;GFtas>;Ov_>~|Lka+{8S2F`Oq_;(BA_p14^yaGEdE29nh6|Dj z&wOP1R)x})aUMj9<2WO~*Vd@~>g#OSY-iM;&-A02fyV0J3;Z48?-OYrFYz_Bm->f? zrx$iIEYA`ose%a#a7fs_c;f_+NUuoBOeLC72$hKn4o~?109x>07yNnf--Es?_*>yM z<&4*N{wS7Mi^joH1&DC@CoFp9cJ$|PBL~;bhnRM&ZBg=!e67dzssh!`z07JIV+0eD zPp5xMfegzT7Q+RPQSZ{WwAiJzLmaP@j*sczu4$JuM{xTiATBuD?ew4w`#CimiJ19h z0G>f%zKnoySM?R41*`@!5`ecDZ#Br|VDVYab1)4Q5hz9&%W=DJQY!k~$jFd0BA%J* zHlBd}C;?Il5D47@_Xjx`@A=h0)(aR_k);is_a6TM;Z{#p+5;6Nj=8F0IDji{fOyVx zo)1ImKoUzR0p(R9JOBnU_37zOmfF@fRJIx4w+v2CBOFqt#Emw~WoGjRK_kCzeLZS+ ziIN@Yz?CEA9Xj2cOfeOz{MP7BVtO$;U!D%~QIP;bw+bRw~4S zj?70&cphpORU3)MGsqrk`p0;I2*lwm2N1YX%%4sOM+9-6W8;s^jY_< zxc>lFPWE2s9CPX_bV(j0m;PD_94es37vIu=ETacl=4IOQjIiyGN`CodZzdpBNF;~n zfOCQG=};LWTcUHlMmSoMDCBI&>(H zDzcO6xM9a|MQQkZ!kRCHd@HB;AHwj9O*ct{?6%Pcc{WB4akytnvpykwLC`)I zco$Rg&ajhBXQr<5vHt+9cE|t>@sr-Qd=uiU9~}5gPVt7FZ8e;Fm8@40LvUBkZ1PD6 zSS~^Nc{v`05kML?dI^ODmj}#3f7OoQ_di~>V&ClWOOGt=jFkuY&$;@JDML*E0KZbp zzc>eueLk3|q>f-#A&^fWiSJo~I{xCZIRM7V^b09bH)06S6g zt_)3*N8Ik*bS8inNm10qz!p$gW0FU1YMs9Ow`ra}6Cf7j@T)+xI?BKvocH#pyaq!e zx7}tZXgU1o0ZgC2&PWI_tU3UDP?Gu4t;k@2k}^j*9+gdteV$H66mmL@deo&_C`1f* zVMz*qhd=#l0HLpGHoDXgZ+=XXOM!q$*x1Kh=COVscoV}P3;ZUY4DeN$vanb4SyYxU zA?n1Qq<{y|0otwWn(eoTG`V%1dRALIbZI2=B#=I7uzTM zk*NTTp&AEP|Y9A#H#(=^Z<3qtNDb%fsNQIGEdzI5@tZl$RHpiwg-IEEzE`#LHCPoIXwXFKo?>1 z;*5mG)jhlVXZ&gLHM38*Xbe}c0H0BwwA*Hl6{Fk>I^^Yf3VkU15=AS3eL|KVlmMbT zZ!ct{d#NRW;B(V7tb-;M;ep_eql$tko+*rj8<(LS@H^JIm0a$ZJF$>6p4{SqGT^ml z^30Ex5(Q;HD8>oT<4(GBBgYDy5%^@)pC^*@Ffq6U_r?Li`kJ&S@;5RCa^r%2ZNPf{ zC<3cQVO3Bw#~^aGaYINlKryfx9jXBWMQR%0@JM5hf0a5JJhc7Uz-(c${OAH$)g+Y7 zAj#{De-JpWC{n&wS7ZgpQ;P5PI~e zw-59G0PCg*&+w=}T3;?t?hnuZ0IgahGyl^5$|Y$cARs){DKwjYZvAUo;DSIrU~^Sk zC6#xM1#_AeqnMNB`uD32%zjghcBo^GROIx}9`!tha7tj%1#mW>ly3H`AQ@NYI5inU z%p2RSEDk@2cc2F`+JyHRoLR1V%CyI$wN0OWlf`AYM5`5Um<29con2nxJ znBuMkXE_o|mdIf0L$9Vh`US~mv`?b4x=5R&<1{{Z^wZ4lex7y<)lKGkOB2w>@h zl5zB)3JOS(lr})^P^9wDAzs6^I!N}CNf;f05kQ!#1;(}2^{su6?CgQ><20r^{nw0W%+?2 zM@j%;F*9y{Li7OBo69&>Z1jIKiPM<5O{pRFO36akMrxH-wsfByhg06DgT2+nbyJu0bZ7ifpSKs)BN ztMESF$1|5tl#zfj>E3`Y$sd!S;v=T4D$T*>6V0nb{V-Q>6;(k@t&mh{B{USa~DFm(RyMd!v(-R)Fln%Hgf zWb*@(p@2I{UZbZ`Q!29@Py(U@AxIY`{YODp+9FqaAG$f?y;f*GWjl!acc~R{-f|WI zbQL_nXU6;feuF=)I7hlBZND!yEOE!@D?iH`{p$R6{{Vu({@s5Q{{Up40Qg%(_$b2L zS=MHfS*MmYbr7b|qYa)3Vn`S~51SbVfc<&|%5&bWsKx;8UoQT|zZ5mUjUTfIhkhk^ zj^VDgE9l6%mBNNHp-|i+s`u;%LtjWmER4I!=hA>Q3OSer`APk1(?pR5i#!kk%~!XS zu-lKH)YR8dl#6ry;aPyxRq~H~XD9KdB&jrFB1v#~r^YvoxIBT#^r>T107w)PKIk5_ z0RXm0zF;{7_4lZ59^ku}*W^>l>zdP%Q$Ihv;r60RC%Xp7%F>; zns}oyh|hd(_2bg2BTqEO6yqIzs&at?hX*Ub{AdD_#T-Aoh~#c2tRZI%tAI)4>r$i$ zRBdjfl6r&bQL2tga?8jk^`HoR)+b{O5!S0h#ylX&UEimrSJ3Epo-&GgReJ^5=ubLG`Qdk+9n#$S1$3s8SSTx2Zm~ z0UESmfa52pw-kA?vy_uK9gjmq$(J$mMsP^&P{?!62g-4dnV=1CvP$d`#?~V|`Whv& zmLxO25+v&EaJA3t{vxpO?}z5`Z;3DC()8UrDJ8m|QUF+#Wxi(UKnK?~{D*$qU+_|| zj32chk1jMnhI+lUyz$=X#!m z8vb*CYTx)FR)yf756$Dh+1tcYJkUkF+FfMI(l5<`!vk|DI5`CRahkyY0D@G1!9ac{ z_;2D`e$8JTHFmzUnZD0#*V1li%wHkH`i=q52ZP%cP9t#ae@K!?F&N1JpO||80Q#tQ zZQs5paOAdlIIX=>6BCwY8#A1P*!TQv5=hcTJGy7JNdp>KNf`N#I@HKvX!6HB%~CN0 zWmq^o^XpPtlq{kCQPhuG09B9{BCAa-B+6!OyLfN*c&$0@<7L7U0sQO9{x<0v_liCm zYknH=bjIIRzOa_o36=b^k09H-c2^h#;EqRbXamxOt95M^-k-8aWkAA3`GFqI&+|1> zDRJ{kaNR4xKV?sbzBu?p`#NY}4gMlri@jG*n(xh-Bxz8_^D{;jm;<#?g&6}Fz`(_O z)KK}~>nHivGp_03LM#rg&4t@oD#EhRF2>`#$rYnS25D z_2a)kYzt9!Vwd)^tno11tc|#BJqSLAfHQ%Q&SJR)a>V=9i)m6p#$%&!s+BF~|brZs17uK9m8?UwEU#dJd~$qH4F0!FQ;W z90FMtJjY&eppni$KYHrre=WR*1noSL>t8ASb^V;*$kg^1`nE9 zk;hPfiY5Fv0gQq^u(@F%dx(eLY|sX4e)|aCy?fR6g>WNoy?yajkTEGFpDs9XeML+p z*fz1xIT`DU09Jl7*)5C#QL+?(F(V1opL#T&N>E_I7|p96Sx9QtCf z-`lB-NtOz~C?55U+I06!@Q^Y_GJWU*W2(Z#$%OUU^M5*)Yxx{*&umm{;Y+yUG6Hrl zR@!l2GXB#awFkj}*>l3MYyLjfk?yC+hQcAb>Ql!=D!-4u8EP75g?=_iH;MFnxy&YV6ufHZ zJA-xOCyvHRPGhQmtn$AR{Ea^&1tYj&Pxyuq`%90pu)I)nA8aj+lC2mBJF#rA&; zzia;h_(pY^L{Z(%C8#WR?R*fm{c0Phvuk@h$qR-3$YO9lUUT^h{w;nfcxLzZa{aa8 zMJ;U0elAg;xKa=Guk3$KipR$O8PdE_r_3HZ>qu_51CjHf&+Gi^fa-OsKqe zZB(%*oB@pfndw|F!at6m5B@Z0T85|K#+u2L0J2GC^E zpoC1)t1ODcvP02^(<|a>NeY94>o- z)X)dL3yiwlNW`n{%ML*F`c*rN*#*moVi%E<(1xqNP3&vB-)pGk72}^wcf~l^3$=Le zM#hlmoXyo&NJ*0b5&S&;DIW4-g-*~LpPSjEedDwr*1w-$_%D^zhr#|H^Ug|K#=U=sbanj#M=kkAjgc_9 zT!!z#{+0M!{{RKx@Z^_24*WZ-`Apcmja(01;($LGJ{tHUDSi%L{9OB6$8&2qw}uhG zmj`L*IV^HdrUiQUz|Yyw_JjSqJW#e;EzH-NUXZ0^xwv9&?bVKOstz;q{{Rj%kH)+| z_HOt$uY7v(mXq*)#&M@heKS7E%PIm+I3sr6I3FoB{ipmA_zU1)*{k7ho$$}V<~U=u zhzY!*hn{xE`DA7pX5(s%1y#@9Vpyi^2gyIO*ZdPZ;Ag;ylT`5ys(6Q27-=WGjFjG_ zl2K0>?}MIt{wDq{ zzV$2!)9eZc9#5MGA-4L{1NiFy0D^{m4beUW{?pe<;V9M(KUx0(OM*4|RymQd`*GN} z)4u}0r_b2F{8}W5^pVdUtxqQvnVTqSg}){R|B4USJs#N zW7Iso>xjr7m3h9Q;ZF@}J|ng9h0Tl->Xspet;?YEqTC2O2?qp&*WQ3TYiTayjfr71 ze-UNJ*A+A-S+l%(N&fE#)9F)K+`OQz_VC#xW7Do`cPj?qtXY|XUsdnV8Rmc}K|R95 z9kt0)8xF2Lk9uf^GbunI`I6b-oDl1k&HrUxWBNk8&a1W`) z05#by5B0`+Sps_KeFG7ttIEovy@{T;($Mp57?f}>VLJzgo;K4H+sI{bNnUGKb?PZJ|m7q z)u(Lyxhu)%2NnD?e#Em$p#IX{2-VDlELx;$GC0}0{{XLF+$V_M<{eD=vTkoRo2Q@y zACaH|V^CXn3zam$^pq7^#1@oYvnK73&x)id=Kz4`^7&B$r`=0M}=6twVS+VE=B=Nu> zi2D9kn1uw_9jNJI?nJkd%Q8v10KrR4Og#*hz zW1uVw{{Rm?t7<*2tU)pS#E>{2l{On|n5FXNmDv?AtBuE=q@MMqWp8M!_NIO6MmF`y z?acsHmem1{LNmvvKgq3>v}7u08CMx2r{h%QwMg(}XCe96Ps$JYnsHe!8#6h|_2;EMP0sK8j6w?Fvz5Sv;VK0tfv(4w3<4p-JwDL$7*5RFa;O8Ws z4;jzlUI*~A;`hd1+5Z5>arm#{MyoZY-Gri6gt=&4bIR=`j1Vw;VDc;bztnU;4)~i* zeH+9!iF*SNEVQF|e`Z$)Jf1x(`Q`rrf}Q^W!96X!1*OmXM0^*GEwsx(f3ETcSw+tBfn zFi+bse&R$AoPo6Q)7HO{U-%{#q2eD4e%E?kpM_cctI`aq)k>9+ZpTi9boy8I@2SNa z&SF3b1$jK=V1GWem=vdBI&B~F#QyEKeAV#>{1hX@2gRSWrlD;F2nD^$$mTG2HW1{V zIsuFva%=86U~SUMg;@D{+DCE7{ zwuX%?ED`Lr0H3_*v9mS@&<>u%*1xd171wDXG;FHvDIjiUMfwg2Iqk=40MCV(;wM7c zKQ_^Z2lK19cGgkaELRZ*V}YKad;GLRaIvY__?6dprr-x3g+p^~c`lg{j`t$Z>600lVsG(Ix^$bKf$bl4*|dNgUML&qethTvB*y48fN$-V9X^J? zh>zMw;MTwUA^y|eAox`mnQw1zeA)4R4C3Iumj3{PfBw^O z{?fk%?BctdZoi$n>ch_K~(5g}h6(n4PM4LIyzNu1{Vo z#s2_lUme+eA^1hB_|sds{o>o0(OV)%IT%m|dgOLB?<7L5*B7a=U{c;=oThtZ@%ak= zYQNy4U$z#Z@#o@&x4}<_Kj|7~nQ`UZTtsjrn{x1F@c)h+Vd_?gFjWubEmpAv47@4}Z)+!g>M;Nc^)BXx)@kZO>hwRO) z-RU=9X1~MpL8A15W7sXsxIYd}A4 zKj4yI0e&ugE%9clt@xtE!J%t9G;M8i84PV9bNoB^WCc9!1Gj#EV=ixuQ+bfb@{gBq z(zCQ}14Z!Gnf;&PnBF@$kB~BoqxWM33;=!cfHPN&%MnE?4<{M*KJ_vJdz;9ae1yx& zzcYWZPfVX$iEdz$X=K6O{3nmo6qqkJ?lKFK!~l8@Fg-`TRGuYxSRAoM&Q#+E z(Ek7`kS||G<_UT;I_HDOx4l_{+735kK<-bsOw*>b ziZ)XqXFOyR*#7`J0O@U%N%Dpy5JApEXEe6WY_}U^K%kPKZT@DmEFryZ%8jrCkQnD5 zjZ?pyQ;tHUhF8NJbk2XmfIJKK`2C-(KWPuycf_6pvN_ZtwtI^L2ne&M%sTZvWOm~i z=D(be_#{8=KXv;&e$aZC!%rPKvC_O#3u*U@DZsV8g^H_@k^u~MGj>K|0q^})*$r-4 zJiBnJq^KaA0;+O9U&_CkANVU5>{YIO3-R)P)t?HYX!Ko1;0x&D85Y+hV{s|~!*pYT zfsTig0sUG%rI3yBD}A2TKrZ;sPdMw(Uc~3NYx%VQ0D{B*)Rw+H@fDZs^Wm9~*z{sA z^>vGY(vkb9P7gRBl0C3-n(?hK{tDso%Gcm6r^8T5KiM?q#keY=O1zAP|Dfw#Zb69 zHjU-!9v`;yE$t$X2vG@DRgFMYQGta~z#iO;=8T!5+u)@c!x2M0ONL+S5W5VBhh#q$dSJhtjV z9O9pQdoi^M=Ay!<4kI`vMlp}`-hi?`O}qFd@dH!+zwN#|tg(*{T6k`4Hfa3+0G+N_ z$Vcw`fxSypR$0xYw_042k>Y6>>%f_n9DE=+Gn+w6tc_TQ^JNr}K z_}xb><}j_$ZS1@PedrX8(d6M?+15?WK^Y+K_2!#AB%S-dOyDQ`RaPm{r`;G(2_5i$ zxTL(hCgevN5y{-&-akP>CV{%Nkgt@)g;qZ)&T-nEWopV{S zY(m!2ClRSH+Z(+q`uUJb97uvfKKATjW2o) zd2D1UjF31!-+`&$Rb;VM+Mu`&#GGeuQT(dbk0dvGfNb%&V~hs&$N11Re-*#Cno56f z?-dXEXqw74?{e55n6K@pOunM`qWY_Uw{{RIi@W+V0 z9RA+EIBi&@zILG&r38SG4ZOH?CnKl_kzd(A!yR2bXYg;s9wY@MhVw?Sb#=iRFrYk) z^dlJSRT0(M9oBQ$F&JZ<4!u6LTg{PJNP$id1a2Y3+vN7dLPc1vBz^eCJOmv zC(Y0S)Q+6hl#1n@q(uc7upas7dH(<=lO(gGLlwJuC0*41@RD#b=uJNMR7NsoqJ-ps zf2UmgRcm|1iGq{?d$ac*ndw>HBS~&-Rdn_934P^MYU#Ha858epwhws&fl9 zouhGpt&TYMA5Ye#wz;`^c3;ALvCi?&TmUMiD}i>(@qW}LkR6k$P)~eR)8`* z`<1h}yHh$zAQEhpDxe&lqyk5LbpwH4!LP$hONqZ}y(dH0&ne>fhEpe_P2cpO(i=1T zI{l2k1o&t6WBs2rUx)fdy2W~Jp}D=9A@j{Vxh@GH@S%bX@-Tf(eIK$5)RNEv<`n)P zy|@1W*H(N@X!>RRmU?zJ#W#`}x+pj+SoZJ{v(A&{M)}U~mVz5E*u0Tk70RYY+_305 z>tD(L0Q?o#!{`1U5{Ybqp7Ttzfq*#q(j^1*HT_tb-g{-5+AZp`I2(=&1MB$lU&trz zv*Ii7jKArz=B0++;+R>)bGY>%-S(>bt>VjI z`HvH6987#o@; zA(f7O1}p75hl^5<5}zZCKOaiV(;C)hA7Bxgf`H1$=NSW_$9#@G#aQxX2h54Kk=}qM zwzh)ZnnUs?dBXbt08dJmS1WL_L`tqOp}5>T=ikz)J$>$8{8?nnraj;0*olG5C5`E!ovBW-=)w z%lpc_WxG{|y}GtpC)mKqR4zx|+y4O9??4}mpYUAI30htJEbu3aaWXx&r9GtB7)6cM z8!gyigU?J8QGdYzwcA;~1$;p8bVMcGTD%iTONBcUIS)byq3Ubw@AxVQg6@7W{>A55dp)E+3C9i`& zuC=Uw(f{u;cD8XMn6{x<*BSYN;f6RTo`)aSkB2-so(J$ok>KqP z2(4n$Y@@YgMZ{|`!INkm6uBqUngG~K!}e@Q%&gKDQoq)z49Z8C#BXe~bjhl+$vdvl ze|j(*b_Pe&rA*th8~}SSa6bwFnpgu6*$*z_NcQxs@j4^iAO%oP|qIbLdd~@C`yoh z2q1&*2&$6EVadqSQ?>Hq z2RzKI9Xfxsql3ZkKpjWHuZ><9_~-DS!`~TnNJM|zcE(wx=!r1EWyfA|yB)LXgI<|x ze$h6|zH|63eiHux!5cm>YQ7n|@rUe<;@c$qet_?FY`cQW?xcxRX=dyJ;A8{OY<}U& zXO7xCY;4Mpo9|Equj7DE_H|GhTogWvMiEO4e`9dUdsvHl!&NH4t zx9PWrZTFy1dYW?ob?}ccCWdjy|;>3h0=so%Lzf;7aedrlZ<2W?Oz>!-v0m- zv|j~&$(}dXHFnt!qi)twqhveHHr+)Nbg@p+Cg!%?HfumRpR?^bi2W6duY#ApcVvCz|Z3vm93jFPHlB9YbC<49AnVsFG`IvmZnDnN_ zJ~oKonDPnZBY$e3U|GSC&Ka@6P84UKt!>4l!Q{xoO`EV=r(bV+0D&jEjwvME7_rzN zA9YCT2YR6++$3#j66b2|%XB>Rfu8+p>9qn0S~eTwD#@Ps;;FP#Ch262l}{`VGJnE= zD~n~G)J10~5}5$V7{&&Erxfc?w_BuHTVZ zwDRsHXxJf~C{!oz`s38l2O;7c>*y`6EU#5A6h@?gxFqL~em<4Rcw*M#OQ;_AYpbjL zi^s~Nk3-kqx4c*OgA!gLWL55mg2e3syYX0_8`DVDZZ7QDq|vV5l>Yz;<%s_P^;NBa z^qA%rR*Pk3nft8F21Yx6b*HDSvO_h~sS-~hjPC4%zvEH;om9pmDmM_g9A$m~0HtW@ zu%o8LCvQ$0KQTDx=}-qhe;%J@aEomyRzbY6?0@}yV!YSk&%&Pw{5jSSGv3L zmGpXsqLQ4%vagwhKza?BQ37M=QC~H{nK7q;eU!B54>sOuM+q}!k6uJ zd*MsSto21PvMh7H@D)n{8|acF#@`60AvOocoj4(GN|MSXE@IQ3RIRm zf)>?*+y~8%TFL&^wGFaD&UcW+4B!d?-jX|2x%)2gK+f(l+Ze~zrLbE_ z{$`md6G&9S?G zEpU+lq>r10>H1T|?K~xh(%Bg!raOHxKoQ*D%#-wG*OJA;POB}jR1KEioP89 zd&ZtC(eHdf65QU`uOEVVh zyE*5MxIFsTk9=$R#ijf!kHcDir)hI_apNs!4Hnt$%ArXdj4{YLz&rps!RcQA0CR0A zSfaSyBcKSg;lm&OF3TI zw(n-n>~+ZLlblt!fVq=&rvQ#4Cm)X(%>ZS~A~Gsl$X$>Cp!LtN^{#7E)mYz%Tp@gr zLF0w#k9^lkjJA;*k_sw)&A{Z~e=6f`V0}XH+)Wf-T9W%l2_v7tGl>Y#NDRJ4XiHSSd|G3cXQAXJCDO1s`K1WA|xON!|p0Shz`Vb=Q;c+0)(Vnk2+kD zjQqnS=eO7TQ(od5*va1Nt)0yIC!WWzAJ(OHP^!)f;O#|n8|J9vjJ*DA?l-0tj_fXd zO#oE0w!)YaVpM~TgMy@V_NmRON%0&j97?4|IV29ekMXG*_IrEROJ&Nj!u2@guO9Vv z4%PD6i|!khi6b4#&Z=n%*I0G zlfcRA$;Uy(0CrY-HjSj{mReq)1a@{>ZKB#+LZ9l=IIxPKDCju+>eOLyW?&Jzk&Zzf zIj&dXkBao)h+hmmGx1Uw4Vc&T*tH>U&*p4tvBp68v7RfjxHCM_M$3LwA zS8(YGmJ^Tx+(#tUcf;HS=V#yCIodJb+OPekop#LONez*Zpe}p;D>+0(jk#w#M;SYD z?d~Wmn9jTVHNOw$D;`N52Rv|Sl5pW)&CWsE&GM=C$6wa1#I~`n)Xa=I&VEvTIjU1z zrNoi4r~70&@a@F#(c=QWYK zVvXj8Rp9>sdyi6mD%@+O{Oxk!4ZLmX^*HH3a}AKlyj&5r7jonPhd!9BnRbh3iP#d% zHts(t2hy)2w16e442r-I2L(qt1palL)|VGI4|OtPB!7?*jy-!&Nu_kshEp1eRTK~b z8+T)pJCj+lEu`x)naLR6kGfCS*0c*NM~6k)tQ4{ye!aTYHg<+m@}3#G0oZh)0vR<4 z6g&n!oG3j;N4H3_Bg=7?NSFWu=Om6ntQ))WxcN>abp_PpgOkpE>&mrX65h$F zNuyfJE9Os}#&}|S_4c5yW_nJi<4qdYWsMlPjD>NG439xv%=(n~Z}#}&m?kotLB`fS zeREn`9*qCPjI2A5a&kL#uIs@=OVIRtPY-C;QCn%2=wgN_zTyB+LGP2E{Pm~!=f_%K!@mLQ z9wVI+<}EJXS=u%G&E<^X6M>WJdUdZn{h$15ekc4h(Y_$T5VVI=x1QugSV+nQ#xh9? zqmnbziUXOSLK~}O27j9@GB*yGq?Z2OZbGVITMVoR0H5%sHu6h1mUgJeE$>9u=n9#7 zjC{TE{{Yvi<|v|pr)ClaVSuP*V1CkShx%Bm_0hb_1o1rKQoB-W(-lCflEB&pMyMyJ7oMigruMTe4$yEx#tA3dvEsIt29QYRVwhD!!(;sPpbM7QpJ|D#oNkc@)1LSpaavKlFk43( zCz@1p0Qs9a$I_{3ma@$Vcq0mAJ6)TGV5c0_i|-`Q_I=K~czvV!{{Z^v0+d=}+)d<$ z7V182tT&t<+4QY7bn`?~9L9d@KU}uH{v7M8U3v<972(N3NO+xgvcIa}A$sBFZTocop^1q6o8hk78bHfws z`nTF7TW3Vu0tPH!({KQQdXqpNj?JAuD=SrLKFX^cJ3dgcAPNW63a=JjWR2WzAeRJZ zYOl9r?^bk;Tl;5CwZAa5NqcP^(W_%C<|u3uIL|b|-)a8jgjqIR5}^)_@)n zWIU*0_p+z4^#1_$Q#`4smvl0sk}$bV!~X!S^~EK{+|oo@a~{wRagy2Tim7ci^nv`j zHv&Xp-45iHQL4IGXW{a;&1|zKZ0y!A{21Q~|KDVe(vfuq405ap_I_Tik9is^G5D z%zb$4Kps;;C!9$H z3^30mk;V!7SDXAp__5(1hr0fc;S1%G=Tg?>DFQ?W6$UcQ#Cz}n_4Kb`w6~8>^IMYc z!vVR#1J|#$05GJnNYP_v2g{b==b9vjH!lExyaO>E0}oHH)~v9XP=Yt%Qb2xUIu+yp z0M%9T92=ckcW%K@MtI{C0V;zmp@QX$;lH|g@9FDFduus|a{|fJ3Ui;rqgh}=u{3}U z`P<*qpMOfV9m@TTM#BsphI4`d@A*&$ZS0DO9dZDXP?6IBcE)M*#T=4(k}y?34$;u? z2M3ROmKnf|ZzV(E9y%WQ;}rYA&u1t(Z{i^T01xBGtpH_9EtGMrR*cfTjh~cl9F7Yg zYHYb#8LhW~?neU)^&{Ata>wMwA~J0bz_R)bbsbL_tvq>Wg(Q-AUte?XC<3GcS)(H7 z=6n_kyaLPL+wjFsx9n}6-raYdtXl(|5$b(2OB_mYus=BpNarB>_9mv&#l5ecJcDx_ zd$JkbI>O?Ez2C{n6?4rra6bjC1EF8`pqN2V+ey z9C0(kKm#8ubIA2QC;?28BmJHi0ZCahGt(T^=u$+N&Xt2l^B=?Bs(JD4RaQP*5TK9p zI`peH>ZYds9xpdeiE5u%gK^#^J!n&A{$Q2AK|{6qeD=42Cv*kP2_fYiPJIPS1+Sh)Hwe^#amPJK7^DTrS{02%V5*$#E%$R#pE$xU&IZRS zN2nCwuq;aq2o*p$Uqeb5!lcK$jGPn4GyzmBOwVjrE07BV{6zDLy>2Cy{K=hxAcoIw zz^SP zlm_{^By}HJhFhShU32C4UOCUFdaQ4ZzUTH5$Nv)BCt6{moT=pV>HjGjfK0w?` zjIqWJJt~@^+={D>;FbzT?@m3t)D9na@5VsEY<1_*3cD0gl44-T18E~2Pkhh?gmR%C zJn83Q%P>X=&UX~g&H4NGq(_P=0cZ0fVn)y~$8W#4deXOn5f}biGlIdG zV73oG{b~Tk+S17RauK@qAalnV>-g4Jh`c!;jI^7d4PMO2YjO-SvSb#B;IQ0z8TQGp z!R;iM4io_Wao3KO&v=i-R(=oAFLmu@Nw%|Ac4PoC5rS|yCqG=!1%HR$2=Ir)4+}%! ze*jxGt&O>NSl!vlcWuma#PuiEx=E&af=2lna5?HL%sv!+P_p>P;d_4K1*XiDdRre1IIP#v04aaU>~P1{{YtSKoH357VBlp?QN}*jnzu%+`KCe4tc@G z3CB41tyMB4Mj1h2-GS$xd8*SSk*MFgOb}yWIr5%Ms8=*Ji%tw6#|d3Oj=isR+y9_D~22H7VCGEM^R^dq?< zq-HZAja)ANx&Htfs}w~-Z{z?$U@^~bD%m>|a}I!m(}Va>1$$9CMyW0fhvWbO&tspZ zXfc&pi>S+V40;jA(xQRwn`#wi%VgwZoMWv?8|8{Q+(8Aijt`{(KGcF20E3J+;oNry zs7Y@uo3==?;Bfs;di1LJDgvK^gPZf%D*j$6iKzPzRhZ!w&&oc*9Tl zm8|J;-D>(^V{JRJ0w$O56&$HK#t9i5;=NPtw$6-JJ<_?$7CawPe+>S0;rg$}ZwvTm z;@*SscK+5Bopo4K?;FNPj*^i|gM=U*Qqm|T64D6L-635Aq#Gne1eESB=^PCLg3>TT znvsKzeShco|E^uud}4{iYo1sDx1-u_)I#Xgt_K+ckXOgt=T3- zgvQ6bGtc*C+5vmyCSP%dNLEF%T4Ku^HTFk@kQs+D#_3nSYW99cs)P=t?v-{P?OS2& z&PFd8XL&XX)s==zE(v-Sg^hU64ygK#(uZUu!)4kbH-~|Lc*2hRwzeP`{x%)^t8OJ$ zo1bUf(vdtd-=HZp-dN}eHigt5WsNr0x0CL~qoL*KR{0NPRyD*p_>}0cwBRA=nz3?H zQNrd4*}$v9z8N-_S-b=_ZM7GIsees<(83}II#jCJR<&<}YeruFHj&s#7S}VaZkLdT zGh752M3u+*8*4YKRN1GU+#%%2OkRXqHFkvYGM4=GHlSN(k5~UBEt2Jeh+NAGb^enJY}z>(rTScO=DPW9$sd1(l0sxjuMF$SC7$&FUrZ?o7HyKvUPe!Up3b z4xY?-s0-w5S_Xo8%G$3he}2fEO8U|7C#<@%vS+&6=+CSmPp`pXCT~fbr0Kiqb0x~r z_=3G`4Xd544qPyuMHMIX;#9HWpCs+6lP*=2?Pr`lDL=|&tRr~_<{|SK3>`9K>-M}Z z{)ck{q3r!rt{~uRRhSt0=kh~Of^)IMd!^Fw;-R#a<=3s}Lxrhn{2=YAOKS%h`%)hI z12VD%&4u)?K)+tJ4vPKQ{wV?1hDVL<=Z_2j&3egc`7uyF#Bhtx#y@iK-Y~&s`=apo z3zVxO-&rcf0Zx>4_~`UYdp2Ntwdg?SmvX{O0|GOxUt6%M?$pYIrEiC|7u-4VG$jD( z&5yFAPi~cy>$u-m`}tG5tnA($MDJ&vD`(L8m}pp+CS%sDuB0ho?tz-ziX5t%^%77owZ9NfQ4m;dmpI(S1iDmTvBdC29K|1MX{Dm zX>Gh!=#mIj&0&b+$U@#f0%Cq|H0eDuSr(0gRoql1G>vOhS>#hatO6&VN|npt-w94o zLV7PEpcE=_Iq!e2BhK|tMvm^wDT|{z6G;))&%M%2gU!rP0?8R|f=Z;#)4yKDJO9sb zn1j*`9#{K8)&={S2geSylBK?=1w^mEyxA_xrTu`r#1ROkx(`|m`zn37cELqzZ5Ao@De;Yg98l8Ai>O#zs+kxT4`iffB1(J zC<4>fL^BcK;rCjD1%#{qMIYMI{g1Z;KCsHk{u$9+MP$t4#Fw0J3?IN}V(#S^}BtZ?VBfEO`ttuU8$Ao8WO!CCNSONP7Q<^U59l=R2 z^E2_ckh$9T2RCE5aowasEhY^&BY@A1$)@81;G|6phVUq4Nib9ga3VYQU6poC3-JZ1 z;7AkBb7}_Is75(ST}Jy(s2!B4azM@Uj;vM?daZl5UcP3MogLCdeq=~FnZ7I_?vftO zVMsF&sP{?m&PEc($@BxtbLY?)pgAOX7xxdc^{&~Em^tSOr~xLODv7R=j}G}x=6j#N z7DV(pU;m3|!yw)a4P$5oREXb2W7X=piN!|C&wLfRB$MnN-&_gUnQy^hyBwx6*Dgyf zfe;jIFEL&|E&J|jT1E!-h|;>j4#Rw=jfZOzS87a+zZNd9o5v-&vmf6Yhn4xYN=*3} zj!QZyy;sctE5idyQHXPP#i;SdM!OST4D^MwR>2j81mAkSjtwUrv4O1VgJhAsg*fgB zdR!7f{(gvsc9MMhOx#26_a)2}GP}?^#Xx#kCM-UYmj-(eid$EcU>1=6oufELKk-ps z^_<|J+NO=pB#WNNw3L@&E$9#&hH0_?;_8+?*%~IOjB~=R!dxqKCQonUlJ^)78>gKz zrE@udZX`|dSDo;qL59t+Hx;4-t4SBN-uYlF$F!~*x6~0Nc~XhiQ~@xMN%xwgsFZct zpZB0b2ot+M@6o~cfL)i*DM`O63w&5Flg$)u`8jze_%z}Ho@mWCVZ z9O=|2S+AsGd#r@b1b(-Zj-yfi+V*jDbo4ajaPc6s?_GxirzZmzP`+i_r0IF4z@&BV z=1{*k!E*0S`5Y2w{+q{4F|PQPzZhf37mQpiG-jS8z*kal#&*t|ElRJ||4EcnVawm; zsYx#Jx#2*0mtX?$h5z~q7IhMh&A*#g(o3+LvoQ_&_1SLxYKHkesJ^c?0A63YEngfy zrNY?np^L*<0n%2ZDFg|zFYxw%PSdbs*IXck0No&90HZmbHE;x|KTbQ77shL(e(xdeD z=!3lXS?9Dm3_WwA!1uuMj0dH*5|HP)p6E86g?+Y2)6aS=@cG}%y|UNl0^Dm-xu8UR z_7U&M^-^qdrb*kFH&Mkq?aaQZn4|FD9YBA=EXeCafyDR~(~pAGf{(T;oH7B_!mLft znY!Xbkpm~vkEaz1NlMdgI6+%6p)K!n!$fxPQY@U6V)v&31hesOp6Ain3#?3U_I35C z6e0NY78yV0^Ev=$`ve${P2wHeNR7BOVW(UgSc8&M-LmK0v6nRCfxqM8zI=lJDP73J-C)bPY0IW8 zcU@y3>H9=PJgQA|URTq|wP5FupdqR-{}Yq<+*cd}#~x)8hzts$)zG?mCW(tc0tz$D z`il0^LwSaed({!++amot_RCOONxLBe4~VCOBfMH*$? ze^)gj^*4nCdJTBtn|39-1J8!WM=t?4UK+kaKFUK0!RX6 zz1~|Z_jho+_6uTgGdc|+@|JvzZ|-S_&-8nFK$^;aE8E%4o#&#Pl;UDco8xyfBkzc@ zvu5$qVp}d2+qSjpmORkA_{Gn$gSbd;iDRz-FaK~LTt1lvOmJB#NCEM<5TyWap%{~x_VZzqAmgOeXVuhyzB8%veG0R@iY$iT1SUG z^s;<+>-9I*jbg9SSzn2$l{F>tb;{=&HND@Yb0E+dl+L$mkYx9~|84U1+b!=q%|3aY zxmLVtM^d$?`f;~=MMR^$5)8hW77O`wm&6Y9brO8p_KIjAdO~pev`qQ|kCoQ134R8d zp}KolKne$ie#D~7Ocwg%H&dfVS3L#b!jBmiG+1(FD#bEgE?4QS6kl(Vw*$r{qF+hV z=BF9x%Hpt2+&8j0HQ+?W5}V*G+;HRL*MEKQl<~9#DJqAh?Sy;&-d`81>lt;Gz$T7# z1=2g!>JtA0*_+47(W1>!uYs(&l$1qtB%lIK)?jaTVnYq9^FYP%j{x*KgH<`C?wb(_ zX;FbwP>=O8NM=e!M7^sukb&eQRXnkz_xyKQAjtR6qOck#XX1jzXeCh|bJ&}DeXKDv z5PU8(qDkOugwSXqKEZ0IYPU!~<6&1l&vP3Z;Ca1lPOMn9mMby5WHl4|mI$H3x-$o) zw^7J%V5pqcl=?u1I7`nr8K39{8za=(uk|Kc2O()%_%o_*@~VC5S5C zkf+UoQ!Y9r#tFkI=hRE6bq?%}i_C-UuVj*zzB192o3?IB>`U9Aaxs6m^6`?*pEqiY zSpQWDBMoc82OJM6H(!?AeD+r7ojQ$@X)1d__ZC+)m2VvjmJJ64D4j48NW3k`6aPpj z^Fz9iT9T$)Db{10t2?)~RbwpTQ)ltpp_C?$_geh|gbu9)TYOi4GS$z0GntpzgXm6v zaQBHYsespu(@cn=Lu4v668)tw&Lhab?mdFhY?t6`^y|yhvgdh5YV$QLH+~0Iuz@R{ zK^f-V6DH##QgmULm37p`d+HN)nN&8(y)|#c0%GIO#->G*GpCW!JRQ;?q=2s@#xjX@Co;2w~KALzV?lB7Fao=igbG& z2YhHpymgCUJ~^(RTaP_~^TQ9&8tkG@7`cS_I@pWd!?+&&dhsOjz&??MjjuEDa%Bk} zd20Sg_Z7t`8~s;locz3{oijAG3Cy)9SZcn9+9B>K7dYLNY?MQxBC)e+zab-8 z2mvylmRD|SktZl$|13H1AIDqW!JEAI2Vzb$eRBNAOj@)jiPq~q6A!t)n=w7&h>%aA zTu4+!m_@)S37rdD$Xvdl&C~I6wsdhfFiZS{+e2iS^}~~!_egj5iX)6!(e{akfqG|I zB80<4B3X2w2nv@`fBa9#+<)EaQ6BkaU~*>hN1Qu@hXz0|mDEcqOKGgNUGQnC$YdVT zv86pGTsWc}C`-6Q`Oh=WR0~Zxh#|s3*x%SAR+))ppSSGZ#_WF`74wd`81laT!A?=^ z%lr{ARn>HwJXvJR)?CP*ir9LS=@ui3w#RJT+dP(QE{J!3Q6BZx@z%4XQRU)9`+Ky| zp>i0VE)I&aBdvv?=BzpsR|NWRB7)J#hD?Fw`sA&4W%Va=&RYMv%>O_Z?u`Cr+v3M{ zh5nJlX_ej8&l!{yaLb>1crVe&#ZX^sxm@o+rV9xd3B724S||Ue7?SX%bxF%_;r$gb z7knD3jm6mTE@h1y-9eusxd&xWXF%oV76ihr8_na&cnKGP(9qrW{BD;Kbq;5C?sK% z6TWs2G-eJCuE2@VnlAy_YgQx3or+VDEX?nl2(l!H>{-I2@pFfx7ZQ(gnF^-U7^(dl z?5uB_W^+N!huHalADmuHh=KZK9-b#j1an_ARvgl9OpL60%i~wG#xKhWcuL-3GS3Z9 zGEfHZF_Zb=hzp0{6%@?Mp~Q{z1_()06ls;`88+Tn-i3kJsD zc?ltifmdP3jLUw>=fo*^=zAnVk((qtA`zlx7MUmqq%md3hsvTA%(0QKN|Q^v#k?Fl ztQofrFfD~kN~ny=_0~Dg4L6blCGtl>F2-f({-T1yte`s;#13jVQvvNWJvhlDwQc~u zSA@*Jd`cmwu;$0bZH>>w{~Yw?q@XStM1nw|n=|vuigWW#-*1jgc>tDjfPIf3Hgyb#Evabd0knEg!KbYFGWUv!x7hA>KUn1D9Zm+&4rpAAc`v?e?0VD3y$VmgdjW!5&Kc zz;j`OA=-dX;2;`d8f5et49dP^1LZIxm3EBJeG=fsXqtBeA4f42D#WguHqWLOr+(Um zBQPH~2EaQr=*MB3!%NXUTt?`(Q09$iuRyA+sy8PaN9K)T=Wl_`wD;!21%HWE+jEss zz7eHERe}=Q_|q@1SVEM%n9uckBQAsAJ!G}0|I@Ua|8e+^fhL#R zMw>ArGpd5AmuxKEE0wd!Dvhn51llw7Pn>zbX)|dTwMO4JQjg zKy@J{7h%SV(CmGLp6`vX{odjK3#3ZN3InC9k(j2d(rj8mWoyEt8Uns%!ruLp?dFy^ zWo`d(C>z@Q%|Jb8fI5=5EIBCS9cVeE7XEMEkbA3gBC_{ze-u#7hrR?B_QyN-FnfA;a`y13 z%&D$Q5DFH${E*&OaJz50!^1q@0|B0DL9lc^AmDY}=0f)hZ_lkvzIs@ED@21v0DQ{9 z0wgyyEcoarRG}B+)Li%y-XIPNO9@t@E+YkYW1bhU9M$<7%sgWHc5) zJl*w~`ItDG>ut%8$ zo8)~z_nGh&|=;XsOKZX(t>utX9)4O@GjKliR87{Ku*j7ygxym$XdE znGxq+VQ=j0FMxd(@7>b;@J7p|L8NnOPC_SRfQ8WArs35DN*d`VhaU_&?~N&B(*OAf zCMe0dpNc=m^dBfQjE!#OTP0BIHkEbG+lcU2RR_GYupLw0KL_6#-h^3OJ}%h$Ag<8L zHr~{fjCYhT7=R{~BPye(qjWLJFKmai-0Y?&fyoqnDLm=^zRScvSUE>dz^*w90r7Lpa{3d+Oi zpQW#kKkEa*qhW8u7ec9LobQPanI11z*M6Nc`Dy^I0!)%X3|%2)3l2o6L~1_#=n|Z3 z9d)@*ss>x;h2L5AcAU7r+L(9*|MV#3D=q4qL(m?dGsq-%i@z#kfp0ouni?E5vYjgj@MG*f`qcOVpvcsAaP(H6yZ5nr$EN7 zKZ{+HER}riLU7q^@05sG%5TQ{f4^yZaDT7w`le#h#C6}A3?jSITVrGpp+{2LEe7lq z*GD1~IdAz!=2ucKhd~YjsA3$^t%4STp-0YJe*N9Luu!6A^>44V6u5K<>GhHT?iNvp z8^M9uUh8G;S!b``gi&Bpg|nZ@Y-5}uy|IFB{t!cCE@(Rx7p>5ZEIF4N*dX`ef=6E( zHBzp!t8j6Qkz$Sg^AcL_CVS5;RPxC-8Nw)%`y;qUWUPLERt2w-AWIOtTwxX@l=zXc za;owJ40ZO93uT(0aCto*HHu4pNGc(hsqXD%nfAl-mnV=7l2bV!@;x)Jfn(&?tTm_P z&E}lhYDxDTYwBqs?|&;L)hY}1RF!LL4h-S#_}17v9gzzDa75v@n-~VHz9U` zxB5SjnB<+74EM9xR}R6Am;eqa1Ku^$9Tk=nt<6`g?CAYq`|lM3*u`Kg^k8CJiEiR2 zW=ZZ4swjl(&LQ7GU)Sw}F~qj#5im`JeGEp{ z!BZ7)DF1DFteUwH6+zr#Q8rPsZ8-@x}cCGQJ%%~?X%dkNfRc`?&; zK)}LP(~c<&XNJ=>_YaV=K7%HAhilJux!0ko7i`G?9vW=8)vG~d zKY}H+!R+Pi`*XcNY<|9b+7>KiI{y7~Ai3w8_vlsKw)l-JvcD#D`acl;6(p9H^#lJ7 z$AU}88a;lp(I^X?OZ6aib%#6`v)G*QATo?$Za{=Z6|a>!-5}Oqu?ooQjS|7jr{&j0 z`VajJNq-Q3Z(+$Yika$k3VVYFe8&;Z!M1Z<eizZ!0q#1C7 zIbRLxFMUj+8`1DKyr^+Ko}aV=f}k&qmM(NrX2C#-agu=2tj*pWMIYJc9K3(QJ+vEo zoQ_DAL5wo^6hdm`HWPXY&qQaEmSMxFi5DRPO3h;0U!I&z??PAl{}EzZ9+;gd18mKf zCU##1uMg7Hed)E)3K!dGvLC1s=ra(i`1T}Zg=MQWH8L+evW-&$&2ylN&cdcujETyz zF5P^Y55F$`Lsgh>FFZQYu|ji2dt23dZqlimF7`Ajmi8YZj`Y2LE4fI_s{yR=M9N&) z;_+jDQ>Et4Z;2ui3J=21vCvkbztfQk>JNqJcQsCn7sf65lgECOsfo|P)X3H z_t|`jlE;Nvd0r*l(haOB1?)!UIG2yG!!QRWLG)XtY?E#7OdOZT$5%4LSvIduWt>rd z@y4zvH+btqaJQ4*oxu3>UIq*hUVb)Q^UjAkj){E!%#F%Iq;`?P0zDDoom|H5`-1w3 z_1!Wu1E?+RABsao{rQi!dQzO7E!_XGsoM}s@p$Ng0@LzC+v}=&Hvv6&eda>}U{%-( zLwnTwr;qi|H{ZRSker!$daw`;lZH!sgqg}RhmHe*>4SU*>i>c8k;)^#BO^QAj;UoL z?Z5Afo;6h}h!;GU(5P&{+_uC+|-3z9{yw+?hU`P zFllK`mrOt1ZOdc?Gx+Q;=B$*ceEa_QnbsPrW(NPe!#7s7K^FosbT>iS40-OO0!r!P5k*7kpXMa~=dN7g}3-EV|gIV}e7+3fK7gtZ7EPpMv{r>LjnJKj1vKD083o zjg}mpc|#=1*H#@76t+z-77k;$)IY_Y90}n}Sb-iU*k%QvRmc#u}j|!E8v$^V>~G{Ih7wFh|M zsc5Td7DnncOs1=dkTHh;>6U-*8p%DLR*q$DB^#=S4`p#SX?Gt%3xc?CknQ`jnPl~? z78%NQ;g@8qHg)a;B>`@URkSl7I>4Y48Autml^ow`t|YTi$EYdu{CqrUB5V3NgDIIj z*yF8r^7i+19_yshl0ra_4mw(zU;clF;aHX>&l?3Iktk|KBV3QsS!kbSth8q`ruPl# z4m@l|j4Z1R{aZlN!-n+N;*6~3Ju6(yqK#l3{q=_Rl6AeaP3oDfjxg3S&yn3+&jj|6 zk!=bmn*%Ol=9Mlh^f0!90fxj*T8B%_;H*c|=2`x*ZbE9^Iy_TUD|tn=W$lx}8S(N_ zi)A%u=2Tcxz#Uw zN2@9PSJMJ^82`5eX3cc`M-HSncsTrl*CcA__L@$+v|nFHXFfN^(5$u}ss!ifl&V`T zezycb?>F;f{V=9TL?NWV7sY@F?)mMQ$QI_9 z(3fq=A>ummCIN#o)gs4FT)A zv-SoXPa@g4<|6HQJ_MKUkwH0T*`=(;Iu+b;@y0gF7aqO}|+AXc0hA1y&3j;>DW0(OLm8riET6z{3?>mvTi`UE72w4er@~V!q zFlkBb=OPW|yMeZ*NwB(!jNLZeeDQ3LkgDdAN?3?h;xp3|Pf4Q64)#r7+`=IHV-1uH zvhAh`dH=I4{*RWcYv9sy$)H8j&Zz~Y*5AA&?88(Qj^m@`*f?jr&q5|jRIl8}C{9f6 zCHmm$-eWr#p{@^UVKy@m%-9COd|yAjdMxqhlYMF ze+Ts(=XW=)Ea%#`e4kNn@|5;pFHZI%HM+g7dF~dRz_vSD#baTcECHTfsIv6*WN`^6 z7?YZj6y>Ok-WK_yj$M>)k}unwNF;PfKxX`zg0bro#;6r&E^<7vw~}rk_Z75>N(>Ct zyKp?9?oa*xrvu0@64!(T`;A!w9tjMx7Gv16N%^Ajh}=4up$eSdjkIOgss+{FH=DCOs1otBG%M(wBB z)qp8rBxqwBgTp{7DI*d;7snEh$oqatxjx-CWh`d!DtD_Qb~qwA1pV40&PKl@^{-nGB;OHe4e{Hk1HH zrJ?G5fEF%v*z4~HC>hX4hu4?0eHas4V(v6>N%m5)g3wm~!nd|)wyoE9SS`?1Vt)F_SU9BOd{!L2J z&c3+Mg_pUKmKepKgYttO99~3EV%l^~QvmjCE8?Y|dv`HBDu}85md;~;Ak|?HS z2i`xmwTMA?I&grE>vvrV8DN52W{MrqUl<7sbL@@F)#}p6jY=QByjA!ySx*OMg8s@e0rl0cHpPZxGe1;M5mQKh{!xB#zhL{jYE5iL_@ zC(xb!R@q>0EQao(L)seA^x>jl@Fgs2yS^nywYcW6nK@9{F9KTK7jD4cQ|2 z+FrDQD7%iT5Hm0FpTa*=GCL_ZWdD@!F1T?Di22ft+A7hQS1|s=(Omr4$?-SVHkd4= zVmWGuLXF)sQpnVTawPDoT2i!ny@Gt#H+}k>+L>cK$6}2$)*AzE^w@=(&Bl?a1 z1E+TD8r}uXu9CE{1osiLg6+=|q5^ov42a(2D3t!u&%i0Zm>VjD(|hVG`S2#cFNAPf zyifxfn#g}jVb+Az{S-|_pH%~U&F8y=iGlJP{E!m1)zro2ScjHrZ*D`#WM$WTDDdiWTWPzpkss|JtiZm%g)|vh0dvWr{Xi=&Y$okWPy>N~r z_ro{9f)W`wj(cftD%^G603+#$JhV7c;~ZslZrI23rxtBo&e9TLVs|MW`AjZws2o*k zR9A!r9OXNQ%t06dwB&EMP&)sm!KK9~t&e^x@%$8qC2heuj07?b`h^6bjh zFbR|ag|&mtlpE)jTcrc5kFkuH0wkt%!d^@;ObjUc$sS+k6290?{-bDMndwE?2baBO z+}*7vc}5UAb899te_c`5J-_Sy+fZ_~=-xnS_;+r({=oNO^m_i^Lde%J%d=0R?8xUR zY0iPOSVO@Lv(gs7;EWZ?G&-I%ns*)b{#tV)ZXZ6SA!(pjmU8~ zluUTK4cCh`X0#Q`y_w3|d)BT?6bTj9v#k$f@F^>~_@mtKfl>qeeZK)hyXAm^2a;QS zV1qJrvY=Vu(|;gWfv7Rj&%&lDEnofq;B9k%tJSMmkzm-lP@zUOoyTmKMTUx_IcG!p zkoswWX2m97l|1~S)H+57{I>N?{0>GM%?Lz>od}(K4*`RC)$w14SwqWj5B*d=797To zO2@!9odI_mhENg?iR~rsvaAdp$H>laKK@DlFeLJ2&r-By(Kwot!-mZP1QHZhIF^_5 zvzY(RKWAFR%@f@1QOuMBuQ84)X&)M;bjSd+d4k(#MBi_tmo>B61bQS)E2h2F4hfD` zYV2X2bWXkYamaQZ1!=OrD}YO4&^u@B^K^F~pS8~ybaQ`sZ@Afpej>7E9_J=4vMHBv zlYV!8puzu5C?Pc#UJjg zih(4KNe#Xt@yXEHPgIN&>-adn(wq9v^t7hKkgQKqn)%c>>*6pFW0BGd`;Yu{wDDC0 zC5-aZnyPN!(_Y+f9Ly|3K83q23mm-uRCjf<1A8H@V$a zyRTbgH@ft}Su|Lm;b0;KmZckkt&P~9%tHVgzzD$Oh+daAl&z(RNwT`6k<)5#dI%lO z7JMJyd-y(&b!*$V)`nBxe-L?gW*!c}Kg?6^6*qv44Y!C3wF;xP+A3ex zkkNR>V*?slSo+Hc=NmYz;ITB%`9}ZkIya)^-ssQYp(Sx0sYDf`&3uKi)lhAbX=h{$ zvIY?q=1`E-^BmdXev=TyXys>uo8y+b8P}s^_Dx~a7l&rbi1}y1`RiURCmnwi7={ah z7Z<|ssx!AO!eyvdXQifhdUT6p>m@W=w|W!5<0`h3lL_L8wJ4JvEEwntyRk#MmY{JT z^17rpb6ggex3*EPhofB&KRkN5a7rgFNIe9DBF%D^+B~?EIt||bjGV<NL%cw zh`+elR&mq1_w|rQ=%q|8wz(aWpTXK3-P<{`jefXMng*3XKow;y2&{(oZLE& z-xF#t0=CqGRfAr(N&B=!%<`G zp8A{u;^}PJe+0mgacFTQ|(VYASjv8E%@s?+lf)U&9%W>hbEtJE{oPq`1 zCG6N{lCV}fD`cS|&R~>&E{fvyFJ3Nn?>^4n*?XcalgzlHw76K80d6KS;Ml4Gau}vA zZaZ^q#|G&Axl0MTr78AcsQk@CXp7zA&dUjRspwSf4jHwh16}TkAiKpz zA;o^*{2bYwd%c(WX^hnc&W(i41f926AKlC-9l@&Oi7A))%3I(HN=RXqs4i*s0`BSlGMo@!{NG2111Hr=NI1xddojb9?pHm zn@$}k&ke3C5mQW^{v>EYv(vWwCc?cbK&S0Y{DjlZpJAU7(^5c^%;07^0;k!@$p4J> zVuH?O)J{LWzjk$0z;alL0)y|sGpj^v zP{^+Zre-WD$Mb&Tfc{rD>0nRe6FO6xQI;4NynljHi{EyK`;2xCNXm%5OS1cv((DM` zHAGT{$3W)6k@7@06S&-+Bg*nLFlJ0;`P|zJLgEuM>XaV^Z(iTkwpqQRgJ3OQ8p}6)ooPzA~LI^uzY48L6wkRg523h&%O|VE9Q<*h`SF@c|?09OZ z8BK6e1Wq9EKgk+8i`VZ>d^v8ZiTaWu9zl_jGfs%JxDDzq4gm8s7g#8L9FO>PsTs+^qQ`yn95xyBjvhOuI?9F((GqJyoZK`xix>g~B z&xt(wS`G>JUv|@x{+=!mnM<{jgVuBPo5XN|EP3$mN@qseY<$4Nf`euYAFYn=Vbu397 z5nM%lEecj^af}FE$TLwwZa34-&0Cqi6M0%Wmy2yKBNs52>g}}5fld0NfBGgr5DZMU zpJ<(t@;=(9Ez>rKyOe#U`Qu>N6UqI5+|BNkZw(~I2s>G9u)#Q&*M*N9GD`_M_{eDZ zJ4Rj31q1raOOyQz{bI1+W;7w2=1a7wzVlOuo4!1OvDD)v2Bl1wJR4bGosoLt3QP4M zfb9>1>}ELH#`$SqDT-qq1|=e9TG)jWI^NUvxx(4pnZs|Z510(2u;S7=SNlMuJ223G zT5fanW{k1vQx~`3Yf}sBGFB)*Sp_D+rP45yM5zDzB)6T#W_+|)PuWP4Y@IcUM64f%Zi*oPTMXZUPGFg z<2!4Z$#MHPW$cLSbJnpzl?m!J9ljN>4kz{owXv1Wb?t9!C4F>{3B_5&u=^(y?nf%t zr(ZZ&a;2-LL9ww1i6Gw7_?m>nAfILaY|E{UM+X?%`9|KWDu)x-v@zGzf$#5BWQMTB1!T=RX5;fikA<8bA087IhGKu~^7$8Z3wyJe zj2*?+#_`o}>hKBTC>J!#_w>#X7ymB)vfb}sxyp>^6%lvhsl+lCr{pG1ZrjHRN31sD zFT(!pO!+-6xfx=(8R;1y2=V6|hU*ttPN&b0e3^ zI^j*l8Gr2#{VKsmMv8&-e%gApdIycEkPsq@cEqrb2C(y0{A_omFd&GQCE#hJJ;8{Q zIJg_y1hJ-gGC$ql-8tvJUFNg;WOBl91pRPtaXqCF;7Q{m-<}k%tsPb{0_CZxDSB-t zAoTLt?oo0X({HNOst+NhzcKI9vaGy7SC~vItYEh__@t8_E{RY^GSAET6P!u4r*?*t zAw@W|*6UFAWVN>yBsCZABi0N%SMWC3?n)nJJ3(u&Qx@vG?f}lx&=y{?6WrtZnE%U| za03XqA>%tvO=HW;6@lfOdnGN($$4FQ;t$lSi&NmzXk#{GAo%Ejx3!+4e+8 z2_!7@yKd?fmiQTrCRoFpYl%=k+Z`JuD|cCK!t2~4QC@i$0fnR`H3H~jrJbj)pDsMY zx5GI@+E3)#PqQ|BsUH4GICGlLZK}(+3MN8v-hi$n-mI*$hR70nnUD8Ed zQan@9Gg%xt>1vXqn??KlhS9S}JRMAG67syaH#2zBr4^ zwXM$b%^scF5uy;}o?>Rl$~&3%FN|ExoP*z{TJLR!r$L{mFvNB~^X(gbdwpBlm0@I3 z{T2s%HB|z1pBv+|Q2#m4CJ$O2&|j22Ivd5>)X`*;!_G&xd3LNsY{mKct4rHB7T?Co zi!3pnVw;JJss^v3+7OlcGRy@lpFA&Z+_J>z^;IGMgw34lV}pxK|CN;82PX%sgyV~l z&pXN+B59Z8*BE`LgB!(C3dv0d8w@p2k+C(eXyt-%Z|-ODRGW)mU$UkRur*TSHV_4- z6jqU~y&s+9`{||t9W2w*a^e>-TQ+8y-(Dq`SBO~6SOEGa2e%|vUy9;|J-&F!m9>C0 zXaXoy^Qv||PX`;&+*NBPDo@fI*mL0fJIq7#`dRCL**=}{63i&v>2V%6@z(Feu`U;; ztzNTef&PKF-VK~ki03HaUUM=!4TS@_eg6CWeNg&3#>1MS(tl~U z)^FWsRAe{afa=}Yvss0jNuGt^F@0=Q%b8)@m6Rlr2_q`R`ANVEO3Pk_D9qIu!Mx^p ze^vNH@4{(e?u$^?&m#yIiwb&%RID-C?x4V>bpMSl=7>;sfg8Vs8jh~kHmolccFI08 zpyU{EI*{hMF^kp|7u6pU8J<$q@{B>-X_l?I@~F7g_B)CGz8RT{T!RYI&XWER0$Y>z z^eu6+YFwxor0ji?*w**h)Rc6+ka++SAoe;}oa>V$s*>>VNg1^nhaUrjnE2IZ8_Il3 zGneK(S|QF5WDUx^-nlMhZd#Fc{UYWC#TvYk1YZ?`)re-EHZS87ka(wjX_{xssZuY? zykrLx72##)uQhFSD+uJ}#Q$Mvj6jYKGQrDaxF^&;CJt6aH9`$*!?Rzuj^q&D}Iu#CNLV(pX(imSb*iX|Re2(Asi|K>;JBgS_BEeDMHOm#* zf=rbPWT_N=K+mXpwmd03S_bolS`J#~FkvSBy5jEf+iN%EQDP95JY(kVO=_EovO#$3 z$#R)A=@&TKDXFEQjpUa0t0U+x#sj=SVx7C}+`(x`$Sl>!kgs~MGFN40%GX_OFn=*| zDR67T*#Yo|2z?y*DWpDecQA|JsI>DiICYmI8^Rix~L|KcgZ}SbL=g zTK;0op&w)Z*&-C2EaSX*ny+LiRN=EWCS5Oq`EWFW_Co}10kM>IYR$VhSgYM+@Nr(eDQx&GQmP(!*iL2@f zxk-Y8ix~V$antyeM;BO0Xl^~E?B`+^wVIj@s%y=OJV#x8@u95gJaQsV&lWfFfv8*S zT#79ldM2I8UM{?sb|tTNGjm?Aykgk#Qb0R09SdgSxOn(co`!zLa@^VGw4&-5#ohFL zr$rW|%eX>8^Oz?O8i;dMZe%=SAY9lZZ$YXm+jXz&jr*>df4Dg54Fh0%AAs_jOw-A| zWYL49=Gl;MfDd$)+k_iXf)We@YaUTG%kGzGV-n2jLM$RD(G4LYP>5l3tEq zWFGB+wK)4I@#4`BeU`Mb{u9_6%cf*PI%$OECvz5*f{oB?_5Qrh~LaQ6(uKtludtP?W{40wu?RIsVh;kJTeKe_B|5?hs zXqsJ#%TNr5QFuF?Q*!32ChVD{<%(~+9nG}rascKt7H_`oGWtJ|Flf92Mx-f4y4}^* zS3rnYEH>uD6Wq?8UJl0c@}AbBK6=Dh-;#;r&Fad0CXNFv$y|gS z2|)ZQ?M66VZen7bdFLG$r@Xzr`Uq}nSIZgFmCq~z7v_yp+o#oxM#Ymh8tFvHM2&F- zpe0OPQD9-}3QKyYmN&Jd>>I@)n8!uj53gfbn5sTF=h9^zOAgoEgWqZ6X7u6OeOP_U z?n-kIUumDYXAv2QPj6JPgud4^6i?6jcH_xS*7ea66ZU2}M0q2SnQuY3vghS~gXGON z^hHfAOR@s{rwJ~O`atGF8JWt1cH!+8Pe+-#FbA?dnRLrajMLjgF?W6zd7GiZy3d-# z5_ndju{(?pkTT6H(7$2;Y-(((oQ^J{Ih4YPa^;_FKOzUS3toD(k4O>48h1&3iAFSA z`vbR9_D2bJfGN%PrCPrv8wfRvyF{tx#jZ~S+Eac9?dc19KQF@3%sW1`3nfvJIJjR_ zn)DbMGUb}I5fPX2y}`*3s1jb!X@00jr*tUrinIe~f`(nt$v(B6jw+Y;hzz%sF~y$r z%fz3l%E#p}Y1DSpam*Jly9Dy83o2hgQTqEm_voB^DmJL^ADDs3A24@rHAT?U{bMXk zOYT9_eKf>1d-dG#VOl$qSW31>9TZ?r^_)VHzmZ=1c7hmPKs%Q)58yAV*g&?IQ3+c|)UV~2^ z#UFq3!KL@t2m!`Cowq0zDK?!UNN5hQ*i;70C}z=+thbjUBL4S)(xD52lytW=NGXkklypfqNJ=9JNU0#*v2?@Ii*(o0&C;;&d*}TE^ViJt z%(?G#onv$3ECx;m+)KEiIKwgW@xj6-^bnB}lL8DqJ!E#AWf4}DAYVz+rk*1chSw#t zUsjlvUbIrqFd>R}Yj-t-Nl_tqg>+a1-}sdAteELRA+CfS^8@;699mAt9|@W!u2qA8 zHrEC8gl5SSCgDQF{0B@b<_lzk7!4>vd>_%AB5Wu$690z^?=&Ivy69;ap7`RYzs1iY zykjFB>UoPG*K%4BEJicfWO8JFX0scEK??7j0BE^B`ns1X(^WVa`}kO2s8zX)2DKEW zB}VwPP^wzDti1o?;}H>>uk@7ET~T57Y;yU!vUPH7?O=On)rJfuof^T2BHi(_%F^jo znLh6rjbc0_zI$kb&;6XV^iqMNF$&Sjka6$%=wRMo^L=2W5ka>bejKL-X3<)&zB93S za{jv8@ZoVjM`h^!3wLbTwh`%o6FdX9;|zkCofivd>d96=D-1=qj1WP628TD^+N}?^ zIWYDe{(RwCz9>Jj^ih?%?Yp_`ywn~uDIQw3TeiO4@bC57A2(IhvmN|zf1|7?o^T9} z;esd4E&?O&)&?8lBYJMgjc-J0wIaI=MGQ-BPUIGPwqC&&hd?Syfkvi9R8pepX8GMm zX18%s01gWgAGT3g2_JskVG4hrA3?9q0xj8pcmcf{N> zUuu^jP0?04G=5wyu2>^{PP*`Or^0fpTxg1t?H)J=Sf2 zLQ##>FR{>s6g|pAYC`Ih^64B_p-nxKjaTO9f+jUYhegMt0YC>|8G+HPxigq(jRv8ce3)6DMN28`sl+FPeW-N3w z?7NRnI?^UOA4#PNT=ddX=*(j!$8E)V(U}eu$D>#p7Tgsm4yE48Kg;kk;M{^hmCPckCr&Ukw4dQNmu+F(ZO2PcZ_nvC;Lzw99 zw7Wx@nos>_uFDFsMG-E}4P{6S&I=tL5+zYqdyrV_fVh5Yfc5R#?*Q^!5C3yk!GSsOxx1Vt6v&_yByQrie9*yMN)p9O;=i51 z{APpTQ^oTJ_Ryd*uNZ#SAgyXdN}%+>??`=bz3`MMJMC#p=xqJp3vXsHRovBopao6G zS#w=9jSr|ox1n`cHZ&a;w3{EIcnkIz4-&)X_*D3z<1+o~g}-0vb=_YfVnGI+G=_sQ zS;}=6tT(iCj7IoBnR`-nMW_+EcO{5if2$8rCLU=vnDl#Hh?cd>s&z(+QdK)h{(KPO zUgNkfM09pP+3%b*s>GGHOvooA7?2S|vi?fS1_pLAAW^(Nu1g2J@Q0TGtFCQjBi%xc z?{V>^tK``y^H|*T6yAi_t<0auOGJ0UzwSRg1jN@4HGIP-SmqHx!-+>^R#x)ipyLMu zV!Ca{&IxrVu`(7R?cE_mU;5AYRa&2%x?6JIPsoJd`%gKzk;?-b?#kUDhN#sLZvGez zX8gBww)<1DnW+4yGQB}E3064fXQtHR`+St{f~qOfd`)&-7g^<0Wcd}(fee$aC=wD#J#$?^V zDtJRpA&En9aIR9Nn+}X8lOhqfA`<-^O6M2M4l1p9wQcv~Q*Or1iNED)Ig?V7OvOzM zy$|GY^;bm2HTJ27ekK3XRBY+gKuV-~DLzR;UJl4!K-ir>@H>X}5Va^X(A-P$iJ}Gc zBL3$Hs1DyUIrq`kLBgJhiYcHh&fIk#Hk<9jO)vk|A~~UVKevefHXrX7g(aiYfC?)l z&Nh3e941&^SN==6$1Qc7$f%5SKm{*FjwHlqi|}!Ot8f3iI0$udEJL2Ow9+T!+(lH%ZQB*E5dk$f3(8-7<&f^#p}?U+G>S=arO^m{`br9T0~BDE%d3Vsh1lqnKMpk`nzt zP%Z&T=H9$jZa6$haZd6>IQ*)hG1;97*HYP4Klkd>>hY#>p9qlPf3;2*By~B!vJz)b zEp%)`ho5-%|Ip0q^Xy?T`QUyx>Jfu&fq`tB>XUX$axT!Hg^Y;sjz@}Jq$by&-`ci+ z2*c!*(#7?-V337D{Xoj({mugyZaKHCm2Ug*DUk@Rgrz{@3i zTf&sW`>cK!eI{lz=7ZQp7N~T%A}mTGDDC6F42vKWh6c_~k16_6$j);!&eSmwiP#HC zoZ~F~?A_1QmnE$6GP@OW<$Q9v7@${Oec;JoSuZAYeK3@QJhX-)sp)UWKnh9OiK?-B zYgBN1he(`yPYRl*U2l7kJ7?reEJ4aOTK!7Nj6Zf?v$8q*iCALyFkf+l^g>h`=oe<8_uT+2I z%B;RfmbTRK((({#*jd@iJ;S%H0I9X$>Y5F)M*Tcg4L#y)$!9sok|(_K zG3zbnMZ1se>(e(CUcX+%5L`iu>|mE8XR{1nrJgi!90O5Bu<+WM{@Pce*;OG%l2@e0OK{@moMf40{V0ME718Bo zMom90(=$rx^{`;-t3=|xT((y#}V%COd!m$5e97vuvhW^uDHI z3IjI7fTzR^Wm|JA_@G-*H+Jp+(cIT|6v3Q?4GYRgOfWb+sPZfw@WKQ*4NXWZ9@oYE zFAw2HlMY$}71qgH7j8%>HQZ=IYm@7CkTuTTfo7t>JY(Qr66oH$!k~zwUL_mpcP3l> zOd*dO&o*=p^r0;6V;6D$mDCD>%rO;HE_Dcky6m6uub zwm!g5!{j$@=E%FuqibzuIber`jK{OV#(e-YZo-L|I7BvXYaJjyb44Zkkbeh+ZLwza zg{H83$l~a-zep{V$t&zchunq0A#r{He-eeFIJ|b6e0miG7hWUg+?4N_#6%usN?g)e zG9{;A6$Sw4Dmvri--zk^s4hl|RnCaxt*n2BQD^j{AXX9Z1cSl-+^Nd|5k~(xmg{Sw0HM8xNAjQFdprS!;m0?@f^SfZN^cU1J1`!Nbp%{aC z<4s>#*~-axAOFHHsu12!c;5c6N**i@QhyCbE>ivZ4-~>_4saw<)hU$m7P~iPgO`Ay zsxli?LQx98O_hHvbvk*m?a3uQrg^jc=E~?Z(Z0hqHS&sR9^UoC`h3@}?LW}k@V&E0 zeOJ_R%AIm(X6DnLX(l|MnW#^Hq_cV;ho$pK`V6^3$QmeZZn~XW+XU1SA0joM@RT0h ze12{m<}KK+kLQ1R7%5iw>tAX0)hVsk`4>JTGF*dC2qe$#bUmbA#{jQc-BZ6=-E30_ zL2GBzId>6lz59}#jA%?GCN+|rQ5U@$0m%XmsRfVg+gsWPBbVx1FQnZM<@wmfv&wy} zz$Q5J7MsKtP#<0eJPTN8c0;6IKg}Ci=8eZ=aO3Qls~m0`}z5{9MY=(rD~UBcB# zOg#~rky1R5k-_#3ns|Hq9!o3@%Z?>YVZ(%gg2%RqqzCFDGX~a!9q06p(RawHA%*Pe z;8TyaL&IG98DrzKowSk_#CU66m@nb86r^JLSm;DLtDxs^q>$Ac~t8^P{C)A_Ch|CJH~o+T3*UsusgaPXTBDs`tJYGP_rw5itGb8>2X=-aJ5R_D!M80lQeTu=bqQ()O*Uq0w zgn?6ZBO02B2;IZX-^Q#j@Sof32uY5uPArtwZFqUm!d%`n+dAE|_Ks+%gP6SRgUsuc zNd{3qw77d+w5zZPJ3@Y_bcFmu{P;=k%wG$VL0Oj{5`Ma(zZopnCPVnFvOZ)O*Amy7 zhbd7M{EGychXN9PLQ!tu7F#+xd-|0;sdFN_7Z6kb%n*n9d{9vJKv99a0yqtgZW9z= zLrWh1tk%6NAL03qDI&q`lTXxTcFV0-X*<=%|ND;(+6a*e&)BEn?vBNev%g9L-kqb9 z{0I8O{tZ|Xd8%POrFlHz>25eV^hxoZwe(agUN#QlxGlUjtqb}m-N=w*D<+6)8HWnQ z)s!&H`&lc=0JGkzAP=)iA{50E!aacPF~h7^C?)zdK+Tm4A){LN($Wp&>cd(^{j!r2 zARZ#5u`lz;0(@tK*zC1L194|)W`?)b|AjYM{Re79yV{?hz`9baFtEE<4wq@vDzhV% ziN&Olx2L2k=PMlvTk}uIIG)Xvs5MpQw&H>W6up_w3P_BGHVS)MtuCX%+V65zo@K{5cXj7uD2fM6G}%hOnVOCKApd#G*~BWb;=@JP zcX3`w>ZRmUSZT9=m%Ke5{?QGjXj%(%R6-6E5Q>~)R$lq~PiWg&nq*pkP`WlRPDpFy1F1c;3BNohxyCAD|wI5U6F+eha}KT=p<#6A}v_hCuRyRKX8EOl9cT!)^) zj;q$A1=pT`Ruhhv5Of0^=09E1Ra9&)Eb;jYoX}I6s0XXIY`eXU%)UNxf6iKmHl_?7 zvN0#f(5qt6Lcs%k9#a*;0YPM~XGv!bc`lJ8ivOUvVi+KN zunY|@GKJ>-!@pi&{>fRuM8=qbZ&RQ={dTKmD=vQZZxRL0meWYCxz(Iz?BoghPVmsH1@)#I_ z3$SbUj3Mzg&1xGR=Zos|0io^086SYu1S*hkS>}!wiUWcki`LJdH^N`VYy_B$HZ7-` z5M}Bnx+OO~vRh$YK0Jusik)u2y7CBp`0nK28ym<^DvJ4jb#|GaE0&E9-A3$6M^iNT za#9i@&E373Pf%JPgwO?N*_bGrr;YF?B)+f3)D^P-kEf@j*SbVy`plNgc0Ttk$* zEPM}F%Y5UZ?)akA0%&?HY~GZ^WQhYs4~|Hctv(Sfd`%s8YBFl<{8K7X$#@Yt$CbG# z^Zea8U?eE>+^r@od;Q|7cyyAFzRhVT-`g7WAIKZpp#Dn!mA(mmJCOz(7}M-%#5Tph zMBC~xlMs!SiXk^I$G-2`iSakDnAEEFfW!w2)T{Hk{@}>jRl3^%)dM$^yZ*iookT9z zA}?7+e+fVR`90)_3+-~?f1uaeFJYb3R_B`By7mcLl@vk5N>;ggA#EAgLC;Oq^m5Gxfa9a4HG1eHr}cJI%zx^8>i7m=|W5Ps+9{&iX_$UST3Eh zPy4G*{2#09=jvHW4cCfOp3`kpS^=&`9L`Fz&y zWcwjneW`Oh4~Pk`hsanjypc7_3_g2*y2#MGq11hImYyc^G&TE)HwhcRx)JC2i5%^g z>%sE2XAS{B#w%XAH5?liu2ZmdUP(MlU%xpto2feLT&H!3FsoaOlwdx;BZXO#B!@WVh0 zB*N?ZZN!0=x4DKtkCHvJDOz8;#9X|GIFsX_$LXKf6z|i(kGLLuI7vg2=GRV^5sXbg z#5KTf)8{E7)MLRm*WO7+Lutt&mtEkh4u?ActPk5n5v9I6XUI99Q%ZDDFC#w@JHzB# zzLdn0!IAp@ULSlfJn8A6NquXper}V3);R6-rzN^%ko^FAH$i4S&MkIyBH--?Bl+5z zoe|fi{tqKdjMm84{LJDllv?g+$MbXDjAtr|@k8eh*UB|DGu#pY98XXuvqcKu=6{B! zJwfzq++ppBFaUcxh&sUgJZixB=cyDCF}tr&2#-(WuA8%~Se&ch^$CyE?<@g@X!b30 z(snbaTje-0`Kg#b|1)~!t-KJ@t@j*W zDK>$17J4S$*AjKq`yjWlU`qN!ieXwJW*F5RAI*+h0a$PU<(uuh)%%y3uJZmLt81r<0YW zZ8Q4_Gz~=D7dp2Php@-U&h>&8=+PrMKV?KCV<)P?rG|lu;O9; zLn6aCy>-JQSJ{`&9{d%73W`cdJ4-~7lU=9%dqRI2Ynf@v)YqPETrgbXMGpljbWEA&>`$r^31p!=x?Vq3gABD^W|BH z8~V~2S}u?48qO>)OYRKB4xx;>#()ek~)1W6U37yu?b6Ho&p`^1>?gBjErwQ{thSWPrsj{f1c_ z^j_|Exvl1NZA^u_Rq0*G)^ky*@Pw##8?3e=`hsfK)TX~+(jtgA9pk7@V7jPwK&`B0 zi0tkGhq#Vf)bvhM)E9%eXQ3)4j6V)h5^jKHGYXzYs`9LAm=KLh#2G**g?1@THU0x} z={A-~kV-0W#_;5gCT@d&?ae>czkPlu%(mQRi}kRY?WSk@cDrEW@yN-=+21k?6t=yU zC0Wc5xwMgHgEaN)J(%953&~KN?^wA3?!I(i?N0anEqAxLz@Rie5^6N>6MV01ceH%G zKX~N!`Oo59M_`Qc>M1V4$+1v^>~*59t5Vk?{^9CDZyxE_kjbJX`n5Kh1O6NTiD&hv z)bmFMA%$weK+LGoZ->F^p1^r#4x(#Kv!@2pY5XzXhlRzWn&YeM@;jD{J5>ZYe(MHu zr-g+i0Pq=!+c%8e!HeGd)0bOT)w8_5F5KAoyUygcO+%-Poqx=3S*r&4frvDNi7Nu@ z#Kp@Dj5=6eDoHlSF`RQGZ1)$?6dWP~{PnOg9;GoJzdLKLk`R72QnBaj@6?6H#Mpy_ zV8sfboA#`N!{?Jb?ei9DMV~0`SIIik3RSG2ZkV@m%_hHCvx%jX>ED5ZWl1X9``Cw4 zS#Lb1lgI7KwhBu3WSK(a&TtU>V-}yGGz~XV$CX!uI+Ir$3h9EPxLX8kkq)w!5ijp# zKViMl@CJ8DtAdmfSuC{Q*~>PR0&xG4=D%ep%f5ga71H+|gb9t%;S*V&YS)czGuDYD ze##YR90+0fnDr5;pW1Aj+Jwh8Fk++lXWPsQ6zf*@y_^JGq388hR<>0yTleM%{%l)9 zsa^IBXr9stJO8eHzR`v#cn}VtyM<>zeL>s(4^#&LkZ%&DG3(*6ei6;p%^h}#bPA`z zTI1n=*$f4i781{d-NkI@$YIP3s*SU#1L)T;k9b|Vbl-Y{i0jp8v8i*#KTyT-XQ%Iv zkgb(;T~d6Sd*w#`;ltDQ$ux+6nW~TU%E#ZZFt;?FT8T@8jF8>59j)jFh)N{7x z%YViP4#*E5qz7^s_f65E$c^|J5J<=uPCW+FZ}!pKTcpOc3?hoR%~am1=LNG zO0rjG+qCCcwgenw#kp!W7ym(eMIX(Fv?sd2W9vqEKIOF^VBdLM9m`Nk4MLK$g)onP z9UteJ+1I|SxXL~^>m*aO^prTEC(x+wu364&!&LNkqDC+@=t(B4bx`7$s+jVIi9H4G zfp6~~>!oeX=mQ9E;pK}f`#->HE!itZrf5hN@{nw-bxg%&9^cc6*s)uR2cM@Yv$~E@ z;jbv_^1|7~ml0|oWtGJn5tLZ$`JO#cT6#p<|Y#ue!gMO@)PPM!S zq~Yy=(A6q`7!j^VZo@t0S<$sO076ME1?Fw&M^)6%x*8VAc5GxenOg;pg@Fd?EG6{+ zs1?h)y@dN;uU3vY)sPWoIz-?xe0UsnV)^?PHe(K8ImQRaw#n( zj(3_R$mZ-0WcRQBD$nsLkGifZo$YpBg@Iq}q(Yi~yox)UGz4>}U&8x&93f|=!6ae@lSdR@$d|Eg6ZtKp#175{njxks9 zj`@dlgq110bMC~Em9Dbjt#!|;vH!~;rGXLn*R=-HTZVN3SBJ7|MSQtX=C7!}B%g62 zgxSo?JyV)lCr=LX5rdT~r>7C_fADml0hw_g*S7Pi4u{*p$8rgh@}Oa}hP>3jIVr}= zk1dNbxXj6Km{=cJ!;gq0*x0Q2JF2wj#)EawP6 zacj1d$Udw}svZq@<)?dCtTU}7wQcJbsoe!$>eN(KF0g?+_R6^XDhRCZG$pVRgd^DKK_ zQhZQ&*|7%;_^W{fQ=ispTeVAGLnliL+QX`%|NKlXKG%vD)*b)!2|+~eGxCGOJ7MeYnn3pQH`Eh+M8+=0SgPh4)Ah1VD-1vYqylkaeOSj#ejz zGg!I(S~HYW6)K~Qg&samgxQ&%7s*J3GCLRUf3+iFb|?&e^$EGVn~e08$Sq1}Z)XFa z1_PhgQBFm``}5JD*XI=3Q3{PMZ{7Eb>}1DBcT?PXes`AcTLQvzZCDwh$@L=iz5Q=A zWQdqKKA|MXP^Ya+!~}}tS zX;k$&eY_y{2|yHQZN9IEYirCR5ib#< zf>TT~6)ms0a@x;fqD6ny?9T;@sZu4-k~Hmcm21xx@smwB&>=v^iGKit3Fkx+T87{lIfv=j+71wrkN&yG%HZHrdv5@bBHw zA~{(o4AP0vomt2UCzlq+qFzcqG>kOtZ_$W|9+ze`8~E*z$yzUEoRN`2C~rres%bBn99dz`g0J`SD_v+ zr`^?M_+DUq#}AQ`6H7hKs!l)WP$G*j2!VAPRPiOI%0aG8juf67nbp-u4?mj{XN~=4v2&s3%<+{vrI%p?%re%d9VQ zKdUz3LxJlHU7WSh&dIWFJfXc4!X3xwC$8<%kDk!t$W|zy0mwS;1at{2e8#grZIQ;B zjKGzpm8D`vpa%s^{jL!Xmh6ileb-lf#aO5p(<`q&sMhKXB1F5|X^1FD=u%vNSvgr0 znhadc1fz|`dQ4V&@Q3-`UqG|YXx7fTforY_9#I`4YtudE0xIx}gaJ=u0A;0M*HX{NmB` z;cpEH8>(R*tevaDUP2x8G9wh^ujP5@pc-OTKft)fbvx=K)NFr_tN)d#M zxe_KRvZoQ0W}IoM&77DHbkbu6}y4h(U#Rz!ox?arbwkCBs1tF;?6+tIn&6^BU&JzD7>=57QHk{hT81N9tF4{j@ z!~9v7oS-{;`{&`Y4m6qRK_Hu;6{#r;9OLERQf}NL8b>fp>MR*UMNY5siPAfGSO-d^ zKfn392oHJL9!wPY_k_#0LY7w^Tc*Pcd$FjJ7I#VWeW;nisw{os(QwokxwrM%DcDCU ztVMKs=CKOT=4CaP;MhKAuADLv5jPe$ARIYfELS3F zvPr?ABncZpv%MyaZv))`kJnUtpqG3h#X*5 zL4i8OqzIkKl(IG3SLrw}^4 zcTvCR!;T^|f<|J-#bW3sGHk`dT5Oa?AEZ)oN$noSGt$F^It__nT z+af_M!L7T>8hEph(;nX4BDyDU-}FoIb#&Bc@#85P;0OuvMIa5p6QQW4s)Iv>(vjzb zXwU@B9Ev%QSfGSUP)IcWpeuS+@9Dxq!+82ia;Q>m1CAoQxR$w{Nc6Mp6>Iq+IQ zZgrYTa35J6y@mo-d9BY`(vaZww6!yheF<&9Jo*k{yISr%d!=jLh#rdgEgg>+IvTo~ z#fPB>9QSXgPbkeFUJrV9!NA}U=@;);_*Lm+Tr!SDyQy@jFczS@gYXxK}t z$<)OzI92FQn!hE*RAGFypGn?`B{fK62J~4fa2geURCy6&)x^w~?e3}qoLv(b&nK7M zdGT?mmwiyYO9J0M+cud=zX&^~3kr@Is@KYavsWHgkHLNa+=0^ZREGew$87T#KQp1I8Eo+9ncvLr@mK7_pM~ zOBeb0hx2J!>uNL^R(D~cD6z~x%I3hFck8~4vlZvDBii09IPjZFO zTIK1UiXBdeTP;lSTW`5sq}tC15#}tDAXMMaraeAPpZn<_&%J64%Z1nsj(AJ2Gy@X8 zuAAG63|$Gf3`zDLCH}!b-`7?Ds?@Q_3n5DLce;_fL>q70M^BbeOG|SVcf`}s6-N7X zL9d%Q?v|XprrOSxQePs>8OJwIMNJ=+S-z7X`%s+F_&?%Vybty1cH z_1l*+5_2L!m`W!8u}!sdv?C#p8zWw0LUv)C?m&FtR|{ZVOwnEo7fk@^&}}G7AgZ?C zMe-K*LG>pd3;MPafn8w);Dof?W>X>bu8oWH>en+)LvE=suM7lfXJ2;#Z%b0}C$k7f zQYmT_!`vm&H=X*$+`>)q3cXb`0o66@?~0{r&ty2ee}bio(9f^h(wBNgcJYk#Ml1tr z$36{b$~G&3S*P8`Uc@9njm8iBO9fi7iOUDyF2(U)!OT>@=>15df6_2$RJP0;oN3Lp zeg1H4h26Cgj+T0=iRVc_Tu^S+wd`*m$cDywg6|Qj9l1+)1ECk6+Ym-k=wExE!+MD* z41<=}aJJIn@2i!Mufm;@ci2HC{A`k4*eH^zPR-?&cdGG?W<9`$#9uHT@dj&8npgs( z^!9CkG;~p@?(-}(X;{jV%vI^HK65c7d<+x-ePDZ<07i@TYdwiXD23bu(Nn#JcLxK% zh!!c)s6$w)5ha6n-{ZbiRs3#%M(7#J@h2%#ZG~Xb`!c3G-1$y45XDHJsh%!oN>G;4 z#;f%#rXV!a713VRd3B>VVs61%Mc+>`&s`pGtf=39ll#_}{(_+XymBODsjUyqcW5ho zngOVRm31n1BY^XkZhx~f7k2cnAanBOtQm72lv{rZl|4Sz@Cs&Dp}w<%jT4Q)OxbDu zzb0BW{ub%sy^9g`SYv3@3kiY%zwic~R=#ao$tcfT-vR~h0*EHGz(+q_%6<2jq3N;MQDQ(0vCUgKRw|>LZ!z3GjS3P_zMKA{ z;&dfoIP-6`b>QgN0pO1B;7xqOxdI}Zzx7e(5x@EJ&*6H#_}^mH=us>=CMzpbh^P%r zT`!<~;^}kn=c+|k#M&{&hR^TYh+@%6>tt`anmg@r3&2=6@@8!6WS6zl;V|!(RsSgO zO~2V9+1uGRt>Q0%#7aThd`U2xFGkl=Ekt z$(oS72}6H3P+Eu%J4k4qmCWe6e6$R9Oy3>&95I}HFFD797b!H$3trQ`ME zFBF;W8BC@ltjE|%XAw2xN^2*N9})DvDG+rD0bOnaZ3{;O%1kRaUZ}O+yV-ynnvaoL zZ?1+AjfsAJwdxyqq8nOPAu2Fjez?XvkioP7Er(su5Pn`u+$Y{RCrQ|^!K>oUL`}+{ z$KMO&1VQGzqi|@uNhabuGq$p;Zdfg`G}-*D{|eO&y7{1q6Vq96az24lold|VWsvK5 zR9W>N+LLFz)Hk0WDRQmaEL#0BOksXuk{Cv6L(J^vsk^L2tPIOD2oL7LHU8(gvfN74 z`M74*VapA}rIxhVlFEC5aEfHX>@ivaZNw<`;lB^Al1hL!OE^(RSH_1!z-bU#EEE6T z;+JJZ4&wZBts`&n4K5N^Z&7SuEY;=|7Q?pRDdr%}pk>|J)+UGF$U(r}=y|!md#@W) zKeCO--v|yUdz=v4Ma3rPLrF%^50tI2=m$>cF7vTxk=rJUqf%PfpZMz<7+sQ$^w_;D znHr@WJpr8Sn=!N6QzT!vh~6%zbcMwj%UGX9WpZ^9`lDE4!2JZ4+4bfWwXjvvFGSbi zC9JyGgr|ce|jzoV)ygjMeb`hr7=GfNOV3Pb@#}-h^+v{yc(eIeT~b%KlJjKT4bi~ z=3w-5&cLpdKmw4y-s?9jEUIC-U-N?e^wRq4qnzqNHR$~Q9AEl9kV;-saDony;zgna z$y|e7KWBRF@-o}UkJPUL#C1MlvVe@F{kUzSUf4KQGzYe0+l zOetraoUf#bl&kH%&ZSHjRWMz<0&!C(_-c3AyFm7az5e)P4Abb@R!GG_`yK_3yf@pp zeQZPUZLObiJ@RJ0KiwGe{U;TeUs-?dzBAbJ!kV8z=b^mVN*8IHhyp)O!Hk^h<;bpE zL!tOQ1%Cb>i&Z_findx(zCXhEr0)?~@#%75eBONKKb%7t*q$j@o-Ds3&$mcCnLpE? zVrY1`-6U^oh>M66feYeFPBJp14*sA+!3nuno}8+Sf;}%HjH#G+z3H+*G_M*X1xU*p z6{(11rv%1U<*j9~g)tGoSc_35d3)(6T5`R+~WXRY<&J`%*?3FMN+cKPf|K1xE-@S zUr~r)=K*!)e^;IvlEZs~2>1sbAC zdbhgVjb?edFnh8-iXPN;2`E3K5Q(ZyXm1rR%Fu}bW%9!#kajz^nh>eqrlN9OHy42ihguAJE3>7t!~q$-vtxJIw??AMKS(w$zid*Bg(19 z8@k9X%kH)e62Ctm=lEw`+gjh0E)D~hm4eMOypdF*;~K#oh*Bm9AO1X_k@VO zuB<#U_&F+{4^nIZ>@Bg7LOH-_YXUs5Bg z!P!opRnhbu?51W$n=1r4`<80lCaBOQ;o%eVUrIFuMMvnx!K1t8+F& zl$xZ|xBh_tDeuFP0tip3)7q3ik*!cDQy`FW$V(Ny$To$$#=R+)X99#58f>(FcvJrp zDeH*;#v=i7_~Bz$;}A3cF>PH^pwF*WTlE;Spvie>75es0F;J?HcpOQDMNiEZNGwR| z>e>EZ`43r^2^my)aMr*4x-^E<1;SLxjR_zGR;3^QWItCQSsNbJCowB?+ZyoxYzWuV zVlTm;0=JC>OjmczU>*C*WHS|~7DZilybV`l7ngyO`DKBr!9<=Ha}XEWnrXBH4#lwz z$Gc4A8F~0rZiZwrS~83?BLLi)qy%y*DoGtP-?dvxMv#{UQMa;5UThLEGZPWW8-0i(lF_)f6*cDLKlHZg$Ld&7lv$H6$_wScpT&p2Nc zwZygHf<4)gxRTiRTVWO-Ee!YnK*RyM7H1b-SvQF&#YsFa!U5y`wj}&`Io$!WcGZq3xaZ2bhJELj>v97*dQVjvCit2SER2E1Em92<%OZtQIEbErOA#gQr z7ea!_#Yp#aMX)a!N0S6d{1QE(O$#(tU&L>fePTX8;O~E~yUW`~Qmkvk$iAM7c9^@S z{yrV&rLOtcbPU6g^{UH~7lDE}F6m5C&YB)q`M8aG=XV~OZ^lbOGKAQcFwOH~#A8ol z?cZytG=C>vZpHvW4(5rbb2wFy=ka>(!`{BL_Qhl8g`5yeU1N#nW2@Kpjq9pc^&)|k zl`KoRSf3Mu39Xkw2vN1GX@@)17KIU_nU~-(n=-BBVh=2$+gQTM4x9Y^w7}NjF`bL_ zl@!ggFU#VDY)xsEPKmkt+oB{_L;Hir2@TolRg%8}TE~4wF7)_bw~3UGPVBBdBkxD( zp$yrY+{?EVwXm0Hky=4FBFr@F6104)KmZ&Rw}PCCqxE;q75!m(OPaicg!zxSocuGw zK&8S@c79Hc*{Pat>_pi$%$DxC*%Mf{579fyR>7+bUd4AZ5*NC=zVdfeI8^i6Q6h)Q z+IIIn@4UXb5Z$XE$i^!w(Nm=!>os5_YO~+@JXodTc3s4IZidaml6)?Ds(nV3fAlV9 zzP5I25pAm#=2PX-PmW`dl?0-W*P@;n&tSd51aH^#2-)guYQjfi=~ASwH+@f3MBx>_ z9Sxh`G>Q64Zolb;G~_1Y&+$3ALvUfoIT?|#jbMw!-CV%Bdnt%EnN_sIf<)< z(tPDVP_(~pbD^yvA>J!@{gy`pkOJ4H?2j}cB&$(GvgTOB*U4$q05PyJzK-eY|7c&J z0gm`Wn&fN4$W1$0E}^aF^=2F^T?TyXg_xSw!g$U7H-IWEmF8GW2@bGXS2~bhg5PcS zNM*E@dUNoJbWat>;@IovTBn^?-Si!Qn*T~T?{CX3g_AB@f&3qyKA@=zwPl))E&rh- zogY`S$a`vVwDX4JZ>~;J;hH$_qWin)b__Q<)|fj}Grm~qMo9zYG0sa)O9o3~@?$y# zG-w(vr^KFbSvV`4QxT1hB=+JBeZZTus=i0wFYsvPn{;Bak!xM2bdg&6yok0b~`CLAU?qxtY2-I6L7P_}6)LBDgp1PqtgP_; z6PhdSKjPZOZ2#QBlpJ*}nq%mU@Z(pu^fIod!yM-DxO`bi8P_!|>tzF~rb74n55xqt zt1qG?o8Pv+&*Cde`B`i5^pRuIv0_eh>N&~$>BsiEdHl)1T=7Ex@T6)~Y5o~FNYZ{K zMSfkA77Je}oi+JLkqu;EQXIxZ(dhjDdF@3me;7M$G}a;{UQ3zwlxGM;m^@SA!o#d{Hr-y9H1p()~$o-do5k+qDCS5yaM!qu~ zaD@Z5W5fU=#tK)74#Zdj_t0fYpm-PEERUexdJ^52ApzW?jx^TGJZnB%wouiAbpBg5HMhHaYFdS}XzmTBj;2(HQB0s=Gs3Nt7_+aZ0eN$q_;=?DbQ#9=XZ_XzYpALHN zqt+)SG=;J)E}s(?6IbH;<$?U86eeYgBYJuaFTNJFU%mOovD5)_Z8r;oJ{IbLx*Nc=$pEX+dw6N&MrA{LruY`0q3N`x z0CU7~{(?TcG`ngnN#^u^YCY>b>lnFT zpqMTIf%Jz>_GL(=sp4V?1OI_PqWyEa!J1<&A>nA?Do{3bk&m;i*_{8CJ~;`~&nhlR zmwfma?J)+(t^N%w1PXNCXUw_(p%%rI^ClK~;j^!Nq&dFlDy5@8@!+ooUL?*J7t&bA zIchr2O5P->$q9R5qw^;mF2T5~rN)wHnbPM>hX64E3y2v9#c1OubZ2~(p~3yGBL$Fg zf}JzAzYvwe(h^40d$`0*Ewce?fU(28i*6llw&bUDZ5ZAb6bq6~h-lFAPvx|A!~fM- z^+~EJAIF(uanaBj@73&ZGMqIZaW_Z%D?sRs@heIx7$Hgaj@JQNL*nLRWy8&w@+?J> zsHnlym{Kn$aC}+4-f-BkXKY_^-_hW8}!FrxV(Gm+IvnBhB=zxQZPNU4` zCR6{j?bhV|e!Wx;1yEh>*KU#1*2&_7gEJ+3FU_{P6RocG$fH2O?hwtr=;^uzi*rXi zeR4BWxwfNc%GG&r>-9)YoT8g~$7b9Yu}zDgp}S1vTr@>pR;OZTUwe!nFpd{znfG3X z)MOQgQEdF(j+vQz84*5_FynBH=i-d)!Bwfl7BeR@^U$q8nDO}9gWe}CNF-iN=6q?j z>ZuW>>VEhGnQ#YGMe10MW5F$MFEhXeNcZG_K7L{DxS?|xrp7C}ay;&qRc>ht!#jix#*CHC6Cin=B|wuZa6bi z=0Gf*78SOe(76lhaywv^Xd@WUzM?=?&=d&pYtlckDmBF)8wBUW}J+GoRRvqUPW^uyGe zv;I^_?%LnTPD%p#W#LBEl>kIeh_H!Q%ejn7cW9441BSU?NpQ%tOQ?in7wF>wMSypy z(Xh|UgV9=6Jp&h4E-98<1fW`G$RqCA}08>AIr6 zAABc3d0Ps_PJ4Y_0_o~wQ!IOD9vKdan!g8rn3s^k)6zhO&Gelwvr@uL2 zDn(H#(Dw5GPpHw^I}y&K9G9&WFTBF%tlV6pz=;tyv8H>W%-=e=uuA3^$^VzUU#A1c zmNN92?(9PUWK760o3Rq#|I<+Yr4MtoaDFmYaMFHzyOT14c-O3bRdPMl=3C9etb;?o z^5)qvUPlbE(wx}i*X}G6PJTNI^B>+3U@7K8NY+QIS4xT%pM(BXu_C+y3RXTi@=8V3o{0T@lzA&VcAlqE2GRWdID5hdB{}|KP~w3xu^JA@ zN9%{&9bDS`fjeX2l1hu$QbB2F)Qw(+=3ZI41aqKp0+Fs7mN2*`$B`H8GwBrJaHlBp zMkUy9P>BQ@_-DqFjGC*(ft?2mXo)V%7_CL_n7`3Io^(ECIF=JI1TZFo_o^HJi0|cQ zaKkqb@O%itAa$aO*Iryni!Q#;Ij5awGKNTN*CC~8zW`#GAjINZa4Dipu& znn2sTd68ID8pxSA=WoHl%^e`Mk;%JW(I248!YC`1CQQF*fIzxmtCch25x)qpUI02~ zi*^dG^F{bFi*YN!F;jL zKkIhIwsyjJql3QbG%`#lz{hbu zGsJrVS8vOu7OBvWxv0+}1zVyVZ6q^S$DUAQJEl2?(y63B)g=wn;tN2YufG(xSF+YU zzU#ZikR!(B_~x1xh}wOB4TLE*;zgRt2KdxUd)!dV-$cH!l~*01NFt|z?XJEY1c_Af zP6`aA#27&T>&c}&Ey@#3-3;PvB=lK+1Qu#WhN6Zquu8zyPKc(UcYO2oPx$`uy7K-s zv}}%2fYWhe=uv_wIgubxwFnwc*&6m#`|h&^%vBS`lu8 z@rsIfF|Thv8&dBY-$re{g0UDhR~diD?u(tC|vltTA6qW||f9vXE>2MP&f|1~A zClVQ4$B8%AVs40nDW8@9fiqTAf?U@RlZPyv+UR;uDYb?QtO96vI zb|B&or9eyO`Iz`}ntVMw4wfyf;R67wl|SyzFv>uiOlPh)$p)n^`>X_iURf2J5I74bZ=H$Y#KM;~=>!A(OKEB|U|fw>i5dSC?f) zV*WfU7h7($dp$=6S?aA+zE);SU$JsXl@&a12nrT`o=9R$P<}*(DWl}5f648e%YcTo zl(ocm57cUFU<$h)S^}>=%0^+E!^xZE0H5r>_+DbQn!0%VW-O)M_aPo#l$%6eC?{sW zW@9{iu^2cp^h4Qrn=>E&Ac-91Ir_5v)dz|g&sN2gd_SyPJ%%3POd6j)&-g9o=`cP@ z($`qQgNk9w1SG`^7v*HG&GAYVc#}n*{~xxA6e&U~6XRj+a1<#Qw^kwyh1%?}B^gcx z<*UQxBW`mN$e{+xHNdb{A7QTf7Tt&0Aw|XHP z22LJaj=LkSiT@15e|+#wlX-)p9#%r^1e^sTI}uw#@5Q$!Ra@_9_YB zuSZ!4T5C@P-D+Vc629a5WJ8OM%MDk%2R=XI+x>IsXN!8i((*$gv&EZEC6Hvg%A$Z< z3=Q~H%3v?Y5!+DQfHHwBVtK#kuav}7l}cFi+-^Ty#7VSm*bqK4$vb{40*@uopjY-puM6=?=izH87@m)o@cGjJ z_#*YNHdhf&HnAD=S3nb+2!*``O>{X(>KPHq}0-?rD|J(yS>JUn6x^avo zE~LbA2P<07D?T`KbFD%Q)boTiLg2+a@1SIWUe~U09SE~?-cJ@3!CkEy@jjzu1>|p% z-a*~;4OD)|D}ETVv%B}7yu5ct?*KR3n9;xn6j25@jNmPTz?9teT#IGDJvhRE9R%}2 zLQ$=3T*DnRd4n^_Ra#*Of(V7PAa+YKb6Oc>V&tA}%Pja;`T(`q1YbQRq8RYro`~{gitb8vNAummUmbB5{w8*l;N)~sAMFS{EwBEnV<8!9B~bVM8t|t# z{$3~*bnQkp6(k_;lGuU)v+RfbJ@h+uJ=QJRLqa3o5#U0_+W+&Keze|5iz%!xZ%2-~ z5=ylu0;PVOTW=06EZ$FPUcOh|jOB@JomjlK!M!j+d1TX5S@hY$rR1H*<6_(BS-#vJy!&h)?xU*(dMGZG_uA{ zBenG+k)6uZ4b|o^+6(b87>(--qSQ&th=E{JLU57y3sa`Sg1Ai)p65D}yUU-kHGGx( z{5YyYN)sq6?if8rd&Cc54Ir3};XRxdvK6SK6fbjj31L=q8RXFF_fXl%IdtP-;}a0_ zUce0FG8^S_ZyXJYuD@5k>j%2B`5f2}B-NYT+tuWu zGsZG8cbblQ^*P1?sdx7MD~Qo z`*co}4rYcjpP2UAFLnQJ@)3^*aLsi-K{KYRt|H#*#gRI;-H-kp(jcEwAQW*w)a@lU z;i19RtJoyeI?9k|9wID9f!VGm&W;tXP(x1pJ~?;QDThKhFI${}f$3sbo+a7Nq8*R< za06Qb6IU(TRJ^dZ3#wYPJ6H$Qfidxi^ z`1X)kH>2uJS7m4!Fw~?NifI@+C0n2H7#;%Icdvw93%@UH0SxcCAss+XdO%Hq(H@z22}67Hd4&pWAxlc2eFj}ogw zC)V+wZa9RwM|FJ;Rw@pvzFo{8!Y-LmBvl17*3VQVg^ECXjJiJ1Lt)G`M^YRc0;wkc zF4_JCZ)*d#LOV1xj>WK|s@JN~&#n*G*6ZC5e-*tcgD2SZb2Tq`B`GS=AH#>>Rj8o9!|X)Fy-c5wMOiu-P!^3Op>^rC9+F6 zkvaDe5YNXaBQqIR8VrCteeZWY$6ZkZ;g&{Bja0Tp_ED?^>iiU)*RGL(YyvaNatnvtT7jJ2iys3-hx(4qr?bf)qt&Ca^V*>Px_pDl*4Q zp>ED7{-tx&I_#0_-US_roTTVupi_={Q)eW>s%3AjScRIskn|pOKKwf?d}Dc*A9yZD z{Z{ReRt4lkTftA}_+-<9Xg`Z5UuaeC6nQ=&#@4i~M@$o*JSezuU~psy!|l&R<+co8 z048^mD;U~@qh~!nm*s?NOYO_mH+NSWT;5pXWBiTQ-C_mqTj0)$Ft~TALH7Y2bjNod zGyA#Bc5!ldil0~RGZ~dYh?(YU3ji%q39Z9Kr_8UTIHC&@=txJ|*{qVE=8*lxeG2jd z4R8J*T4KqJ079EK7GKB^&SZ_pF(t0BGZC*Y?vq8@9?90X@wiv{B!^YJgRhc1_lZ)0 z@^5sSfpQNA>ULgC29*4f&6KymW6+o~R9!|16Sj4FYu_&14?WSAU9^!qIbC@9k7>zx z*vD<`x8L)<0xU@dD85XE+-?nU@O!oT@S6|nl1F2-7fKi5EK9PdxnulBl6*!~up>rJ z4r1vcMk_X4Whq5+Re;_*eRcH%J>wqYElU^(qOAtb0q>z&pD2ea?}kYCbNm5y@BLqhEQ2 zZ=@h#;&!s+xIm@a(H&R}JJX!C5uLu?mu*l^o{b!>mhp;&YwTB*K41Elzs|2ADTDgR z`-xY45|$U$nNa5h@TTTxnJ4Rez}{nZ!Po_&^z^L2j;EDiE1{U-k^##caq@e?s19wm zaX>)(E6q{zf!3NrQaINc;K|$@c>Txht(wxd=b*CZ%G@HA z7T)^zR>VI!+FCfoYa`5cRTV|~msjOR1(}){IQ=k^LSq*rbvNtvQxKHbIs?ep3EY{N zMpo4Z#8_|-;+k&FVqzPdC!g$BRJw*R^`fO-*=W^$Z+jI3F3Sy^`;2OjCRu4obmw3} z2HJ&(=R+X$9g zn`iumv~=vzQ1v!=Goyz;wyS<2k-6{pQRPH-iSqdy5u-(|E!-zl5t2UO8YwLu1KDP1 zY~Is*tP|zl>rjc)$6xLrT-{(cBtRhC7DZ5;lZ$3pINi9@51pZ#Jfb+Y(VpY&nr8p) z8;5s`wP@+_tN6S+&88hyTId5lR!NnbG{I0^EnNQO^C*I%)dQai~h+nw* z-Ceus;irs@arQfMeC%bnY~VAhj3iW9!T3xn%kA|KsHh%Rj#cIpwY(*r^DB4sJN`JS z57b9N15b933H!A;aY%CuTE)RMz2`9D+rZO~VUw_uVtNhXy!oGB35yN8mkEh;xK2dF zz#t+Iu3o8R_1YHCSzoJz%hDuT%^mJ^M?mwtVZi{DLAg%sSA$(keY#T(i}L}S2}OD+ zKafXpZdbBcbrU4=!}*sc+B)d!UuS*n#yQrMkq51UA)7uBCC>d5vb0R*;h1|e1gaY? zeD}sInC|pp+R)Jd8>BATj)%=8Y8d3YMcxOx07ZBrZhyqwJ=N|?fxq?1?3VTaeE4Wc zgT<1taysjCxerYtLBGiBNl?DBdMG@4WOpQR<#jJMS^Or!^9}o!q@;SW3(ZkfSRJf8 zmwNTNVZqi_$VBt-=Hs<*Qov!E7rn12abO}mS^qBlcBsj@Yg`lgm!y#E&6h+G0d{cY za`BD9wT>GyNmVLbyPU^S)lzkrN2~y=y%!6-tPT>8cyNq+vE=uL7Li+EiTp!X-X>s? zjg>r=ydXl$v7#t=p}in>m5*nvO7?ZI0>g#csq=aAmPLIjfdE)+Cxy+h!mDOYd{RE~ zw8*sAdU?9(@2dBt#bB6#l-Z9({~7h{-nAFacY0}K&uM=qx#3ty9sL!(O@y<@-D{zN z(FSbY6L{>uXY-xpPBw2dqDiej88U_+E!1FkxnHZS$XkEC6_eQqCvIn9SC{MeoWlI$4T)`ePDRc5_1B64!NlOVQ@EdavSLkKn6r5d zfs%?oLH(kY%)yqL@l!Jr)1B7BiPJx$XPt;|jn%1Py z=XRAA2yo+{Ur$NGdu&0RGB-W4#*aBZ+GIsBCzwMLcGc{h1cWj-xNB`T#`Cbzk<>cgt_2GH^k8s!+#lJ_Y zZ75|Y51J5p^oj0Ye|dA=j2i>n$Y)dTSEK36_=ECD+l8Nu^c|i7 z+u)~MT{S`=M(S>wDyV8Oh9o2Tgyb);x2CcF8Wu4xh3eGuhy5Cn5~`U{u4bO7V~cMH zwPYvq5bhDbC}?Q9quP>lBkLoDy|l?&Ei19`o)JG*-7{EIw~H1$JAyx)%aOgdU~&p? zH2`9VGIMH5S-Ok#A2?Fi?>8&U6uFufdQsc#KV;G-xb zz@2|Ps41sxjU&owNhFm+g$PeP(CTQQR~Rhz6+60_^<2S@f5S{fPXol8A+_pJc2>C> z8&h|5l{^N~yIgm=Nopvt%$%#O#ifge;hClempH?u%=Dt&UF+j@BgiOuUM?}k3`|P{ zw*-3riI5T+I4hCdzWC(LWnr@0Go5juNcj;;{a|Hu+i5n)umNh|Yop#N1 zBhGO5@!m08J6FkFJWQv}z?u&#t9W1}Yx@E6p{Sb&wGF3#f7I=JpwP-azDKU1sELOoTk1;-<|X_)Be4hG1}Zz|L`-j>hK5ZICW5P&wK$weJbMl zlZXP~GkA1joPa;c(0xexn@dn*LgQBC983M&UOyS83c9!jad$MySPFGP$idTL>|`r- zI5ufR^ns_j7ylY)DB+wWw330>*FT*{eJrc)X!u!zuI>*c-t(@H^<;dYj}A2j;I87X z)cY5sp3fB{2w;&@dYQRm{K18^pHhk-vi_**ivq{GABrxP;*%^T|1_gq=e2B1>rkGI zvp^GXLAVCWl4MI5h2d4EDWwawYoWJHj(n=W8a@X$m)@WFx$uGM0PjqfN=%F;_3@2i zfU!c{RKns`YVu4W$U&JQ)IWB{%aw2v96sQr(i9&Y^{&a0@#W9Oa6`sh-ky#d-cd!2)VS)vbGR<EphUbP6tBi*Z8~c;=k)ppmk|QMXQs1XD*SC*#2@mFd6!wwz zzpQ}9F%yfd$3Y1j6EU0#Dsg`}X*s0OkYemDh7aJpS;~vgJ5eG@%*e`(s(2h*d-j!g z?#HX&zE?MD)HoUY$S zOY;lO+4pQQgdAvdo9_7Sa8j)3C!{H2M@uV&i;7y7hJH6} zO}1isYfCB)fr;-jU1rdn?FzqpVUe-J)Vh101)7cXB~6BWqxp;LnWq+(AU41@@M1X! zkVD+x>1qiz#917}Jcu<#!WBok`hP0O>{{g=$PuNEe*2{Tea&bv5R*gqJ-EnDb8Az^r2Dspq~hc~b=&7z_9=R+e5!ljTlT%>s10ogt@Ic|);Fua$pT>~ z`kp+jc6Ql#DKih=A5FxsUC`%vjFJz~2cPreqhjFdU9agwE=bqI3El{Fg8H}!HwStzY?p3?UDRqRARyD=q4 zUQS{$r4`U02{n#wm2q8S#eraY=Ttg^3BbV?NP3?(6EA(nx^x1A0eL%HLHTp#IcAd| z*};L<*l8P2d|@^Rh)KdPAJ@W2xH$>#2GY?CzMCth+vv;o;j+bNtk)WYRzhrZP^hA0ndZ=EsTTuMg}20pgfu)Dic zf_#dcLp;a?lBnsaB~_oD#H*_TCJOwxH|YdY=_?2(9VQIf6l`g3ZWJ<%ItwTn-ciEf zYWL24Cna(%&=B{_<|Df}?e$fu=n90jV)I;21yVf{ayx|`>rS_u`ofMEMhpPgA;NfB zc8U2L@-*;Zl3i^$<(i9kyE?|8oUA`EanRu`rn2T__IeS4XV%S(<6FuTkLUjkv$o>D*nZTHj!X&ExlKD{>d>(8c%6TnEAAV~67P*yI7>bLgV?KC9R{|>dM+Db*oVj;Ey50AeZ0KLwT zbqGJ^NaS3p3t#kHIM4{#Ufsnx>*>KN51cktXTf=9uT`ElJR!fAW$B_qpHp@L*WtuC z;aU?p7^%Z(u<@0b?xLG^Tv|-ozFE}70@q&c)VsPFzsE}5j!MOX;Yq_}xjb^6Kf!>d zq7Q9Ik9R^}QxGiVFDClT7bgya6aC&D%m@Q!-G1MxwR?8|Fp3%TjA&u>{x|)jD;rS! zWqAC}q`i6UOaqpGP%ew#6w&LmTbFy2ji5K!=?WCPeb#}vBcWwz-MMEL8jT-hD9(P-;*&f-_zwH*qanA zkNnanNvbrcW^-rU9qQz!+_qa7d?xFU{0B+;%uL2sY@2EqK+NnM@P%C@rG_MI5i6Q0 zFHOUG1isCweH{zO(fki&5x4tf>KQ6lbVzAhb=cH*vg0Lx)lVkRH@4a}TL47wH1h_C}0v z&7MZokV}|XDKKP36T~z&u}!)Fr|GjUfriYd{@z{&_~2-{i@od8#ebWz1#-s zMHM`DEX9dqYEyay@E4wNM7_?{4OlLQSjHb+pcpRq^p5!|eQm+&|1@DP?aO1K0y4wkeqDn z%dUR*og>~(ox#$B1_{mWyi6_W|3g;NUt|lxRXPTn2GW(KeA8M*{7@;T#gdB5&4u4@ zhVhALFPoHm7=EFVT$at80My0sKBUyOV5?*jTyv{GoakcW6>#&$D?Kn~iFRzg zZ4Hba>R-NjH@S*!)!sLU*~738Pst4S_;``qKLYX9=FN9_?v6XE?wsiGUe#)8QPu(_%~sBrSGbw!kxg3~SmR1(?KC zE>{OP?^z9q26sI%YA`OYi|V-h*EBXUZoGSF_q~s0xj^V+C{3_Y%R}>pJ0ABce|VJ? z+nHJs`;}cM$qNP3Dy*bmoyQ;sy4yw#NB~>%TYqh!yEoTD+S4SCol?qz(YB2fBPV^P zSrj-&9lb^qTodLkNBFE)KoYVJ6O1PfO(Xhk`hJAz^!jy|uqE>G<3dB6(0RWiSx%sy z|7#*$VL{$h*f{WLymK#pt^3-D-RE4!CPi@SRLlLwbgWka6ZvA87TDkDR)x+Q20(?< zmWgbNYpzNl_33k&W4^JZAb7sjLb4p4lF!Extgl-j@Gg4ZG=tD1;RCKwQ#@0cEuf51 zl%6%$N((i|tYHp9{N?&vm)ZKA9j?;{h_&fJaolzhGfp{&(!%;gd)L}mi8Fa>Uq*ZJ z9{0=*lUJZ>)jJIyV)D7fNbwO^CSwVf4zC(dfG0N&q6Z}v$gCEQ_wfT}>ho?7nT~fl z)1P>)sCt{=Nk`&appK4?{grcQQP;AHk`LK-V2Gd`spt|Z3k_&{ZVITp>laNkr0lOytNJj#g3zmpjwrp0% zK}2?7f3iu;n3)DZ1g3=@wf}+iG3?w_?GN%iwbX5})LUX45Y02&`4~MJqyEBe-c;Bq z$)FIf&RqWXMV(zI*00CRhYxQYmn&ZQ5Y?5wz)XW{!l}q)3Dh`eOVqSaXF9Zd9 z-_iA)R=+)>4Oco?IA5UB?|~YsMW#3VlElVfTqHHXrK|o?X6xzq}%PKhTmV;4qaN z8eKZjG{{c*>~;K5CD(tT+98gPw{C^!--{4=*Z!;PSs>U^f86Wp`Z0jC_t+?Xzd$ie zvXq!!fF07EgR0aDNKK>oCB7xdKn`ZODptPx!SH#|uuz9t>b^IOgPX?*w94-AvkF7} z-&)x?CcsIq@<>+cujA~YJ;XcGw@KIi+5lupt8lkjP9$~@bQ{CI5Snp`d#4T(0EZI` z`6S6*F8`Kd)E+8j@Yno_X>~^X=>i)Ezm#BlV;_t}yx-ySj0T0tOVQo`|Ij|@aajw2 zamN)pqcfWCU*B8T5!DK*Z0s#}#b+_!f4U_Gg5~jn9uViDlkSxITI>zU(Lx|$m>BK9 zflx7M&s(TvTXk%qtP^vD=n+Xm1JBFLI@_v3x5!)!<_-?}b<}j_JIm!-fe|YE*wI?-Ct)xN&&kG6p2wc`6RmN{O}(u97wG8HLUg3+ zdl!8Vy=+HB-RnW5GB#6jF}8J=o_>fnKeeOru5E3(q|#5hK$xcIt*8F??!zzXt&L5D znK?Bn8le_fva8jYr_KGJ@5zeM(WlQ?8}6RB)(gwbJ!L0IM&<~MvpZgbX{&=$4W}!U zS(+WrMbj6D5W`HrXqe`1)Pbcx2Ref)3vIE%7voAh>+ayHa5oYXU)zm4CW=e5Tco5& z_LgKsGkX3ymm3`gq$?@=UhdRxa+ePN4(;B8xY6!xk8TW>{%Dl$ zsC!1F*swPbFP#6|GrXP}%&L$$U|oayMzvxw;_o5EfZnWFqg@T7?02Su!K3qy@G7@(~b&+f2)#VN+Xk$aJ18^seQ!~v~q}#;5U16lo{IR zX3rCMX#bMP>r}2-HM6G#+~xqr6=!30r+D3RDhOj&(BBtVb!NQ%o=W?yaQZN@AprZ# zI6iCeeA9Be9~aX`idpgC{m8k{re=m1L4g;>q^7ZrqPOGVbC;4W@7Y^|gu>sP(*aI; zLPviE5eIVAu5$&NfC%y*{Q1wW)-k#NK;*YxByNCEcF3b%*lp;X@PuMdi??~XFw4f{ z3q50raJu&YaW{LeIdXKHa*>{#awEvoINK~!sH^%*cIT=;son0T1a;f@eco*4t~a_E z@XP!TBRT!V8~0@{wjw z-P@-iKUu>_z6*r;Usv5F;_Tc)IZ-J&q=_>r|M5 z4EUisF3T3Qmm(SFPwxke3U*6nM}9Q5N5wmRvzr`+i2>g8kKv5Tzmp|~uTAbc%6mGA z?r<~*_D8Zd-*2p*CzLl3dCzx@h;0XS4vr|~)crp) z4}EWVicTLjoNJVQ@`2)wC$um?YoBy*V|j5%n6ArX0)xc|sGd5ilpl7f2qa0Ng{F5> z`lpSf9O*_%Yskp8dZwlLH)$$L^!ior_}t}Vn+{_}ZxR`Tv~WYZau(hif#M@Tkcf8% zZ5?eOc*96f#xw9J+yI9tSwjuoY**}7}K}mwCH`B)ZKcOt0RFEw}spP#x(<$sa zCu-98w|+NyLg7Qhz_vJWGQ^xGCS5s86+^oLU|Wd&)8owwP{gOwGp)y(P~o6?X+J-* zxulYLC?rbh!v*#PNUw?_uU!80F&TAoD|A*m9uCmVJ-gNmsb&5vcu;qSd&N)o(Wix|I z3OF9C8T3j)cs481BaVWe)3w!Q7xoUM;~W41X|%4$>4C*jY-JzzD62Lvu^5sHVDgM* zO97i7+W-x8=&$LN*G3Ye<6CXJ=nOCX#YyP#h69^G=o7|7wQ|{*tzPQ_NqhFH1b?VaY+h_6e%i&tT;MAo|;V1pUWoW!Dn9KAUQ3s03)z`2*ykzl!b| zc$?Xe>7uIk!+)Tbx&*=!Y|mtPpwC!()1R9~eA0b`oaE*5J}Kc*HrsxCT~5#8Nz(^T zOy}5mZX!3uq0no3MUrC8DILWfP1cZ!AA_XvlqjIMSL;XX9~>pUc*2DH&&8(8^rGZ> zvI>IK=3+yaDL*%o5<~Ma^(H&?#vCg(YI5rK!70A!y?SY7e)yvgms#{2R;S>t{`OMi z<3w|WgCKY9D7lv!OzfB|E>?{vX=t=<3zFloLcA09Vs(*TJ)*?Vb}KO64`S2Y=tvJS zdfogiJjqq>aP0xSt)omZ3QqI7Yi4-*cb&f)xM*Kv(x~4!=y-JrLZTQb{sZmj6FK^s zfUar+vg-(K0MHB(-K>dT1i0m!Z6Y2$?M<}5l;56y6?Dpuxf4UG9e(b>F&lYrA+PgY z;cOb=m^6aR>;{;>VGjUUp`=nuTYh)Y?92C7_8kDGfcC!}*JK;387Du!nH;@$;GHE1 z(m3>84d=4q5(9JmpxGN&tFXDzCKR+Ds1H+~Js$vBbFB@3c1ZXY&GXa?`YAAefok&~ z(IWa>c}|L=B0WQWo+V{|gD8Qno&02o;C@{IiK5!eAccSY57en-lM~_J4X)jnuTqA0 za!rRa_!AnR?$k^ZhCCl}9@gir7+}@u2QAXFSZZPa2FElcf*tAHBc!;Uw~RhelNlQK z<69>yfV5j+nmDn?W15Yw^1oFmRYE_~lN2d;T~;Y>Kw&(EcUsuwD%Lz;F)&U*_rJXAN=+x;i!1k+7bI7|u$tm8UYHN#@8QJJddH@Q)*BR15*LHNq}zM+ z{@QNqde9Ivc+}agr&K43Fx0T~l^q!D4%Bz;qoElPj`0eBukEfkf=t?yfu;vMwFa9t zn;W*oSgtWm*~ZO{na9^FID5^pT=w@Av8uw_YE#2FIUyQ8vv80#O1I_rs>^nUsE*p2 zux8}Gqkb(+g2OKk`I;oFwC`1@gsq-R>V$%P5C2&$%>klhPls#3O*M2Yz8QP7WX)nz zwtgT*-OaTFeAmv9XAG+4MGV#f!_Qpugh#-99Q76(VJn7Uk+^oQCc|vgX}J)sB1_W! z2ytl3?cHVr$=Bwd4J~%D-bA+?;N?C({)ygI+fUrJUjSGS*IXjRpEW5u_RK;38ocAZ z&9cUw3BDQifk%D4|AJm>^XhwzCnSj9$Zhch4;>{&-{OG~LL+;_?rg!sj#+eL&-Agh z+I-)O_j^l{sVq;M_X1GvI;bwn1#~_X`X-g$7!-wk_)=u7SVG?tGf8WaEh|Vf@dT$b zQMCO8ColG*tpnVz37KDTwDzQ@^i`sJZPQ*G*JHR%1tK=Q7$u@Gau1JzD@k~AGB3MOHKOuZ1gAg!M4-3yg)}g!E|aAeKg+R5T}{f zwJW?mVv4=6ZaSCwxOok-&yXC9hZ%XBceC##6)3^MR4A#BGIPeJN3pl=_mrKnh_f7@rWey1YPOCu^FqYq0 zK6dox$nmR2ow3L7x>S#ynE?2{E6QeB|0TTvvwz-I*>-0d$D$tb6uZm!7{(yoSUi<> zgfHt9Lv9|QtQIF0-w0=AWuc(VMnhyo=vClci*@qbH;?WDR3v-4)EGoEZ&`&XAWWH) z<`RK(C2Wl;Do5#BAgg4uyUxd143~(R01{R`mm|W((w$#Vy_UEKeIu4wVCpt|>oN^D z)(H*-cw)?bqnHvqW$Qn0WV97)sH|EpAQv=y7x|dN-Ylv`BS&tOfD-6G5OLa87nuwb z8oKH81#K|M=A8ZX8|6UDV6lzu{cvP73q@qs<Jl^swsRG^0<`o#(RgEI16{1TM4Z>% z@Rx;7GiF5UXM%U|`>Vn~my%E3tJKcDC8}9Nz`feSh^Xy|euVAIu}kIpkE^=b8Okpg zMXfR>LGkvZ=cCIv=mt{u>?Md98O2RyunVKyH=F9N9>hLK3U)&0xnhu)r|x7PM;t$F{`8 zhdH-bBA+!jqRm5r{sSfor>)h5odRcAOLgd4)_nGF+H)SVR~5Y5yVCVAl8w0WE}w8V zBXYApc_K%WpC@UUbDb5)ym|g8*qrsL(R;XTggo2;{cInQIsvIdjwC-rqWNXvmA?^N z_V!K7Vmsf=LGGnqMQHzXT3-H4O{rRzOYzG>|9?75Ryu7bjOS-5s>t0!kfHCa86~2M zO_q~UNqShk^huM^Cb2e+W%3aMGRrM)(wHJQ5Jdb7;{DeCEJLXIA29=}*c_Bk=&i}v ze4JTECB;cAE-iNGscZYxy-m2nCL!N8w<825X`hT*4@l>5n~9J(6C2)FlGNTo!0Dfh zR*$E{wP7v!*s*4-h2J8PJ{+BzVucyQtz3T?5njXw@kD-QwVGGOg034RlL#P)Jo`yv z8-h)?PJ<)>o$I1sZAb!>@Fw?4rx+=K28(C3~ zwmi4Zm1iK@W%|xN(C&TO*PBOjnMdO9b~SHO-bHTqvgxFU92@Bdbic;ru)=$W4@1)J zNG(LX;xp@rLjbdS(r;?5Rt7g(FnhJR`d~y{{%Qmmi-A<` zXis-}a~b*B(uRwOSs>w8mFGCf)Ivsyr=mn@B{d%8c`#qU<1X)(O4d4gbU?mAz-~vuv{lx-wmNb+$+g;hJwzm-#r+cq$YDZeVur z9LwDGD2;{W0--u0mPZyZjKeoNubkh*HPV+K(G ztF;9=YIj@Bl&$Z*@~JZn-T;NW*FNh#@oT%-UFO|Nq0NDU_{GUqBot; zC|5#(C}>FRAoU_2m$phXgKkqL96sKIq%+|}rW_6_ZM0^V0vi$8@7#NT2IbqnZif@X zVgMwopT#=ACs{Jy3fKK(%V%-YB^1@sq;6%O+>|L(`2WfD>ed%trook9DkcfJ#I3hi4H zLTB^$$&wfe2atW+Y9&8XOltE5jHNYTh|j?ww@M}G)_m6Z^P2s(`MY0!ra`w`(@lS< z{|X7(6$jAkl_s7YiC+<3zwAMSVDt4#MJ!pLe$ig_ zPqe0Z;SAmj2bWcTS}pP~lA#?v(vvk;Rn_{wGn32e)N2U2eeZ?Dw*=iY$F6);&&HN<(x(@{L#rr#k=KA!viK^Pe4=iJg`6L1;l-tDuGxS^Lu;)ofW(0HR`gf9 z?J|_*s{2aU9;ju$cF3_wo~iBv-jK7`&Gyg2@t=gJ$hlM(Nm~C5&x}@OUnw2j*}}Le zR&yQsJnizdXF@nGjr=8(ag8Mg(F*WF{!VQ~%}1=E${2Pm?aXa)(iFaF#uftBChusR za$J^P)YlQ$0sLd_mA^Fw_zX|e{wn8J84Ruo&fJr1(62wGH*&{maAk=#WM#$G!0)ES zDBb`H85-Ivp;sLpEa}E`$is&3PHH`Z|15U56q2GDJpY$RW__$e$RsJ zP4VJWgY$2$OYOZ8v;-vCgx?X~GaZ4t?Bgq*10aF0gKxCafL0w`Q!L$UwoRs(7~wysLd(%Q>0SuZH(W9swed$r1SP&-{!aMTcFmCeBX{`B ze01EU-J6eEpMqClp_xA=eb33o4YoCOi7*yQ^YN@Y(uyoNXurH@jX4-_G7YE&%`Zxe zGbW-8z34d$g$CFG*jI!f^tMeud*ikJI?IXbzDLL#&`UMQIL*7l=m(^a_`f}Eg^B)B zti5r5Xtj4#ZIV9{^TCslKo@ zpBWqmn@K?;kfHoNzKlI(RLjRd`7(M)DZ<^b`O}L7U|x-;SRD0AE_-MXO)y z^O6uENUe^Wv)k~ki~Ew6&l=0+oT&K@N`~%!wCx(t$yR9#v16QLsRxh^0Cf(Mg^iBo zWzNt>K2{j(+uE^pxlP51McAkisplQ?Kl=5*ncguIw&zR%gTUwYAXWwChL<{hj_N(; zT#^avlbnE3nnLWGKIl~#2#7z2 zwm9GppGx@yX0QJYcK@`^F zW4VJVAPz8p$*C^LOtfrE1JDj}*YvEwe1VO&)lg&v6@K2_QxX}&w1h7s=Jp=7o*r+R znb?9m_WY{Ma=Q(Xg21lUJ@(K8S|*bQD8roOu{r726=AnQF74%jUWc#gO_WD!p%nbg zx!`oC!o@}iW-Kxn*XckJ%6`)mT8-OC$=mhsQxPPkUE6`v-`bWpg5g$ZlQFTuJv#Bv zy-b$iN>zp#9|I?jXab~iMdwHkS7uvpsr9Ek(!5(YaW34Da#uZtPn&5@$uqt93;s1) zIHG~gy}=IMLXL}$de8#fvNj{P`8eY~y@&WzlEf|}Mj(dVOAatU!mhN|R&bf67-sB0 zz4+E!P3Abs!kiX9)B$ZIZ#hu%tPU~8as28V!XTAa7A1>gj#Lk=CQ=mvj?5g6aq_iU zLk-dL8=Ra1KJID&-q#4aoK*HQ!4qH(L@Fh5)M) zA}CM*01gHQ7Z?C=2TJgNkN*G|m*Bs{+5BF%%X@ugBtBKRJ6HG27n6c`>*{^Fk6pIB z)#tOe)UP5_CCn=>*z>e+0lJ>}BlDmQlwu+=6T2sz4w&w9Qrm`bLn-N=4{=e2Gf1K# z^D^L)Jr8Phk2$(jzzdI<5!A8398d+9ca;c!4tNXLRWP$i&mj4FV0wlAb!nKy`$*v6 z2I+zYK^RDtq>pgO+S%{^6aiKSx|U7IuZ*b~z+y*Uood^~wN(x<`BR_ZJ#n7+pj<@@ zlHj;*iPJ0UaB>YeJkv*p( zf(G7yELBUGXOYxKN(OSz`0<`NrCUaf3ut~)-02_JjZXSaGnhCHe^IpZ9h3ILAU#@-^vRx<7+vF)E+dYYWU z9BkM)R0BP@IqClZ>#C1+DmXJ7@IF)AdgiZ*Rb<^eZ6hjIupHw)@-yXE~mIuT(;0VJODmotDUi{UF+TC$1cu2tKA9(ZY z*Phe?30HN*FM+#o?nZk50EQ_{GD;Fw+C+dI%6J5N(yWoD;H`}31a-*%wU-P*1gsMd z{F9zAdBF7dpbJlXDP!{z`*xG`=dZOSS8>d)kfwJKNF90nJ5r#IK&7&9N)S&2{QA?N zTRVG}GLqg}ZUuNBF~HBTpb5e_V4&ojk?+q>!kj0PRwg~G3E+hsoPM=+)fAYx03ND2 z&wpyC4Vm4PB#=H*!<>6#j8F!JqBoWRU8kU23;=zqTUl-vUF7T?+ir7@)}XeWEKG|Q z4eS3LCfTUpL$@nnOtCTOqy9D0&p{opUQwf z5B;RS;H1B^$L!7H$i5l)iJMi{8A+BX8y-;`dhy9Sfdf4&*?(u>+RNaN?JH#k*Mx3f z+WKHOTFrpNl5n785;`0nzpv(p{1sRBA=3UR_;P=ZULA>I)hytd+Ep8yECFr~cQIUr zBop$g_FR84{{RF&H2i1%o_u3(uIe(}*$L#1{xuknVL0VLKXetxMa~F4GPO>f@2RID z{)V#Jt)ex)-N{ew1GeI%U=H>2AM8i_U|4?Dp9~?@@6}gVjy3akws+%=*gTGV z9CkS7zQXe4a#aRTH7v}F8`F2aL^Il%uWH&CgfyvjFBIOxVQ&cB@=n1OLG>r4ao!U6 zrSRXzvkPwtYgT%LzILn7yprnYRBt(2XFFFo3=<%5JxJ%T75xubLlKE$MLt}}t(@b7)6nEq0aE(&?6C;( zfxoc&x@b5XT(p4GTCW*)#c3Li@IC0wiuC;GD*oj$vozQqZ^;z z+G=Y*Hq4GmJVx8Ifs>9aQp;EhHlCOu`q%O~`#OH!{{R<00C@V+&&BtXT}KvUxwg3k zNT}EZeBU?B0MBkX!LR5t&;AM<`z_q~dJRrpOURaJmQfpy0dNUifKLSXS_IXPyCA)e z>2^eOj=a(pW^ob#PrqvUSKy!RPw-#j-O;u1zONHZS%SsRSPtVE2lKD1;ZHIwrvdsk z0usmOGAwDkVz)ou+g=0lYxaitC-5%8@4hDMaN9^hXyAzNnnDgSv|x23)A>~&+TY_f zx9s2WA6oc@pZG2B!G8?hv>qGqz5M9J12oEFQU^n|k$;#q$7tX1U9X3C5VSha zhAtxjjL8cr+6l)(4?cs8`q#r>vOoM1ALD=RHDP7(C*qCdo*nS?pEP^HGs>CZkC?Y} zj-2+d+W!C!{{X=tKVlyV!EE}jmi{2PMplwriDiXkDUZIWz%XNwcpO%ofPInhXW~t# z#!mq0-Z|3)BzLM^Re;GrLEK2=2RvsS5uS5h&ZiuDhLd}vTt}ZeCI=&&;NYL>M~A#O z;lBjfTljCmmeJT)+eIC`7PiUd!whkZ1Xbye{Y68tETNHOdF;XYf!lI(Ch=E{$<%Cx(`wfRvxar~P`6#g4cN%WvQ2yc6?n`E%3T zgWs=1S~eCEU)-&fV=f)AbHF^;;XnKlfA+?o;*Wu(_y^+4r;hs239SinnKrH&N7My4 zJT4l)e5~TxG~Z+DBbB%R0JNgBo3Rgb_^tl{g3bI}e~h2DeBKGtr8B{xAMEJ7lac1i zKw<~+70K&g*3ay3@Sni{00lp0?+5%n@b-@sR&r^uwEKob%doQ+&NI~GCj*>yuj3Cx z&|l(D{1rraSwDUDj}pqxTaa5LABQ5pyL7TTWsEvSxx{w1=!%1dT#iO6t!SW=vHYKZ z!C`-7+t1ne;*F2(7x3*`%TK$U{iMK3GG_n~4l-9GB>d z>RQPJrc^&Wvo=R%JpTYH{ziY`yO5cGYtIiu0W0U}d6?t66f0lXrk|@rsaV@<_N*Q| zv=14_-s2*_kdOE-&a)5vHLiypwi)5mC7MoqF;EBRNYo$rpz&tBwo|j+ zUP&TH6y`JK>{KXteX0Q=M{s#3XZ{GS`!?Eq9{rd<;XAy9rn%yYgs&qY&yW?^bX0D{N-chtTOe#iHkHM{K8yiD=hK!@*)va!JK4l&oM6;pkH{&RoelrigC zx9z#5zlPY`+c{|jO2nv%9GJ#VcWncLdk=d3eg6Q0^LQffSNLb)-xI}dT`X^c1{{;T zj=sS6^~HR#{{RFZ_$8%lzCG5yGT(=0(=A>*NW)_$Kal&LOCAC3U(g5bd+--a{iMDN z-*_8RK=%y+XhRHznC)Oka8;Ba#E$iw)u23E{s~Ru+b+TkmO`wRB>{hIWj+F#&~r=!Obz5Fr#q6sm$ zh8XFN_yA+L1aY3EE>9<~U@~+3yMDyqw2z2C zV1L?*9aF@1%`Ls0?`M4ub~8lH&N;!z>CXq#t$$@74?a13E%^E2xIAs};^*yF^W^Lf z9gz18+!2sAoCz9|SHkjSDHIRme)XeX4Bh@%+a%}}xt64FD@`$PD%=~va5KJBCNpawZ*-5KQY z57MGy$K=lo)9NWivA*zf4{vczZ;)@49i(svY5-&^>Nj;O-_oAW==--5)c$ntKrC`Y z^Yr$q+sgoe2_vx_^Glfl5~{`tleRIQ)WA39RUD1O=xVgLu}e9HK?QzX`_{Bzx0eP4TmZpdc(mDmOOnpq9WH>}XEleF9cC zZiF^)Gwt4}$v$UP1eHwZ-#x2FjYUs4eSJ+d!p+frj4y0OL#yp)6^IamdNz zu4?obIfrB97dZg)ntMrYDwe=0?0Gb}g@)Kp6ky;Ee>wn+W-Z%PufBWzDscnJ`^<%6 zJDg^!$>s9k@$1b!NgT@f4cV780Td=JUrxBw?&A_ee-VlE&<@A&uj70E3LpC`>z}iq z#>>4^M@E*y{pG%hs34;;1hS6mI9}Wi{A2qiwRN?eY(cg@gmL*-Bk>dASHr)J8Z5pX z@#Tu#Lm)d?@XE)bQ`CMPYNG5k&*$UzZT|p*;dpo9kHDY!K)x{O`kuM3X%RG9beeog zAfIZIqDFje40z5?IozkMek=Ir;y1=m+c)EMo+{O?=DhJwi7yh~!%vBsg}P@Eq7i_g z3}@dazo1VXf58j`yAMQ#J>S-`~fV2=fwJw ztN#d4ImB1q%&lnvl{OY9aQV!FcT1;gf#yH_AjFZb`eKFvTM#C?bS6F2s()jUxC5`PEJad5H~`&3rJE%%Nx zLleiaB>GqEuk3gK00d^V_;s#Y{6P5mez(%ww*LU^#3aY^^xcu3y|a(&`{6FNIE(j9 zBPaJmZrfRs-Zc5nPJL(sg|M=-vx`g8A{O@Xs8vK5RZ-9ZP%Lip7LTt?(y;?2bGx{! z1<_M-k|-N@B=Sg%D{^z|j2e7MH%PN|#~JQw0C)uEmPcK{sO|NjLvGqA(43Ol&*4$p zT(6pZ;C^9%bI?_3)T<2Th&Vptn!aI=dyE_&C<9_~7fCP|9Jj4!x=0hujH?ra_4-h; zo4b4xMmg#0S`fwLTL|Sn4hhG9K|mQzCg%`^Ann2SspbQ6#)BQty;x?50vCon4|7q* zrCdxv%Pt0eXacN)3CEV`TWR8?XvMVH0~O+5w2q_V?I+;Qv9EXt$ThoYw_2ns8JWBM zr#Y^J;EQRWj|VqNzAHeRwuT4U{C~?46vs31>2?tMmI>Aa#RnP`scPOs>%1y z*BuQ`CC|!oSdKjapaM7poRUs3aqaIGFX_tBIyxczsZRZY>;diA20{h^{(U0U8R<$wFx{jI~+DZ%>aDu z;9uD9_FwpWsU3I0z7e&zy$iHSCS_tl&T@DMJ-`+8WVbTyOK4PE#S-mEkSeN=zyNZHZ z0mcfrV56=&3IKGa$+tk?GLl`+a0jPeNu-Q~xA}o~GHeR1f`iu>;}pQk7irx2BnBL| ze-479GMHs~m9Po`!?|wU@jxE}{{X>9e`U=(_L%qsda*#WYdSGDpC7xrg#F&R0I&d&(*xGOtB57@<7j1x zriw)=Dv`#<9Gv@lSMkgL00lDrn*2fgH-6PA@h9Qze`C}2IsX8(qme-i6sH8PKmd0b z#sI1g(5=4mFf-#2<{C4U7G97xi5{+ zl306ord(d!%Mz^5hF&p_f}|!g%OuT{)ry~%ttH%JBoF~31Po;R&;+pFhKQ?f;WL7G zJa#n&ozqHQS+j%~&I@CXGuoeXcOAMa%1LZ)Dmf=7{P&`FM_(&wVJP3b?%_{L0M3!( zyKV8dLV?Q+5(lMNw6|+$itZx-k@EG&J?W8|3b`FYzy$jBt7Zit@A*bIZq5eN*EygH zjWfKMT&pjB{M34S!D2qslDOm?Wak9&jP?}hCW+%|?pzSh)P9)t81Kb+hsVE;-U$7k z{0n>IPZ{2<7Pe!|UCoA(`mAU>vk(WcGy(7j{1t2VxP#!g!=Lz89v+#S#2zC}iZ=|$ z2L+#joD z0NXeApo>+VBwOuzc8&-MW){&Y0To9aC_gtD@6^}z5Bn|t%>EPomHYyl9*W;;)bB#I z?dx*x-IaRbN7R$l&7F(pROKKH$G-Y)U)hdcwMf5J=SD}iCB#7CJt zqy%03FFxkF-y_eL&YOt;0D``J{iMDUx5wXxcfSpm?QGfJIij7jg_1Ls&N;?1F^T~C zW(`+Q)ooVp*~3E723FvQLNG9Xm6TB$GbjobvH&L;$Mvdy3DRuzuL})1QIFQncS=1r1F@@=EidQ%|1xBf2qj; zV;v4pIr{q4KyU;{mFm4n2b_I9XaWfpWmuh<0FB5euE?hswdgz(4OF=TpNAg;rK7KqZ^L4?#`x z=JR(*``SP;gMa{_21KCzs5wE%ZkVTH8))83YzEtsNc_JlZOg{kkw7j6K3_xLslsN3 z7jZieIqEs>@ARMxanCM1);Yk*P| zo<5Z`CBj6?$A0LGZXYk*;B@@x0tlmq<~@ZNs5u}UZYQpG0?AD=UZkc@b zKg3A&`cxKI2Hx2vlRHVt8OO`-^sQ;9WslCbI~7g?H{Kxqde8=a&7JCq>>GiQBO{&J z_X9Pfa~QOLv*d5&fO+aT9k})5991ibBumV*`Fl$|e?J)P2SLZRS-F|+oWUf7f_`UK z=W>kX6WH|NV~PNZHDucE0Z@b;qm2DWr6s6Hi|hb~I6zJq{{Wt~6UifOnX@9CjP%`} zr2Cv^tLg~_v{9wbLG!m0oQx63Iq$|O1Hx}VXw4r;{jN0M*@{~mmb=t+_P7^ov_g*> znG_Ck*;Qb~V+U^sB#)qsrp{9|n`Ur#f;qz;ql|Hr&rf>tH27KIeMiP|{6y5OVw+jh zqkC8{a{g+hfbLPwG4nS)dfocZV&? zLo%3k0~-Uh>{6|O00a>@cl%fV33vNQC&$m(!q354guC_63NW*BPcmD(4W68h zg?e=Ac*TBz{CfCF7sjuFo*?*Be&k20*gR0}!s1mbz>s=?%A|wuivCK!W50}A&+H@n zPQj=6t{J|~4d?b=r3{VbuvU}r5I$3Zf*SziJqh3|bbn&;`BK6phbe*-sXU5tQRTA9 zyCJwBbtB)n$7-*qO>L^j4~Vp76KVQ{QOyj?_exBl=C15zZN8hvZIR-KE6i?OxyE*P6--+)NaH0FAb=Yl{RIFv zJ8MG`ibuxcb~nOK7$s1r?aTw@+?%aCUf_!%Ur2ZFt2+VE{Zc4o=+kAD5Q=RsFucFZ^DfUkiTE+BMCBT!O!AlzCet z?~L#XIOt7y&%)pMCZENxin@sSgW{czf%Aw! z%uwf_#E*P?X1>1oEAV5$KL`9Az8vt}G5xGA*{8+=Y~moH>_-_Di+vZ`SteD+%nbKA>s6ykA-OJtaKISHARp^j=AI>i)USMu ze-1l+XaO44r5pU+=LH!Ycl;^~iyM1@klO&fKqZ+8`BMNlW1iJ&&gGYM)5Z*K(;VRX)k#b;&dlkwk}xyDY=0_@ zJn>}_LZ?>GucZK7LjqkDwO^NRc^ncw`c!LeBs-Z8oSZYLA9HuVdWPQW+ae(9INOcg z&w9F&HKalX-7;~@3LRU3`3?&4?Iy?XTPL7mxTlHFNw zrH?(k)rFpDZ38q*8tu;2CnO*9ngFK;_lZ@(-Uwrr#_V>hcMmngfLT!iI19%#Tb7am z<`!qpO;0>3i`4k9KkC{qB47QO0fp2{)BV4@Mn_L7HfEGP@t$ zF6BI&ue~A=rcL;EKQS4|>->cPS&jbBBD7K&(Fra(l^)*JO2+jzJ!j0SuOrLvXDT&zNzzV*{|Q z2#vXoBe;;XsLUAS9r(}VRo$diC{$l+t^f}DU4=b8w6pChNyeVinH56hjBMSG zeeg5D^dh|DRPfG|;_C?X?-N-;e`_19!ozVI$rzPB>+N898Q|l+b?-EbBC8+|)HXVv zGH4M|)TC_`jI9`BwSx13NiDlv&E`WXGRRefXYd*HtJ2!YIb=9I{Jj7po+{sBJ$HrUuU{GG?Q9r5_k1!ulT-4dfiumik~6anc~BGqlBks-2WmEQqFWSo)s&;-48pM2ZMfGxH9|r_=DD1d0h~C89f~3|l*~ zkMQD}(1>SoX8TNww6JUej;9^ZYMus;*3x~dOq;mD?NG-&b4Z9{8_rO%=LfePzNUZ> z!dZOFmUALuutrBbbMIAc(n8Uq6S> z)C|_TXtF}(cW(nZToJ%ISiKLAcFG^{=jbPg`C5bD5I*y?K0Q#!+y!QT76HW*ZlZETYx2*sX z!Y(A*`~+RZpYfH~8)w@f$##pOJSh+2g3VHmiJ=_Fvq=w*( z@WsCl*y}(D=JBs#K!H`%9QEVV6*O|(+p8>~g6vL5r(sfg@<{-^bP0997Pr2nfj?&rDUQ@h;Yg?%IBDarpJ-sYP(t21Lsg zh>lyXM`23P%Gfat*%-z+A5MCE&MK52G~~3B*42cK9Dz>kj{QF|Kopwg$kXl0eAqmFDgJa4&m@8KpS(Mf z_4KCd7Vyg6Vju+i4F3Q>L0Q7y)P-nb8(mNbWOHOdyTa z#NT+H{{X}I{*|GYdC#1npa6{Z$F6Fv$+u=x8>arMahwC+iU6k^fn@o+@uRXoRZO`PqS+*iYk}iX;?)+9nG8D4S#?@2U^gX#Av;ic_(^_OO zWkN>d$K+~wuM#0rwQ+#_eFx)Kp?9{9Rc9z=A1b={_A~)T z8)sHxq$zXDhcnzOS@GLfb|+6;fMw>MCn%-AV|8To5F{5tUF>3=l~koa78tQ8Xe)+#QzXsvN-T`9Nc`ioAUH*A4Dqp zn*6u@wm)G10E0iY_M1MTeQO4Z;+u3~2CrfAIaTLufj|y`)n^VnGYvapkx@I@3UZQQz=R?}HX!2ft^?H4R0IY91>9;t)WOQbm%1kcz4^8@;;neJV`I{>7-> zhHHS#tDJ$<4{$i-dRNK+0Jgt@{w(}O_z9_aZ{VfGqr^*nVRLF@ltnO(83}T(Nc*I# zaB?x8)%CTd&ZT+wsb?5h+w%Va7p8l5tAE+?G{0h&F)x$%6<2WY)Oz6alYnRgMp$F9MepWiRFnfrvqpmkFWKlHx|};ix@1~QJ#SNpX>c9xjW)u zgpuDTcOS1|=x6~}eL@$?%m8tpm*xX)I{9U~w?=RhKsPRX=dVxFsmpD3wHn(I#utIq z4t@Q5)Qy{FDRSg6kMAFtb>RLzr~?V45lAI=X;_{}>Y!q^po%%mOt?S^0grstMmS-f zSGI6T%Mv7m!<^A6k@LO=-0)*UR6W5zc=D+JGN0nrQaIHv*g!_g6hWwM*?1x)2y6 z4mddL^r=!Cm9Jdm+l;W}5#F>KMR-N}px~9tA4;ii$Owhkac0RKMh{a!7Gsf-RylwRzzyq<@u%Ef zPaMvGDxC7$a(VuB&feSVO>m~%>~WT6Jc0*8KD8p<-lX1Bg5;rPDUw$mev|>Sj~OO8 zvLsyO{{VP*tOQ$thDjAxHey+N;Cg~PR;8`7$bxuF92^!r)oa%fL5TiCw>cc~o|FLF zySZnN%#rqhHn8;z{cGo6gkK5#L*T!TUljf<>QW`t9yp%W?V(as$K3e3gito<3ws4Zi69Qsl0mA{D93F=h0bceo<)nuWLDtiamhS$S|uS8w09?Om(K2oIrN|m!EU!V zG0!SS&mRCc3&&Dw$eHf#66J!VN%J8CZ+s3v!mK1$O>vB<01?z+gX=;2Knm`d5#a_8 zZ(->`6|Nd(l}+O+^O2K`0o(EPs3K_`Fh&mU3kDeD>zIBY+9(^r;(cn_w)ZT<*p?5z>GsG8yvLyEh;T++bw-P?8sLmb@b8a6JYGuYPK! z&8!eau$TSmJI*>DdQ_nh7LMP5>SNo^27Nu~0TM+^etJxtCDiBT1D*%>j(D!w$H|DkQmkTS{_9W!JkKga6kwe9?Z;zPRXm{H zNfMPAI3RL+)uou9^%?nrS3h_iybOEN`BBerBvVEe8>jG`j(H-0DN6B93==3hOs;Xr zKD79}$alhty95OXuf7TBDm%+{HpSozh=PFKuumAxNjessiCb`W!ni$@b^Pc8yt|qY zw4eye;Q{CZx38r}@x^g!;$jL)a9B3drF+x-!~!(IGP4dd#(fXBrCFX!8+i)cDijNb zjB$(}zghsPs0&$Of+v&_5ZoD#b%aX6`l7uQgFL~Vb4xKod6_PA7tTU6H9QL6;Dy@2cZ6S zG8>Z2U02K??p8dnI2~|*`t?+zMFUKvZ7dj$j0a)pas2A^?-cTVrs$bV0IHnlu6XJ{ zmox!eFLul$cHFGHkvSZC4z=f=Iq-Im@drcHd?&3e-(l3P-rnjqJ6Vy3VmYr%#Fr7p z8qej;Zl#-Z6>fbqTz8H9TjBoz0r+E8@t=!kXms5Y&F?Negx@nq8svq}(YW*(A#>E@ zkO2Px0qFWyf_xpMcn3yyHaab$+1iH7Fhndzp!s(Z^!2TC8Z3`0k_jX4DFg%D9-pV{ zSl$QmcZYms;O!&g4u>lnJ#N-3yJUZsPcA?)o;v#Rk4%nhZt7ETuLMP(=Gu0g@%YdK z9&)bM1mTDbLwv_+>@l2r;8UcUc_CXHP#7xw#Gku^oO8*d+fKZ;lu2(Q`Gr7m!y^Ou zvVAJLJnL}FHpfNUS%JaJ4?)2C8UVH>JA9_YBjW@fPpIuwrn=uc%N$?^VvIoP>DRqp zFj-9qR|gOCFSzZWN~v>UXd+V^n3;|W_0Qw&KoeXf5uvsXhIl;|1N-d=kxFw2=Zsi;E?@-KS^8!YNPhI03KAzM8Vn7jtxH9hG0y!hS zQg{(F^9aaXjPr&Sb5B2LnpV0PK))yl1z7eT=9)-_p5QLf4+sW%JaSJtKUx6CiGxmJ zxyg}mNhjswqkoM>9rg5(OEhR1xAx~JrVVM_x0@t>Vyt_+5sp1S8fIB1#0tog0;HAW z1JkttWX1ifXDn8>sk;h4c+0>I$@+6z!g!VdE!^*ro_du7uRmIJaL$N`*9_|_VB`2e z?0=O*pq-hR7m#n>+^Hju53Xn}Y;t}p@a~1;tv2UG@g!3Hn)O~8kTC({ zVYGmI4}WUxd_ACOzYqKuVc;(cM9^7j(d@TI%asL-9FlX?pU%0@7kJj!z&;JtJYlaa z(%R`((p@xADwk!AOSav_4&BXB_-pYwJ}&$=(f%e_Tm6pDRkvwlw{jXq*yb~mI|dmX z41zKTN(em^$bmuLOE%>#j;r5_Z06!e32wV^2GDzob)DRBvok1TjlA{6Q<`&eF-he4 ziTMV20)s-+T(B%zG8kllG4oQxG?vf%nSm^MOkmk%JC z6eK7lmiF)OpGp9{hDl~=*>UCqidUxZT6M&>n~XEbh6ohkbD!^KpklV*O3K6q&c!*$ z)}n>&SsLO=aOCbGk3QI-1(!~RViUew8NxSkdU5=-OoCNQZ?mG6!wk6uV?MsMEyT?o zv6TwS>Q`uH>OFn^sTNC@ju`oE+<Jb~+r(`2`2*?9I)B$?h zNo?*Wi54>?ib*-+9Y38=xUji+1H{N>ZW>a=;~hx%t;20?V!_{Nc^7Fx)QoU`q}36* z!H9+1jCJ5=u0Q(J0hn!A%jVoZPu*g`{$91`UOD(-;17r~ohQW>jd!P@++tQStc;`{ zcH?**eKTIGH~Kg4Jl*@(J69y)ytm@N#qSOLEbtZAjx|p{MYl1;(S#mgSr`xFE1oiX zo+tym3CL%!)@k~}XtCy;Z_KN`i-+AUhz+g624 zOFFEkJ=tK61E%bBU>lKJ{&J*kv~J04mhN$Z$I^fxSmch|ecBL?NFjzX=mvWIb5#s? zR=|W|y+{C_I3HfL>8HLeC~jk5st6e%dI8fF95)dwBtVHb5P@)akErR20J$1K0fy!9 z7-#4HA>SwK?^KPXP)4YL;aiQWGXC5ey64k@TvN!+Hdhxl%^gKo=Pq z=|B>)S}cxZ^BI>4+qmHM9RC1ZRaUuWZz44+&5_puv)E&fGg8NEI;Ji&hsXzZTP^9= zraRVzb`c2K6rxNptGH*UQ;s=4!hk9XF0NFz3}+w`=jAx}>%~MSz>?kh30Run7^d7%juCYJN z2`tTp&t7{Eujf}@;iYFM3%me%AFsdD6zO9nen(IV1EDL9=Z^FNsL5=xtGN4%_kq9| z@5irBYK7O?r-WQH0~s73KR3FBhr96A1d13DG>^sFgstUIsX7W_pIn6S>8nrjjfV%#?Euc)czEa+NI3xJd6{0 z2W+2vKVRwEtl9+exp2sC;|z5$TrGXo=MxuIqRBK zXvy>6=Pm}-Zb&Qb(xR3dn4CD=6pSuLK+kV_dwhERyM#mUW9TEeQ0aDf0Z|g;{;%1BRvNm z{`DksMIjKhW6C9Rr_qlj;(#3#j~cTRxNujVqqb?XiJOHubJbhWj&V-4ia8=vE0U@T zFC6DQRZGW*&yL<6PIAY TjK^QQb#%w}VfN_(Me?w1V(ln9;`5%#n1`cQf-NaBy@=U}i2nziNYK|L+vi;W3%D^(?r(TCOBdW5p zxxmNbO4Pn(y~{L=HkmL;>%iy_)_^hZ?Y`X{*4HW~S+l$;zySXM^{dJB&xXDW@Q$v0 zL!;Qo4yPi#ZFweqz#lll-~o<1^c^eLP}_a2kh%G?8JE!ZuLsk9F8EW&-xD=2g}xQD znnR@9o12^2zDUrFakB)Gk^ngw&lPK6K7rBo2=2L#6-7)$ByL7my8BhrCfN6Xt42S6 zzB%eKTuNwnHu;j>m?lc9FDh5pKE3NA?p!Kd9ZkVrx+MmZq;-g{=C4ed_yYxH5b z6S-g0o}GVM*3#m(wYHj9IgotJM1Ds-}w^C#dpD0Gh;(yL* zOT_V)3?v-npKi1P2wfhBlY@{CrYHkmYmpbq8}jR1cZobHrFff4Z5zaqHN~v)y2%u7$+=|gO5o!Fj=ig@ zlGp6tzC5w{LG=Fs?5m9Uh2za5;opSyFCJ^LOEfxsEX^Dw2W)f$cLS5j?LZw4i==5D zAJc5~4-Y~uY&7^pFhYc}MFgJtJoojkjv3*8ZAZ$uUTe#K7I^;G;GF!XO?!r00-16ahSv0Ea<%zGopZ@?bW2BsZt^s3$lj zBpeRyz{u%RN~tVNh@h!Fmh1lj>h!2Qs8Uup1+oAqo(?*GGyzuPdG3){8_MLJzQ5M3 zMDSV}KGDMv82~+a{VJr_wvZPPtdF$dV~qYMns1pU#6EV+`Gf`Bc>~q+dRY;{zB>A7alNio(`Fd5@36eF)UPkTM=x724l1RZ2#9B|g z!Kkio9Bd9k<@nEE#MO(oo_6~@KPuxuwyiDppG61dKI zB;fbXYA7t)Fd>I=JF-SGo_@d1q-IGaD2ETYx1j4%#{|+ys8yIR-rLS70c3P8f-jMJ zhU<*=sWAd@erd8tOyPYGp*2lnDE@rNtO?Em@9B!RrG`A!+=rp`{C~oLDJA$~3m{}( z7z4=1aaTO&)CfrkD5EEw4n05m^;Ro1jBH5(V%f(`4}bD$&vR)Rdze9Nb;nLUeLo5S z}r~bN~!-*BK=CuWpWR0~5<(r~_AI#gbGX#!HqN#(jStwCLc9 z+D-DV7$23R;R*INjV`5XK1jnqISM#A_s{E5#Xg}fZPP5d++)sgf7vJWpbh4|F-@?T ze4+r@!;lY8UTUPejf$v=To+;n)Z}1&D?SY|JcavfGqyhOKnbgG!EbFZnHq%L2TwuY zGy$OyQd%juDahmxe2Q>8q6RauP__yAxX(GNu=%j^?UT7r2cKW9R+Uc+yBKC5^f*1} z0>P5)2zd_G3OMQ)6vCypq8uqw7q}z68@$Okwl}v2xoWcV8CiV6ji7}c0rsr`mK$jI z7~;m_04K0M)hC%43%L=B9IkqUo@xkWAeUZ5M2vLf@TjjMS$EAFC~c%#bLo_XS|b9L5<3rMludK>+M~& zw6a;NV0o{eM^X24ns#7$%Uo)9`m7f5?w%mQrDf;lK9$!rVIgllM(yRe=cw*IO>~be zo>!d~)%kZKpcyCFW4&Xgy!UdmGdw|t3p(WHi!eN!#u_e<;tSTc)~z7CL_iiBh{MDi zvoK+djF1oE-o1+U_DjY|zTg34i2>nMV;xRbu+I85!=}deTiapD_!uGl0104`0TkTdCbx45H(bM<#$RNa5UhY@wWB zx4&v+YOzd-5hR?RwOokNcwA?adXeu^1_PHYr9k9$6aiyuh{8gu6(zEy8MegWBJ>h1K2<(Y%LgQrxkpjc@SqHRU%}oR@hprr z%Q&?a7$i)A)NLS)XO239$3IHkywo4=#6rgi2%s+tJ9OZ5>;-(?`%nJS!}fgeR-JdE z*vF{f>l%XDs!1l)NSSiPW4YjS!0L0-zJ{Mm(`_APm7KJRn8r^70P~D~T_^(0wa1>p zm;(Hb$ABvH7m>!oUGacNJ%6QV#b&p~H*ZzW6*^?&`BmxShB&;7aM>6Pr>P^*{uBXE zWULQ3Q_cwhjQW8}%_Z84a4-QG3NSeJq8DjnA}_iC=jrvUqA1lvMsi5Tc+P&b0QofW z6`7NGF8fF$x36Qzt}2sXvP#xyjOvO*ZXt$Ge0J&o0P3hG%#V*VaL;`DP>?{bGP|?w zKo7K@;w%}tWpnM%uN8e|`%3~yz~`QFM^VjJVvIMc?b%SO7rJITV3lykd72E6L{v zE!!ke1&gwUS)z%PoMWLl_Q}Zl(^l1`G0Af_eo}yAx$BU9Dlu;?5E$Tmj1#nSHy)Yn zeSIp-NM=R3lW$^37~Fbit};)x09PJtk_ku*RE*<{`{Rmas?w-#!0sS*Ir?U%kg7J^ zX9ouuJu1bhfh5TXj-#Ib+)xHa^gOc|!l@+jliHSXJV}7Sk&OKZ)4fXe<|QnLB0a2g z&VSFPCQq?FioFita(L-iS{Wn^iagd_AD1JaS^y;t2m&$_XUfG}f_s5W49>-hzFTi@NcK3T zYfmkFi-4}G0}OS~d>W9!4ZKRRZu!1qLJ@#Jyl4R#;#nhq-cFrxfN5(flhn&&hgF3T}3`c)^B z%!|tP%~)U*bL&<12Kk420Ls?1tq;UnG}<4CA@glzO^&Cb2a5b3{kXs2m!1i~@J0Us z#V-SWqFcL2oC|hb>_R|NG0Dbpw*Uc-a5(++f+db$G1%j&9;dZCQ?Sx?{Vq)>R!8z~ zK2ie!Jv#R5Q5Mr3&*EG54E>-!B7V+a9__pts9gP;#_r=}k(0D5sU1nCdjsYKd4E^GGH~pc$A$ae=cE1hv>*k+Eg6U-z$mAB3 z6P)r_sbjzyW1dZKCZ<)BKHu>-?FIW-{{X>HJ~PAco5DAbZkN;LVu6Y!q#5Dc03LuH z-@;cs1B(8SJ_3HkniuTdr0J`9s!y%z7J2h7q-T#Z{H3|xSfL|;<+$|D2gzUXMZejO zFNMDaH9wBp{jp6`#8(Rivr0a1AwVRk&Hy|Nj-M&(U$PIUz3X{_Snvi*cNic2ddh7f za-;Hl{tE5!)qWlP1U>))K$>NorrhsIChzluNbgV`_^+8icUIqGI3BkhNx=eCOZZ6vH`bAUn zK^M$VIOVv&$q&fMhA9D+(`z%vOoAH4wp8U`xf{@Id~6h`5blL zLF?`-NJi+U?07HjmHz+)vG{56PfFB&Aox=I`#V>&fXgXAD##QbFunb74t;Zq{#g8d z;Lj3x8(W`7)U_Y9y1NA+u_p%rVY$yAkLO?2&-@hU_NbfSPs6zU5#g(ai&oVEX<2cQ zhxkZ2>N@)6O@B2Xv!}uz7=F}0v>uhKy>tEv zIr~#;TCAtw$BwQHQL8MLrbgOHQMV)>akYjx>OE_2PGxi^i{J2DzaBP&;13M^H7?-l zQ%5T%a=43jbI)I!iu@$~hdv+2@vru+@Xv!@HET&H-XkCt+PDEoKD>kVuj&{63S0Xt zAKDY)Y}(e37n!W-j`Bs+uwLPR&JKCbEBSQ&o&06vPuQFGg0b;8jg53Q&lZ^fq^+m0ecQKotHN?rcaAi3Jds1q^ zP>R|p%L$y42r284L(d?Z5ScqkQcig4hO$VAP4l}{{RO1{2z-+ z@DGYVXw6c{O1iYu+Ss``bwt_^9mY-p>4t7OujohOmx8oU9{4L&@MX%Zuxd80jEsFj z3_Ir_ob%5;YvYgjCa=T0pM>AA&w(^ZA=>vAV&YU`l}Q_@>~V}7^Ive=T_CxJSB-vG z83U#dTFz__;j>Nu0EEN-3E%s9+*#YRLuYBI$1T5^j$w8?a1K`+PTZabYx`{QuZ=Xn zAN(ti$DR~*k_}@_GRDYq6uw!$nBDAn!LR4{{tKo18{GJ}!-@MycuFaxywaa-Qc!-evZg8#G&(v1p{+9Ds6iLk7ls`&7?V znNL-7@cZ^whRa6(0D`RB-s+4L#o`%c`Hl%Yl#!pH75&Uz+Dmh)Oxrw^ah%9Dj+xKX z9r{=B)%#j_RxjDJ{t8U~BARmrw0g96rQ%*ny9Im#dB6Zy>G$pD{{RKH_;GRYKK}sW zpX}8xqTVLgRjsbIOMq6|*3r0UKyq`9!*5LEwoPj-kuyF7{{VuS{BfK1)BUrp{1M?v zzS*T|H%p{x_V69jPb(4TI8%%OGIP}M2ft(g00l7pm94*JOJ4$Nei{Ag(=F`bozN~k z^PbK0I`R} z`93lJ&HfYde9neeiJ+NKU@N9c<0t#yt$!oG@Kx^{ua3WOO-dC4SZuD6%af6@*-0Oo zkUz+;>C5&E{ggf@{>Zu(vEknq>#3`0hBGy+DhLY1WS&Xelh_WY(!Y<-kNTXy5r1pl zb5f1BJ=VIhsq4|e81?n*PAlFK{owx0numcrJNq*DQ&!cd8fKqqqOH}`^2SmiBFH2* zFnGrUp4iF7e;YsWQ*YZ&_x9)gqEUPsGk?N0rCdFpl9BYDT&Ubm0m|b!1GlKneG&fv z1rq(KymO?M_t^C_*6hGZBwU_$irxZnYWCTCV zDksSxFeHxPvHZX3AMjc)+OJ8schoeyT|(~z=ACw~ zf861J44V5J_IUlPKj5TawpO)iVd49IFT(mV+^XH*8$w8lSQgs2+)H4n8DIB+PuPrkkm@r)l8ZN0E+Cm`g5xhmLFCw1v`i8&t6H_MZ-)Yk~^G02m)i8%#~yq2P}U z-S}HUk52Io@So;mSWm*P(mSVwg}l>TLtI_@^| zWH#mO2_O)A5ymUl2#;ZGU<&Z>ivIu`JQMJW&rP`TIG7z?{yQ6U8j^hG&N_3BI{Vc` z4`Z4ioxHVf2RY}j<31@|6H&)@y>`20c$h&`<@bLaQ`u8#0mr%V1P*Cze7; zF}ECJkMoL%23IPfaIK8wpUX6p#FAmN#(4KW!|Om7k<@}?JHNt^NK1UAgV1|bIN{lu zBT}S}Lmu?;gl)_+LFcw80>qa90l56YfyaE*GS52zH;^}DucvB!ZiI%}@9WZ|RmoLw z6;$pAJqe%+s7g(jBj#_LC$GIs3WVJmI0SNkTA?Ick%{Oz0CB*n;gS}^G3Wc3?LZL- z-Q`Jq(!og}^v|_S;7(Z>5D!!DS1r;8hjuUtJ@ZfqQd$21ba}^G0A;uk4YB9v>(60Q zg>Bf4G8-eNIi}2w5c0QjdBODh)FqK{@)F8<9OEQV1!+!X5E3)oVyxUq%V@I|>4C>e z8tj-nQ;^RX95S2{k(^`Db;-xlY_bPqB9+S?2qJ(C z`E0?CcYMR^RPF;aZ&Q=d0aq1RN=oyApU#Gl%TpjZa(Yk&3tupT8*n3v)15`SCQjpw z<2=<*v`Vu1iSuK%Kx3Nc_tFiyI6v&r1)(aO$b`f?k~-p|3ks+|Gb!)iH1Tf8_&kAu z&w6x7@*??+6mDQoN&u+QmT}I|dK2qJn^F9h&eMQM>sAab$^@&9dLFbs5stymahd>z zW{x%T;0K;D>s1^m!zdxT4ti9Lv1UGJ1*#IUO1onxrWBs$fF7qXsdJ8c)wZ~WQ)%Ua z>s4bDx@?_rI-gQ#bwMxghDq%}7txTfoVg4S;Z>)Q$r&6L-JG5(Gz`(d&5U-anoE&@ z0V|GrVt^-R3KSLG$Gu8nZNxbTDOCLVQvyD7`c;NQjj*{c+;pG}tLP!Qnj>(dF%RAD z85_ts`f*YWFU|LN^{+4Z*{S%W!JiFve;0UM8@)qMgUpU4Lm|l^6SQ@}IX_No6ZUZN zH;Vjs@MlBu-^6q<>X&fLE>NM51WLgPOnjt))7(%8y3aIn+Zb{<9ebLr@dse42G9ma zLr^9*A~43~AP;)Jm@ttk+q8@xq>?BCv;OhW5y%7|txvmz5+1+B>FZ4B+lPKWhMefY z5)U20_w=9%A81|DC>ZbG>rAyE!TZ-Z;GFUnobiTH6o4C47aQ|{eqqBF^xM-t zvr6{Y6YVmv@``l>pU1zkpav|8?y^R}Fi=PxGoM9CpD?yD*wOYPB`L_r0~jFv ze;R0J^BP&WVaV)yV;+0RxoX#x=$$IK3KfzuR`T}62zSQDtp^*=#PlGUaLIoR#S z2Wp4=7R~NanVu35;He;tPz2V~%q0jjoa1O2ub%$^YaiL~ME#=v5$awUk}z*XWZAMV zB#v|=X4k>mH+_27zCq_g!qw(3V`H_~oDb>`t$au0e++zi)c*i%?+EMO68m!aKF8$L zc1w$Q4vaZX`Ft@_cs{fh7Jo87v8U}F<3HFV_L#cR{C2V(4oS_Hs|O=!R@$-*^PZ!T zjDSx{{?v5e5_osV{vFc%d*I39xzY7_{?%N^f=_?JMeqIsc#6cErxxsBR>G;}n(O7|%;11ZJZ6DONox!`eH!^(Z%py-^AIhT_u(ZsDen1Z=){A*; zZZ!FqN?$f98|9c0B1pf&*}&wEagHlCQGnixGx<m#VU+Q06FWo>M=kc3H)mR0D^&j&mRXRz0h?F^}N)r zdO>c%= zf5AJyXCEK7ZLX~~E0!UgmMBOh?f?#)^&=x4YuP>+e#UIN=6r8%!<>Khsan!jbPpiG0F_>OJvj8B3zA-|1QP&IbjKO4M_JdrKjG^c z^ncVD-Tu^~uLkKpy>Lb7XDcytk2Oj^$QJ-Xa}cSQ4x;!OcSqSdXA2wj?db z9P?ZU!p{%i{4w}l;m?ON%r0fnETXenhJSdls0zm?BRuE&S6tUqOCw0=dHxmWDo?z)+0u+{KsQfscBjZF>k;$T$S31#;hoI`(bx`B6o)jFMk& zKl=0lhDUH+`P+^={{Z#r%L*_pIRJoo>4JJ8XB=_|i2@J^IOO2fSM%drgu*Cz1eW>M(fbrfD6OMs}<4LieP2MYtY71+&i?I1~X=IK0bs zkwV}M_0DS2?wJ@U&&*eE0~H%FS7cH#u%mKMek zd1ot({Jlr`(z3SgiVHJz9{&K#@~YOJVkeaImR3CN90TZT`&`Eq9$*4SX4(&LZfF7+ zJhz3JfID)-9Gvv2aQII(hX*R7sBXrpN@h!v&mt=Q(5f-kp598pu&5afc|Az=pbOj8 z$+vOI9Z$>Gt!9#fbyV3Q=V>RE$FHqvNu&d01d`*+&N$#>ocq&S$0O}XK#jQ|4xf%V zpbADuNfBhsjD&{^$l85Am3im45P4e)hxvYUl1I0GDwf@<^27IEDhE0BA5JOdWqWm= z@Q02*03#X69OQG)wE#l9wl%bWI;c2L?`P2aRFX7T3fml*z`;E}ZonS2`)Q@OzgB=N zBFC@-dJlhm^Ht_U0=q_Xfs5`q9Y>&`2Had;FakFW531*<^5UwJ>>|05Pwz4_jBdGlzHOA%pgFSsu_Y>y~WD!P(Eh+@-9XK@y{dc(y^})vO*6r=WZBtlh3dJ z0IGmIuUz=+;Xeg@ZSem9!LJiRBH#F)BKFcogvauuFjnV}KymfJuc2p>-qD%kJBiwN zH)`;mbKxh0JW=sCNBFnmcxInh@amYXq!KbLTY*;KaQt)68T!|++{+!++e^xKY@s z06LC%0Cek~hZGGvGvm+rB%jCS_|^L_!QpLQ;LERgVa!E5z+`K3zy~8Fg$D{U2i~vK zW%BM5%!sfdiABdb0OyW}@W~bYo!d#{{{Z+V7wu&qiF8(#bR##HbrH)$HLQmvPa|*{ z%A6iXMhL}!RDJ{Te}z6V{5!GupWzwS>c;*tAlTrT*a5hFr>=9J{0xD`18b?hKgtYf zLwSGqiwiAGk)$MwfF z5^UWp7SNA0ZOIt)_c-L&i(LE}_-A$E`>z+zr$KvtFjB(reCr-MvZH*bIOqZXRr3%0 z6eGny6uuvR%o_gykG>h-%VVhNaV_i19&zNXiWm{@G5tEy{{X=`{{U+ZNA|S%9WRMI zT<{MO>4jsx5hz{xzzu*0B;=fYqnrVZPzTw%e}_C3Ya>K-n=5AAs;wLe5ZpVQ3h7$f z(J}U9Q?TwB8Qu9-b*oOkL{f~$E0%4;Awc?ZS0H(%Rx%BUyeR`{$G$qy27;jd#788> z9@DsEhUuJDGPf5D2na9+F~)K9q%ubof=Ht|Cjmobl^w{YEX_0~3w1jf?mdVE@&y1g zc%_grRtU$YJ$)(7Cz&C6Ncofo0C(^8H9YaON`Mf=XN+U@s;eZaD=abaxB#&k&ws4| zUV=uFJlm>}zb-m;slLj=x5(q^pIV2`vAiZon8sV?$mzvGV`+)`yr4gb44yq`4qqeZ zzuI5p{lDztr)a)2)b!@mZ8bekEiyooc}6rUNqlW$$Bga3>B$xJ<;ty`(!{Kr*M%T; z2b}uXjQmRYS>P{=x+ESM_=jMcm7R^qyM-N@Hcq1(w;=?K6O}v>*1b-7q;~V>CO|;R zKgxk5RkpUcolJ5Js}M)jRPsSGl@YE2x#Q{U?NX$#8tx-$IO*7W8i?ht{%0+d^6u@% zXc;hp%wRsoQVBax8LDstZwzG!JJgo+0RI45m&<}!^R<;5I3u<{r6f^-<;NRj_8oZj zpbLx@O0tD=$&Jm#FmU94NA26;tyA&*f6vPlz`}LuWY1 z^)v<1F#84!O&YNP5C@Onz6tDbiwy3dsU@%ml87Iw>yVkIPL9J(o}S5{IVm# zRXOTMb3hO~UC0_3R2E~$Jgz!{OLKT6w2BK*Wx>YP8N&~AOi`#=N4S9R2<3+e-L#QpEMmLaUgfkz^k* z&cWZGUuv+%;u*r*x6H(Rzy7)aNTZG!N>8{%1_O5o{{XL0U3rs2v%*gd3CZdYtz7c& zT1lmm<7_X?3CB6@*Yc{D61j!d$W&9f1s!wHP($4LyY{gCpr7_+_&XoPXmo?An66UU zplN)dizfk&0~S8qdgi{FwbhqWhQjLBGyanjN%P>~Fx)UlvF%=6%H%2M1n_;U(Ic16y^c6Z%7PaF01ZfK;`f;k^Ji1bN=i^ zIc)NAmB(z>G;=)HJ7NJ{eqE|CPqux!3TeMSa?Y$_W*{;iyN7xJzTQ~O<*~OViT?mT zwVMlETgcMLK~@JlKicSX?dw|Z(#i`6vd`BC2ZK=sOM=it`=F{u9A_i^C<4aS@)6+* zLh>=jf2ZeCz?Sz6Be*6uZ{7x6m4PbM~C;AHZ7&u)H|eXcGfWO$=9I|4The+lSE zpr@_%tQK>5kYj%&u>AV^Pz6+uDIdw1L*aS?Kse}lt1iVzOH8hFjDT_5imMMctt$<& zKN$Wt!NAAm&uXmcB#O|hCE)U2hCQJ&u4Yd}JvDmWwz_3xbhE6sdI;7<&A$j58q`*<}g zTXzz}9m*_T>@YJx8EYIW2J%-RV~@M- z$I_V|*vdJ4;!NSV=z3O_2z&eY0bo*VO^z; zMtQ-`IOr;8NiJ1kLNHr%V}&^Dn#`8#ZOMw{vo1H510eH?v}X_^`I$!`oxMI^f6jm? z$!B))tZ)FTj9V+n1ECdc+RbBe1ANW2vlF|HX=lFz-CTl+vn{uSyVKhyrF}zBFA~cc zDuX*oB;~p5KoyXAw?ZU4R3wZP91QdS0PCnCx4DrP=1?RA5y8O?@Ay=ZnI)9EN9BYp zdh#=xwLG45i*QcJlLff@$LZV9&;rhnJR1n5i1G;Hl>D3qPQ5wD(ycN)&r+MjYYh)hEs(lc?9FXZ+d*T zQj#W(g2-D9p85W?lB}Uv;5gl#%rk&!0G>z)hTWTJ0PbLZ@I8%D@|NC2G44c-fev{f zo|&t@QybQ}P&}_J0o$!bacHJQjiiyp-3IOm6al3iS5pDzV0^^81M-gl0Ig&j-A;IB zyp9!M2ky~Vf;x4p0xMYMEo_X%I-xk-{wA~TCyF*v5M@@+vFE?F0DR5j-;F*a&_8Pb z0EV9fV6wK7%f}Yiml}kUt9j8Ib(o-xhE-k777p;)9WX{u)i2Djt+Q;2hwl}?zB&5W zC#70xpW2q%-SjDQJ(+*APb_Nkz+5tu8DY71DIu|rz3Z#HxQ^;&GUhbnU}4m-<2W6C zC;_J;;DiN^2IlG)9e%YX<*Y(hxQ^jSY%pA40qRXHt<+H;iq&KsN$YKG#{$+XdT68Ueq zv|w|<_Nk}6GTAwZ0Odj8bHL~Dpb4ikTiX2UL&n)W@z1qp0@3+z<`f-HJN;<5H;-u? zOiQ$Up3GepF&v5 zn>28=c0irM0*_q!ilY=FGC;@$wkt6N?mx>k0Z2cWY|-$MvE#c8bmyq65=g9~KuKlb z79`|jlkJLpq)7yjTtShL5RM7QUwV8O_fp!GI8;-#DlT*EO#nwEYcyizS6yAo=x73DhBdfT zImeg)%M9fGdR1xu%@j=%$gQ=C5(!g^bk`<#A^3G62nV4(O+zDDsYb zQ~j2{EPP7%nW+3uwei%RWw(bsQ9hHU0}`kDEE~a6%06<-u$+=cbI^+VYwb}<&&=D@ zZvOygrLYibrd`elns*X@?s^`B)A6XHx7ib8s06q4pbPgf+CghIy|5dYrxgWA;XRVU`Q-_V0%>V>d4T6u``}JpL$`9E!;cgs;QGC^gm3{26Sd(-!pA1f<}H{ zQ<0q2NbIDsid#W8Vsbuw=U^vsj6pbtWo=hSr5a;xOC##M93Bl>%BjP|c3 z@mlHL9I-a?#7)43$bE$EMHznhq-SN7EL-nsio`1AHV_~CmU&Z%p8JpLcK zl%#DWQEn|0V*~wK5rv;rT+lIHa}p$7XHeXejxF$#p|0(uMl{K6oNQl+{WGz zNGxP6w=bMvEx!*q4f8@Y*Irj4OMiE${P9eZO|i(a{n&|L zeEU!Z<%y$VaTZFP=d$DR=CW=kyt$a$fx#OA8~_J?D*phT<|;7W#10QZhWF%iO}Mv7 z&e=v-DciS#x$XE+24Ep$Y1nU(KJXvJGglwwiLQc5jl?Bz>OB+EUk8cOK`W)1$EVmZ~Gmr@M?cWuxXx8azCs`pUYj!2U-A{?@TW%NpJGTN8D4?`s31~5Q4#MkC`HT z&Tud@)C!VWlG-CL%(*yL;E|5r^vh#yr%SREvPlL=QI$W3tpGyM{_#w^yva8O&qM4g zwx4S)p({J@ahweF?TWi4+yT{hHew}*%aC*5>rz1!a!E38%z*M(a!<7YRaxYY2HhYr z!heU14wyBJ*X?4{T-w6U%uaWYlrMVf?XLy8mUH{22PuJvByrEyv165HfZ4;lbc{!! z+QX^OY5>7+?F)TvZ!Q!>7%n`soUe2ESI^%DJ`n2P48AUWNBD`U-NikpjdeRqs|cg> zUT7_$X&u%=_`%Dn@t#zikVSn*3c6oK1WUP9fGykgtFl>Kt?Y>;h^kLaamdd-#|D5Z z!KvL{#kqzQjl?MLRwIpO+kw2V%n$Pvzi0BHcYv7&?Bs9&sAF0Dzc)Bi*ufYy0Tr<} z*B?JF${2&#cP6yqXIaF%RrtUiFb}t_WU|Dw{iP3>GR5+8e+tu=_n8O)Ec+FR}TNq^BBaOjv8WV%N{{XF1x=G|o9k~I< zR}vfyW35zmjxDVS1!5!?Ztv~wKoJ!TOGrzCySN+!Pl`CDkI8|=f!l6L>D=O-6osJ$ zSjJqC>Us`)QYx!5;{>MfFONaoPy^hFBW8tnkO~5OdXPI*O*#pDm{W279QI!R`Jg;Y zGRZdv6Z~U5p2HPoO0*4d7&qVBg<5UkHpv8Gv%j9C zclD?PKg!PEDIfw5Ah%zq^QgS5NbV#CLaPY@c*q&;lgav;0J|BHP%JJELaAo?vO8z% zO_AZZa%FZ5tIg z{{V}ADe!yT-A!i)g!Sn4q*PBg&z2pmpp(D^pvb}Y!LO&Hch)AJc<~UC%Q<|hCmngu zU(1@}d_m%G2>2T3Ou6`hsM={VYd2|QV6(6WTZSMijDyL@>%h+@y$13di3=>>dKEb5 z<=iL&tRe{2ObwLhZ&6Xa3mgbza~zrBbCn{b`$U#tJ<^v(LH?|I^T_Y@r+H%L80NE; ze5V8jamdGCtpGrZfFxligR8{J3Xr=^`*V z9Fng)?%)x-uU_NpKo?bE5$wGJX22>BCq4210M;g>ouPR$n~vSM$6!5i{uC^;aXdR@ z-f&9rI6nM-c&jS|yMWES9E@i;{JH*g0hxN2-)i4#$jVe;$N^#W>0DRD4+7hKNAQNL z;ay@@g4b5GlFj_J&Jsb6qp!H{U5(rtlmp7OPc(JO;E(g|Sw1cCC7*))A*%Sp#nT9E zbh~M;<|w<^#|q@(KqUShC<8yjJ`U2nCE@Kq!Wu%GdmS3iI~z#V%ao2F0_B)xvI#74 z)bY?)U~Q5G{m;mN?yi5qJ}S{XW8p17#@-%tb7!kq!+8NCYXoKFA8>uY#=3}Z7I0;m zO01|hqmHWHp1r67i`%{2z@b8*VCRs1J+oBpZHzY3O*)X}xC}jhykfK@f;icgMgie~ zJF)dXwHwFgJ|zVCV3D2=KK&>HbV(or2}oe)fIox|r|DGXZ27xXU?%Kz2OUK@qKWPm zxl~SZ&;mzlt8*i?uLMLk(i;GLxo-KO0@0!oeBUaO(36kTrAu!laS0%|Af4Nk_8#Lk zL1Je{nVdI0MAfN#X1!Z^+lC=m za)Z;aY71K&KZ^V#rFg$Uz0j}Xf3sfO$daffL!kvqo=05Nz8COjli^Anr{;Y(dN zOtn~Tp<-ROZroV(86=W;>U{-tULo-&kKwHz@5OqY-c635X7kR#X9)_HbI-MKp9}nJ zr2IYB9m-(;oa(P+lZ?TOo+Z7~H(jQEWMQ*6QT~4c~O}o!vf^!*U#% zm*pXRwFkHrD!bgq70SrR<^#Sv@%*Z3E!IKuN42(tfzTe=Gyws*#2~}ZIBfcQRaR>o zV7qyCQb6m0>FrOB+D9!cMOn}cu5eHP0IRhl+shH><=g>YGERDD-heJo44Vv20|EvL zbQnD`?b@o#cV}fZdtB~v+etjH9Pag~jA9J#-5>`z0ChjopuM&K08I~lY6jICTXsob zxp7@fUlXs;B*-G>r{|MZ75(ctaoy70q3P@wV#~f zQz$cl!>RoGPzF%e6f(yU6Dk%gNX9_)@BJy(+MS*A$1Tzr)xl7`*B?qW?Gdf6{M)Z9 z7{it957xCOv-4$+&fooOvnYO_D)Lx%IiL(1-C3l&lF}mPT#Oa$F~&*tq)kIph7li> zM&L+rct+lX$-I_UEzdR5WpT>!zjt?$Dw1LS4^d6s$0ARq^$^Mabl?65c2;5j4 z@Oi~?zA5-+;opj3ZG2%9-CB9VXN6AGeWL?^Vm-gYy++zOC5diibqL>kb~d7~{{UXR z_u}`(&kOt;@OA$Hi}gsFc&$ngEe^(KVgliZLF#aRlmY5j*HOaWO_~d6@E49r>5LDc zs!`n9s)(*-0EW(RMswbM{0prBYf1J=Sp#j`$tOQ97yK%mcY4F`%_C0rDCEY5`WE$`26 zwIz+)AU6xNk_r(0{{Rn4#kjw-Wcxsfj1UHL0|WT`b*%VxI4>p>~nXgn&68T8?|KCE_8$5?~+X39N|plu1;`yVRlD zxc(q}_sv;*RGR1*Qz?v{#C1Fz_r(A{_YvFuqT}X9JCE}3QCOCeH^5VlK?59j_T%|g zXSTa`5z4|qHz)`A8?hPcN4|LJTf`e?W`z8>@8~*X>+3)gCG?_TB#l(JB!=t_SGG>Wg1I>rRF9#nG+xYKT zw)B=0u&7M-=3dJvpf+LWs@tk=Opq0;~5^l^>D#FcI92fY1DF{pIzUD0AW0a z63XgTPatO_8P0$GRemk)#M6+AmeCVujcI*QqrZYs=#Uxua!4hEP5_6HkG^-uNUR-d2mR*8CIrsWd1Zf@2 z(v@+IgFN@g^u8jLmp$19GXomYnP;^kEA^3nP}+>GP4YIxFI z8D~40usU*2YLG1}BN9m3Un*4aanq;0V_r*ZYcgA^s6mj$Mpy&IZFwyuN@d#k%W!&U z*S%zYp7Q4Yd0==l6h~3GeHZ z?N%;F*`j-pM*}B}j30j0Qq_&XF@V_4KtHG9KoVTarCZHX(T}=EBR}C$lDCQbmEK9* zLF_#TOjYu~yKgCm7lsGa(*>o(#J#~pjkx2lAC&-6`)d|9Fhs~Ye4~~p-_o=ekEDjF$Hw%A`jTI?Uk6 zcHooKpI=&Fvx)p;&#o(2i^pCpbM)wbx8o|+1s|WJV)V855_uq z(mYXSx7JMRS_c_cAmnErhmoA~R(#JV{a04?t|#IL#MnL>_)h!9cTt=5aC1(MlYg%K<SQL^7 zdtL>DJR(dVSf6c0PS}5OG*oxo!t)v98^!Y*HfwzWoVUWzwI)@q!0T%RqhT4bj0XHCo(cmBz=&DEMok1( zLY~@Oc13FfQS&VC(Fzy@xVa^X!y5l2ec#S=bs*U^UI;Lf@0>)y)z~b9K-s2HaPrGe zvplO)D9flCvy%{-)H=&2DsiQI+KbU1?RDG(c$py)i!;?dTSNCAFF4*1<2e?Q2g^Rv z{NC9zv(XUu^pF$g&`SKp2>!GsrmoF#ZrnWs6A@v7hSAnBbT1}Qeg;-K zNl<^m47Ge#xQ3eHO?yGBTz0h?f53tmXXvg-_|R=g_w{vOF*O2_(jWGTZ75vml`#L!H}ULE2MBuM%hSh$9mZ4S!8~6ZM23dG<&Tf8 z@-v^|VK2(#l~E24)1WA$eSj2Miy3)twpo=&MNGt&uMx)qNjBgeFo&RMd&|E-^*DB+&4d46$g-RfW_H5(nQ+5T8}i<$NNKC{?(=@oi(*R` zBgFR(#hZR6HR}Y-Ge1k(!M9-{t;!*f@N7-A!EM z#|Vy!c?`E;TT}4cpL?1d9s=LtG*5?+k*|Z$jUdnK`l9K77;8z zR;=Ma5Y^u0Y#?EAux!1S4w4a z@%3tsh!~gJ#cYyA3L4MO&e|V~B)yCyaq-0ev>1wGMahoHqs{@L>NCvH86z?3Y$9tL z4Yyya+mk=54L7Xi{gEVJznyv2&dknW^}syQCMI0)*v9+E8Q~8+Jwj0!3k@*Rd(I4R z7;c-ZF%Y)eod?0qu$3vV#8VC){?p5iTbw28F!cQFH_$@S&C((Jod@@?rSOBI6r^<0 zt0G^{+L+hLDpH$CxnOvD`Xi!6hL=a4|4+0#XE>y~|4tBLw>{+y7kDLQuAE3m9d+3K zS8<~}rETnjJ#QVxT`-WrV~KvGszGRN;-cDxo7TJJ;(!p+@LP zRdu3j&Y!9P%Q1vPYP%$RLtR9eJCs6A;em>bD~c-ot60iwbdswM?(ODGI4vB>7M zB#v?Z7NrrrZtXcr7Z zhSX>!HGOa#37=DDD`E;wtMOjBlMdZ{7baqao?QpcIGQ~4G+&Q<(D7ab-ob-=9pLk# zRVDa_=Sj-*hhN63xHCDE4QD;2VUp|#R4R^=Ht*b@{!W;*MQNKC23`4|M_tZuBt`x7 z%k^Em3D(T*(AU)zfBw-9hPG07<>y7SHl9(`o>$50xxBQqN-vg#Ua4`0a~C>6sM};0 zx$%xmPOL=fxLs{(l~xhYXv`LI=Gfg^56&uVgKg+GuRbyi!M*k!ak#vEpk`tnpdNDJ z(1P?hNc=7+lJ0|x@fJk{7@oeb$CHe;9{^fLS0i{ohSXTtuv z`>>u5!7+=he?sCeGSgca_EzOSOn%b{*^xn-S7K5C9`eO@F%#U(8sdp_&wK;GB2-gG z?e}PG)o)*P5|yfE<&(RwgRNUmAwrV)=$Wr-IN4}dv5=AzRJmOfGocdfZx}OHfiAmTgNQ?M(OvCLDJ;G2!|s3()Z6T-zJ&e+DjX~adi?+^7WGO&mp zDA17CmjDJQa$hDG_XPP&0_Dw*M-RRg28awIL&HcD6d&^q(hKz^oW6bUv(PB`_M^4u zOJ}jxPAs^<5$7wtt3V*%(xU`gwwbD4S52X9_6jr}9$qsVz;zuD(9&BI5nXn=-vv}^ z;|6{XXF$o2C!i<%fPo_2Z+?NOZF^8UOIN-c^8}<*Jy(>q+o8-HU8-m7WWXn9z?@R- z$d+#r%kYpe4V3+F2|YbQkV#%2$41Z%$qShmM`a4od-7?A`Tz*vk_<`hblzVuq7f|# z#K9uAf>UCW-`pKXap2!Z_g!ES>G#hlkq2X=$!gkK>7N^oUVL~^CxM7M#&l3U*{FOJ zE=g20{_?$xq3aT!Kqc+RtspB(^DtA8?>AwF6Ph+vDZ@gpFii8+ZDom-yG)Qli|KEI zr2i)Fhe_a^^S2`U4UajHcg_R2T?}n4;4VT$wsJVn+Q|!Cdgn71XWl%Vv|Y((GDV>t{|6d`IqZdf>LM(i z78F#TrE4=`sM*%*w!z=zk>t~Uqb5mvt9}`2cl03<|9Mp>fAF-^$HSuA-mVt~-hrpJ zr*2sLC>L}X;c|feez*`#kotGL>~GI~SFDZQrH;m~#e&8j_G$BR&{pLm8#3h+Sy`v4XAuKY7xS zS8cQ0?TtPst^r=cseeFKO;sNvlsUxzzR_)ZC925dOSu#lD>vY&YIu__O}1yMgWi#U0Tg zvZbac9DtTD19l-9L5GblioxPtfmG#w1s#d-M=V4#B~fKle26sWAmpTn|!YE;BZ zuUj-PuOR(e6HN}MbI$a;2mL$PyV35)hMh;wgecaG*f%tV3E`{ped|6+Aop2pl8fx}2Y%Ls zu6oy13OP3O`-xETW?17Zj|)E-n&9mcnbbLE4ujjp6tZHIy!+TO{4;P!qy`&shM&b-QMBht? zbY1%V=nD9LxX7A5Yfa3KBNwe|t2IB;cD~)jI@~_`(VbJ+mlYDWKA5X1BJ%z_MO(xJ z)IuOp=bBW4@eVtI)!s~HT5^JjvGxnf1lsiv7|*#I8PFRsoOP z;&SgOV-(QBqD+5J+eJ|}@mfIir1B!WbO$ljUXT6z9sN zOZUMj<^K4~31n6%;gL|)n%i3u(UnCRJF`wTuxtl*yfloN4Y%EG zL;LcH$3csGyRM6PkZkpSvPOMmg=}7Q#Tyb36-<9jEH$OX_&l<&Boh#I6MIR(f3> z1$nfCm%prZ(CndF_tW{_b;|wHqrbP(m(a3Y>A*NqnR-TBpTB0H!dhl>uR*!r81;~D z$$8V0owwh(W5g+mZ=px&nZ30inml(Fgb-Bm3p4l&#mo*(>W9t?HN;6cFwAOUP>7q` z7BM3ZpSM4=eWm$0gS4SAeL44)0hOaY!+)Sz@05^4OC(#ue;{j0c;@Pn?k6{JZzxq~ z80CYPmP?kLgiT3dI3_=d81*B4!YQ$&_dO1B&LviB?nErkCagSOkNFP$1X1{r!5GHv z9IH^f``=+l8mkdu4Icf(GF}^IpV~xdDwq}*_=+;{Z6P98-(U0M*Fd2RwOw+IA>v0w zJ@WWYUF7#n3%Tzl`f){E15*n2M?j3+5H!ns{#v@<12wySATm~Go(y#wm}j}FK~##< z$pg{bSw8)c+8^8C!N@(fl;F{0UwQ zU$XrZDz1!A$}__<+gT~ir{V?|8Mv<}IH{@Mp*s`|Nc>TBVk9@qwvkdr_K`DkD3AwOeYbib%73hyg6TGs2!nZ3AbNwb@M9jg{ z+48>XTv_in!kM^w)#4Z^f=&(=_e^wlU5{POfv$DLs8bQtmOq1=K~{Drmgf_H5uQ8F zp|^AEYvM`R??VT4-u1>8<9ISphBX}2!R+;Pn?zpJU+tpG0Y;!FDjNy9C(41oevq- z7@~>RJpEoD9X=_i#ehv9PrW2nkC=Y*-QjrIZ~yeKY^Ai9%dAIOj=v5qHENKg(a-z2lbqF46)`-+1$M+h_PTuF|2ju_vm zM~K%-ws@C=VYEaL`JE%KvHGUo8iq9r`lR@7ZS&o~g0n)IW)Z1@Z=vqJMg11BV)u2& znv|s=8JKO4t2G5>hcF|}TLIg9;Cg=esn3KR?xUkJ9s5^dkOm|}!mRuR$hq&f3&$p7 z!lh19`?V6PlPljtFUnLNsz8?(VcoYppk%3-<2XB6qL#AyK&P9gh0C?+M=;&A1y39l z`!pHk%ZsiIqz0%76UZkz$D&P3w!S#*>b{;SgIP%9gSA1H@K}TO2XwVF{MPQYcyLAV zQ$lyTd&x1A0J}9V+Ifg3FE~Eu?_hH14j5cGR#k`ilO8YhJ9$KUf{4ZKXtf)Sti{SU z4Eq2@PHasFxC-&a-Lj!Oo5p^}e)?ySL+2w4e>5gCgcq9%;Iw>Um{ctr!Q+68e@sYi&|Q`XpQ5n(YNlo5xC`euBNFxNYg3bOo?J1HH4 zzMsvm90E(W%xB<6Lp#Dpyn-#Pgkmp6dt5g-+ss+I@p{DPJVK|W2RV~{j<3me2(pqE zwrCS}(|;zN@A{kRwiqI14GQ>Bnx#CYLlG%N z9a;z&2R@Iq+(iumNaQu)N-v`f{L8m&Bi*ftD5P9EO|){%9G&2ply9Z=$cuvq-Mfmr zj<`#I+sIU(Qw5GUH%d*C1)8^)+zwBWyN%kyngvWExcz1Zgagki8ZL6w9@270imetz z(SXjI?z$U&kB23u+G?5CsP!7+!`H*{YP97y|4coGeHd}2Dv6Xw*0JoCO!S$#PipcI zv>^a)J$}aS1$DV;;J*^ZS zfFQo6@qah`4-`za63)}nJ5G{Z#8G$h1jMEQ-S}AJ4o<#$Ir$?}4a_hghAefFE*@kS zjJ2%HTezsrup>{b`RhMMX%j5fcYF(sv|-!s_SOkh9`5mR80@u_0< zPEc$*Z$r*erW_2~cz@QK>refdef#7ZL1}a|r=usK z-`XZf{_(N)yxBe3GwkBI=kN7P3+&2(HiKhMkN|;u9Q^(dJt>v6yA>4$4rKw3xsF6_ zrF^BCQx1We9s9wx@AaSZt--PTuun6cPwxtW`^Xphy21kymX6wpTT8<9D)n&JXJvH9 z?nE(^_un>y>Qm=k{(Y*Y9JRwYrlPg;C1-g}g`NZED94VFO>}BV1?lZ@$|#bSe9P_g zNXKh9$48kk$oGGq{T*_v(8l=K`)ha|xqnl&^m-@9;?zraG%xF9`vr=kIJpI=9Feg_W52fgP9#id2&Qi#KVV^FRsZ z{QYOU{-e4n%KS1Sd|NB(h?jQBF~Ruu5$w)W9o?mcV3hxMeMS7hs}2{l$N zU6UDGGK>B~xvWM3C&?7J$s+LLquTe!oPGKVN}IMd-fE2?h;<=Ur|2ZXD#<+bSyF|? zD9f)OJedhp0fdcxiQ6DaE6H*0XNBTm*Gzq0U)`ZIbd&sJkX7oC)row5?BL?xpiqPF z0`Q8H2aE9cxOl58=`y)7%XA8hZE{&G|A9*RZ+B(7VeBDg3Fxnmxaf~_;>w<_5X|jG z1)YlWN;`kJaFEpnVBZwr9+uAf`a3CiBIusxqRmzr{;DXZTNb;Mqyb8dS1x)wa{SKn z@L(q=_{kG$$=AK_#(nN-nMs<JR97wKNCVpjZ(w6*mM*%b10v=)nj(!(8cf za+&09Wn3V&3`$V|*uN+*^#lqX3WvO9#s#DfFiAny*~@Y1(5(plZe8FQ!qL(cIHbv; z02Ek~BXZt_?Mc**woR->>5E6Is4OY%??Z8`8tN8DSahhWrac3SD2#hTg^r$o@@3If zn)rwQ+40-<*aNNiqWdsZ$Cv>O#X#^ZqNMI(0+tx-%N#h$>d9} z1zUiqCR~&hcHg1xohT4V=EpEdzAUVETAozM>_|KDkI~f|hjki=`g)HQ7HjRE`l0E+M{JsvtSVgjJINZYhAE5cw&o!qCnh6i-F8P?9uNE`H& z0kAkuMYgF0k#_j@fpW4B@t;J~wovD5ZR&2=2g8bq_c)$SUkZqlm4@&`f_+95-$X-aiY z3H3H?j{N}&|6=WAiq@Wg-sWy|xB*NLVGaC;1ZL|^N4=0F?(}W8*1Wr^g7i;e{BuL! znBOXqEY5=EI$YG>=2%QE@@PvQ0+*Av+MU<+PX5~9yD|uvmes}9Ta^;9Sw>_12P|=J zq1Y!;>*EYWk(j<&Cl{-GGgyI(Xw6i((&qQ;P})6uR{KJMUst&Qq#5IuNP3{>c$4k) z8y?+Zke7`KL@xLr3y~^$3Qe9aoOP0D>9#X7zPK6nJd2R~r z+kR&oW+)eOV7Vc3%huMIn!${LJ2JYsh4Ky0XyeuyV(bO)>=zG-kIJ zmjDVEJHGFQ=1-J(J(#vLD{5`di!#qxP;<|IHtz&%2!*#aV(WT~J6(*S)GL><#7P-X z#Y>jAX^^8$f^)Lih^f7o4uAcTVPsA#QoyHq5M3f<_GC4+GA3>H4ARo9BH(LlQH!*< ze*rxQ9LnKbh%4_jYP>eq6n)o;-dFL;8zleWw3!eUu1x?KC*(hO@&n&2_YyJ(d3+Ju zm`JH-;`glamVCG%TI2vV5C~rA;*q1g)tC&?ya@(Ald7GTq$&3Jijl~3$kV5ryT&IT zbpLZZW2vFb+PklR0$x@tu6(c+dIH5`$Lo>p`F0Z=GottN_D6Io%llYdmWdtunq9f6y%n^=>1sa!RfEVTrHt^E~wv zSN#Fv%@mPn`6k6iaJ=B)2>o#qG=) zJ~HY82P#95dE{@mC8|08i#Xtwc-(fr2o^0V_f+RcL^{Xma6%=|QcDcKz)iI~ZQPNrr$%y<2!OnS;q zA090$XHrvj{X(;&ciu2!k!$A>*zxuB)!tP)WxKl86yDeT2VRhu48n4EC(~YUM%@Uu zbHAF+oAqw?yD@tyMgLnQZw*w2g6r@SvcLO}QCyL$(rS2~ud#O`X6wgje<6%nD4;PL9 z(d-h~GyO>u2(Voe#=-c$){9ZfTZ@!rMgy6|f_26WG6x8^k~Yw@^SPzvr>a@5#4=|S zArb!o$$2SU+A+Trk{rz+!!jO*Eq{wx*veV{sHcuWoQ{_g+6=u4shJfj{R~}u|L?x# ztYYCxK*_W+WNt}%U46TCj}A~_Qk*D=5ubeEQH{R--VH{-Uy-80J_+v_*L3iCWoCvq zv&IapA^~l8M=u@DCdiTSJxLlKFj$$g3lbd__<&(&J5TCb*CmTdOZq^u^S ze<*He@Rl~X+9`nHFc0%+{UDq8_6-Zf8&f^==2cCx@neSKHu5{Pkan-}ArwuCBR zE6HOdRER6buxm*Z^2+LBVkeUQsJqwe#KJ~5wY$e% zTgH#Ow#-p#pA~%c<^y_EYBbt(E2i@^zE&>}x564TbxJF;)T@w2hI;*JJS*k&Jxjp$ za;^BXt}eGhnBZ{&a04hyx1t~hFSLz6cv4t&>7jA-HL=CiDFb1$_yNi(Y5cZAK<+J# zcR&%zLE2L2`5IMFv<&%kAa`$nVmnVo!kJLMZ{Rmd=D9x-;RW=87B8;kGY}Vz$8daN z6(-yT#jkLDx7{b%eeU2d3)FmPnVUzp8ERtltgKkW;OyxRKZf4$&tQ#XY-@7K$!BZyKJ0X`^lEY0RvNT z3i7M-pSHk<8qEr#pb`-ofULMt^+r>;@S+Hemp%Yx`FK5nD=wOC6T6k87&Rc0aQz=h z>Sr8RejQvOo5E8~m2uZ+$3*FQ+fN}9WtHVwBJ9~|m5ZOfW3z+=bvk3uM)<=gs&-Bq z3FL?1$j-TcdbrlAOIe+EH+4P^!qLv~BB+^G;9`4Mx0a-& z4Y<-wTH|3tU{VuKvN#E5X0!~v>`9gRIG7sWM+~L9QM|P)Wki#Cosh|45}hK?$hI=B zdQSUou^J-+!?9g#skOfa&I&)6FBswppngo@d(Hl39p(*9uOleBL7Hr}P0o2QX;TlZ zQi`QJ%;u&ZV-=`gA;f^JoHyWJK1n(d!!EwO%LK&!5L+xop->}1V;|64oUEi>a6>^c z%gBggD-g@MZs+Ddv*70hx05e zX1{7?=oSdVK<^tLsy-Hv6lwgh0?^m~16@~XO`6dr*3@X!vA`f~!vGtm@BFwn_i?m& zinflA!Xwm)Oz-f_SDQbIw#$uq6E97 z7Wv6=9;U#YXE&BzbFCfHp6v5U5XA^j(5f^=_6#(>`0!Mf6uTx4#WD_Jko&q;!OZ}p}wBzG1xAfd?oH&~SwQAvU z$FVkBy&f|kt0PJe4N$WWJ~bzky@!BpiZ<6Crx|aJ#g>?>64A&K0l4nGik}7+$JN(D z;Z3Q3rMHB1eW)3jRi9eWl@CPov1I2T!#)6eWhl)p+XoGL#H~VmTT{xBdh`CTC3f>C z1A?tt1u$lt%Lq1|5y8)GDg9`3l6b3g@YF*4xc;TjdcH?r&ht<1)$6TYM+d!2PI{<_ z#JrS)rM(tkX?i|yX*B!eLtQ|qAQNj7d4K5rg4yAuh)mIfOBWZh8;vz-o{CKr62^lq zNk|b&RvTmvUwsYB54}GW6)TWS&kUq`S||Uf4uwGg6(U6>=*CY6-~&A|5b0CNr>pWB z4Yr@gIhSIR?1kIO;Y)u6`jmYJy2EdAy4e!VGwcxa%l=UfcdtPDC+-k#Z+ymX2cFIOI#(mm8Pm}!#D^%fS2tkkoGW+hqf1n1!YLv z`?L#~i3SzsCTZAmnAkBTWqCEQ?#frcHYu);*R1}qg#%Z^+fktTX!p(!MI36~oMCC{ z{1t2Z#sUS_Yq6LckTQy?#w^%7y)0#ned#eiJOwRJ|J=kYM)!34`dEJoXj&W^mAa}2 z#zXi?T7QfL_lRRYjOHWR`Y4rx?MqwIqv~Gwm`7^A$q&PUZLrC~=C&0?iS@YnV`&?P+qnCNztuARPQAiH{pLJ3 zCBDe=A~Ic}!nU`{hH;G2o&PSke-O=cwP}`bNJbw>!w=>UwVhwP{rg1bbU8ot10c=m zjecISRC_uiF4FVmcPUqpbmvi zP&y{xK}++Jpm(%&_U@vH40-m2qSLz|9sEq(=?58Ju~u!~0R-=>9zs9&zyl?2O9KX% z;dA$ft=>vw1oIw(pVW@gWQUZ_Be}lcev#=&3~0LV8sMzXg!2!}_^6y)J(f_>&qT8# zpLM(BI4p1nuAOYgHEpHs6SSQ~EVP-NhnwmtB!hZCL(ZB1xXiIsZ+?#oiZh^N$JD-| zYy^4py16&SIT|KtlvyWleH{0eWR0Tz7-Hc@a6P|Z^DY|yCHWI6#NuAgE@y_cbW8D^ z-LVdujh9$fac`E*bhxqZdwfs&7oGn3@LY-^Vzi^I{6M&Te(j`ttMI zjiYM`{ds1yF<-H0N{{F0vWC^W9?YKQpMg@hufsf8x}4ktkLu!<=+ui09VYfrdAQ3} z0C2iTUD}wnV`Jmc{4kTZUG)Kijbz2J;`*BB>#@JIfT3Tauo8UHK_X-C(vzy{E zx)xE+gj-D)|AAyH1(kNTqP6G)9w23919qJ0D9DLOdJ2p zsW_-f^>}Q05t3UX#Aw_(0i^->J0k9^&)!xF2cp?01^24ksM=ce+U~D0)lRTxs_&7@ zsxv){Nd379Lc6xZkQU@<`tq&e@x{T94ehvsM|XL?`95o|VwxN3+>P-(2kSSQ4X@Z& zlmlGXaftZl#sVb4d%R!UK_1A#3u9UJZvhf5-` zbJbXG#W6-X;3yr#xILkOf@9X_mSN-GznPhcWF(dL251ozQ(vaOO$w&cSZ825gQBJq z&PHMIraI|g#$NWW@Xb?9EpW{tIcy};e9g*Wk(I$k6VjFb?zz{pim!(N2RM-4eaS8m zpiaiWOC=t2vq%wD0;tYA2w1aj(*y$|1?FCj0DA8?1FR#gsN+;8h-BPZ0%a>Q5z%g` zxKtpu%<1=hw$u&QoCy7G9o2tYD`x~f1=1d(Mnv1aM4R_%pt)J?rhF^wgeM!Dn3JA8 z!-LI8$4wIwSY8BuZ6^THyfPwwVW~}>xa{XDKh8E;%@uR^>tEKu$9Ph!GuaO`IK~H_ zN(Y=OEtEg+h|l^>e|$7cYOwJ;eD2%*3|LZIS^={y*hz)}QbPpz^7?(iefpthURR2n zY-K^9SkD&qM@(t?*_cK}FXw(h8Bi#e{+V}CF}?I;>R}yHMaK5#TK}QKaRYrh2cC3P z-S8t|d0mfOuQ7E^;-O5AK+3U=5>&!@ z^oq0oX<7@RVs{S!_uT6Xr$!?~IYhdon|5Fhkq564~o2)>a zMSI;)u@$}v#j#=&Qs0FQdX$=oAkQyy5158Hq+tWAZ=6!Dj%)1f?$*{YGC?|cPai+5 za1Mgu9l8^bYc!HSEaGDGhP51Hmnd4leTt(Qni?ac(UICD_nQ1#_x@Y#ii*En84&9v zMyI%hJth4d%OuNdZ}K+lTb4~kGhE`L=j#UV*OBl7VS4$eO~hqTqcCB)37RS)b(Sy< zkO|$4;AH0?$b~B+rzg->fCDAKAm;^_tvnbx8fF((Ywud_VFvbl;~AradOvR0U>GPh zYD`Rlt|VEJLxKa@?Zpr>-r(iuJj*AA?4o?jorR*JaRaZf|Jle zaxZPS#|kfgQs^4RK)5(}jF3V=oU$MQns;cv5-*f-){{^jzIUq>$ zaDPCq_dF9U?MS01cOTfqV^8);-T9~R5OqEZrQ7YaAum|^EzUjsI*1z!l6s^IGmYiEa~x zYY~#jAfitH{I$)|%)c3iF433CP`}QpK2IuMTwDr>KW38X${cJGL)BePt~F<}20C;@ zcmQ}f{DITZT-rd3dASY_3iJ8a5%qTWrEVEd5L)P(Csx!&CD%Ya5=!YxQTkMhklj)qdkZ66}WQ_jx30O;eDI~{&) zv~040vS-e?1};Y$*)>HcHgJMX%rJa^NHxtW?uUp|2vHwQ3JH5 zxvN2Lg7mASlfm7p%Tb$C0G-7EoBCc?;i1voPFpj$$`1H77{REh?0wpFNymi@!Bn_xN!C_)mxr zn$CCXor_vqYd|;3fH_6BrFOS& zRv%)7=$Sd^fk<{v(H$TMx|pqu4cVT}t?m3^;X zM#khaSV~X*9kdl~MV@i`jCN!gOexRBgp)^(mhF=Ij^}3I?A;}C)Pngx%F1CML33>N zt2qyw$p5v%!W+4X?nFr(eKx+Rgg@QGzIcKSkchiOCUDuC#+N_7z8sFDsrXd@ zlLK;BHFF$r7=ke9{r(!Om=+-!jW!P>t#@UgH_5$0!rR8FAq{0)Sl{N__kA&~jNsgl zzav3xkeC5Rwb_b(5R_9}_*DdA_E!F}-SwC%X#xTJrggfuqN%rtNpXr~6A#E+iqhJk z_Fi2E*_$yI>~$ZkV>)+2NgLpzjxGC8)6NmVC6SZ%&~!;uZV3|QV&zRn1smMCoK;_c z`oJ-i;HV&fjgn;XE>m;rt%y>>)<>QGdXsu}fxbc?-90(>quS_qF5?gP%u-ghA~io8 z!#9jXTGsp_e&5(WtWv#8ieDk0x_!T%8yK5j(eRa;-BK9x(jb$O56ZRzJ(KNr-2Wx+ z^`m!sEnLo~c`7FuJqUDJV79=tZJGv+!tvNgv`eGs|$#OCx)pUT# zcQTuLBF0L}>)=2wAF_v`_qByk&ry~>M+KnF0@+5BtzsD%Sa$n#dWkYB5_idjW$0vE z|NT>-)pKcd%V>jvc;AW|1G>CWdJx(%1Im#)ViP_Fv}N6-YQ-6H*h+gvB0a)9s_jd@ zZYlTvtJR&bnFyZ11rlQe<8(@H>=jnuV5evIjpWUB&dM)1aWRZgH2#su;!1T1$Q%qS z61AJA@T=|Wsx8%z=h7~U2EvS@Y&Cn-Tu3Uusk*=pcn$n7!- z>g7r4W@rs$krbTnG;3e~#xR#Rp9h&-;Uf4!XXYjL1Qjlnu<2kHDJ-fkAC4Z-*PU zG!ZA{KHY#E5wwJrf_;vCPH36t)13GCWISG;uAS@XX}9GO!o_My##&SD@n&K-Rez z!Tnz(qResC7?~X!ExqK<0+JuGUj;&Y&JHf$hVxxTLLbxWEM7dMNnCs%Mio3+NuPRW ze^BB*heBSRRX9ZLdyU@w6IHcbQ6=2Q%r4e$85+)8tiRC+hgqW_Ges$1bk~ z&VOXbY%$)3eg0gXtLLi57%hd=WitGmm_K*>9Y<*4|{sWbu`&n^b{eOq-}CXuBc$jdOz- z?;IJOJp=0;vWv5le?iTD<~LkaLUNO`0%>Uu*uwB-@8D(;;;(YBp%R8{?cT(O$ga=m^IegcuH5yokWap;>$s=(g-MZDe{%c!feO zgHmt!51<);lW9L96&tWq*PHQa_^>xJ1P|&mr-N@o4R$^``#QqVAihUHE7$$&yS>^Qhq8_3dfGI{ z*nXtsh0oYQ2Pgt=gS-@|zI;*tv90HA(6TGn@@@FWzD=c`8w^1tDdDKJa)BGJm1+%3M&N#rrZh~b<8HRU&iOR4uRDruXfQ1kEUSoM28t?W$rJhia zsYycnUutA2T2YQrx_^+*hki|nAePhJL^Rwk`&=4u@&^z4(F*)7V)|+2%N#U;e?eXG zluD__MZ^QY8YoyY8_)FFC-G~b-H=7lFz@? z``x_!O4TR99jTuXd?XF5I0hC~83-~52EnNl){eh~128)wGD3Nw!y-hutjJWgmcWRs z#q0=Ta6!GB`Rw}LMu~FcyP+?brb(|9St16xQ=EK!7iL9Bx*`h*1qvz*YIA3bq200-h?`xnRC-wh*jdPFO_b3q1~lQ0L7-uqfd#eyi7Flrrw=eq5)0_yU7 zm8T#dgaXYWr1fXq!Ma7ImK4S6OrsTCqNmk=fe^%^jx3df*&LH@MkQ;hh3V@GHl%1A zKq5Zi+e`yD#K%_J>9|COJq+>^YNqh9b^Ag>88C&gcVCiedxom`8;~pAk~1-NvzupW z-WjvaBDRPO$~A`b>)oh;cMPQH>L--XAm5* zDwkdJ)cnXjb7NV~jlXZEN;dcIGFN~_eapLq84rFbm%hR)9kP0OVy@jc&bCuX7Q$8$ z(6sx==UIMT3k-+P{G9RhtY>^OT)HaQwtmWbN>GraA%5NuNkd9attJTq(FBt^u5v#} zxbda!4&lHKG-KJ;2a>R4CJjm2kC#-vJRbcsz*UNg=#~j5#(yU{IG|nHM;M@eNqP1p zoYQ&>Y6r3<&)8L4*HQE)*lW)s0Y{8^1DG9SGS%-bsRWmxvjy3W7^fAXB!4r z_Ml^}02Ixo9Z6j}(LV-URgtC=5bE|jJ_5jzQ8UtpdKP>Ax`_uh(~R`;;S3_*wCn+Z zug}}6-ZivK&q0*ytc}dNYV7253^H)^toYxp2(!0*nKBQGQ{=}@K`Lntm5a@+oA8xJ znAwQ|T>@upw4 z`JczM3`5_Pv0(o?^A_xjl82PIF`~Jf8_nbH$3Z_0uYTgJCWU4fk9ya8#j@ukmkPNC4iE+g= z+eqKaJd7w9DAhfvz_~KY?#E81yFM--E67)}gXZ2X|Miy=D+g`VM$3zx$!etXcQ0zl z4M}I{=rKK4HQiRUChh|#gHAiP3?H^+xcwM_NQSdykn#9;OL-TBsADGruGx+TnopLN zJoaTDwmGYnfcaxH}7$ zQunp<7_EhETRE zW&)9b@$P=NbKN5Hb4>SrEk3?QUdGzPmn5-1j~`76OQP^k&-2MrQDU>QGPm~ce;Ne5 zmjy{CGbbrtU`db&v8|hJQ1T>)Uzfp56}g)aKV!+Uf>R1nkLR8nECI*Z5~^Us!#{ti zg@}Gaq&@Gxzhzi=%x&nOweGjEko*z=t`l-Zuzl{ti29YZ<8n)ai#rm7#le3dSGwPl z_Zu_tw>!Kc%;OVU&a4t2;lbXL*Ce3KFR#9C@&GLGgp2XX@2?y~)z?n<=hB8{U8{{G z5|=z3n-A3C#G!YT^6cOi-H(>5N@I>05(cag)!nmkhNb4 zJZcl~YZzcX*K5vccewKC$sw8)rV2Q~8|d6TMU1r$+g_NFTCQ+$4c%FO6}<=O39Epih9*A}-}aP77hTU-5at4X9{cur)~)@_ z<2&n1OELEOT0j45wHuei{a-TF7fQeW1Ks0UjW==Di5%K^PL=L}DE&bIgH#x-xkz|0 zTW^_$GtX2>IW6@d(R9w5RuDxI&c2S_<&rX1+AYHyLE0oS?c)&86B^eHy z*P=E@zm?yOJzQ~55(A1#{{|!lOm}gAcj|tf{CpS+nG*tCqa8bg{j*U2$YxGXZ?+Y# z1!*-Ko#fh2WkyR8R0{MMcH`Boh2x8{N&k=m0-Cjup!TyI;&rb$*dvI28F+-6q53>O z4EYF#4KPFYY+ZT?eR4U=%{48uW3Qjuw(ktFzwE60-Gex1YTUpG=EbbMV00Obfw@T7 zj8;7U8oBnODnM<;V5ZC!_ghpbK}Jmy1M-L*ArRu17evwugQL!^np<0lCT z#UWO{P__IN#7H}lqT-NUwt2K*O*0OBGB@zjdEvM4RAmMg{LL-E7XIjQhOBti>kji6 zK^)EL6wepsalY3HnRy9QaH=;EWOVmQjZy5JZDGiLLpgIL+ZnbsN+Sq6q!x64QI>V- zJ}YZWAXiSMfH5;`*v92^vta&Vnb4PUUtNU=4DyhyO8wnFV6AkENE5mwQz<#%km;bY zsh0BCYnA!d!A(KM{`V8qM`#byN)ljyTukcD>&FKiuho%=L}jM~<>NLjhV|89!ZB(X zYjz1Y0rI_^V*sUNxH98JWnuBA?Gt?SQn$(1z%h@P!K@w12;Lb~xYs$k>TTQuw@uKf6mZ7g-M+q?AtRzt}$DwJ!8t+OZH%gk- zzZw+_e`i5#Mpm+zG_nbSv+)&?s)3~MucnSnfFMKiZED-{TfbMIR`fz0zb#(7E7SM| zeO$Y1@plIrudn{Vmb_?>m3B?8g)g3;C13b^Etl(hy{&N=k#Mic;=gj;QrmqZmOV6l zLz%L=TlB%tvFwI#@-ee@3vabxLapbwq$T&1h1mAvx0AfN>%ZQQ^aLsYb;s^^xRxb_HVLd(ofeBPk2R3x(~a> zwoW101twZL(yq5(1859y952)Ymm^l*81+43+iHgmBlmYReDsg*vHu+Y_~*M9Ztj)4 zL9MT?gA?fyA3|0Q)Y_hao!fdlFHb~<+O3Yz`p8oh>Rht>_Swxlp!%8q=Kbhe)zpe! z>d|wqrLf(2sPyeEQArUuz6bK{Ozc_7h0LK>d!4J%cJ;3k1xFg~?jtbk`=9Z0-GWm) z+0RXD%l+&Q>ViDTKcqa_*hcGd{MHy4Sj?c5g>Q=Cd~U)IaW~YEP9LfBvy`82X-w_T zL2yT&NPlFH`NhNQ`ZLShsJsiAl8$2UsW<+2G?um(!xwvkl#f7rE z+_IgAeHnMNlL8v4dHK+n?>^TZ$oxVgL`Q8s<5g8I(-50d!~MPI$cmpUqhk^US2`}A zbe*3{@9$hrS|+cjjS^`OYt+UNePQNtjRK!A5-6aq8)n{yv5QG&caFtBZRG4ZIn6h6 zvwR|nL9Z5Fuh_{+4#`KC-0Gp_eN6!_@t%e|-6w1|x6{L;`DPf$J2-pz z0a~<`_U)nK>rFD+ZgO7$n_9_3Ia+;VSGQg2e%@Fbm(8zQTCb^5Xg{W?$0wje{(n~* zlffSsS&<`h|5Bt2p%K&KY2u)mC+KwbpzJ4&&L4hcdlyKFlceK!%3$`1)VF=aKo@oRCWuoa4i&Ve9vxXD}$!?f$BUEFZ@{09q9Sn@8I88Xso3cE1x7igx|R-{5<7Jy8~s zuS?*MhV8~~%46$oO#y!t)mMfU+yN(2Oy5#V9m z`;n#xieP8M`_S$i5tk)O$da{SKb%VDS~t;qzPqn=lj9^SetJfOj$HN0D4}P>lz|_x z6!pWb12kX=fBV=}?w7y2o53gDTa|c=6Qku)hPb#^rYTKj=jvfhw-i#zAMTvG+}A z=ZbY@pa`Uw=bPAz7jpg7)1Uw$(CvfnIRKzm^G=bQwuTgM|GJA!vs7ta5B%YI)D3V_ zkq3<7LjBRAZ>qx1CKa+I8b171V+hxm7ob;-Ct@okE~u+=Ub#C3DUmAY560T`O6@sPxE;ei11A4+I><#h{lX zki|px)GCp~b06*bo(ICmV5VDO7@|X&D%nd1!;NPfR=)4n$7fEc^GT4UV&y9B^Q<(i zrS5cJkLx^r^8KhOjGWNLUus9^bKi=z)L*m4kz5rRY|n3+VFs zr<%9;-rv^CE1Ttz^))~Dw3mX8nSSvQx<;NJJ5{&Mv^C&dhqc9l2rY?GKmBq2k=-sg zNKP{7bshYqdp203)i{Gp6Hnkpfamg$nAPkZt;B|RQ50DHaraYNR_`3KfDB6IQZGSz zozKL>PA8xgVxfN)sAPD&f-1tG^`%RoxSO*vKfQxxTBMtmRr_klSR4U}1r3C@m z=v35L0Vye370n2&g?RXKu^FgG1+1fT@TV9gJN*sE)0XDm7h3)WJsjy-s%J;}RI}JGB}C z2v224$0J&PrMu5xbs9frQDBZ3!oCwD!)6M-=Dr(|IT#7JKY63%Ve!L%D5029YDH-= zhd_^voY1}DP6vGQ{+I~$hx;bSFApBFrT#1eKV+TV*--Y8@=uP1h7-w?9ktMTyqk2Q zc@3FRkRmY5a!42h!bOHi+CMx+_oiYdEL*;-s*>M_vSk2^b><7`0*Jt@*`}=p#BWY^ zr_%Fh%63S3OZ&UR`latMglB<*c`{Eau?hosO=v=_&e2+kh(aU@7^`n?|Kc^t44=I- zQ*!{t^k*BsAIS;QLn_ZU_HJRdns{}I=y7_hGKOrCiyiB;kLqi=nyrU=CU{dYoMuEV_$gbqQ^PYH2zres}-ZbG4xOXaIHF#bLeuD1mQN%MR-`jtvSh-uS zcMaBWUK2MbLcMfv>@#e*TAlmA+y4I2S&3k-Kc>(5Q!h=u@gHoCRjOX3oTUO5H{XCE zKq11V77rEz$?2CFZ{^9H3|6lr1+&yOkdjwZvjA}YLzN_+U`)nn&C7Tg!hzQXH;ZY! zNxK2qQ^C*u{4da@w`CptT`Tv*?~N+{CX8HVtXri&`|JPi=MD3<5|E~mZL@w?7E554 zmR$Z0?kAj_%RH+k)$WJ!uH5lj36HI*4A(MR+@8y?cSGrE!sC5B@ZIPBzN;9WYG-XTjav~TWNuy z2CB|t*AoWsn;of|vLshmFH)|~t^hwmiSHvI_h6uc05smxEI>KgSFKQQ&+eFq5qyK? zv2hcOYkxniaaXHoVI+k`=T0#w{`nl^CRT`!S7M%}RT3jGaIaxP=MYa=#4L*CvXRC= z_uo^pk5XT>6~O2-$_{Uy6jxZh**u;OhJ$ikWZ!C(t8k{x7^*1k^}z#A2SIiw0=Egb zFebTY|LjSTvaA*4rycYBJv5WieXS;MK8k_HpFa{=#KGEefdI-x*(`|GY{{&WU6OgI z@%r2E9+X**mHgLyN|n_Laq`nqWqno?*-d(U_-2u@KID*tbQo`2M6X)y@!I4l;t^}S zW%r2p8qneq(gO0}+X9r6P)iHBORV=Wk{+7jtNVSO{#dkU=REyH_?Y5f#PaY*CYlQ> za{yAV{n8_yvj~?lH)HRHB1D;1pKZ-8mt! zet$GoQbcbL{mHPL-tJyr%%6YV0*ZSV>{(e8Xh$CAfGwHHdpR~4@2@5}9d{=tMYK`O zTv2O#aEL7B*KcZ0M`9f~S;3B7mFkep91LBS#Fb9z;m3%lHDty8?l_-{K3+y+#(~Cp z*wRB#Zox&uFY)k?yv>i_eVtV)o9_HRY!*-05F-lbf4MieALTpw9p2Z^6T}9k$SOLl zjBRE;Ani1zzO4q9AlukFxhL2XyXYcG`zTAY?VMl@7+FrjJSwL4^ux-^ali7=;1abG zOBC6i30GRxJtMX2CLI5d?nZVmq!?^h-?3b$;RW_h7#R0lA>Tgo-zG^}j2kg=-FH$f}7k<2t_bDjkzVaKAYKOraJ2f$d|KZQOjCdHq;7ycoH& z|7WDXXU)qq3~@CDk+d8khs!}G@!R(n4Fiseu`wW~yHiilH`$a2yMLUam)CmmFoUY! zw4FH*PCE8u-|pxWbc+1`$`z#2BZidl4=BX&m<-a$cH`CK2P46lzv3P%C36eu!$?(H z2M|>Q{wX`ghfL>rzsnKV!3NBdbh+KTTj76{@!_;7{S8Ns#&ykF)uJ79bVP zRPWr;rb`|emG)A(4aj=3z%AEq?f(tLmtY{6U!G_dCc&+!Nu61AeeL2ul3*3+TrTc4 zt^j1(+WI|4FA_BLdp(>vS7?`Wh5iSYWyecx}r z(v9ATR^f>;ph&<6--HW+i@XRjG|}sZctluq5B+A)>F%3RL^?&nafFgqwyA=WU@Dyt zzmrRT#^FhsD^7UaA(m+h9$g+1vx4E2<9aeZPLY^I29=wK-0Wz-AjE(1NC_3nQxIV0 zb9Jcu!n5q*B|ZLONKjlL$@@arhoCiF28NvYAD;pU?c6EzDUc$7LaC5~$)0aUseJxv zQq4Dh(9p$f18B)7UWcO>pX{+@Z3?#1u-QmU6H znA>BkKtyPUby0`u>xzbDIbkf zJ7c%+>W(gDgo+g&3ZZ09gxqbC&g5d4n+YL0i-RRQ^JMImX%jz0t4}<~q%vL(-=4nt zcWu)D{e^xsy7 z3x7aF<38vr3foO)c(yB+Z#A^!B?3d`3~5}_-afujYYLX4XHvAbv4%_q#jdB_nb&@L z^-k`#_I-aQ%H4Qwhw?T!3E{B z{9x3*;WXpW$5pVykT-))&mYk9$g%#2?W>ec?u8gP;=hm&0{V1wh^-o^=5I@%T+$;? zc(}x9hYX3O4>;s-r4@1Q9VWpXV)sVsC-ar9!o+f&7nOq5z#*{?V~;%=qIthyt@tw_F}NK$rHq@G z7eUL}p-lIi4#Ok&0tSn=w#y}}D?fKwx-^sdU@!IMzIdmoAIgNC4Aa|sMT=yY%qh9Q zV}k>(lZ?5 zx3e>isLFdiB%9SR{iR01lT-e?f0B}`cB=(=8w%bz@2ovj$!T2_-Ch|U>!C$Hl23G7 z@d(Dge9h#Wm|6G(MlJ$E7ODv**;UZ$YV?8VZ*0jepH9Xk^gVu8w-8ljDnOx{a4ozN z)kQDn+=P>x*VW)_*P=^cnagV4s2SB_Tf#G{lL(B42&nqUiMKZnvoLK=O-BYeRpf^K zqvkUT`NR0?UL9-!n>r1iit(8U^{B7Ck95Qwhs2AL|HQC7s4AQbUhd-?&KVAL)#u#{ zF{*J@G?i&O_VFb_XCXg+`YKCc!QXRQ%w!@x`m}hIU!GjeQ@VyeLQqbi(O6si>15VNU^l&q_S@dADeKsZb zMvas=yI`)@11W0~%#MhIs{50RPsE0s@{ZlHdo##gBrNN^E_&w~fp(thQ%1th?lRv! zTM7IiDRX$g{m1aHUB?BU({z=8PmYYghH)mA(Jn>*lJxxNUH0~#ANY&kqYK|JH_``1 zS!td@c8mojnIX!$?)|Ilhmy(rnx53+Yp(4* zyDt*Z@u@6qB%7Wu`q+5LO{q~MJ)50bcSjF>&$*0Y7W%>BQ*7|3 zP?n%>C{iXGB(k!E<2LGG-m3@4@wxZ_Ph-i37CoVW0K+?`5UI;eW)ad4Np;>by2WbdiDP08~ap(GFni4lXlZkf6shAcaU9>y-KS04Q7 z)aqTccdZ=0Phj<)6=T2-`X_%aEIrX&^}x?bmjP=-0N4vFxLj zDsZG-CU@?l)l}R? zFluy|ppPSl$BBMb5`J~HQ4rI=al2X;=RTE-TeF2otDAWUJc!}XK(Qx`7Sx9=B8Z8h zFfNIDrq(1MZbZVZ7VCV5&0f+l0>CFWlO)IaXBs#y`b43m!wWe;+<2^S*yL&8KA8*d zyISg1G*5=jd1${ufmN8{{sq)|LJ?G8FiH=ZH({z2gE|mpskrBud;R zQNB9w(&BQ`8H&`CY67B->{pY)T?B(`T1u?=d!QJN$uJrylY>y27rD$Ctj6!|79x(I8!Hcei!kppmqoV~g%ViMqv)nnvIZ{Mfn zI5Tv3C?j}ya|pQb#Js2z^9|p^0cucBaeh2Q8J+X9$Lf>PnA2N(hH=YBqRfFAUMm^# zN{$XAq7n^kmzwzc;#Ttx)g58oBS0}HFwvE}w|4K$JHc%;_he5gr!>y=)h20tJCEa0 z(2eZ*)%dr?#TthwzQK;3rP#_^&};o<$@-Lr9H;Eb!grri&7*Q>VJ=YUqp}&|0+p9u zM6{|U`0hdD6!y)B4k3Lu3$dx{$c{6>K%nx-BO??Fv+%(LHoa7gv9dxn@<%aiEmnLb zRN}#ft_2MX{UQ-Ve=)D}n9VF9)BXxInUh zrml44#r)2cHHM0!j)$ijOD%}{iqe!FZvQQT0oa|<^sbWwlZ0I=S>StcRQ9@oXgx*2 zbbCC|CdK#scJITjy)yHzyh>sen;D1LkQ8_;?fcV$FE8Tfo6XbYyI^N0z}o09f277e zUd#4AD$iCctF=wF(%z|p_ou>>j%K=f-}miTX|oBGLytd)i}fY0kql&_62%ppP!3K` z*?dT#E%EqS`?FZ_sjlqUHd^TirX6G=cZA-#!8$TLKT(g?He<*vgNcV+V~|(kOdj`- z>joSz%aRVxgCrT2`{&vyZPOfE%J1^GpH-lu^^7u8IS^)GrwjI+if)e1V0H3SR2(62 z>Hl|5S!3n8pp0y1Z(Dvd8}bwH(yc1io$Yfs`sBR8!!65F84^Xth^waTz^)BYPBIdgvpuV1L^s50m4le2Z3}8N+a|<`Km|O&E zHjT|le6^7K-X`lFwEgb++0TPe06*CZ@=oi!n||7z3HlMzkANU7Q9B)s?=~ndSnDGl z%1^Q*nTfO3oU49RO)SeTayEA+9HGKiOCANU1*|N*!Llh;JpwnZc}g9K4a(PP%167h zMSa-5klB<`jj|V*U#J;XJ9b>-=wYj${I*AUc1*U2x!X1 z_dJ^a)k-bON?LPfIzKsBJ|H*{Fit1nw;8p{JoNpMO^j6CQYMZe_FPG$T;|-7t4EP| zb%TCuR~CODPKKoNZo;qj+S*V3(B`Mi46gGJwI9Cc&Y9w%BVm_wyxPZAKkhIn$qXW7 zw6$3JW#Cc&;9X#nRX?$B{59f8-hT=(Vlo0ik4jD7hoG_QNB)m~UR|)fD}z~MDJf~! zqTN8K26)1GgjB@-OW(ojk4ofpwoVcrtBWN~CW}tj2n{wTiPUgemHnN`3VRC$1JqG$ z+A0YYVS%AWc1DtwWvm9HaR8-aC+ujX*bHR`Y6rd{!7fhQ7u1DsgOz+rY#-aPH4GVu z4$vF`eH;XWs*#7$>plIB@HHT#)__)+g3YxuddJ^qjP=3nT=D2*Kt ztcmP0l{pmjpd9v8LR3mED_odvX60Hb3((#+9*0Au+KajmMTlPYK?kSF&P!F(@~QjO zy4X|Cy^b+b_dx0|+|dIweZkXrtS2&tRa?{%%CLy z*RgdG|3ztQpwzjk?e=k8R3RSoYwXoZ>4MRBFbEb!h~Vtz6CX=+ziSN1Q&f?*>Aw@| z8oyWlhsn}BE_*=;Ow+w*^!{VWTBFG*B{Aq4C?9b@^E%k?Vt5wa1{2QyC}V$z8{hwz z@Iq9Z?m5jXk+mo%F-5W*vn6m01?{P0f<~YNTQ+~G00v`8iR|WT4QOZ4KXJKoDZM|<`eE6#}O}OJyI#QP+a8Q!s z9a2KUSDsk^=D+UNm0Wk|TP`LAmauGpDSJG>v!;6@4V^iUh_fD_>`%^X%Mek0v4B%{5rU{X)0yqsfm?lt=uRBLrcM=w&*$C6*r0v)6m}9u0v)3Qjt~p7HAL*fDmY?&?_I)hwB$jeW=R zg8pnSIf-3{BYe~7MZ)Vp?#+_sut2iafh>s9E?BmmL!X6EjH%5~iOFgDO&CZLGBy&4 zK(BB*QyvpDdmo5q|K*a$hQQs#1R!CqbJ>2H_=6G|-^?v^L6%IJ7gF1-?)=dh+}pTK zd>{C@tC4!}%RN7p%#Lq_8pb|47Lykyw^?FU5X)9KibBCz3@`D+wT3K(=NUIG(#}5R zLY`yFRWFxk*OPspWYSv=XR!TuZhH1|? zzdlhO^gpqiGSM#a)9{eyr^Vjsoq|uxlQZqlz1(}6&g4Vf4@$eLz%Y9D0+5yW{hw({ zK{v!X-uD#}hQE(EEPoHmA3BSnoo%{+NL@kFwxiY&eEs1s95Dp56!g7oYm=TqD<%xx zrVpzQ&%^Vnw|>;-d+EjR&b11N0fG~xS~!OmgtwN$n;v{F)ys6b2^77{J}7@dEhxlt z(!&_oD~yMZaAl3|dm_h%9R3evp!0>>E!44_0k#u+q+pYrEJEy%7u)KdmFazwLmWa! zNS_L_P;CYEUU?Q4%+$PgBIyy$0QUu>Z|ui+gmd5gu_$Tppyzs6TEk!2j~6UT?HPlH z4T}MrNe!3NW0Aiip*uswxLVD3pFaKv`kgCB?|GRf7X{wk()&4MeAGwu{Cs3p^8blb z_kK&-n<{t)AwBReAA;B#qZCcI=3K;PTPT>4$d?drR^n)kL!tY4z7LajF%8u7FMTMI z&>&QWz1*7cSchYiMG_+RGaSfGbAM`FapqEiKpE*W{O@TCAV^ukpQ|7N;@~@U#iyR2 z1QY?edt7Eq8`qcQGKWtb-0Rg`Xq@Q{U_Fs|rP{sMzv~A6JT&t_-Fq0w)lU=&_olcE zF$xY_nTj#tTHL-Hbh!$hv%c}fD^2x`&)>c=MI)P_u-k})1fG`vNbhzv4g&XEkhw*d>(zY=T%5O1(j-)J{lB4? zoTBRwg%C5Nt-d(HNjY59{?tx5@ANRqZj;lbxeM8=PXs~5#5#_|A z%%jFX|MUsUicQqp`mJN!xkpwKicGCn=o@oY>tds@pzFG&{f&nIZmMtb8_=%;gm z&i7LtWy@NeGmTV?H*UX z_sAcJ;pAIS^PVO$`3Tp!2OE%wNROitzY-PgND10^_hsGj8sm^!wf-&Qul-5}2BK>| zfT9>yHa@+Ktw~J!rieokAAEn3ptsB#xm=Vft`v54n>93YS1#vwELjtumf<~l};FOhGlc_G&!wgj2C+0y?Kui}(vt=--VrN2~`NnOn@ z*Lh8vbj>5E*>9Akgd(S?eH~`aROi5ebdd_VA##~p545h;B}!XA zM-sr3^C{uSSYhQJzoCDdxzNo40b6F-ehQzT$D8Sa0ahV5pOxmo6`7wDWH&mkk_gFx|3FYbsQYR* z4bQhnDwN77?PFDwpGmLJ6-Nx#BSS)l)QO;9)PzIxxy=hh4OZnIu79G{-Ac$f{3AW_ z<(#=WM#osPx8FzfsPu5Kpcl{BAnLiKop>F{K^#iY_)%M+ZD1@Pkw;HXOfR3e2N?tj zi0K*WHY97B@+q!(CM1k4ewlNIVXb5R;;W=o&-SEB(WWaN{IefdqZ@3T{um!-7g#Tp z2xP9Wxu6%iN2K`p2SM`nZoMsL;biIpjTWxhvEniZRMJmb8Se|2@lC#$Lu7=_Xibvk zwF-VlmRtKBBiHzSTsFU#s(v2RXUPK}rW(+umOFh=VwhIUZNu)RuGl1%5P!RNp@dQ|=xCYO$$)nCIbkSWQb+3vj~uSQCHJG8A( z%HJ-f;IZsuB>%FS7uz-(Hzouoh|avhUdHEpf97B^9}>AfLNgv3QO$g2<7lUQ`?*>o z+!R*@xgM$0GeA5UG|}_ZrS2G-D$WzjhqTx8QCGiU3Q0P+K!EUO`>;5eH3*|(td7*BemPy z9|`*>|0wK1BU!%Q3k7hhB;X4FA1KQ{DBIOGRiL-`^*F)O(w(qyOGldZkGKk>b*{zF zD+LX31Zmu$81qtqu#$r{kL>^J3^ZBd6`eT~a*pnyE7e51hQ zUK*@|PqP*4w>g@pQKS6F<_)dq{ib*#xQkS%0pe>eNfe}ka%Khd2oW7&byN-0Wx==z z$jYp0_VU#vD&P~WnKxua@djkTb>C#I?5-tcX_mKZb<6EsjsN?^yqANNCx@0WPhy0e zOm*rx9Yne{9ib)c<(inDrVZp{d3U;c&s%+A;a^~R?eeYjwJIBH@FH# z&@iJdc%)i)uC{NJB_SbAa;?WYdcr-SDRy0cTJ3)Qtbpt$AVh}p%lG9CTN}eMuRwAE zk6J$GS1e^*ngf5H3uTEl>_5N--LNf1AX-MgPBP4eJ{8J|AFOBJ;87Vit!?pjdrE4e zNS6K@6Au2k1=LB*Hq*8LfuSzK4@FH5cw=qNLNw~%_3}C~xIZ9k20=*^w$WR&80n9( zT0wQB!WJK%jj;r({`mf_XOs=EPk_&V=fOgXrN*OmHCl2p_<5PYmsz!%rGX5L*b*@4 zF2?&e+bMDsaBYilp=cW|!+F+gOIk%Wbi)|)2)`G2HJE>#VuZzPOV>(j87T<%@qMTV z`+&qrKuv5N;3Hi|HRgufCXbUcJHF#z9T@$1DPKLmYQaa!UrD*C;(a~#HDN`@l;Kb) z8}k$2Ls_~Xn`{y>vg{jONS;%RUUA+D)Hyk{|4uk$jg38(yT2TofjHZ}45s¨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 z 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

                                                                                                                                                                                                                                              GUUeXck1SdyU&WQ_GauqXpn<$227 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%0A3D9&B4#ofR^SJlZ18o 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∓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⁢w`*z9JHg+BqOipE0gCy{b1`w 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

                                                                                                                                                                                                                                              gZ*WXCV-h4Z0jo)zde&70A@?v7D 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 literal 0 HcmV?d00001 diff --git a/gitbook/fonts/fontawesome/FontAwesome.otf b/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..d4de13e832d567ff29c5b4e9561b8c370348cc9c GIT binary patch literal 124988 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ÐT?>-5aYhU|+1c>&YMpPK5x#-mbV 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'NS^o{z1ZKlHsAybrl=JE7AP369ntV%vB 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 CDx5C> literal 0 HcmV?d00001 diff --git a/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..c7b00d2ba8896fd29de846b19f89fcf0d56ad152 GIT binary patch literal 76518 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%0DyT{kunD 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⋙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 z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f221e50a2ef60738ba30932d834530cdfe55cb3e GIT binary patch literal 152796 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

                                                                                                                                                                                                                                              =v_rA!CPE#mM^4@)}X7qf;At+v)G*FZd&; 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 ALjV8( literal 0 HcmV?d00001 diff --git a/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e7483cf61b490c08ed644d6ef802c69472eb247 GIT binary patch literal 90412 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%0Ded40&XED0GYFoIh+AV*?9!MR5pBW?X_8Bp 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 IH>08b4`|GD*#H0l literal 0 HcmV?d00001 diff --git a/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7eb74fd127ee5eddf3b95fee6a20dc1684b0963b GIT binary patch literal 71896 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≠dR0E9ICQ{-tcR;@{R^I5P#1GUH!p=-{c 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 literal 0 HcmV?d00001 diff --git a/gitbook/gitbook-plugin-auto-scroll-table/plugin.js b/gitbook/gitbook-plugin-auto-scroll-table/plugin.js new file mode 100644 index 000000000..b607d9191 --- /dev/null +++ b/gitbook/gitbook-plugin-auto-scroll-table/plugin.js @@ -0,0 +1,10 @@ +(function() { + [].slice.call(document.querySelectorAll('table')).forEach(function(el){ + var wrapper = document.createElement('div'); + wrapper.className = 'table-area'; + el.parentNode.insertBefore(wrapper, el); + el.parentNode.removeChild(el); + wrapper.appendChild(el); + }); + })(); + \ No newline at end of file diff --git a/gitbook/gitbook-plugin-auto-scroll-table/website.css b/gitbook/gitbook-plugin-auto-scroll-table/website.css new file mode 100644 index 000000000..f48a882c0 --- /dev/null +++ b/gitbook/gitbook-plugin-auto-scroll-table/website.css @@ -0,0 +1,40 @@ +table { + width: 100%; /*表格宽度*/ + max-width: 65em; /*表格最大宽度,避免表格过宽*/ + border: 1px solid #dedede; /*表格外边框设置*/ + margin: 15px auto; /*外边距*/ + border-collapse: collapse; /*使用单一线条的边框*/ + empty-cells: show; /*单元格无内容依旧绘制边框*/ +} +table th, +table td { + height: 35px; /*统一每一行的默认高度*/ + border: 1px solid #dedede; /*内部边框样式*/ + padding: 0 10px; /*内边距*/ +} + +table th { + font-weight: bold; /*加粗*/ + text-align: center !important; /*内容居中,加上 !important 避免被 Markdown 样式覆盖*/ + background: rgba(158,188,226,0.2); /*背景色*/ +} + +table tbody tr:nth-child(2n) { + background: rgba(158,188,226,0.12); +} + +table tr:hover { + background: #efefef; +} + +table th { + white-space: nowrap; /*表头内容强制在一行显示*/ +} + +table td:nth-child(1) { + white-space: nowrap; +} + +.table-area { + overflow: auto; +} \ No newline at end of file diff --git a/gitbook/gitbook-plugin-back-to-top-button/plugin.css b/gitbook/gitbook-plugin-back-to-top-button/plugin.css new file mode 100644 index 000000000..a418cbb57 --- /dev/null +++ b/gitbook/gitbook-plugin-back-to-top-button/plugin.css @@ -0,0 +1,55 @@ +.back-to-top { + position: fixed; + bottom: 25px; + right: 25px; + background: rgba(0, 0, 0, 0.5); + width: 50px; + height: 50px; + display: block; + text-decoration: none; + -webkit-border-radius: 35px; + -moz-border-radius: 35px; + border-radius: 35px; + display: none; +} +.back-to-top i { + color: #fff; + margin: 0; + position: relative; + left: 15px; + top: 14px; + font-size: 22px; +} +.back-to-top:hover { + background: rgba(0, 0, 0, 0.9); + cursor: pointer; +} +.book.color-theme-1 .back-to-top { + background: rgba(112, 66, 20, 0.5); +} +.book.color-theme-1 .back-to-top i { + color: #f3eacb; +} +.book.color-theme-1 .back-to-top:hover { + background: rgba(112, 66, 20, 0.9); +} +.book.color-theme-2 .back-to-top { + background: rgba(189, 202, 219, 0.5); +} +.book.color-theme-2 .back-to-top i { + color: #1C1F2B; +} +.book.color-theme-2 .back-to-top:hover { + background: rgba(189, 202, 219, 0.9); +} + +@media only screen + and (min-device-width: 320px) + and (max-device-width: 480px) + and (-webkit-min-device-pixel-ratio: 2) + and (orientation: portrait) { + .back-to-top { + bottom: 10px; + right: 10px; + } +} \ No newline at end of file diff --git a/gitbook/gitbook-plugin-back-to-top-button/plugin.js b/gitbook/gitbook-plugin-back-to-top-button/plugin.js new file mode 100644 index 000000000..abd35237d --- /dev/null +++ b/gitbook/gitbook-plugin-back-to-top-button/plugin.js @@ -0,0 +1,25 @@ +var gitbook = window.gitbook; + +gitbook.events.on('page.change', function() { + + var back_to_top_button = ['

                                                                                                                                                                                                                                              '].join(""); + $(".book").append(back_to_top_button) + + $(".back-to-top").hide(); + + $('.book-body,.body-inner').on('scroll', function () { + if ($(this).scrollTop() > 100) { + $('.back-to-top').fadeIn(); + } else { + $('.back-to-top').fadeOut(); + } + }); + + $('.back-to-top').click(function () { + $('.book-body,.body-inner').animate({ + scrollTop: 0 + }, 800); + return false; + }); + +}); diff --git a/gitbook/gitbook-plugin-code/plugin.css b/gitbook/gitbook-plugin-code/plugin.css new file mode 100644 index 000000000..a68fcdc00 --- /dev/null +++ b/gitbook/gitbook-plugin-code/plugin.css @@ -0,0 +1,37 @@ +#code-textarea { + height: 0; + position: fixed; + top: -1000px; + width: 0; +} + +.code-wrapper { + position: relative; +} + +.code-wrapper i { + color: #c1c7cd; + cursor: pointer; + font-size: 12px; + font-weight: bold; + position: absolute; + right: 1em; + top: 1em; +} + +.code-wrapper pre { + background: #f7f8f9; + border-radius: 3px; + counter-reset: line; + font-size: 15px; +} + +.code-wrapper pre > code > span.code-line:before { + counter-increment: line; + color: #c1c7cd; + content: counter(line); + display: inline-block; + font-size: 12px; + margin-right: 1.5em; + width: 1em; +} diff --git a/gitbook/gitbook-plugin-code/plugin.js b/gitbook/gitbook-plugin-code/plugin.js new file mode 100644 index 000000000..555d72467 --- /dev/null +++ b/gitbook/gitbook-plugin-code/plugin.js @@ -0,0 +1,91 @@ +require(['gitbook', 'jQuery'], function(gitbook, $) { + + const TERMINAL_HOOK = '**[terminal]' + + var pluginConfig = {}; + var timeouts = {}; + + function addCopyButton(wrapper) { + wrapper.append( + $('') + .click(function() { + copyCommand($(this)); + }) + ); + } + + function addCopyTextarea() { + + /* Add also the text area that will allow to copy */ + $('body').append('",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/makefile b/makefile new file mode 100644 index 000000000..6a3aa977e --- /dev/null +++ b/makefile @@ -0,0 +1,24 @@ +all: build + +build: summary + gitbook build + +start: summary + gitbook serve . + +summary: + book sm -i _book node_modules + +deploy_firebase: summary build + firebase login + firebase deploy + +tag: summary + @echo "Version: $(VERSION)" + git tag -a $(VERSION) -m "$(VERSION)" + git push origin $(VERSION) + +sync: + git submodule update --recursive --remote + +.PHONY: clean build all \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..ecf7f0785 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,785 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + } + } + }, + "@mermaid-js/mermaid-cli": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/mermaid-cli/-/mermaid-cli-9.4.0.tgz", + "integrity": "sha512-/Nqs8Xtasw5wvop1PPiqmSx5SUxq/yARH+0EhEHAx8MVdbZXtUnzuK+Yv6NgpD2/Fb84/N3jF08zmIiJSyT5Lg==", + "requires": { + "chalk": "^5.0.1", + "commander": "^10.0.0", + "puppeteer": "^19.0.0" + } + }, + "@puppeteer/browsers": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-0.5.0.tgz", + "integrity": "sha512-Uw6oB7VvmPRLE4iKsjuOh8zgDabhNX67dzo8U/BB0f9527qx+4eeUs+korU98OhG5C4ubg7ufBgVi63XYwS6TQ==", + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + } + }, + "@types/node": { + "version": "20.11.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.7.tgz", + "integrity": "sha512-GPmeN1C3XAyV5uybAf4cMLWT9fDWcmQhZVtMFu7OR32WjrqGG+Wnk2V1d0bmtUyE/Zy1QJ9BxyiTih9z8Oks8A==", + "optional": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==" + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "chromium-bidi": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.7.tgz", + "integrity": "sha512-6+mJuFXwTMU6I3vYLs6IL8A1DyQTPjCfIL971X0aMPVGRbGnNfl6i6Cl0NMbxi2bRYLGESt9T2ZIMRM5PAEcIQ==", + "requires": { + "mitt": "3.0.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "cosmiconfig": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.1.3.tgz", + "integrity": "sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, + "crypto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz", + "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==" + }, + "datauri": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/datauri/-/datauri-3.0.0.tgz", + "integrity": "sha512-NeDFuUPV1YCpCn8MUIcDk1QnuyenUHs7f4Q5P0n9FFA0neKFrfEH9esR+YMW95BplbYfdmjbs0Pl/ZGAaM2QHQ==", + "requires": { + "image-size": "0.8.3", + "mimer": "1.1.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "devtools-protocol": { + "version": "0.0.1107588", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1107588.tgz", + "integrity": "sha512-yIR+pG9x65Xko7bErCUSQaDLrO/P1p3JUzEk7JCU4DowPcGHkTGUGQapcfcLc4qj0UaALwZ+cr0riFgiqpixcg==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "requires": { + "pend": "~1.2.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "gitbook-plugin-mermaid-newface": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gitbook-plugin-mermaid-newface/-/gitbook-plugin-mermaid-newface-4.1.0.tgz", + "integrity": "sha512-sh5po2TgtIwh8VyrCUZzCU7BzMb9C+Om8NMD/sLMky2ITgMSYL3nVBwCYhmLPk6tadid4Tia5tJF2eiYipy6tw==", + "requires": { + "@mermaid-js/mermaid-cli": "^9.1.2", + "crypto": "^1.0.1", + "datauri": "^3.0.0" + } + }, + "gitbook-plugin-sitemap": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gitbook-plugin-sitemap/-/gitbook-plugin-sitemap-1.2.0.tgz", + "integrity": "sha512-PSJ2BuuNot5CczwzjSCIyRRtom87nPXuD4pEtuVUEg10D8ZBpT3r9+/el6XRzwf8gyC4Sf3QKqreD/ia/G5V4g==", + "requires": { + "sitemap": "1.5.0" + } + }, + "gitbook-plugin-sitemap-general": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/gitbook-plugin-sitemap-general/-/gitbook-plugin-sitemap-general-0.1.1.tgz", + "integrity": "sha512-Oe3ClhXzuxdsEnN7uhhMLIylXeMSFuW0YZhAe+Wk0agAXvlcBgOk61gnnp1Nde4QJ7lu2Vi2XNh2sI4uPGJT5g==", + "requires": { + "sitemap": "1.5.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "image-size": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.8.3.tgz", + "integrity": "sha512-SMtq1AJ+aqHB45c3FsB4ERK0UCiA2d3H1uq8s+8T0Pf8A3W4teyBQyaFaktH6xvZqh+npwlKU7i4fJo0r7TYTg==", + "requires": { + "queue": "6.0.1" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "mimer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimer/-/mimer-1.1.0.tgz", + "integrity": "sha512-y9dVfy2uiycQvDNiAYW6zp49ZhFlXDMr5wfdOiMbdzGM/0N5LNR6HTUn3un+WUQcM0koaw8FMTG1bt5EnHJdvQ==" + }, + "mitt": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", + "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "puppeteer": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-19.11.1.tgz", + "integrity": "sha512-39olGaX2djYUdhaQQHDZ0T0GwEp+5f9UB9HmEP0qHfdQHIq0xGQZuAZ5TLnJIc/88SrPLpEflPC+xUqOTv3c5g==", + "requires": { + "@puppeteer/browsers": "0.5.0", + "cosmiconfig": "8.1.3", + "https-proxy-agent": "5.0.1", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "puppeteer-core": "19.11.1" + } + }, + "puppeteer-core": { + "version": "19.11.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-19.11.1.tgz", + "integrity": "sha512-qcuC2Uf0Fwdj9wNtaTZ2OvYRraXpAK+puwwVW8ofOhOgLPZyz1c68tsorfIZyCUOpyBisjr+xByu7BMbEYMepA==", + "requires": { + "@puppeteer/browsers": "0.5.0", + "chromium-bidi": "0.4.7", + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1107588", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "proxy-from-env": "1.1.0", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.13.0" + } + }, + "queue": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.1.tgz", + "integrity": "sha512-AJBQabRCCNr9ANq8v77RJEv73DPbn55cdTb+Giq4X0AVnNVZvMHlYp7XlQiN+1npCZj1DuSmaA2hYVUUDgxFDg==", + "requires": { + "inherits": "~2.0.3" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "sitemap": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-1.5.0.tgz", + "integrity": "sha512-AGevBYvwFaoBsZoWClv8qlaA3lpoPCUnNh2zxIHl3coZXXD5U2+GKtkMBS3pXvl5NXvzN4R0392gN4YrIpSUmQ==", + "requires": { + "underscore": "^1.7.0", + "url-join": "^0.0.1" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "optional": true + }, + "url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..f7ebc2fbb --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "gitbook-plugin-mermaid-newface": "^4.1.0", + "gitbook-plugin-sitemap": "^1.2.0", + "gitbook-plugin-sitemap-general": "^0.1.1", + "graceful-fs": "^4.2.10" + } +} diff --git a/search_plus_index.json b/search_plus_index.json new file mode 100644 index 000000000..bdb9ab521 --- /dev/null +++ b/search_plus_index.json @@ -0,0 +1 @@ +{"./":{"url":"./","title":"Introduction","keywords":"","body":"Leetcode in Golang Leetcode, Codility , GeekforGeeks algorithms exercises written in Golang. https://kimi0230.github.io/LeetcodeGolang/ leetcode Content Leetcode in Golang leetcode Content Data Structure Array \\& String Matrix Linked List HashSet \\& HashMap Stack \\& Queue Heap \\& Priority Queue Heap 有幾個特色: heap sort Disjoint Set Union Trie Binary Indexed Tree Design Data Structures Algorithm Greedy Sort Multiple Pointers Backtracking (回溯法). DFS DFS \\& BFS Dynamic Programming Sliding Window Sweep Line Rolling Sum Two Pointers Bit Manipulation∂ Union Find Breadth First Search Binary Search Minimax Graph Graph Topological Sort Tree Tree Traversal Binary Search Tree Compputational Geometry Selected Topics Mathematics Random Bitwise Manipulation GeeksforGeeks Content Codility Content Reference Data Structure Array & String No. Title Solution Difficulty Time Space Topic 0001 Two Sum Go Easy O(n) O(n) Array 0003 Longest Substring Without Repeating Characters Go Medium O(n) O(1) Array, Sliding Window 0015 3 Sum Go Medium O(n^2) O(n) Array 0027 Remove Element Go Easy O(n) O(1) Array 0035 Search Insert Position Go Easy O(n), O(logn) O(1) Array 0049 Search Insert Position Go Medium O(kn) O(kn) Array 0059 Spiral Matrix II Go Medium O(n) O(n^2) Array 0088 Merge Sorted Array Go Easy O(n) O(1) Array 0217 0217.Contains Duplicate Go Easy O(n) O(n) Array 0242 0242.Valid Anagram Go Easy O(n) O(n) Array 0409 409. Longest Palindrome Go Easy O(n) O(1) Array 0380 0380.Insert Delete GetRandom O(1) Go Medium O(1) O(n) Array 0381 0381.Insert Delete GetRandom O(1) Duplicates allowed Go Medium O(1) O(n) Array 0412 0412.Fizz Buzz Go Easy O(n) O(n) Array, string 1195 1195.Fizz Buzz Multithreaded Go Medium O(n) Array, string,Concurrency 0238 238. Product of Array Except Self Go Medium O(n) Array, string, Prefix Sum 0128 128. Longest Consecutive Sequence Go Medium O(n) O(n) Array, Hash Table, Union Find Matrix Linked List No. Title Solution Difficulty Time Space Topic 0019 Remove Nth Node From End of List Go Medium O(n) O(1) Linked List, Two Pointers 0141 Linked List Cycle Go Easy O(n) O(1) Linked List, Two Pointers 0142 Linked List Cycle II Go Medium O(n) O(1) Linked List, Two Pointers 0203 Remove Linked List Elements Go Easy O(n) O(1) Linked List 0206 Reverse Linked List Go Easy O(n) O(1) Linked List 0876 Middle of the Linked List Go Easy Linked List, Two Pointers 0021 Merge Two Sorted Lists Go Easy O(log n) O(1) Linked List 0002 Add Two Number Go Medium O(max(m,n)) O(1) Linked List HashSet & HashMap Stack & Queue No. Title Solution Difficulty Time Space Topic 0020 Valid Parentheses Go Easy O(n) O(n) Stack 0094 Binary Tree Inorder Traversal Go Medium O(n) O(1) Stack Heap & Priority Queue Heap 總是能讓整棵樹當中最大或最小值維持在root節點上 Heap 有幾個特色: 常見架構是像 binary tree 那樣 保持 balanced max heap 的 root 是最大值;min heap 的 root 則是最小值 雖然是 tree,卻很適合放在 array 中處理 heap sort 根據定義 heap 的 root 一定是最大(假設是 max heap),也就是說,無序數列經過 heapify 再作 n 次 root deletion 取出最大值,就可以得到排序的結果。 最後就得到 heap sort 的 worst case 時間複雜度 O(nlogn) 的結果。 可是 quick sort 的 worst case 時間複雜度是 O(n²),怎麼 quick sort 的時間複雜度比較糟糕卻比較受歡迎? google 的結果是說 heap sort 比較不利於 caching 對於 spatial locality 機制,蠻有道理的阿。 https://www.zhihu.com/question/23873747 https://rust-algo.club/sorting/heapsort/index.html No. Title Solution Difficulty Time Space Topic 0703 Kth Largest Element in a Stream Go Easy O(K + (N-K)logK) O(k) Heap, Priority Queue 1046 Last Stone Weight Go Easy O(nlogn) O(n) Heap, Priority Queue 0347 Top K Frequent Elements Go Medium O(Nlog⁡k) O(n) Heap, Priority Queue, Quick Sort Disjoint Set Union Trie Binary Indexed Tree Design Data Structures Algorithm Greedy Sort No. Title Solution Difficulty Time Space Topic 0075 Sort Colors Go Medium O(n) O(1) Sort 0215 Kth Largest Element in an Array Go Medium O(n) O(logn) Sort Multiple Pointers Backtracking (回溯法). DFS DFS. 解決一個回溯問題, 實際上就是一個決策樹的遍歷過程. 算是一個暴力的窮舉算法 路徑:也就是已經做出的選擇。 選擇列表:也就是你當前可以做的選擇。 結束條件:也就是到達決策樹底層,無法再做選擇的條件。 https://www.bilibili.com/video/BV1P5411N7Xc result = [] def backtrack(路徑, 選擇列表): if 滿足結束條件: result.add(路徑) return for 選擇 in 選擇列表: 做選擇(前序) backtrack(路徑, 選擇列表) 撤銷選擇(後序) No. Title Solution Difficulty Time Space Topic 0046 Permutations (全排列) Go Medium O(n) O(n) Backtracking 0078 Subsets Go Medium O(n^2) O(n) Backtracking DFS & BFS 找最短路徑用BFS, 其他時用DFS用得多一些, 因為遞迴較好寫 假設有棵滿的二叉樹,節點數為 N. 對DFS來說空間複雜度就是遞迴, 最壞的情況就是樹的高度 O(log N) BFS算法, Queue每次都會存二叉樹一層的節點, 最壞的情況下空間複雜度應該就是樹的最下層的數量, 也就是 N/2. 空間複雜度 O(N) DFS(深度優先搜索)通常使用堆棧(Stack)來實現。在DFS中,您首先處理一個節點,然後將其子節點按某種順序推入堆棧中,接著繼續處理堆棧頂部的節點,直到堆棧為空。 BFS(廣度優先搜索)則使用隊列(Queue)來實現。在BFS中,您首先處理一個節點,然後將其子節點按某種順序排隊,接著繼續處理隊列的前端節點,直到隊列為空。 No. Title Solution Difficulty Time Space Topic 0695 Max Area of Island Go Medium O(m*n) O(m*n) DFS & BFS 0733 Flood Fill Go Easy O(m*n) O(m*n) DFS & BFS Dynamic Programming 動態規劃問題的一般形式就是求最值, 最長遞增子序列, 最小編輯距離等. 核心問題是窮舉 重疊子問題 memory table DP table 最優子結構 狀態轉移方程式 這問題的 base case (最簡單情況) 是什麼? 這問題有什麼狀態 對於每個狀態, 可以做出什麼選擇, 使得狀態發生改變 如何定義 dp 數組/函數的含義來表現狀態和選擇? 替換 /跳過 dp[i-1][j-1] 刪除 dp[i-1][j] 插入 dp[i][j-1] dp[i][j] # 初始化 base case dp[0][0][...] = base # 進行狀態轉移 for 狀態1 in 狀態1的所有取值: for 狀態2 in 狀態2的所有取值: for ... dp[狀態1][狀態2][...] = 求最值(選擇1,選擇2...) No. Title Solution Difficulty Time Space Topic 0053 Maximum Subarray Go Easy O(n) O(n) Dynamic Programming 0072 0072. Edit Distance Go Hard Dynamic Programming 0300 Longest-Increasing-Subsequence Go Medium 方法一:O(n^2) 方法二:O(nlogn) O(n) Dynamic Programming 0322 Coin Change Go Medium O(nm) O(n) Dynamic Programming 0354 Russian Doll Envelope Go Hard Dynamic Programming 0509 Fibonacci Number Go Easy 很多解法 很多解法 Dynamic Programming 0070 0070.Climbing Stairs Go Easy O(n) O(n) Dynamic Programming 0746 0746.Min Cost Climbing Stairs Go Easy O(n) O(1) Dynamic Programming Sliding Window 維護一個窗口, 不斷滑動 void slidingWindow(string s, string t){ unordered mapneed, window; for (char c:t) need[c++] int left = 0 , right = 0 int valid = 0 // 先移動 right 再移動 left. 直到right到達 string的末端 while(right No. Title Solution Difficulty Time Space Topic 0209 Minimum Size Subarray Sum Go Medium O(n^2) / O(n) / O(nlog n) O(1) / O(1) / O(n) Sliding Window 0438 Find All Anagrams in a String Go Medium O(n) O(1) Sliding Window 0567 Permutation in String Go Medium O(n) O(1) Sliding Window Sweep Line Rolling Sum Two Pointers 只要array有序, 就應該想到雙指針技巧 分為兩類 1. \"快,慢指針\" 2. \"左,右指針\" 快,慢指針: 主要解決 linkedlist 問題, 典型的判斷 linkedlist 是否包含環 左,右指針: 主要解決array(或 string)中的問題, 如二分搜尋. https://labuladong.gitee.io/algo/2/21/57/ No. Title Solution Difficulty Time Space Topic 0019 Remove Nth Node From End of List Go Medium O(n) O(1) Linked List, Two Pointers 0141 Linked List Cycle Go Easy O(n) O(1) Linked List, Two Pointers 0283 Move Zeroes Go Easy O(n) O(1) Two Pointers 0142 Linked List Cycle II Go Medium O(n) O(1) Linked List, Two Pointers 0344 Reverse String Go Easy O(n) O(1) Two Pointers 0876 Middle of the Linked List Go Easy Linked List, Two Pointers 0011 Container With Most Water Go Medium Two Pointers 0074 Search a 2D Matrix Go Medium Binary Search, Two Pointers Bit Manipulation∂ No. Title Solution Difficulty Time Space Topic 0693 Binary Number with Alternating Bits Go Easy O(n)/ O(1) O(1) / O(1) Bit Manipulation Union Find No. Title Solution Difficulty Time Space Topic 0721 Accounts Merge Go Easy O(n) / O(n log n) O(n) / O(n) Union Find Breadth First Search DFS 算法可以被認為是回溯算法, BFS算法都是用Queue這種數據結構, 每次將一個截短周圍的所有節點加入Queue. BFS 找到的路徑一定是最短的, 但是代價是空間複雜度比DFS大. BFS vs DFS 優化: 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散, 那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集 無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的 // 計算從起點 start 到 終點 target 的最點距離 int BFS(Node start, Node targe){ Queue q; // 核心數據結構 Set visited; // 避免走回頭路 q.offer(start); // 將起點加入 Queue visited.add(start); int step = 0; // 紀錄擴散的步數 while(q not empty) { int sz = q.size(); // 當前 Queue 中的所有節點向四周擴散 for (int i = 0 ; i No. Title Solution Difficulty Time Space Topic 0310 Minimum Height Trees Go Medium Breadth First Search 0752 752. Open the Lock Go Medium Breadth First Search Binary Search 分析二分搜尋技巧: 不要出現 else, 而是把所有情況用 else if 寫清楚. 計算 mid 時需要防止溢出 int binarySearch(int[] nums, int target){ int left = 0 , right = ...; while(...) { int mid = left + (right - left)/2 if (nums[mid] == target){ ... } else if (nums[mid] target){ right = ... } } return ...; } No. Title Solution Difficulty Time Space Topic 0704 704. Binary Search Go Easy 最差:O(long n) 最佳O(1)剛好在中間 迭代: O(1) 遞迴O(log n) Binary Search 0875 875. Koko Eating Bananas Go Medium O(n log m) O(1) Binary Search Minimax Graph Graph Topological Sort Tree No. Title Solution Difficulty Time Space Topic 0226 Invert Binary Tree Go Easy O(n) O(1) Tree 0104 Maximum Depth of Binary Tree Go Easy O(n) O(1) Tree 0543 Diameter of Binary Tree Go Easy O(n) O(n), O(log(n)) Tree, DFS 0110 Balanced Binary Tree Go Easy O(n) O(1) Tree, DFS 0100 Same Tree Go Easy O(n) O(1) Tree 0105 Construct Binary Tree from Preorder and Inorder Traversal Go Medium O(n) O(n) Array Tree Traversal Binary Search Tree Compputational Geometry Selected Topics Mathematics Random Bitwise Manipulation GeeksforGeeks Content Topic Title No. Solution Difficulty TimeComplexity SpaceComplexity Sorting Find Minimum Difference Between Any Two Elements 0031 Go Basic O(n^2), O(n log n) O(n), O(n) Codility Content Topic Title Solution Difficulty TimeComplexity SpaceComplexity Lesson 1 Iterations Binary Gap Go Painless O(log n) O(1) Lesson 2 Array Cyclic Rotation Go Painless O(1) O(1) Odd Occurrences In Array Go Painless O(n), O(n) O(n), O(1) Lesson 3 Time Complexity Frog Jmp Go Painless O(1) O(1) Perm Missing Elem Go Painless O(n) O(1) Tape Equilibrium Go Painless O(n) O(n) Lesson 4 Counting Elements Frog River One Go Painless O(n) O(n) Max Counters Go Respectable O(n+m) O(n) Missing Integer Go Respectable O(n) O(n) Perm Check Go Painless O(n) O(n) Lesson 5 Prefix Sums Count Div Go Respectable O(1) O(1) Genomic Range Query Go Respectable O(n+m) O(n) MinAvg Two Slice Go Respectable O(n) O(n) Passing Cars Go Painless O(n) O(1) Lesson 6 Sorting Distinct Go Painless O(nlogn) O(n) Max Product of Three Go Painless O(nlogn) O(1) Number Of Disc Intersections Go Respectable O(nlogn) O(n) Triangle Go Painless O(nlogn) O(n) Lesson 7 Stacks and Queues Brackets Go Painless O(n) O(n) Fish Go Painless O(n) O(n) Nesting Go Painless O(n) O(1) Stone Wall Go Painless O(n) O(n) Lesson 8 Leader Dominator Go Painless O(n) O(1) EquiLeader Go Painless O(n) O(n) Lesson 9 Maximum slice problem Max Profit Go Painless O(n) O(1) Max Slice Sum Go Painless O(n) O(n) Max Double Slice Sum Go Respectable O(n) O(n) Lesson 10 Prime and composite numbers Count Factors Go Painless O(sqrt(n)) O(1) Flags Go Respectable O(n) O(n) MinPerimeterRectangle Go Painless O(sqrt(n))) O(1) Peaks Go Respectable O( n*log( log(n) )) O(n) Lesson 11 Sieve of Eratosthenes (質數篩) Count Non Divisible Go Respectable O(N * log(N)) O(n) Count Semiprimes Go Respectable O(N*log(log(N))+M) O(N+M) Lesson 12 Euclidean algorithm (輾轉相除法 or 歐幾里得算法) Chocolates By Numbers Go Painless O(log(N + M)) O(1) Common Prime Divisors Go Respectable O(Z * log(max(A) + max(B))**2) O(1) Lesson 13 Fibonacci numbers FibFrog Go Respectable O(N * log(N)) O(N) Ladder Respectable Lesson 14 Binary search algorithm MinMaxDivision Respectable NailingPlanks Respectable Lesson 15 Caterpillar method AbsDistinct Painless CountDistinctSlices Painless CountTriangles Painless MinAbsSumOfTwo Respectable Lesson 16 Greedy algorithms MaxNonoverlappingSegments Painless TieRopes Painless Lesson 17 Dynamic programming MinAbsSum Ambitious NumberSolitaire Respectable Reference leetcode leetcode-cn halfrost anakin wufenggirl GeeksforGeeks Codility GitHub: labuladong/fucking-algorithm(labuladong 算法小抄) https://cses.fi/ https://github.com/neetcode-gh/leetcode © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Algorithms/A1B2C3/":{"url":"Algorithms/A1B2C3/","title":"A1B2C3: Two Go Routine Print A1B2C3....Z26","summary":"Two Go Routine Print A1B2C3....Z26","keywords":"","body":"A1B2C3 tagsstart Algorithm Golang A1B2C3 tagsstop 用兩個 go routine 印出 A1B2C3....Z26 Two Go Routine Print A1B2C3....Z26 Channle With Buffer func ChannelWBuffer() { abc := make(chan struct{}, 1) num := make(chan struct{}, 1) done := make(chan struct{}) abc Channel Without Buffer func ChannelWOBuffer() { abc := make(chan struct{}) num := make(chan struct{}) done := make(chan struct{}) go func() { for i := 65; i Wait Group func WGLock() { abcMux := sync.Mutex{} numMux := sync.Mutex{} numMux.Lock() wg := sync.WaitGroup{} wg.Add(2) go func() { defer wg.Done() for i := 65; i Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Algorithms/A1B2C3 cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkChannelWBuffer-4 79159 14612 ns/op 344 B/op 5 allocs/op BenchmarkChannelWOBuffer-4 83068 14451 ns/op 344 B/op 5 allocs/op BenchmarkWGLock-4 51303 23072 ns/op 96 B/op 5 allocs/op PASS ok LeetcodeGolang/Algorithms/A1B2C3 4.092s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Algorithms/Find_Target_Last_Index/findtargetlastindex.html":{"url":"Algorithms/Find_Target_Last_Index/findtargetlastindex.html","title":"Find Target Last Index","summary":"在有序的array中 找出target在array中最後的index是什麼","keywords":"","body":"Find Target Last Index tagsstart Interview Algorithms Go Easy Find Target Last Index Right Bound Left Bound tagsstop 在有序的array中 找出target在array中最後的index是什麼 用二分搜尋法去找, RightBound 可參考 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0704.Binary-Search/main.go 方法一 func Solution(nums []int, target int) int { left, right := 0, len(nums)-1 result := -1 for left > 1) if nums[mid] == target { // 繼續找, 縮小右邊 if target == nums[right] { result = right break } else { right-- } } else if nums[mid] target { // 往左找 right = mid - 1 } } return result } 方法二 遞迴 func SolutionRecursive(nums []int, target int) int { left, right := 0, len(nums)-1 return findTarget(nums, left, right, target) } func findTarget(nums []int, left, right, target int) int { if left > right { return -1 } mid := int(uint(left+right) >> 1) if nums[mid] == target { if nums[right] == target { return right } else { return findTarget(nums, mid, right-1, target) } } else if nums[mid] go test -benchmem -run=none LeetcodeGolang/Algorithms/Find_Target_Last_Index -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Algorithms/Find_Target_Last_Index cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkSolution-8 54216429 24.75 ns/op 0 B/op 0 allocs/op BenchmarkSolutionRecursive-8 40756744 27.75 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Algorithms/Find_Target_Last_Index 2.537s RightBound // 有點類似 nums 大於 target的元素有幾個 func RightBound(nums []int, target int) (index int) { lenght := len(nums) if lenght >1 mid := int(uint(right+left) >> 1) if nums[mid] == target { // 注意:要繼續找右邊, 所以把左邊變大=mid+1 left = mid + 1 } else if nums[mid] target { // 找左邊 right = mid - 1 } } // 都沒找到 注意:right越界情況 if right LeftBound // 有點類似 nums 小於 target的元素有幾個 func LeftBound(nums []int, target int) (index int) { lenght := len(nums) if lenght >1 mid := int(uint(right+left) >> 1) if nums[mid] == target { // 要繼續找左邊, 所以把右邊變小 right = mid - 1 } else if nums[mid] target { // 找左邊 right = mid - 1 } } // 都沒找到 注意: left越界情況 if left >= lenght || nums[left] != target { return -1 } return left } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/":{"url":"Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/","title":"Intersection Of Two Sorted Arrays Using In Place Approach","summary":"","keywords":"","body":"Intersection of Two Sorted Arrays using In Place Approach tagsstart Golang Algorithms Intersection tagsstop Intersection of Two Sorted Arrays using In Place Approach 要在原地(in-place)解決這個問題,可以使用雙指針的方法。假設給定的兩個數組分別為A和B,它們已經按升序排序。 首先,我們可以初始化兩個指針i和j分別指向A和B的起始位置,然後開始進行比較。如果A[i]小於B[j],則移動指針i向後移動一位;如果A[i]大於B[j],則移動指針j向後移動一位;如果A[i]等於B[j],則將該值添加到結果中,並將兩個指針都向後移動一位。 重複上述步驟,直到其中一個數組的指針達到數組末尾為止。最終,得到的結果就是兩個數組的交集。 package intersection func FindIntersection(A, B []int) []int { var i, j int = 0, 0 result := []int{} for i B[j] { j++ } else { result = append(result, A[i]) i++ j++ } } return result } func TestFindIntersection(t *testing.T) { var tests = []struct { arg1 []int arg2 []int want []int }{ { arg1: []int{1, 3, 4, 6, 7}, arg2: []int{2, 4, 6, 8, 9}, want: []int{4, 6}, }, } for _, tt := range tests { if got := FindIntersection(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { t.Errorf(\"got = %v, want = %v\", got, tt.want) } } } TODO: 延伸 349. Intersection of Two Arrays (easy) 350. Intersection of Two Arrays II © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Algorithms/SearchGraph/":{"url":"Algorithms/SearchGraph/","title":"Search Graph In Golang","summary":"","keywords":"","body":"Search Graph tagsstart Golang Algorithms Search Graph BFS tagsstop 2 / \\ / \\ 1 - 3 - 5 - 7 \\ / \\ 6 \\ / 4 一個Graph,隨便指定一個起點, 優先print出周圍的值 // 1 -> [2, 3, 4] // 2 -> [1, 5] // 3 -> [1, 5] // 4 -> [1, 6] // 5 -> [2, 3, 7] // 6 -> [4, 7] // 7 -> [5, 6] // print : 1,2,3,4,5,6,7 // Also this is valid : 1,4,3,2,6,5,7 例如 開始位置1, print : 1,2,3,4,5,6, 解法 用BFS(Queue) 時間複雜度是O(V+E),其中V是圖中節點的數量,E是圖中邊的數量 解答 package searchgraph import ( \"LeetcodeGolang/Utility/crud\" \"LeetcodeGolang/structures\" \"fmt\" \"strconv\" jsoniter \"github.com/json-iterator/go\" ) func fetchNeighbours(node int) []int { crud := crud.NewCrud(\"https://hackbear.tv/graph/\" + strconv.Itoa(node)) var result = []int{} if got := crud.Get(); got.Error != nil { // fmt.Printf(\"got = %v\", got) } else { var json = jsoniter.ConfigCompatibleWithStandardLibrary json.Unmarshal([]byte(got.Response), &result) } return result } /* 2 / \\ / \\ 1 - 3 - 5 - 7 \\ / \\ 6 \\ / 4 */ // 1 -> [2, 3, 4] // 2 -> [1, 5] // 3 -> [1, 5] // 4 -> [1, 6] // 5 -> [2, 3, 7] // 6 -> [4, 7] // 7 -> [5, 6] // print : 1,2,3,4,5,6,7 // Also this is valid : 1,4,3,2,6,5,7 // You will be working on this part /* 時間複雜度是O(V+E),其中V是圖中節點的數量,E是圖中邊的數量 */ func SearchGraph(start int) { queue := structures.NewQueue() queue.Push(start) visit := make(map[int][]int) for queue.Len() > 0 { node := queue.Pop() if _, ok := visit[node]; !ok { fmt.Printf(\"%d \", node) neighours := fetchNeighbours(node) visit[node] = neighours for _, neighour := range neighours { if _, ok := visit[neighour]; !ok { queue.Push(neighour) } } } } } func SearchGraph2(start int) { queue := structures.NewQueue() queue.Push(start) visited := make(map[int]bool) for queue.Len() > 0 { node := queue.Pop() if !visited[node] { fmt.Printf(\"%d \", node) visited[node] = true neighbors := fetchNeighbours(node) for _, neighbor := range neighbors { if !visited[neighbor] { queue.Push(neighbor) } } } } } Reference https://www.youtube.com/watch?v=BkszA-MvjXA https://web.ntnu.edu.tw/~algo/Graph.html © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Algorithms/WeightedEditDistance/":{"url":"Algorithms/WeightedEditDistance/","title":"Weighted Edit Distance","summary":"","keywords":"","body":"WeightedEditDistance tagsstart Golang WeightedEditDistance Dynamic Programming tagsstop WeightedEditDistance 是一個計算帶有權重的編輯距離的函式。編輯距離是衡量兩個字串之間的相似度的指標,表示將一個字串轉換為另一個字串所需的最小操作數量。 在標準的編輯距離算法中,操作包括插入、刪除和替換字符。每個操作都被認為具有相同的代價。然而,在 WeightedEditDistance 中,每個字符的操作代價可以不同,並由一個權重映射表指定。 函式 WeightedEditDistance 接受兩個字符串 word1 和 word2,以及一個權重映射表 weights。該映射表將每個字符映射到其相應的權重值,用於計算操作的代價。 該函式使用動態規劃的方法計算編輯距離。它創建一個二維矩陣 dp,其中 dp[i][j] 表示將 word1[:i] 轉換為 word2[:j] 的最小操作代價。 算法的核心是遍歷 dp 矩陣並計算每個單元格的值。如果 word1[i-1] 等於 word2[j-1],則表示兩個字符相等,不需要進行操作,所以 dp[i][j] 等於 dp[i-1][j-1]。否則,需要考慮插入、刪除和替換操作的代價,並取其中最小的作為 dp[i][j] 的值。 最終,函式返回 dp[m][n],其中 m 和 n 分別為 word1 和 word2 的長度,表示將整個字串 word1 轉換為 word2 的最小操作代價。 使用 WeightedEditDistance 函式,您可以根據字符的權重值計算帶有自定義操作代價的編輯距離,以更好地反映兩個字串之間的相似性。 題目大意 weightededitdistance 雖然不是一個特定的LeetCode問題,但它涉及到一個概念:加權編輯距離(Weighted Edit Distance)。 加權編輯距離是指在兩個字串之間進行編輯操作(插入、刪除、替換)時,每個操作具有不同的成本或權重。該問題要求計算從一個字串轉換到另一個字串的最小總成本或權重。 解題思路 解決加權編輯距離問題的常用方法是使用動態規劃(Dynamic Programming)。 創建一個二維數組dp,其中dp[i][j]表示將字串1的前i個字符轉換為字串2的前j個字符的最小加權編輯距離。 初始化dp矩陣的第一行和第一列,分別表示將空字串轉換為字串1和字串2的成本,根據具體問題設置初始值。 遍歷dp矩陣,計算每個dp[i][j]的值,根據以下三種情況進行選擇: 如果字串1的第i個字符等於字串2的第j個字符,則dp[i][j]等於dp[i-1][j-1],即不需要進行編輯操作,繼承前一個狀態的編輯距離。 否則,dp[i][j]等於插入操作的成本加上dp[i][j-1],刪除操作的成本加上dp[i-1][j],替換操作的成本加上dp[i-1][j-1],取這三種操作的最小值。 最終,dp[m][n](其中m和n分別為兩個字串的長度)即為兩個字串的最小加權編輯距離。 替換 /跳過 dp[i-1][j-1] 刪除 dp[i-1][j] 插入 dp[i][j-1] dp[i][j] 時間複雜度: 動態規劃的遍歷過程需要計算和填充dp矩陣的每個元素,因此時間複雜度為O(m*n),其中m和n分別為兩個字串的長度。 空間複雜度: 需要使用一個二維數組dp來保存中間結果,因此空間複雜度為O(m*n)。 解答 package weightededitdistance import \"fmt\" func WeightedEditDistance(word1, word2 string, weights map[rune]int) int { m, n := len(word1), len(word2) // 創建二維矩陣用於保存編輯距離 // dp,其中 dp[i][j] 表示將 word1[:i] 轉換為 word2[:j] 的最小操作代價 dp := make([][]int, m+1) for i := 0; i 相關 0072.Edit-Distance © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"CodeSignal/":{"url":"CodeSignal/","title":"Code Signal","keywords":"","body":"Code Signal Reference https://app.codesignal.com/arcade/intro/level-1 https://github.com/abrar-abu/golanee/main https://github.com/crusty0gphr/bank-request-processor https://github.com/abrar-mahedavi/challenges/tree/main © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"CodeSignal/Bank-Requests/":{"url":"CodeSignal/Bank-Requests/","title":"Bank Requests","summary":"Bank Requests","keywords":"","body":"Bank Requests tagsstart CodeSignal Go Bank Requests tagsstop A solution to one of my coding interview questions. Complete solution - written in GoLang Task: You've been asked to program a bot for a popular bank that will automate the management of incoming requests. There are three types of requests the bank can receive: transfer i j sum: request to transfer sum amount of money from the i-th account to the j-th one deposit i sum: request to deposit sum amount of money in the i-th account withdraw i sum: request to withdraw sum amount of money from the i-th account. Your bot should also be able to process invalid requests. There are two types of invalid requests: invalid account number in the requests; deposit / withdrawal of a larger amount of money than is currently available. For the given list of accounts and requests, return the state of accounts after all requests have been processed, or an array of a single element [- ] (please note the minus sign), where is the 1-based index of the first invalid request. Example for accounts = [10, 100, 20, 50, 30] and requests = [\"withdraw 2 10\", \"transfer 5 1 20\", \"deposit 5 20\", \"transfer 3 4 15\"], the output should be bankRequests(accounts, requests) = [30, 90, 5, 65, 30]. accounts = [10, 100, 20, 50, 30] : 代表 ID:1 有10元, ID:2 有100元 ... \"withdraw 2 10\" : 從ID:2 提領 10元, 所以100-10 最後得到accounts= [10, 90, 20, 50, 30] Here are the states of accounts after each request: \"withdraw 2 10\": [10, 90, 20, 50, 30] \"transfer 5 1 20\": [30, 90, 20, 50, 10] \"deposit 5 20\": [30, 90, 20, 50, 30] \"transfer 3 4 15\": [30, 90, 5, 65, 30], which is the answer For accounts = [20, 1000, 500, 40, 90] and requests = [\"deposit 3 400\", \"transfer 1 2 30\", \"withdraw 4 50\"], the output should be bankRequests(accounts, requests) = [-2]. After the first request, accounts becomes equal to [20, 1000, 900, 40, 90], but the second one turns it into [-10, 1030, 900, 40, 90], which is invalid. Thus, the second request is invalid, and the answer is [-2]. Note that the last request is also invalid, but it shouldn't be included in the answer. 中文意思: 你被要求為一家知名銀行編寫一個機器人,該機器人將自動處理來自客戶的請求。銀行可能會收到三種類型的請求: transfer i j sum:從第i個帳戶轉移sum金額到第j個帳戶的請求 deposit i sum:向第i個帳戶存入sum金額的請求 withdraw i sum:從第i個帳戶提取sum金額的請求。 你的機器人還應該能夠處理無效的請求。無效的請求有兩種類型:請求中的帳戶號碼無效;存款/提款金額大於當前可用金額。 對於給定的帳戶列表和請求,返回處理完所有請求後的帳戶狀態,或單一元素為[- ]的數組(請注意負號),其中 是第一個無效請求的從1開始的索引。 以accounts = [10, 100, 20, 50, 30] 和 requests = [\"withdraw 2 10\", \"transfer 5 1 20\", \"deposit 5 20\", \"transfer 3 4 15\"] 為例,輸出應為 bankRequests(accounts, requests) = [30, 90, 5, 65, 30]。 accounts = [10, 100, 20, 50, 30] 代表:ID:1 有10元, ID:2 有100元 ... \"withdraw 2 10\" 從ID:2 提領 10元,所以100-10 最後得到accounts= [10, 90, 20, 50, 30] 這是每個請求後帳戶的狀態: \"withdraw 2 10\": [10, 90, 20, 50, 30] \"transfer 5 1 20\": [30, 90, 20, 50, 10] \"deposit 5 20\": [30, 90, 20, 50, 30] \"transfer 3 4 15\": [30, 90, 5, 65, 30],這是答案 對於accounts = [20, 1000, 500, 40, 90] 和 requests = [\"deposit 3 400\", \"transfer 1 2 30\", \"withdraw 4 50\"],輸出應為 bankRequests(accounts, requests) = [-2]。 第一個請求後,帳戶變成 [20, 1000, 900, 40, 90],但第二個請求將其變為 [-10, 1030, 900, 40, 90],這是無效的。因此,第二個請求無效,答案為[-2]。請注意最後一個請求也是無效的,但不應包含在答案中。 解答 package bankrequests import ( \"errors\" \"fmt\" \"regexp\" \"strconv\" \"strings\" \"sync\" ) var ( errInvaldTransfer = errors.New(\"invalid transfer\") errInvaldWithdraw = errors.New(\"invalid withdraw\") errInvaldDeposit = errors.New(\"invalid deposit\") errUnknownAction = errors.New(\"unknown action\") ) var requestScheme = [][]string{ 3: {\"action\", \"from\", \"amount\"}, 4: {\"action\", \"from\", \"to\", \"amount\"}, } type BankService interface { getActionName() string transfer() error withdraw() error deposit() error } type Bank struct { BankService action string requestId int from int to int amount int balances []int requestFailed bool failedRequest []int mutex sync.RWMutex } func (bank *Bank) getActionName() string { return bank.action } func (bank *Bank) transfer() error { bank.mutex.Lock() defer bank.mutex.Unlock() invalidAmout := bank.balances[bank.from-1] ]`的數組(請注意負號) func (bank *Bank) failedAction() { bank.mutex.Lock() defer bank.mutex.Unlock() failed := []int{-bank.requestId} bank.balances = []int{} bank.requestFailed = true bank.failedRequest = failed } func (bank *Bank) Action() { var requestErr error action := bank.getActionName() // fmt.Println(\"action:\", action) switch action { case \"transfer\": requestErr = bank.transfer() case \"withdraw\": requestErr = bank.withdraw() case \"deposit\": requestErr = bank.deposit() default: requestErr = errUnknownAction } if requestErr != nil { fmt.Println(\"requestErr:\", requestErr) bank.failedAction() } } func extractRequestParams(request string) map[string]interface{} { res := map[string]interface{}{} reqSlice := strToSlice(request) fmt.Println(\"reqSlice:\", reqSlice) // len is 3: {\"action\", \"from\", \"amount\"}, // len is 4: {\"action\", \"from\", \"to\", \"amount\"}, scheme := requestScheme[len(reqSlice)] for i, v := range scheme { res[v] = reqSlice[i] } return res } func strToSlice(str string) []interface{} { var res []interface{} erp := strings.Fields(str) re, err := regexp.Compile(\"[0-9]+\") if err != nil { fmt.Println(\"Error compiling regex:\", err) return nil } for _, v := range erp { if isNum := re.MatchString(v); isNum { if n, _ := strconv.Atoi(v); n != 0 { res = append(res, n) } } else { res = append(res, v) } } return res } func bankRequests(requests []string, balances []int) []int { var res []int for index, request := range requests { reqParams := extractRequestParams(request) bank := NewBank() bank.requestId = index + 1 bank.action = reqParams[\"action\"].(string) bank.amount = reqParams[\"amount\"].(int) bank.from = reqParams[\"from\"].(int) if _, ok := reqParams[\"to\"]; ok { bank.to = reqParams[\"to\"].(int) } bank.balances = balances bank.Action() if bank.requestFailed { return bank.failedRequest } res = bank.balances } return res } unit test package bankrequests import ( \"reflect\" \"testing\" ) var tests = []struct { arg1 []string arg2 []int want []int }{ { []string{ \"transfer 1 4 10\", \"deposit 3 10\", \"withdraw 5 15\", }, []int{20, 30, 10, 90, 60}, []int{10, 30, 20, 100, 45}, }, { []string{ \"transfer 1 4 40\", \"deposit 3 10\", \"withdraw 5 65\", }, []int{20, 30, 10, 90, 60}, []int{-1}, }, { []string{ \"withdraw 2 10\", \"transfer 5 1 20\", \"deposit 5 20\", \"transfer 3 4 15\", }, []int{10, 100, 20, 50, 30}, []int{30, 90, 5, 65, 30}, }, { []string{ \"deposit 3 400\", \"transfer 1 2 30\", \"withdraw 4 50\", }, []int{20, 1000, 500, 40, 90}, []int{-2}, }, } func TestBankRequests(t *testing.T) { for _, tt := range tests { if got := bankRequests(tt.arg1, tt.arg2); !reflect.DeepEqual(got, tt.want) { t.Errorf(\"got = %v, want = %v\", got, tt.want) } } } Reference https://github.com/crusty0gphr/bank-request-processor/tree/master © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0001.Iterations/Binary-Gap/":{"url":"Codility/Lesson/0001.Iterations/Binary-Gap/","title":"Binary Gap","summary":"Binary Gap","keywords":"","body":"BinaryGap tagsstart Codility Go Iterations Painless Bitwise Manipulation tagsstop START Find longest sequence of zeros in binary representation of an integer. 題目 A binary gap within a positive integer N is any maximal sequence of consecutive zeros that is surrounded by ones at both ends in the binary representation of N. For example, number 9 has binary representation 1001 and contains a binary gap of length 2. The number 529 has binary representation 1000010001 and contains two binary gaps: one of length 4 and one of length 3. The number 20 has binary representation 10100 and contains one binary gap of length 1. The number 15 has binary representation 1111 and has no binary gaps. The number 32 has binary representation 100000 and has no binary gaps. Write a function: func Solution(N int) int that, given a positive integer N, returns the length of its longest binary gap. The function should return 0 if N doesn't contain a binary gap. For example, given N = 1041 the function should return 5, because N has binary representation 10000010001 and so its longest binary gap is of length 5. Given N = 32 the function should return 0, because N has binary representation '100000' and thus no binary gaps. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 輸入正整數, 找出此數在二進位,兩個bit值為1中裡面隔著最多0的長度 解題思路 先找出bit 1的位子, 再開始算中間最長的長度 解題思路通常可以使用位運算來處理二進制數字。我們可以將N轉換為二進制表示,然後使用遍歷或迴圈來找到相鄰1之間的最大距離。可以使用兩個指針來記錄相鄰的1的 時間複雜度: 解題思路中的遍歷或迴圈需要將N轉換為二進制,因此時間複雜度取決於二進制表示的位數。假設N的位數為k,則時間複雜度為O(k)。 空間複雜度: 解題思路中不需要使用額外的數據結構,只需要使用幾個變數來保存位置和計算結果,因此空間複雜度為O(1)。 來源 https://app.codility.com/programmers/lessons/1-iterations/binary_gap/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0001.Iterations/Binary-Gap/Binary-Gap.go package binarygap // O(log n) func Solution(N int) int { maxLen, curLen := 0, 0 findOne := false for N > 0 { curBit := N & 1 if curBit == 1 { curLen = 0 findOne = true } else if curBit == 0 && findOne { curLen++ } if curLen > maxLen { maxLen = curLen } N = N >> 1 } return maxLen } // https://wandbox.org/permlink/totZwDAbL1wCgsqt func evil(x int) int { if x&(x+1) > 0 { return evil(x|(x>>1)) + 1 } else { return 0 } } func SolutionRecur(N int) int { for (N & 1) == 0 { N = N >> 1 } return evil(N) } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0002.Array/CyclicRotation/":{"url":"Codility/Lesson/0002.Array/CyclicRotation/","title":"Cyclic Rotation","summary":"Cyclic Rotation","keywords":"","body":"CyclicRotation tagsstart Codility Go Array Painless Multiple Pointers tagsstop An array A consisting of N integers is given. Rotation of the array means that each element is shifted right by one index, and the last element of the array is moved to the first place. For example, the rotation of array A = [3, 8, 9, 7, 6] is [6, 3, 8, 9, 7] (elements are shifted right by one index and 6 is moved to the first place). The goal is to rotate array A K times; that is, each element of A will be shifted to the right K times. Write a function: func Solution(A []int, K int) []int that, given an array A consisting of N integers and an integer K, returns the array A rotated K times. For example, given A = [3, 8, 9, 7, 6] K = 3 the function should return [9, 7, 6, 3, 8]. Three rotations were made: [3, 8, 9, 7, 6] -> [6, 3, 8, 9, 7] [6, 3, 8, 9, 7] -> [7, 6, 3, 8, 9] [7, 6, 3, 8, 9] -> [9, 7, 6, 3, 8] For another example, given A = [0, 0, 0] K = 1 the function should return [0, 0, 0] Given A = [1, 2, 3, 4] K = 4 the function should return [1, 2, 3, 4] Assume that: N and K are integers within the range [0..100]; each element of array A is an integer within the range [−1,000..1,000]. In your solution, focus on correctness. The performance of your solution will not be the focus of the assessment. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 CyclicRotation題目要求將給定的整數陣列按照給定的旋轉步數進行循環右移,並返回旋轉後的陣列。例如,如果陣列是[3, 8, 9, 7, 6]且旋轉步數是3,則右移後的陣列為[9, 7, 6, 3, 8]。 解題思路 解題思路可以使用多種方法。一種常見的方法是使用額外的陣列來存儲旋轉後的結果。另一種方法是通過循環右移的操作,直接在原始陣列上進行元素交換。根據旋轉步數,我們可以將陣列分為兩個部分,並進行相應的元素交換操作。 時間複雜度: 解題思路中的操作需要遍歷整個陣列,因此時間複雜度為O(N),其中N是陣列的長度。 空間複雜度: 解題思路中使用了額外的陣列或進行原地交換,不需要使用額外的數據結構,因此空間複雜度為O(1)。 來源 https://app.codility.com/programmers/lessons/2-arrays/cyclic_rotation/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0002.Array/CyclicRotation/CyclicRotation.go package cyclicrotation func Solution(A []int, K int) []int { if K == 0 || len(A) len(A) { K = K % len(A) } return append(A[len(A)-K:], A[:len(A)-K]...) } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0002.Array/OddOccurrencesInArray/":{"url":"Codility/Lesson/0002.Array/OddOccurrencesInArray/","title":"Odd Occurrences In Array","keywords":"","body":"OddOccurrencesInArray A non-empty array A consisting of N integers is given. The array contains an odd number of elements, and each element of the array can be paired with another element that has the same value, except for one element that is left unpaired. For example, in array A such that: A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9 the elements at indexes 0 and 2 have value 9, the elements at indexes 1 and 3 have value 3, the elements at indexes 4 and 6 have value 9, the element at index 5 has value 7 and is unpaired. Write a function: func Solution(A []int) int that, given an array A consisting of N integers fulfilling the above conditions, returns the value of the unpaired element. For example, given array A such that: A[0] = 9 A[1] = 3 A[2] = 9 A[3] = 3 A[4] = 9 A[5] = 7 A[6] = 9 the function should return 7, as explained in the example above. Write an efficient algorithm for the following assumptions: N is an odd integer within the range [1..1,000,000]; each element of array A is an integer within the range [1..1,000,000,000]; all but one of the values in A occur an even number of times. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 給定一個非空array A,包含有N個整數,找出只出現基數次的整式 解題思路 方法一: 可以用Map紀錄每個整數出現的次數, 在檢查是否是偶數 方法二: 所有的整數XOR起來, 若是兩個整數相同XOR得到0, 最後剩下基數次的數字 來源 https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0002.Array/OddOccurrencesInArray/OddOccurrencesInArray.go package oddoccurrencesinarray func Solution(A []int) int { intMap := make(map[int]int) for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0003.Time-Complexity/FrogJmp/":{"url":"Codility/Lesson/0003.Time-Complexity/FrogJmp/","title":"Frog Jmp","keywords":"","body":"FrogJmp A small frog wants to get to the other side of the road. The frog is currently located at position X and wants to get to a position greater than or equal to Y. The small frog always jumps a fixed distance, D. Count the minimal number of jumps that the small frog must perform to reach its target. Write a function: func Solution(X int, Y int, D int) int that, given three integers X, Y and D, returns the minimal number of jumps from position X to a position equal to or greater than Y. For example, given: X = 10 Y = 85 D = 30 the function should return 3, because the frog will be positioned as follows: after the first jump, at position 10 + 30 = 40 after the second jump, at position 10 + 30 + 30 = 70 after the third jump, at position 10 + 30 + 30 + 30 = 100 Write an efficient algorithm for the following assumptions: X, Y and D are integers within the range [1..1,000,000,000]; X ≤ Y. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 解題思路 來源 https://app.codility.com/programmers/lessons/3-time_complexity/frog_jmp/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0003.Time-Complexity/FrogJmp/FrogJmp.go package frogjump import ( \"math\" ) func Solution(X int, Y int, D int) int { if Y © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0003.Time-Complexity/PermMissingElem/":{"url":"Codility/Lesson/0003.Time-Complexity/PermMissingElem/","title":"Perm Missing Elem","keywords":"","body":"PermMissingElem An array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing. Your goal is to find that missing element. Write a function: func Solution(A []int) int that, given an array A, returns the value of the missing element. For example, given array A such that: A[0] = 2 A[1] = 3 A[2] = 1 A[3] = 5 the function should return 4, as it is the missing element. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..100,000]; the elements of A are all distinct; each element of array A is an integer within the range [1..(N + 1)]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 解題思路 來源 https://app.codility.com/programmers/lessons/3-time_complexity/perm_missing_elem/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0003.Time-Complexity/PermMissingElem/PermMissingElem.go package permmissingelem func Solution(A []int) int { if len(A) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/":{"url":"Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/","title":"Tape Equilibrium","keywords":"","body":"TapeEquilibrium Minimize the value |(A[0] + ... + A[P-1]) - (A[P] + ... + A[N-1])|. A non-empty array A consisting of N integers is given. Array A represents numbers on a tape. Any integer P, such that 0 The difference between the two parts is the value of: |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])| In other words, it is the absolute difference between the sum of the first part and the sum of the second part. For example, consider array A such that: A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3 We can split this tape in four places: P = 1, difference = |3 − 10| = 7 P = 2, difference = |4 − 9| = 5 P = 3, difference = |6 − 7| = 1 P = 4, difference = |10 − 3| = 7 Write a function: func Solution(A []int) int that, given a non-empty array A of N integers, returns the minimal difference that can be achieved. For example, given: A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 4 A[4] = 3 the function should return 1, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [2..100,000]; each element of array A is an integer within the range [−1,000..1,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 解題思路 來源 https://app.codility.com/programmers/lessons/3-time_complexity/tape_equilibrium/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/TapeEquilibrium.go package TapeEquilibrium import \"math\" func Solution(A []int) int { totalSum := 0 for _, v := range A { totalSum += v } leftSum := A[0] rightSum := totalSum - leftSum result := math.MaxInt32 for i := 1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0004.Counting-Elements/FrogRiverOne/":{"url":"Codility/Lesson/0004.Counting-Elements/FrogRiverOne/","title":"Frog River One","keywords":"","body":"FrogRiverOne Find the earliest time when a frog can jump to the other side of a river. A small frog wants to get to the other side of a river. The frog is initially located on one bank of the river (position 0) and wants to get to the opposite bank (position X+1). Leaves fall from a tree onto the surface of the river. You are given an array A consisting of N integers representing the falling leaves. A[K] represents the position where one leaf falls at time K, measured in seconds. The goal is to find the earliest time when the frog can jump to the other side of the river. The frog can cross only when leaves appear at every position across the river from 1 to X (that is, we want to find the earliest moment when all the positions from 1 to X are covered by leaves). You may assume that the speed of the current in the river is negligibly small, i.e. the leaves do not change their positions once they fall in the river. For example, you are given integer X = 5 and array A such that: A[0] = 1 A[1] = 3 A[2] = 1 A[3] = 4 A[4] = 2 A[5] = 3 A[6] = 5 A[7] = 4 In second 6, a leaf falls into position 5. This is the earliest time when leaves appear in every position across the river. Write a function: func Solution(X int, A []int) int that, given a non-empty array A consisting of N integers and integer X, returns the earliest time when the frog can jump to the other side of the river. If the frog is never able to jump to the other side of the river, the function should return −1. For example, given X = 5 and array A such that: A[0] = 1 A[1] = 3 A[2] = 1 A[3] = 4 A[4] = 2 A[5] = 3 A[6] = 5 A[7] = 4 the function should return 6, as explained above. Write an efficient algorithm for the following assumptions: N and X are integers within the range [1..100,000]; each element of array A is an integer within the range [1..X]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 要X步才能到對面, 每一個走過的位子不能重複計算 解題思路 使用map存哪些地方走過 來源 https://app.codility.com/programmers/lessons/4-counting_elements/frog_river_one/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/FrogRiverOne.go package FrogRiverOne func Solution(X int, A []int) int { intMap := make(map[int]bool) for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0004.Counting-Elements/MaxCounters/":{"url":"Codility/Lesson/0004.Counting-Elements/MaxCounters/","title":"Max Counters","keywords":"","body":"MaxCounters Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum. You are given N counters, initially set to 0, and you have two possible operations on them: increase(X) − counter X is increased by 1, max counter − all counters are set to the maximum value of any counter. A non-empty array A of M integers is given. This array represents consecutive operations: if A[K] = X, such that 1 ≤ X ≤ N, then operation K is increase(X), if A[K] = N + 1 then operation K is max counter. For example, given integer N = 5 and array A such that: A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4 the values of the counters after each consecutive operation will be: (0, 0, 1, 0, 0) (0, 0, 1, 1, 0) (0, 0, 1, 2, 0) (2, 2, 2, 2, 2) (3, 2, 2, 2, 2) (3, 2, 2, 3, 2) (3, 2, 2, 4, 2) The goal is to calculate the value of every counter after all operations. Write a function: func Solution(N int, A []int) []int that, given an integer N and a non-empty array A consisting of M integers, returns a sequence of integers representing the values of the counters. Result array should be returned as an array of integers. For example, given: A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4 the function should return [3, 2, 2, 4, 2], as explained above. Write an efficient algorithm for the following assumptions: N and M are integers within the range [1..100,000]; each element of array A is an integer within the range [1..N + 1]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 如果A[i] 小於 N 則將計數器中對應位置的數+1, 如果A[i] 大於 N 則將計數器中所有的數更新為計數器當前的最大數值 解題思路 來源 https://app.codility.com/programmers/lessons/4-counting_elements/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/MaxCounters/MaxCounters.go package MaxCounters func Max(x, y int) int { if x > y { return x } return y } // 時間 O(N+M) , 空間 O(N) func Solution(N int, A []int) []int { result := make([]int, N) maxNum := 0 nowMaxNum := 0 for i := 0; i N { // 如果A[i] 大於 N 則將計數器中所有的數更新為計數器當前的最大數值 maxNum = nowMaxNum } else { // 如果A[i] 小於 N 則將計數器中對應位置的數+1, if result[A[i]-1] © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0004.Counting-Elements/MissingInteger/":{"url":"Codility/Lesson/0004.Counting-Elements/MissingInteger/","title":"Missing Integer","keywords":"","body":"MissingInteger Find the smallest positive integer that does not occur in a given sequence. This is a demo task. Write a function: func Solution(A []int) int that, given an array A of N integers, returns the smallest positive integer (greater than 0) that does not occur in A. For example, given A = [1, 3, 6, 4, 1, 2], the function should return 5. Given A = [1, 2, 3], the function should return 4. Given A = [−1, −3], the function should return 1. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer within the range [−1,000,000..1,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 找出該array沒出現的最小整數 解題思路 先講出現的數字記錄起來, 再依序從1開始往後找出最小的整數且沒出現過 來源 https://app.codility.com/programmers/lessons/4-counting_elements/missing_integer/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/MissingInteger/MissingInteger.go package MissingInteger func Solution(A []int) int { smallNum := 1 intMap := make(map[int]bool) // 將出現的數字塞入map for _, v := range A { if v > 0 && !intMap[v] { intMap[v] = true } } for i := 1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0004.Counting-Elements/PermCheck/":{"url":"Codility/Lesson/0004.Counting-Elements/PermCheck/","title":"Perm Check","keywords":"","body":"PermCheck Check whether array A is a permutation. A non-empty array A consisting of N integers is given. A permutation(排列) is a sequence containing each element from 1 to N once, and only once. For example, array A such that: A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2 is a permutation, but array A such that: A[0] = 4 A[1] = 1 A[2] = 3 is not a permutation, because value 2 is missing. The goal is to check whether array A is a permutation. Write a function: func Solution(A []int) int that, given an array A, returns 1 if array A is a permutation and 0 if it is not. For example, given array A such that: A[0] = 4 A[1] = 1 A[2] = 3 A[3] = 2 the function should return 1. Given array A such that: A[0] = 4 A[1] = 1 A[2] = 3 the function should return 0. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer within the range [1..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 如果是連續排列的array 回傳 1 反之回傳1 解題思路 類似lesson 4的MissingInteger. 先將現有的直寫入到map. 除了檢查是否有重複數字出現外,順便將總和算起來 最後檢查總時對不對 來源 https://app.codility.com/programmers/lessons/4-counting_elements/perm_check/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0004.Counting-Elements/PermCheck/PermCheck.go package PermCheck func Solution(A []int) int { intMap := make(map[int]bool) for _, v := range A { if !intMap[v] { intMap[v] = true } else { // 重複出現 return 0 } } for i := 1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0005.Prefix-Sums/CountDiv/":{"url":"Codility/Lesson/0005.Prefix-Sums/CountDiv/","title":"Count Div","keywords":"","body":"CountDiv Compute number of integers divisible by k in range [a..b]. Write a function: func Solution(A int, B int, K int) int that, given three integers A, B and K, returns the number of integers within the range [A..B] that are divisible by K, i.e.: { i : A ≤ i ≤ B, i mod K = 0 } For example, for A = 6, B = 11 and K = 2, your function should return 3, because there are three numbers divisible by 2 within the range [6..11], namely 6, 8 and 10. Write an efficient algorithm for the following assumptions: A and B are integers within the range [0..2,000,000,000]; K is an integer within the range [1..2,000,000,000]; A ≤ B. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 A~B之間的數字 mod K 後為0 的數字有幾個 解題思路 B/K 找出最大的商, A/K 最小的商. 相減取得在此中間之商的數量. 如果A%K==0 需要在+1 來源 https://app.codility.com/programmers/lessons/5-prefix_sums/count_div/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/CountDiv/CountDiv.go package CountDiv import \"math\" // 時間: O(n) func SolutionBurst(A int, B int, K int) int { result := 0 for i := A; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/":{"url":"Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/","title":"Genomic Range Query","keywords":"","body":"GenomicRangeQuery Find the minimal nucleotide(核苷酸) from a range of sequence DNA. A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which correspond to the types of successive nucleotides in the sequence. Each nucleotide has an impact factor, which is an integer. Nucleotides of types A, C, G and T have impact factors of 1, 2, 3 and 4, respectively. You are going to answer several queries of the form: What is the minimal impact factor of nucleotides contained in a particular part of the given DNA sequence? The DNA sequence is given as a non-empty string S = S[0]S[1]...S[N-1] consisting of N characters. There are M queries, which are given in non-empty arrays P and Q, each consisting of M integers. The K-th query (0 ≤ K For example, consider string S = CAGCCTA and arrays P, Q such that: P[0] = 2 Q[0] = 4 P[1] = 5 Q[1] = 5 P[2] = 0 Q[2] = 6 The answers to these M = 3 queries are as follows: The part of the DNA between positions 2 and 4 contains nucleotides G and C (twice), whose impact factors are 3 and 2 respectively, so the answer is 2. The part between positions 5 and 5 contains a single nucleotide T, whose impact factor is 4, so the answer is 4. The part between positions 0 and 6 (the whole string) contains all nucleotides, in particular nucleotide A whose impact factor is 1, so the answer is 1. Write a function: func Solution(S string, P []int, Q []int) []int that, given a non-empty string S consisting of N characters and two non-empty arrays P and Q consisting of M integers, returns an array consisting of M integers specifying the consecutive answers to all queries. Result array should be returned as an array of integers. For example, given the string S = CAGCCTA and arrays P, Q such that: P[0] = 2 Q[0] = 4 P[1] = 5 Q[1] = 5 P[2] = 0 Q[2] = 6 the function should return the values [2, 4, 1], as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; M is an integer within the range [1..50,000]; each element of arrays P, Q is an integer within the range [0..N − 1]; P[K] ≤ Q[K], where 0 ≤ K 題目大意 CAGCCTA A 代表1, C 代表2, G 代表3 ,T 代表4 K=0: P[0]=2, Q[0]=4 之間的核苷酸 DNA(GCC)因素分別是3和2, 最小的就是2. K=1: P[1]=5, Q[1]=5 DNA(T),最小的是4. K=2: P[2]=0, Q[2]=6 DNA(CAGCCTA),最小的是1. 解題思路 來源 https://app.codility.com/programmers/lessons/5-prefix_sums/genomic_range_query/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/GenomicRangeQuery.go package GenomicRangeQuery func Solution(S string, P []int, Q []int) []int { A, C, G, T := prefixSums(S) result := make([]int, len(P)) /* // fmt.Println(\"A: \", A) // fmt.Println(\"C: \", C) // fmt.Println(\"G: \", G) // fmt.Println(\"T: \", T) idx 0 1 2 3 4 5 6 7 S: [C A G C C T A] A: [0 0 1 1 1 1 1 2] C: [0 1 1 1 2 3 3 3] G: [0 0 0 1 1 1 1 1] T: [0 0 0 0 0 0 1 1] P: [2 5 0] Q: [4 5 6] */ for k, _ := range P { // 判斷 A[end of slice]-A[Begin of Slice]是否大於零 即可判斷是否 A 出現過 if A[Q[k]+1]-A[P[k]] > 0 { result[k] = 1 } else if C[Q[k]+1]-C[P[k]] > 0 { result[k] = 2 } else if G[Q[k]+1]-G[P[k]] > 0 { result[k] = 3 } else if T[Q[k]+1]-T[P[k]] > 0 { result[k] = 4 } } return result } // 數算從開始到每個固定索引的A,C,G,T個數. 開頭插入0 func prefixSums(S string) ([]int, []int, []int, []int) { n := len(S) A := make([]int, n+1) C := make([]int, n+1) G := make([]int, n+1) T := make([]int, n+1) for i := 1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/":{"url":"Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/","title":"Min Avg Two Slice","keywords":"","body":"MinAvgTwoSlice Find the minimal average of any slice containing at least two elements. A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P For example, array A such that: A[0] = 4 A[1] = 2 A[2] = 2 A[3] = 5 A[4] = 1 A[5] = 5 A[6] = 8 contains the following example slices: slice (1, 2), whose average is (2 + 2) / 2 = 2; slice (3, 4), whose average is (5 + 1) / 2 = 3; slice (1, 4), whose average is (2 + 2 + 5 + 1) / 4 = 2.5. The goal is to find the starting position of a slice whose average is minimal. Write a function: func Solution(A []int) int that, given a non-empty array A consisting of N integers, returns the starting position of the slice with the minimal average. If there is more than one slice with a minimal average, you should return the smallest starting position of such a slice. For example, given array A such that: A[0] = 4 A[1] = 2 A[2] = 2 A[3] = 5 A[4] = 1 A[5] = 5 A[6] = 8 the function should return 1, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [2..100,000]; each element of array A is an integer within the range [−10,000..10,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 找出array兩index中平均值最小 ,並回傳start的 index 解題思路 最小avg的slice(n,m),m-n+1一定是2或者3,也就是這個最小avg的slice由2個或者3個元素組成 因為題目中說明 0 因此可以得出2個或者3個元素是最小的組合,比如length=3的數組,你無法一次分出2個slice,length=2的數組也一樣。為什麼要這麼去想呢?因為你要“比較”出最小的avg,怎麼才能\"比較\"?那就是必須一次至少有2個slice才能相互比較。那麼當N>=4時,我們就能一次最少分出2個slice 來源 https://app.codility.com/programmers/lessons/5-prefix_sums/min_avg_two_slice/ https://blog.csdn.net/dear0607/article/details/42581149 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/MinAvgTwoSlice.go package MinAvgTwoSlice import \"math\" func Solution(A []int) int { min := math.MaxFloat64 minIndex := -1 for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0005.Prefix-Sums/PassingCars/":{"url":"Codility/Lesson/0005.Prefix-Sums/PassingCars/","title":"Passing Cars","keywords":"","body":"PassingCars A non-empty array A consisting of N integers is given. The consecutive(連續) elements of array A represent consecutive cars on a road. Array A contains only 0s and/or 1s: 0 represents a car traveling east, 1 represents a car traveling west. The goal is to count passing cars. We say that a pair of cars (P, Q), where 0 ≤ P For example, consider array A such that: A[0] = 0 // no.0 car trave to east A[1] = 1 // no.1 car trave to west A[2] = 0 // no.2 car trave to east A[3] = 1 // no.3 car trave to west A[4] = 1 // no.4 car trave to west We have five pairs of passing cars: (0, 1), (0, 3), (0, 4), (2, 3), (2, 4). Write a function: func Solution(A []int) int that, given a non-empty array A of N integers, returns the number of pairs of passing cars. The function should return −1 if the number of pairs of passing cars exceeds 1,000,000,000. For example, given: A[0] = 0 A[1] = 1 A[2] = 0 A[3] = 1 A[4] = 1 the function should return 5, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer that can have one of the following values: 0, 1. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 每台車的車號為A[]的index, 0 代表往東, 1代表往西, 向東的車號需要小於向西的車號. 找出會車的幾種可能性 解題思路 每一個向東走的車, 都會跟向西的配對. 當遇到向西時組合+1. 所以車號0可以跟所有大於0的向西車配對. 車號2跟所有大於0的向西車配對 1號車前面只有車號0這選擇. 車號3跟4有車號0跟2這兩個選擇. 所以是1+2*2=5 來源 https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0005.Prefix-Sums/PassingCars/PassingCars.go package PassingCars func Solution(A []int) int { addBase, result := 0, 0 for i := 0; i 1000000000 { return -1 } return result } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0006.Sorting/Distinct/":{"url":"Codility/Lesson/0006.Sorting/Distinct/","title":"Distinct","keywords":"","body":"Distinct Compute number of distinct values in an array. Write a function func Solution(A []int) int that, given an array A consisting of N integers, returns the number of distinct values in array A. For example, given array A consisting of six elements such that: A[0] = 2 A[1] = 1 A[2] = 1 A[3] = 2 A[4] = 3 A[5] = 1 the function should return 3, because there are 3 distinct values appearing in array A, namely 1, 2 and 3. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..100,000]; each element of array A is an integer within the range [−1,000,000..1,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 返回不重複的整數數量 解題思路 方法ㄧ: 先排序, 在檢查當前跟前一個是不是同一個整數. 不是的會結果+1 方法二: 建立一個set. 最後返回set的長度 來源 https://app.codility.com/programmers/lessons/6-sorting/distinct/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/Distinct/Distinct.go package Distinct import \"sort\" func Solution(A []int) int { sort.Ints(A) if len(A) == 0 { return 0 } result := 1 for i := 1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0006.Sorting/MaxProductOfThree/":{"url":"Codility/Lesson/0006.Sorting/MaxProductOfThree/","title":"Max Product Of Three","keywords":"","body":"MaxProductOfThree Maximize A[P] A[Q] A[R] for any triplet (P, Q, R). A non-empty array A consisting of N integers is given. The product of triplet (P, Q, R) equates to A[P] A[Q] A[R] (0 ≤ P For example, array A such that: A[0] = -3 A[1] = 1 A[2] = 2 A[3] = -2 A[4] = 5 A[5] = 6 contains the following example triplets: (0, 1, 2), product is −3 1 2 = −6 (1, 2, 4), product is 1 2 5 = 10 (2, 4, 5), product is 2 5 6 = 60 Your goal is to find the maximal product of any triplet. Write a function: func Solution(A []int) int that, given a non-empty array A, returns the value of the maximal product of any triplet. For example, given array A such that: A[0] = -3 A[1] = 1 A[2] = 2 A[3] = -2 A[4] = 5 A[5] = 6 the function should return 60, as the product of triplet (2, 4, 5) is maximal. Write an efficient algorithm for the following assumptions: N is an integer within the range [3..100,000]; each element of array A is an integer within the range [−1,000..1,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 給一整數陣列A,找出陣列中任意三數乘積的最大值 解題思路 先排序.然後比較 前兩個元素*最後一個元素的乘積 和 最後三個元素的乘積 取最大值 來源 https://app.codility.com/programmers/lessons/6-sorting/max_product_of_three/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/MaxProductOfThree/MaxProductOfThree.go package MaxProductOfThree import \"sort\" func max(a, b int) int { if a > b { return a } return b } func Solution(A []int) int { sort.Ints(A) aLen := len(A) return max(A[0]*A[1]*A[aLen-1], A[aLen-1]*A[aLen-2]*A[aLen-3]) } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/":{"url":"Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/","title":"Number Of Disc Intersections","keywords":"","body":"NumberOfDiscIntersections Compute the number of intersections(相交) in a sequence of discs(圓盤). We draw N discs on a plane. The discs are numbered from 0 to N − 1. An array A of N non-negative integers, specifying the radiuses(半徑) of the discs, is given. The J-th disc is drawn with its center at (J, 0) and radius A[J]. We say that the J-th disc and K-th disc intersect if J ≠ K and the J-th and K-th discs have at least one common point (assuming that the discs contain their borders). The figure below shows discs drawn for N = 6 and A as follows: A[0] = 1 A[1] = 5 A[2] = 2 A[3] = 1 A[4] = 4 A[5] = 0 There are eleven (unordered) pairs of discs that intersect, namely: discs 1 and 4 intersect, and both intersect with all the other discs; disc 2 also intersects with discs 0 and 3. Write a function: func Solution(A []int) int that, given an array A describing N discs as explained above, returns the number of (unordered) pairs of intersecting discs. The function should return −1 if the number of intersecting pairs exceeds 10,000,000. Given array A shown above, the function should return 11, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..100,000]; each element of array A is an integer within the range [0..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 A[0] = 1, 代表在(0,0)的位置上有一個半徑為1的圓. 找出圓相交的個數 解題思路 方法一: 對於第i,j個圓來說,如果兩個原要相交的話 參考SolutionDirect. 時間複雜度為O(n^2) 方法二 也就是將原來的二維的線段列表變為2個一維的列表 首先遍歷數組A得到A[i]+i組成的數組i_limit,以及j-A[j]組成的數組j_limit。然後再遍歷數組i_limit中的元素S,利用二分查找算法得到數組j_limit中不大於S的元素個數。前一個操作時間複雜度是O(N),二分查找算法時間複雜度是O(LogN),因此最終的時間複雜度為O(N*logN)。參考Solution。 來源 https://app.codility.com/programmers/lessons/6-sorting/number_of_disc_intersections/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L6_Sorting/6.4%20NumberOfDiscIntersections.md https://rafal.io/posts/codility-intersecting-discs.html https://github.com/tmpapageorgiou/algorithm/blob/master/number_disc_intersections.py 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/NumberOfDiscIntersections.go package NumberOfDiscIntersections import \"sort\" func max(a, b int) int { if a > b { return a } return b } func min(a, b int) int { if a > b { return b } return a } // 時間複雜 O(n^2) func SolutionDirect(A []int) int { count := 0 for indexI, valueI := range A { tmpArr := A[indexI+1:] for indexJ, valueJ := range tmpArr { if valueI+valueJ >= indexJ+indexI+1-indexI { count++ } } } return count } // 時間複雜 O(nlogn) or O(n) // TODO: 待研究 func Solution(A []int) int { iLimit := make([]int, len(A)) // 左 jLimit := make([]int, len(A)) // 右 result := 0 for i := 0; i end }) // 因為i=j時,A[i]+i 肯定不小於j-A[j],也就是說多算了一個,因此要減去1。 // 減去idx是因為圓盤A和圓盤B相交,次數加上1了,圓盤B和圓盤A相交就不用再加1了。 count = count - idx - 1 result += count if result > 10000000 { return -1 } } return result } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0006.Sorting/Triangle/":{"url":"Codility/Lesson/0006.Sorting/Triangle/","title":"Triangle","keywords":"","body":"Triangle Determine whether a triangle can be built from a given set of edges. An array A consisting of N integers is given. A triplet (P, Q, R) is triangular if 0 ≤ P A[P] + A[Q] > A[R], A[Q] + A[R] > A[P], A[R] + A[P] > A[Q]. For example, consider array A such that: A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 20 Triplet (0, 2, 4) is triangular. Write a function: func Solution(A []int) int that, given an array A consisting of N integers, returns 1 if there exists a triangular triplet for this array and returns 0 otherwise. For example, given array A such that: A[0] = 10 A[1] = 2 A[2] = 5 A[3] = 1 A[4] = 8 A[5] = 20 the function should return 1, as explained above. Given array A such that: A[0] = 10 A[1] = 50 A[2] = 5 A[3] = 1 the function should return 0. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..100,000]; each element of array A is an integer within the range [−2,147,483,648..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 如果該array存在一個三角形的三元組,則返回1, 否則返回0 解題思路 從大到小排序, 如果前面的值小於後面兩數和, 則可以組成三角形. 三數皆不能為0或負數 來源 https://app.codility.com/programmers/lessons/6-sorting/triangle/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0006.Sorting/Triangle/Triangle.go package Triangle import \"sort\" func Solution(A []int) int { if len(A) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0007.Stacks-and-Queues/Brackets/":{"url":"Codility/Lesson/0007.Stacks-and-Queues/Brackets/","title":"Brackets","keywords":"","body":"Brackets Determine whether a given string of parentheses (multiple types) is properly nested. A string S consisting of N characters is considered to be properly nested if any of the following conditions is true: S is empty; S has the form \"(U)\" or \"[U]\" or \"{U}\" where U is a properly nested string; S has the form \"VW\" where V and W are properly nested strings. For example, the string \"{[()()]}\" is properly nested but \"([)()]\" is not. Write a function: func Solution(S string) int that, given a string S consisting of N characters, returns 1 if S is properly nested and 0 otherwise. For example, given S = \"{[()()]}\", the function should return 1 and given S = \"([)()]\", the function should return 0, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..200,000]; string S consists only of the following characters: \"(\", \"{\", \"[\", \"]\", \"}\" and/or \")\". Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 括號配對, 可配對回傳1 反之回傳0. 解題思路 將左括號都放入stack. 遇到右括號時將stack pop出來並檢查pop出來的左括號是否跟右括號配對. 來源 https://app.codility.com/programmers/lessons/7-stacks_and_queues/brackets/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/Brackets/Brackets.go package Brackets import ( \"LeetcodeGolang/Utility/structures\" ) func Solution(S string) int { if len(S) == 0 { return 1 } if len(S)%2 != 0 { return 0 } BracketMap := map[string]string{ \")\": \"(\", \"]\": \"[\", \"}\": \"{\", } stack := structures.NewArrayStack() for _, v := range S { val := string(v) if val == \"(\" || val == \"[\" || val == \"{\" { stack.Push(val) } else if val == \")\" || val == \"]\" || val == \"}\" { if stack.IsEmpty() { return 0 } topVal := stack.Top() if topVal == BracketMap[val] { stack.Pop() } else { // 找不到可配對的括號 return 0 } } } if stack.IsEmpty() { return 1 } else { return 0 } } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0007.Stacks-and-Queues/Fish/":{"url":"Codility/Lesson/0007.Stacks-and-Queues/Fish/","title":"Fish","keywords":"","body":"Fish N voracious fish are moving along a river. Calculate how many fish are alive. You are given two non-empty arrays A and B consisting of N integers. Arrays A and B represent N voracious fish in a river, ordered downstream along the flow of the river. The fish are numbered from 0 to N − 1. If P and Q are two fish and P Fish number P is represented by A[P] and B[P]. Array A contains the sizes of the fish. All its elements are unique. Array B contains the directions of the fish. It contains only 0s and/or 1s, where: 0 represents a fish flowing upstream, 1 represents a fish flowing downstream. If two fish move in opposite directions and there are no other (living) fish between them, they will eventually meet each other. Then only one fish can stay alive − the larger fish eats the smaller one. More precisely, we say that two fish P and Q meet each other when P If A[P] > A[Q] then P eats Q, and P will still be flowing downstream, If A[Q] > A[P] then Q eats P, and Q will still be flowing upstream. We assume that all the fish are flowing at the same speed. That is, fish moving in the same direction never meet. The goal is to calculate the number of fish that will stay alive. For example, consider arrays A and B such that: A[0] = 4 B[0] = 0 A[1] = 3 B[1] = 1 A[2] = 2 B[2] = 0 A[3] = 1 B[3] = 0 A[4] = 5 B[4] = 0 Initially all the fish are alive and all except fish number 1 are moving upstream. Fish number 1 meets fish number 2 and eats it, then it meets fish number 3 and eats it too. Finally, it meets fish number 4 and is eaten by it. The remaining two fish, number 0 and 4, never meet and therefore stay alive. Write a function: func Solution(A []int, B []int) int that, given two non-empty arrays A and B consisting of N integers, returns the number of fish that will stay alive. For example, given the arrays shown above, the function should return 2, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer within the range [0..1,000,000,000]; each element of array B is an integer that can have one of the following values: 0, 1; the elements of A are all distinct. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 最開始每個魚都有特定的起始位置 A: 活魚的大小, B: 魚游的方向. 如果於相遇的話大魚會吃掉小魚. 返回剩下魚的數量 解題思路 從 B 開始找, 當值為1 存入stack. 代表向下游的魚. 來進行把活魚吃掉. 如果把列表的活魚都吃掉. 則結果+1 如果值為0且stack為空, 代表沒遇到下游的魚所以活魚++ 來源 https://app.codility.com/programmers/lessons/7-stacks_and_queues/fish/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/Fish/Fish.go package Fish import \"LeetcodeGolang/Utility/structures\" func Solution(A []int, B []int) int { stack := structures.NewArrayStack() aliveFish := 0 for idx, val := range B { if val == 1 { stack.Push(A[idx]) } else { // 繼續往下游 for !stack.IsEmpty() { if stack.Top().(int) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0007.Stacks-and-Queues/Nesting/":{"url":"Codility/Lesson/0007.Stacks-and-Queues/Nesting/","title":"Nesting","keywords":"","body":"Nesting Determine whether a given string of parentheses (single type) is properly nested. A string S consisting of N characters is called properly nested if: S is empty; S has the form \"(U)\" where U is a properly nested string; S has the form \"VW\" where V and W are properly nested strings. For example, string \"(()(())())\" is properly nested but string \"())\" isn't. Write a function: func Solution(S string) int that, given a string S consisting of N characters, returns 1 if string S is properly nested and 0 otherwise. For example, given S = \"(()(())())\", the function should return 1 and given S = \"())\", the function should return 0, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..1,000,000]; string S consists only of the characters \"(\" and/or \")\". Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 括號配對 解題思路 與Bracket類似 來源 https://app.codility.com/programmers/lessons/7-stacks_and_queues/nesting/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/Nesting/Nesting.go package Nesting import \"LeetcodeGolang/Utility/structures\" func Solution(S string) int { if len(S) == 0 { return 1 } if len(S)%2 != 0 { return 0 } stack := structures.NewArrayStack() for _, v := range S { val := string(v) if val == \"(\" { stack.Push(val) } else if val == \")\" { stack.Pop() } } if stack.IsEmpty() { return 1 } else { return 0 } } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0007.Stacks-and-Queues/StoneWall/":{"url":"Codility/Lesson/0007.Stacks-and-Queues/StoneWall/","title":"Stone Wall","keywords":"","body":"StoneWall Cover \"Manhattan skyline\" using the minimum number of rectangles. You are going to build a stone wall. The wall should be straight and N meters long, and its thickness should be constant; however, it should have different heights in different places. The height of the wall is specified by an array H of N positive integers. H[I] is the height of the wall from I to I+1 meters to the right of its left end. In particular, H[0] is the height of the wall's left end and H[N−1] is the height of the wall's right end. The wall should be built of cuboid (長方體) stone blocks (that is, all sides of such blocks are rectangular). Your task is to compute the minimum number of blocks needed to build the wall. Write a function: func Solution(H []int) int that, given an array H of N positive integers specifying the height of the wall, returns the minimum number of blocks needed to build it. For example, given array H containing N = 9 integers: H[0] = 8 H[1] = 8 H[2] = 5 H[3] = 7 H[4] = 9 H[5] = 8 H[6] = 7 H[7] = 4 H[8] = 8 the function should return 7. The figure shows one possible arrangement of seven blocks. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array H is an integer within the range [1..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 如何用最少的數量來貼出符合 H 的牆呢 要建立一面長N米的強. 厚度固定, 每個地方的高度不同. H[I]代表牆從 I 到 I+1 米處的高度. H[0]大表牆最左到1米處的高度 H[N-1]大表牆N-1米處到最右的高度 解題思路 尋遍整個array, 當當前高度大於先前高度時,加入stack裡, 並視為一個矩形. 將結果+1 若當前高度小於先前,將先前高度pop出去.直到stack 為空或當前高度大於等於先前高度 來源 https://app.codility.com/programmers/lessons/7-stacks_and_queues/stone_wall/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L7_Stacks%20and%20Queues/7.4%20StoneWall.md 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/StoneWall.go package StoneWall import \"LeetcodeGolang/Utility/structures\" func Solution(H []int) int { stack := structures.NewArrayStack() result := 0 for _, v := range H { for !stack.IsEmpty() && stack.Top().(int) > v { stack.Pop() } if stack.IsEmpty() || stack.Top().(int) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0008.Leader/Dominator/":{"url":"Codility/Lesson/0008.Leader/Dominator/","title":"Dominator","keywords":"","body":"Dominator Find an index of an array such that its value occurs at more than half of indices in the array. An array A consisting of N integers is given. The dominator of array A is the value that occurs in more than half of the elements of A. For example, consider array A such that A[0] = 3 A[1] = 4 A[2] = 3 A[3] = 2 A[4] = 3 A[5] = -1 A[6] = 3 A[7] = 3 The dominator of A is 3 because it occurs in 5 out of 8 elements of A (namely in those with indices 0, 2, 4, 6 and 7) and 5 is more than a half of 8. Write a function func Solution(A []int) int that, given an array A consisting of N integers, returns index of any element of array A in which the dominator of A occurs. The function should return −1 if array A does not have a dominator. For example, given array A such that A[0] = 3 A[1] = 4 A[2] = 3 A[3] = 2 A[4] = 3 A[5] = -1 A[6] = 3 A[7] = 3 the function may return 0, 2, 4, 6 or 7, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..100,000]; each element of array A is an integer within the range [−2,147,483,648..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 返回Array中的支配數. A的支配數是3,因為它出現在A的8個元素中的5個元素中(index為0、2、4、6和7). 而5是8的一半以上 可以返回 0,2,4,6,7中的任一數 解題思路 用map紀錄每筆數出現次數. 取最大次數看是否有超過一半以上. 是的話返回此數任一個index, 反之返回-1 來源 https://app.codility.com/programmers/lessons/8-leader/dominator/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0008.Leader/Dominator/Dominator.go package Dominator import ( \"math\" ) func Solution(A []int) int { mapInt := make(map[int]int, len(A)) for _, v := range A { if _, ok := mapInt[v]; !ok { mapInt[v] = 1 } else { mapInt[v]++ } } maxCount := 0 maxVal := 0 for k, v := range mapInt { if v > maxCount { maxCount = v maxVal = k } } minIndex := -1 for k, v := range A { if v == maxVal { minIndex = k break } } if maxCount > int(math.Floor(float64(len(A))/2.0)) { return minIndex } else { return -1 } } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0008.Leader/EquiLeader/":{"url":"Codility/Lesson/0008.Leader/EquiLeader/","title":"Equi Leader","keywords":"","body":"EquiLeader Find the index S such that the leaders of the sequences A[0], A[1], ..., A[S] and A[S + 1], A[S + 2], ..., A[N - 1] are the same. A non-empty array A consisting of N integers is given. The leader of this array is the value that occurs in more than half of the elements of A. An equi leader is an index S such that 0 ≤ S For example, given array A such that: A[0] = 4 A[1] = 3 A[2] = 4 A[3] = 4 A[4] = 4 A[5] = 2 we can find two equi leaders: 0, because sequences: (4) and (3, 4, 4, 4, 2) have the same leader, whose value is 4. 2, because sequences: (4, 3, 4) and (4, 4, 2) have the same leader, whose value is 4. The goal is to count the number of equi leaders. Write a function: func Solution(A []int) int that, given a non-empty array A consisting of N integers, returns the number of equi leaders. For example, given: A[0] = 4 A[1] = 3 A[2] = 4 A[3] = 4 A[4] = 4 A[5] = 2 the function should return 2, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer within the range [−1,000,000,000..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 選定一個下標, 將一個數組分爲左右兩個子數組, 使得兩個子數組都有相同的leader, 則稱此下標爲EquiLeader, 要求返回給定數組中EquiLeader的個數n. 事實上, 若一個數同時是左子數組的leader, 它必然也是整個數組的leader. 解題思路 需要先找出序列中的leader, 記錄其出現的次數. 然後再遍歷整個數組,枚舉分割點,記錄下左子數組leader出現的次數s, 看s與n-s是否能使得leader在左右子數組中仍爲leader. 來源 https://app.codility.com/programmers/lessons/8-leader/equi_leader/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L8_Leader/8.1%20EquiLeader.md 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0008.Leader/EquiLeader/EquiLeader.go package EquiLeader func Solution(A []int) int { leaderDict := make(map[int]int) for i := 0; i times { times = v leader = k } } equiCount := 0 count := 0 // 超頻數已出現的次數 for index, v := range A { if v == leader { count++ } if count > (index+1)/2 && (times-count) > (len(A)-(index+1))/2 { equiCount++ } } return equiCount } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/":{"url":"Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/","title":"Max Double Slice Sum","keywords":"","body":"MaxDoubleSliceSum Find the maximal sum of any double slice. A non-empty array A consisting of N integers is given. A triplet (X, Y, Z), such that 0 ≤ X The sum of double slice (X, Y, Z) is the total of A[X + 1] + A[X + 2] + ... + A[Y − 1] + A[Y + 1] + A[Y + 2] + ... + A[Z − 1]. For example, array A such that: A[0] = 3 A[1] = 2 A[2] = 6 A[3] = -1 A[4] = 4 A[5] = 5 A[6] = -1 A[7] = 2 contains the following example double slices: double slice (0, 3, 6), sum is 2 + 6 + 4 + 5 = 17, double slice (0, 3, 7), sum is 2 + 6 + 4 + 5 − 1 = 16, double slice (3, 4, 5), sum is 0. The goal is to find the maximal sum of any double slice. Write a function: func Solution(A []int) int that, given a non-empty array A consisting of N integers, returns the maximal sum of any double slice. For example, given: A[0] = 3 A[1] = 2 A[2] = 6 A[3] = -1 A[4] = 4 A[5] = 5 A[6] = -1 A[7] = 2 the function should return 17, because no double slice of array A has a sum of greater than 17. Write an efficient algorithm for the following assumptions: N is an integer within the range [3..100,000]; each element of array A is an integer within the range [−10,000..10,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 A[X+1]到A[Y-1] + A[Y+1]到A[Z-1] 最大的和 解題思路 正向尋過array, 獲得到達每個index可以得到的最大值序列, 然后反向尋過array獲得到達每個index可以得到的最大值序列, 反向的的最大值序列需要倒轉.然後間隔一個位置, 最後尋遍array起兩者相加最大值 來源 https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_double_slice_sum/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L9_Maximum%20Slice%20Problem/9.3%20%20MaxDoubleSliceSum.md 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/MaxDoubleSliceSum.go package MaxDoubleSliceSum import ( \"math\" ) func Solution(A []int) int { if len(A) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/":{"url":"Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/","title":"Max Profit","keywords":"","body":"MaxProfit Given a log of stock prices compute the maximum possible earning. An array A consisting of N integers is given. It contains daily prices of a stock share for a period of N consecutive days. If a single share was bought on day P and sold on day Q, where 0 ≤ P ≤ Q For example, consider the following array A consisting of six elements such that: A[0] = 23171 A[1] = 21011 A[2] = 21123 A[3] = 21366 A[4] = 21013 A[5] = 21367 If a share was bought on day 0 and sold on day 2, a loss of 2048 would occur because A[2] − A[0] = 21123 − 23171 = −2048. If a share was bought on day 4 and sold on day 5, a profit of 354 would occur because A[5] − A[4] = 21367 − 21013 = 354. Maximum possible profit was 356. It would occur if a share was bought on day 1 and sold on day 5. Write a function, func Solution(A []int) int that, given an array A consisting of N integers containing daily prices of a stock share for a period of N consecutive days, returns the maximum possible profit from one transaction during this period. The function should return 0 if it was impossible to gain any profit. For example, given array A consisting of six elements such that: A[0] = 23171 A[1] = 21011 A[2] = 21123 A[3] = 21366 A[4] = 21013 A[5] = 21367 the function should return 356, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..400,000]; each element of array A is an integer within the range [0..200,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 計算股票可能獲得的最大利潤 解題思路 尋遍整個array, 找出最小的買入金額, 同時計算當前的賣出金額-最小買入金額, 得出最大利潤 來源 https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_profit/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/MaxProfit.go package MaxProfit import ( \"math\" ) func Solution(A []int) int { minBuyPrice := math.MaxFloat64 maxProfit := 0.0 for _, v := range A { minBuyPrice = math.Min(minBuyPrice, float64(v)) maxProfit = math.Max(maxProfit, float64(v)-minBuyPrice) } return int(maxProfit) } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/":{"url":"Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/","title":"Max Slice Sum","keywords":"","body":"MaxSliceSum Find a maximum sum of a compact subsequence of array elements. A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P ≤ Q Write a function: func Solution(A []int) int that, given an array A consisting of N integers, returns the maximum sum of any slice of A. For example, given array A such that: A[0] = 3 A[1] = 2 A[2] = -6 A[3] = 4 A[4] = 0 the function should return 5 because: (3, 4) is a slice of A that has sum 4, (2, 2) is a slice of A that has sum −6, (0, 1) is a slice of A that has sum 5, no other slice of A has sum greater than (0, 1). Write an efficient algorithm for the following assumptions: N is an integer within the range [1..1,000,000]; each element of array A is an integer within the range [−1,000,000..1,000,000]; the result will be an integer within the range [−2,147,483,648..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 找出連續子序列最大的和 解題思路 長度如果為1, 回傳第一筆 當下的值跟當下的值加上先前的和, 取最大值. 再將剛剛算出的最大值跟紀錄中的最大值比較,取最大值 來源 https://app.codility.com/programmers/lessons/9-maximum_slice_problem/max_slice_sum/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/MaxSliceSum.go package MaxSliceSum import ( \"math\" ) func Solution(A []int) int { if len(A) == 1 { return A[0] } result := math.MinInt64 sum := math.MinInt64 for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/":{"url":"Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/","title":"Count Factors","keywords":"","body":"CountFactors Count factors of given number n. A positive integer D is a factor of a positive integer N if there exists an integer M such that N = D * M. For example, 6 is a factor of 24, because M = 4 satisfies the above condition (24 = 6 * 4). Write a function: func Solution(N int) int that, given a positive integer N, returns the number of its factors. For example, given N = 24, the function should return 8, because 24 has 8 factors, namely 1, 2, 3, 4, 6, 8, 12, 24. There are no other factors of 24. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 找出該數的因子個數 解題思路 尋遍該數字平方根的整數, 每次可以獲得2個因子 來源 https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/count_factors/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/CountFactors.go package CountFactors import ( \"math\" ) func Solution(N int) int { result := 0 for i := 1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/":{"url":"Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/","title":"Flags","keywords":"","body":"Flags Find the maximum number of flags that can be set on mountain peaks. A non-empty array A consisting of N integers is given. A peak is an array element which is larger than its neighbours. More precisely, it is an index P such that 0 A[P + 1]. For example, the following array A: A[0] = 1 A[1] = 5 //peaks A[2] = 3 A[3] = 4 //peaks A[4] = 3 A[5] = 4 //peaks A[6] = 1 A[7] = 2 A[8] = 3 A[9] = 4 A[10] = 6 //peaks A[11] = 2 has exactly four peaks: elements 1, 3, 5 and 10. You are going on a trip to a range of mountains whose relative heights are represented by array A, as shown in a figure below. You have to choose how many flags you should take with you. The goal is to set the maximum number of flags on the peaks, according to certain rules. Flags can only be set on peaks. What's more, if you take K flags, then the distance between any two flags should be greater than or equal to K. The distance between indices P and Q is the absolute value |P − Q|. For example, given the mountain range represented by array A, above, with N = 12, if you take: two flags, you can set them on peaks 1 and 5; three flags, you can set them on peaks 1, 5 and 10; four flags, you can set only three flags, on peaks 1, 5 and 10. You can therefore set a maximum of three flags in this case. Write a function: func Solution(A []int) int that, given a non-empty array A of N integers, returns the maximum number of flags that can be set on the peaks of the array. For example, the following array A: A[0] = 1 A[1] = 5 A[2] = 3 A[3] = 4 A[4] = 3 A[5] = 4 A[6] = 1 A[7] = 2 A[8] = 3 A[9] = 4 A[10] = 6 A[11] = 2 the function should return 3, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..400,000]; each element of array A is an integer within the range [0..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 計算可以在山峰上設置的最大旗標數量 旗標只能在山峰上設置, 如果帶了K個旗標, 則任意兩個旗標的索引距離不能小於K 解題思路 先找出peak的索引位置並存入array中. 根據peak array的第一個最後一個可以判斷理論上最多的旗標數為K: K*(K-1) 來源 https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L10_Prime%20and%20composite%20numbers/10.4%20Flags.md 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/Flags.go package Flags import ( \"math\" ) func Solution(A []int) int { var peaksFlag []int for i := 1; i A[i-1] && A[i] > A[i+1] { peaksFlag = append(peaksFlag, i) } } if len(peaksFlag) == 0 { return 0 } if len(peaksFlag) == 1 { return 1 } maxFlag := int(math.Pow(float64(peaksFlag[len(peaksFlag)-1]-peaksFlag[0]), 0.5) + 1) for i := maxFlag; i > 1; i-- { addressFlag := []int{peaksFlag[0]} for _, val := range peaksFlag[1:] { if val-addressFlag[len(addressFlag)-1] >= i { addressFlag = append(addressFlag, val) if len(addressFlag) >= i { return i } } } } return 1 } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/":{"url":"Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/","title":"Min Perimeter Rectangle","keywords":"","body":"MinPerimeterRectangle Find the minimal perimeter of any rectangle whose area equals N. An integer N is given, representing the area of some rectangle. The area of a rectangle whose sides are of length A and B is A B, and the perimeter is 2 (A + B). The goal is to find the minimal perimeter of any rectangle whose area equals N. The sides of this rectangle should be only integers. For example, given integer N = 30, rectangles of area 30 are: (1, 30), with a perimeter of 62, (2, 15), with a perimeter of 34, (3, 10), with a perimeter of 26, (5, 6), with a perimeter of 22. Write a function: func Solution(N int) int that, given an integer N, returns the minimal perimeter of any rectangle whose area is exactly equal to N. For example, given an integer N = 30, the function should return 22, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 給整數的面積N, 找出面積為N的最小周長 解題思路 從不大於N的平方根的數開始遍歷,只要找到N的因子 因為越往後所得的周長越大.邊長接近平方根的矩形的周長是最小的 來源 https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/min_perimeter_rectangle/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/MinPerimeterRectangle.go package minperimeterrectangle import ( \"math\" ) // O(sqrt(N)) func Solution(N int) int { if N © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/":{"url":"Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/","title":"Peaks","keywords":"","body":"Peaks Divide an array into the maximum number of same-sized blocks, each of which should contain an index P such that A[P - 1] A[P + 1]. A non-empty array A consisting of N integers is given. A peak is an array element which is larger than its neighbors. More precisely, it is an index P such that 0 A[P + 1]. For example, the following array A: A[0] = 1 A[1] = 2 A[2] = 3 A[3] = 4 A[4] = 3 A[5] = 4 A[6] = 1 A[7] = 2 A[8] = 3 A[9] = 4 A[10] = 6 A[11] = 2 has exactly three peaks: 3, 5, 10. We want to divide this array into blocks containing the same number of elements. More precisely, we want to choose a number K that will yield the following blocks: A[0], A[1], ..., A[K − 1], A[K], A[K + 1], ..., A[2K − 1], ... A[N − K], A[N − K + 1], ..., A[N − 1]. What's more, every block should contain at least one peak. Notice that extreme elements of the blocks (for example A[K − 1] or A[K]) can also be peaks, but only if they have both neighbors (including one in an adjacent blocks). The goal is to find the maximum number of blocks into which the array A can be divided. Array A can be divided into blocks as follows: one block (1, 2, 3, 4, 3, 4, 1, 2, 3, 4, 6, 2). This block contains three peaks. two blocks (1, 2, 3, 4, 3, 4) and (1, 2, 3, 4, 6, 2). Every block has a peak. three blocks (1, 2, 3, 4), (3, 4, 1, 2), (3, 4, 6, 2). Every block has a peak. Notice in particular that the first block (1, 2, 3, 4) has a peak at A[3], because A[2] A[4], even though A[4] is in the adjacent block. However, array A cannot be divided into four blocks, (1, 2, 3), (4, 3, 4), (1, 2, 3) and (4, 6, 2), because the (1, 2, 3) blocks do not contain a peak. Notice in particular that the (4, 3, 4) block contains two peaks: A[3] and A[5]. The maximum number of blocks that array A can be divided into is three. Write a function: func Solution(A []int) int that, given a non-empty array A consisting of N integers, returns the maximum number of blocks into which A can be divided. If A cannot be divided into some number of blocks, the function should return 0. For example, given: A[0] = 1 A[1] = 2 A[2] = 3 A[3] = 4 A[4] = 3 A[5] = 4 A[6] = 1 A[7] = 2 A[8] = 3 A[9] = 4 A[10] = 6 A[11] = 2 the function should return 3, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer within the range [0..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 將 array 分成同樣長度的區塊, 買個區塊至少包含一個peak. 解題思路 先找出所有peak的index 寫入peaks array. \b從peaks的長度開始往下找, 將 A 拆成區塊, 每個區塊檢查是否有有找到peak 來源 https://app.codility.com/programmers/lessons/10-prime_and_composite_numbers/peaks/ https://www.martinkysel.com/codility-peaks-solution/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/Peaks.go package peaks /* expected worst-case time complexity is O(N*log(log(N))); expected worst-case space complexity is O(N) */ func Solution(A []int) int { // 先找出peaks peaks := []int{} for i := 1; i A[i+1] { peaks = append(peaks, i) } } if len(peaks) 0; size-- { if len(A)%size == 0 { // 每個區塊的size blockSize := len(A) / size found := make(map[int]bool, size) foundCnt := 0 for _, peak := range peaks { // 檢查每個區塊是否有找到 peak blockNr := peak / blockSize if ok := found[blockNr]; !ok { found[blockNr] = true foundCnt++ } } if foundCnt == size { return size } } } return 0 } /* def solution(A): peaks = [] for idx in range(1, len(A)-1): if A[idx-1] A[idx+1]: peaks.append(idx) if len(peaks) == 0: return 0 for size in range(len(peaks), 0, -1): if len(A) % size == 0: block_size = len(A) // size found = [False] * size found_cnt = 0 for peak in peaks: block_nr = peak//block_size if found[block_nr] == False: found[block_nr] = True found_cnt += 1 if found_cnt == size: return size return 0 */ © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/":{"url":"Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/","title":"Count Non Divisible","keywords":"","body":"CountNonDivisible Calculate the number of elements of an array that are not divisors(因數) of each element. You are given an array A consisting of N integers. For each number A[i] such that 0 ≤ i For example, consider integer N = 5 and array A such that: A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 3 A[4] = 6 For the following elements: A[0] = 3, the non-divisors are: 2, 6, A[1] = 1, the non-divisors are: 3, 2, 3, 6, A[2] = 2, the non-divisors are: 3, 3, 6, A[3] = 3, the non-divisors are: 2, 6, A[4] = 6, there aren't any non-divisors. Write a function: func Solution(A []int) []int that, given an array A consisting of N integers, returns a sequence of integers representing the amount of non-divisors. Result array should be returned as an array of integers. For example, given: A[0] = 3 A[1] = 1 A[2] = 2 A[3] = 3 A[4] = 6 the function should return [2, 4, 3, 2, 0], as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..50,000]; each element of array A is an integer within the range [1..2 * N]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 算出array中所有元素的非因子數的個數 解題思路 先算數每個數字出現的次數存入map 遍歷A, 對於每個元素從1到sqrt(i)中找出因子,如果是因子,就去字典找出出現次數 最後用總長度減去因子數就可得出非因子數, 並將結果存入map, 空間換取時間 factor 來源 https://app.codility.com/programmers/lessons/11-sieve_of_eratosthenes/count_non_divisible/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L11_Sieve%20of%20Eratosthenes/11.1%20CountNonDivisible.md 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/CountNonDivisible.go package countnondivisible import ( \"math\" ) /* Task Score 100% Correctness 100% Performance 100% */ func Solution(A []int) []int { // write your code in Go 1.4 result := []int{} if len(A) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/":{"url":"Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/","title":"Count Semiprimes","keywords":"","body":"CountSemiprimes Count the semiprime(半質數:兩個質數的乘積所得的自然數我們稱之為半質數) numbers in the given range [a..b] A prime is a positive integer X that has exactly two distinct divisors: 1 and X. The first few prime integers are 2, 3, 5, 7, 11 and 13. A semiprime is a natural number that is the product of two (not necessarily distinct) prime numbers. The first few semiprimes are 4, 6, 9, 10, 14, 15, 21, 22, 25, 26. You are given two non-empty arrays P and Q, each consisting of M integers. These arrays represent queries about the number of semiprimes within specified ranges. Query K requires you to find the number of semiprimes within the range (P[K], Q[K]), where 1 ≤ P[K] ≤ Q[K] ≤ N. For example, consider an integer N = 26 and arrays P, Q such that: P[0] = 1 Q[0] = 26 P[1] = 4 Q[1] = 10 P[2] = 16 Q[2] = 20 The number of semiprimes within each of these ranges is as follows: (1, 26) is 10, (4, 10) is 4, (16, 20) is 0. Write a function: func Solution(N int, P []int, Q []int) []int that, given an integer N and two non-empty arrays P and Q consisting of M integers, returns an array consisting of M elements specifying the consecutive answers to all the queries. For example, given an integer N = 26 and arrays P, Q such that: P[0] = 1 Q[0] = 26 P[1] = 4 Q[1] = 10 P[2] = 16 Q[2] = 20 the function should return the values [10, 4, 0], as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..50,000]; M is an integer within the range [1..30,000]; each element of arrays P, Q is an integer within the range [1..N]; P[i] ≤ Q[i]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 計算[a,b]區間得半質數的個數 解題思路 先把半質數列表找出來. (半質數:兩個質數的乘積所得的自然數我們稱之為半質數ㄝ開始的幾個半質數是4, 6, 9, 10, 14, 15, 21, 22, 25, 26, ... (OEIS中的數列A001358)它們包含1及自己在內合共有3或4個因數) 計算當前array和前面一共有幾個半質數 遍歷P arry 算出 Q跟P 之前的半質數總和差, 並寫入結果 來源 https://app.codility.com/programmers/lessons/11-sieve_of_eratosthenes/count_semiprimes/ https://github.com/Luidy/codility-golang/blob/master/Lesson11/02_countSemiprimes.go https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L11_Sieve%20of%20Eratosthenes/11.2%20CountSemiprimes.md 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/CountSemiprimes.go package countsemiprimes func Solution(N int, P []int, Q []int) []int { semiPrime := []int{} // 半質數:兩個質數的乘積所得的自然數我們稱之為半質數. // 4, 6, 9, 10, 14, 15, 21,22,25,26,33,34,35,38,39,46,49,51,55,57,58,62,65,69,74,77,82,85,86,87,91,93,94,95,106, ... // 它們包含1及自己在內合共有3或4個因數 for i := 1; i 4 { sign = 1 semiPrime = append(semiPrime, 0) break } } if sign != 1 { if factorCount >= 3 { semiPrime = append(semiPrime, i) } else { semiPrime = append(semiPrime, 0) } } } // idx 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 // semiPrime 0 0 0 4 0 6 0 0 9 10 0 0 0 14 15 0 0 0 0 0 21 22 0 0 25 26 // fmt.Println(\"semiPrime\", semiPrime) // 當前array和前面一共有幾個半質數 indexMap := make(map[int]int) // 如果是半質數添加到 map semiMap := make(map[int]struct{}) count := 0 for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/":{"url":"Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/","title":"Chocolates By Numbers","keywords":"","body":"ChocolatesByNumbers There are N chocolates in a circle. Count the number of chocolates you will eat. Two positive integers N and M are given. Integer N represents the number of chocolates arranged in a circle, numbered from 0 to N − 1. You start to eat the chocolates. After eating a chocolate you leave only a wrapper. You begin with eating chocolate number 0. Then you omit(忽略) the next M − 1 chocolates or wrappers on the circle, and eat the following one. More precisely(恰恰), if you ate chocolate number X, then you will next eat the chocolate with number (X + M) modulo N (remainder of division). You stop eating when you encounter an empty wrapper. For example, given integers N = 10 and M = 4. You will eat the following chocolates: 0, 4, 8, 2, 6. The goal is to count the number of chocolates that you will eat, following the above rules. Write a function: func Solution(N int, M int) int that, given two positive integers N and M, returns the number of chocolates that you will eat. For example, given integers N = 10 and M = 4. the function should return 5, as explained above. Write an efficient algorithm for the following assumptions: N and M are integers within the range [1..1,000,000,000]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 N塊巧克力,如果吃的是X號 下一個是吃 (X + M) modulo N 號 總共可以吃幾顆. 解題思路 方法ㄧ: 從0號開始吃, 下一個號碼+M-1號. 迴圈去跑 方法二: 可以吃到的巧克力的數量就是總的巧克力顆數 N 除以 N 和 M 的最大公因數. 計算 N和M的最大公因數P, N除以P得到商即為答案 來源 https://app.codility.com/programmers/lessons/12-euclidean_algorithm/chocolates_by_numbers/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ChocolatesByNumbers.go package chocolatesbynumbers func gcd(N int, M int) int { if N%M == 0 { return M } else { return gcd(M, N%M) } } /* 可以吃到的巧克力的數量就是總的巧克力顆數 N 除以 N 和 M 的最大公因數 計算 N和M的最大公因數P, N除以P得到商即為答案 O(log(N + M)) */ func Solution(N int, M int) int { return N / gcd(N, M) } /* Task Score 75% Correctness 100% Performance 50% input (947853, 4453) the solution exceeded the time limit. 從0號開始吃, 下一個號碼+M-1號 */ func SolutionBurst(N int, M int) int { eaten := make(map[int]struct{}) eatCount := 0 if N == 1 || M == 1 { return N } for { sumNum := eatCount * M startNum := sumNum % N if _, ok := eaten[startNum]; !ok { eaten[startNum] = struct{}{} eatCount++ } else { // 找到已吃過的巧克力 break } } return eatCount } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/":{"url":"Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/","title":"Common Prime Divisors","keywords":"","body":"CommonPrimeDivisors Check whether two numbers have the same prime divisors. A prime is a positive integer X that has exactly two distinct divisors: 1 and X. The first few prime integers are 2, 3, 5, 7, 11 and 13. A prime D is called a prime divisor(質因數) of a positive integer P if there exists a positive integer K such that D * K = P. For example, 2 and 5 are prime divisors of 20. You are given two positive integers N and M. The goal is to check whether the sets of prime divisors of integers N and M are exactly the same. For example, given: N = 15 and M = 75, the prime divisors are the same: {3, 5}; N = 10 and M = 30, the prime divisors aren't the same: {2, 5} is not equal to {2, 3, 5}; N = 9 and M = 5, the prime divisors aren't the same: {3} is not equal to {5}. Write a function: func Solution(A []int, B []int) int that, given two non-empty arrays A and B of Z integers, returns the number of positions K for which the prime divisors of A[K] and B[K] are exactly the same. For example, given: A[0] = 15 B[0] = 75 A[1] = 10 B[1] = 30 A[2] = 3 B[2] = 5 the function should return 1, because only one pair (15, 75) has the same set of prime divisors. Write an efficient algorithm for the following assumptions: Z is an integer within the range [1..6,000]; each element of arrays A, B is an integer within the range [1..2,147,483,647]. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 判斷兩個數是否有相同的質因數 解題思路 先判斷兩數的最大公因數, 再判斷兩個數是含有最大公因數沒有的因子 15 , 75 的最大公因數為 35 15= 35 75= 355 來源 https://app.codility.com/programmers/lessons/12-euclidean_algorithm/common_prime_divisors/ https://github.com/Anfany/Codility-Lessons-By-Python3/blob/master/L12_Euclidean%20algorithm/12.2%20CommonPrimeDivisors.md https://github.com/Luidy/codility-golang/blob/master/Lesson12/02_commonPrimeDivisors.go 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/CommonPrimeDivisors.go package commonprimedivisors /* func gcd(a, b int) int { for b != 0 { t := b b = a % b a = t } return a } */ func gcd(N int, M int) int { if N%M == 0 { return M } else { return gcd(M, N%M) } } func Solution(A []int, B []int) int { result := 0 for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/":{"url":"Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/","title":"Fib Frog","keywords":"","body":"FibFrog The Fibonacci sequence is defined using the following recursive formula: F(0) = 0 F(1) = 1 F(M) = F(M - 1) + F(M - 2) if M >= 2 A small frog wants to get to the other side of a river. The frog is initially located at one bank of the river (position −1) and wants to get to the other bank (position N). The frog can jump over any distance F(K), where F(K) is the K-th Fibonacci number. Luckily, there are many leaves on the river, and the frog can jump between the leaves, but only in the direction of the bank at position N. The leaves on the river are represented in an array A consisting of N integers. Consecutive(連續的) elements of array A represent consecutive positions from 0 to N − 1 on the river. Array A contains only 0s and/or 1s: 0 represents a position without a leaf; 1 represents a position containing a leaf. The goal is to count the minimum number of jumps in which the frog can get to the other side of the river (from position −1 to position N). The frog can jump between positions −1 and N (the banks of the river) and every position containing a leaf. For example, consider array A such that: A[0] = 0 A[1] = 0 A[2] = 0 A[3] = 1 A[4] = 1 A[5] = 0 A[6] = 1 A[7] = 0 A[8] = 0 A[9] = 0 A[10] = 0 The frog can make three jumps of length F(5) = 5, F(3) = 2 and F(5) = 5. Write a function: func Solution(A []int) int that, given an array A consisting of N integers, returns the minimum number of jumps by which the frog can get to the other side of the river. If the frog cannot reach the other side of the river, the function should return −1. For example, given: A[0] = 0 A[1] = 0 A[2] = 0 A[3] = 1 A[4] = 1 A[5] = 0 A[6] = 1 A[7] = 0 A[8] = 0 A[9] = 0 A[10] = 0 the function should return 3, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [0..100,000]; each element of array A is an integer that can have one of the following values: 0, 1. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. 題目大意 一只小青蛙想到對岸。它開始位於河的另一邊 位置-1, 想要到對面的河岸 位置N . 青蛙可以跳任意距離 F(K). 其中F(K)是第K個斐波那契數. 且河上有許多樹葉 A[0] = 0 代表位置 0 沒有樹葉, 1 代表有樹葉 青蛙可以在樹葉之間跳, 但只能朝河岸 N 的方向跳 找出最小跳的次數 解題思路 廣度優先搜尋 (Breadth-First Search, BFS) 問題. 對於河上有樹葉的位置index, 則遍歷比index小的斐波那契數f, 只要 index - f 這個位置可以達到, 這index的位置就可以經過一次跳躍長度為f 來源 https://app.codility.com/programmers/lessons/13-fibonacci_numbers/fib_frog/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/FibFrog.go package fibfrog /** * @description: 產生不大於n的斐波那契數的列表 * @param {int} N * @return {*} */ func Fib(N int) (fibArr []int) { fibArr = append(fibArr, 0) fibArr = append(fibArr, 1) fibArr = append(fibArr, 1) i := 2 for fibArr[i] 0 { continue } // get the optimal jump count to reach this leaf if A[i] == 1 { // 有樹葉 // 遍歷斐波那契數列, 尋找最少的跳躍次數 minJump := i + 1 canJump := false for _, f := range fibArr { previousIdx := i - f if previousIdx reachable[previousIdx] { // 此 previousIdx 位置可以到達 // fmt.Printf(\"%d :previousIdx = %d reachable = %v \\n\", i, previousIdx, reachable) minJump = reachable[previousIdx] canJump = true } } if canJump { reachable[i] = minJump + 1 } } // fmt.Printf(\"i=%d , reachable = %v \\n\", i, reachable) } if reachable[len(reachable)-1] == 0 { return -1 } return reachable[len(reachable)-1] } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/":{"url":"Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/","title":"Abs Distinct","keywords":"","body":"AbsDistinct A non-empty array A consisting of N numbers is given. The array is sorted in non-decreasing order. The absolute distinct count of this array is the number of distinct absolute values among the elements of the array. For example, consider array A such that: A[0] = -5 A[1] = -3 A[2] = -1 A[3] = 0 A[4] = 3 A[5] = 6 The absolute distinct count of this array is 5, because there are 5 distinct absolute values among the elements of this array, namely 0, 1, 3, 5 and 6. Write a function: func Solution(A []int) int that, given a non-empty array A consisting of N numbers, returns absolute distinct count of array A. For example, given array A such that: A[0] = -5 A[1] = -3 A[2] = -1 A[3] = 0 A[4] = 3 A[5] = 6 the function should return 5, as explained above. Write an efficient algorithm for the following assumptions: N is an integer within the range [1..100,000]; each element of array A is an integer within the range [−2,147,483,648..2,147,483,647]; array A is sorted in non-decreasing order. Copyright 2009–2021 by Codility Limited. All Rights Reserved. Unauthorized copying, publication or disclosure prohibited. \"有序數組中絕對值不同的數的個數\"指的是,一個已經排好序的整數數組中絕對值不相同的數字的個數, 例如: A[0] = -5 A[1] = -3 A[2] = -1 A[3] = 0 A[4] = 3 A[5] = 6 絕對值不同的數的個數為 5, 因為其中有 5 個不同的絕對值: 0, 1, 3, 5, 6 編寫一個函數: func Solution(A []int) int 請返回給定有序數組中絕對值不同的數的個數。 例如,給出數組A: A[0] = -5 A[1] = -3 A[2] = -1 A[3] = 0 A[4] = 3 A[5] = 6 函數應返回5。 假定: N 是 [1..100,000] 內的 整數; 數組 A 每個元素是取值範圍 [−2,147,483,648..2,147,483,647] 內的 整數 ; 數組 A 是 非-遞增 序列. 題目大意 解題思路 來源 https://app.codility.com/programmers/lessons/15-caterpillar_method/abs_distinct/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/AbsDistinct.go © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/":{"url":"GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/","title":"0031.Find-Minimum-Difference-Between-Any-Two-Elements","keywords":"","body":"0031. Find Minimum Difference Between Any Two Elements 題目 Given an unsorted array, find the minimum difference between any pair in given array. Examples : Input : {1, 5, 3, 19, 18, 25}; Output : 1 Minimum difference is between 18 and 19 Input : {30, 5, 20, 9}; Output : 4 Minimum difference is between 5 and 9 Input : {1, 19, -4, 31, 38, 25, 100}; Output : 5 Minimum difference is between 1 and -4 來源 https://www.geeksforgeeks.org/find-minimum-difference-pair/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/Find-Minimum-Difference-Between-Any-Two-Elements.go package findminimumdifferencebetweenanytwoelements import ( \"math\" \"sort\" ) /* https://yourbasic.org/golang/absolute-value-int-float/ http://cavaliercoder.com/blog/optimized-abs-for-int64-in-go.html fmt.Println(abs(math.MinInt64)) // Output: -9223372036854775808 // 似乎比較快 func WithTwosComplement(n int64) int64 { y := n >> 63 // y ← x ⟫ 63 return (n ^ y) - y // (x ⨁ y) - y } */ func abs(n int) int { if n > 63 // y ← x ⟫ 63 return (n ^ y) - y // (x ⨁ y) - y } // O(n Log n) func FindMinDiff(nums []int) int { if len(nums) tmp { minSize = tmp } } if minSize == math.MaxInt32 { minSize = 0 } return minSize } func FindMinDiff2(nums []int) int { if len(nums) tmp { minSize = tmp } } if minSize == math.MaxInt32 { minSize = 0 } return minSize } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0000.xxxx/":{"url":"Leetcode/0000.xxxx/","title":"NUM.LEETCODETITLE","summary":"NUM.FOLDERPATH","keywords":"","body":"NUM.LEETCODETITLE tagsstart LeetCode Go Easy/Medium/Hard LEETCODETITLE tagsstop 題目 題目大意 解題思路 Big O 時間複雜 : `` 空間複雜 : `` 來源 LEETCODELINK https://leetcode.cn/problems/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/NUM.FOLDERPATH/main.go Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0001.Two-Sum/Merging-2-Packages/":{"url":"Leetcode/0001.Two-Sum/Merging-2-Packages/","title":"Merging 2 Packages","keywords":"","body":"Given a package with a weight limit limit and an array arr of item weights, implement a function getIndicesOfItemWeights that finds two items whose sum of weights equals the weight limit. The function should return a pair [i, j] of the indices of the item weights, ordered such that i > j. If such a pair doesn’t exist, return an empty array. input: arr = [4, 6, 10, 15, 16], lim = 21 output: [3, 1] # since these are the indices of the weights 6 and 15 whose sum equals to 21 © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0001.Two-Sum/":{"url":"Leetcode/0001.Two-Sum/","title":"0001.Two Sum","summary":null,"keywords":"","body":"1. Two Sum tagsstart Easy tagsstop 题目 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. 題目大意 在數組中找到 2 個數之和等於給定值的數字, 結果返回 2 個數字在數組中的下標. 解題思路 暴力解: 時間複雜 O(n^2), 空間複雜 O(1) 這道題最優的做法時間複雜度是 O(n) 順序掃描數組, 對每一個元素,在 map 中找能組合給定值的另一半數字, 如果找到了, 直接返回 2 個數字的下標即可. 如果找不到, 就把這個數字存入 map 中, 等待掃到“另一半”數字的時候, 再取出來返回結果. 如果nums是有序 可以使用左右指針 來源 https://leetcode-cn.com/problems/two-sum/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0001.Two-Sum/twosum.go package twosum // 時間複雜 O(n^2), 空間複雜 O(1) func Twosum(nums []int, target int) []int { for i, _ := range nums { for j := i + 1; j target { // right-- // } // } // return []int{0, 0} // } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0002.Add-Two-Numbers/":{"url":"Leetcode/0002.Add-Two-Numbers/","title":"0002.Add Two Numbers","summary":"0002.Add-Two-Numbers","keywords":"","body":"0002.Add Two Numbers tagsstart LeetCode Go Medium Add Two Numbers Linked List Math Recursion Amazon Apple Facebook Microsoft Bloomberg tagsstop 題目 題目大意 解題思路 鏈表雙指標技巧 和加法運算過程中對進位的處理。 注意這個 carry 變數的處理,在我們手動類比加法過程的時候會經常用到。 遍歷 l1跟 l2. 講兩個list的val相加, 並且記錄進位的值給next使用 最後如果 carry 還有的話, 需要產生一個新的節點 Big O 時間複雜 : O(max⁡(m,n) 時間複雜度: O(max⁡(m,n)) ,其中 m 和 n 分別為兩個鏈表的長度。 我們要遍歷兩個鏈表的全部位置,而處理每個位置只需要 O(1) 的時間 空間複雜 : O(1) O(1) 。 注意返回值不計入空間複雜度 來源 https://leetcode.com/problems/add-two-numbers/description/ https://leetcode.cn/problems/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0002.Add-Two-Numbers/main.go package addtwonumbers // 時間複雜 O(max(m,n)), 空間複雜 O(1) /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ // 遍歷 l1跟 l2. 講兩個list的val相加, 並且記錄進位的值給next使用 // 最後如果 carry 還有的話, 需要產生一個新的節點 func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { var result, tail *ListNode carry := 0 for l1 != nil || l2 != nil { n1, n2 := 0, 0 if l1 != nil { n1 = l1.Val l1 = l1.Next } if l2 != nil { n2 = l2.Val l2 = l2.Next } sum := n1 + n2 + carry sum, carry = sum%10, sum/10 if result == nil { result = &ListNode{Val: sum, Next: nil} tail = result } else { tail.Next = &ListNode{Val: sum, Next: nil} tail = tail.Next } } // 最後如果 carry 還有的話, 需要產生一個新的節點 if carry > 0 { tail.Next = &ListNode{Val: carry, Next: nil} } return result } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0003.Longest-Substring-Without-Repeating-Characters/":{"url":"Leetcode/0003.Longest-Substring-Without-Repeating-Characters/","title":"0003.Longest Substring Without Repeating Characters","summary":"0003.Longest Substring Without Repeating Characters","keywords":"","body":"3. Longest Substring Without Repeating Characters tagsstart LeetCode Go Medium Longest Substring Without Repeating Characters Sliding Window Array tagsstop 题目 Given a string, find the length of the longest substring without repeating characters. Example 1: Input: \"abcabcbb\" Output: 3 Explanation: The answer is \"abc\", with the length of 3. Example 2: Input: \"bbbbb\" Output: 1 Explanation: The answer is \"b\", with the length of 1. Example 3: Input: \"pwwkew\" Output: 3 Explanation: The answer is \"wke\", with the length of 3. Note that the answer must be a substring, \"pwke\" is a subsequence and not a substring. 題目大意 在一個字符串重尋找沒有重複字母的最長子串。 解題思路 這一題和第 438 題,第 3 題,第 76 題,第 567 題類似,用的思想都是\"滑動窗口\"。 滑動窗口的右邊界不斷的右移,只要沒有重複的字符,就持續向右擴大窗口邊界。一旦出現了重複字符,就需要縮小左邊界,直到重複的字符移出了左邊界,然後繼續移動滑動窗口的右邊界。以此類推,每次移動需要計算當前長度,並判斷是否需要更新最大長度,最終最大的值就是題目中的所求。 O(n) 用空間換取時間, map紀錄已出現過的字符, 如果map效能不好時可使用數組(Slice)來改善 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0003.Longest-Substring-Without-Repeating-Characters/ https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/Longest-Substring-Without-Repeating-Characters.go package longestSubstringwithoutrepeatingcharacters // LengthOfLongestSubstring 暴力解 func LengthOfLongestSubstring(s string) int { slength := len(s) if slength == 0 || slength == 1 { return slength } tmpLen := 1 var maxLen = 1 for i := 1; i maxLen { maxLen = tmpLen } } return maxLen } // LengthOfLongestSubstringMap 用map 紀錄是否重複. func LengthOfLongestSubstringMap(s string) int { slength := len(s) if slength == 0 || slength == 1 { return slength } charMap := make(map[byte]bool) maxLen, left, right := 0, 0, 0 for left = slength || right >= len(s) { break } } return maxLen } // LengthOfLongestSubstringBit 用map效能不好時可使用數組改善 func LengthOfLongestSubstringBit(s string) int { slength := len(s) if slength == 0 || slength == 1 { return slength } // ASCII 0~255 charMap := [256]bool{} maxLen, left, right := 0, 0, 0 for left = slength || right >= len(s) { break } } return maxLen } Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkLengthOfLongestSubstring-8 66143602 19.08 ns/op 0 B/op 0 allocs/op BenchmarkLengthOfLongestSubstringMap-8 2524627 397.8 ns/op 0 B/op 0 allocs/op BenchmarkLengthOfLongestSubstringBit-8 65099846 21.37 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters 4.193s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0005.Longest-Palindromic-Substring/":{"url":"Leetcode/0005.Longest-Palindromic-Substring/","title":"0005. Longest Palindromic Substring","summary":"0005. Longest Palindromic Substring","keywords":"","body":"0005.Longest Palindromic Substring tagsstart LeetCode Go Medium DP Amazon Microsoft Google Adobe Facebook tagsstop 題目 Given a string s, return the longest palindromic substring in s. A string is called a palindrome string if the reverse of that string is the same as the original string. Example 1: Input: s = \"babad\" Output: \"bab\" Explanation: \"aba\" is also a valid answer. Example 2: Input: s = \"cbbd\" Output: \"bb\" Constraints: 1 s consist of only digits and English letters. 題目大意 給你一個字符串 s,找到 s 中最長的回文子串。 解題思路 每一個字符本身都是回文 長度為 2, 且首尾字符相同則為回文 長度>=3, 如果頭尾相同, 則去掉頭尾後可看是合是回文. 如果頭尾不同則不是回文 來源 https://leetcode.com/problems/longest-palindromic-substring/ https://leetcode.cn/problems/longest-palindromic-substring/solutions/1348874/s-by-xext-5zk3/ 解答 package longestpalindromicsubstring func longestPalindrome(s string) string { dp := make([][]bool, len(s)) result := s[0:1] for i := 0; i len(result) { result = s[start : end+1] } } } return result } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0011.Container-With-Most-Water/":{"url":"Leetcode/0011.Container-With-Most-Water/","title":"0011.Container With Most Water","summary":"0011.Container-With-Most-Water","keywords":"","body":"0011.Container With Most Water tagsstart LeetCode Go Medium Container With Most Water Amazon Microsoft Adobe Facebook Google Array Two Pointers Greedy tagsstop 題目 題目大意 解題思路 利用雙指針, 找出最小的高並乘上兩指針距離, 得出面積 當左指針高度比右指針高度高時, 將右指針往左移, 反之將左指針往右移. Big O 時間複雜 : O(n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/container-with-most-water/description/ https://leetcode.cn/problems/container-with-most-water/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0011.Container-With-Most-Water/main.go package containerwithmostwater // 時間複雜 O(n), 空間複雜 O(1) func maxArea(height []int) int { left, right := 0, len(height)-1 result := 0 for left height[right] { right-- } else { left++ } } return result } func min(a, b int) int { if a b { return a } return b } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0015.3Sum/":{"url":"Leetcode/0015.3Sum/","title":"0015. 3Sum","summary":"0015.3Sum","keywords":"","body":"15. 3Sum tagsstart LeetCode Go Medium 3Sum Array Two Pointers Sorting tagsstop 題目 Given an array nums of n integers, are there elements a, b, c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain duplicate triplets. Example: Given array nums = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ] 題目大意 給定一個數組,要求在這個數組中找出 3 個數之和為 0 的所有組合。 解題思路 用 map 提前計算好任意 2 個數字之和,保存起來,可以將時間複雜度降到 O(n^2)。這一題比較麻煩的一點在於,最後輸出解的時候,要求輸出不重複的解。數組中同一個數字可能出現多次,同一個數字也可能使用多次,但是最後輸出解的時候,不能重複。例如[-1,-1,2] 和[2, -1, -1]、[-1, 2, -1] 這3 個解是重複的,即使-1 可能出現100 次,每次使用的-1 的數組下標都是不同的。 這裡就需要去重和排序了。 map 記錄每個數字出現的次數,然後對 map 的 key 數組進行排序,最後在這個排序以後的數組裡面掃,找到另外 2 個數字能和自己組成 0 的組合。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0015.3Sum/ https://leetcode-cn.com/problems/3sum/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0015.3Sum/3Sum.go package threesum import ( \"sort\" ) // ThreeSumBurst : 暴力解 : O(n^3) func ThreeSumBurst(nums []int) [][]int { result := [][]int{} sort.Ints(nums) // O(n log n) for i := 0; i 0 && nums[i] == nums[i-1] { continue } for j := i + 1; j i+1 && nums[j] == nums[j-1] { continue } for k := j + 1; k 1 && nums[i] == nums[i-1] { // 去掉重複 start = i - 1 } for start i { if start > 0 && nums[start] == nums[start-1] { // 去掉重複 start++ continue } if end 0 { end-- } else { start++ } } } return result } func ThreeSumHashTable(nums []int) [][]int { result := [][]int{} if len(nums) 0 && nums[i] == nums[i-1] { continue } seen := make(map[int]bool) target := -nums[i] // 目標值為當前元素的相反數 for j := i + 1; j 0 && nums[i] == nums[i-1] { continue } target, l, r := -nums[i], i+1, len(nums)-1 for l target { r-- } else if sum goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0015.3Sum cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkThreeSumBurst-4 9838000 121.4 ns/op 48 B/op 2 allocs/op BenchmarkThreeSumDoublePoint-4 9069201 112.8 ns/op 48 B/op 2 allocs/op BenchmarkThreeSumHashTable-4 7935907 147.1 ns/op 48 B/op 2 allocs/op BenchmarkThreeSumTwoPointer-4 10888315 103.5 ns/op 48 B/op 2 allocs/op PASS ok LeetcodeGolang/Leetcode/0015.3Sum 5.055s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0019.Remove-Nth-Node-From-End-of-List/":{"url":"Leetcode/0019.Remove-Nth-Node-From-End-of-List/","title":"0019. Remove Nth Node From End of List","summary":"0015.3Sum","keywords":"","body":"19. Remove Nth Node From End of List tagsstart LeetCode Go Medium Linked List Two Pointers Facebook Amazon Microsoft Google Bloomberg tagsstop 題目 Given the head of a linked list, remove the nth node from the end of the list and return its head. Example 1: Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5] Example 2: Input: head = [1], n = 1 Output: [] Example 3: Input: head = [1,2], n = 1 Output: [1] Constraints: The number of nodes in the list is sz. 1 0 1 題目大意 找尋單linked list的 倒數第 n 個元素並刪除. 返回該 linked list的頭節點 解題思路 先讓 fast走 k 步, 然後 fast slow 同速前進 這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點 來源 https://leetcode.com/problems/remove-nth-node-from-end-of-list/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0019.Remove-Nth-Node-From-End-of-List/main.go package removenthnodefromendoflist /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type ListNode struct { Val int Next *ListNode } // 產生 dummyHead,跟 preslow // 使用雙指針, 先讓 fast走 `k` 步, 然後 `fast slow 同速前進` // 這樣當fast走到nil時, slow所在位置就是在倒數第 k 的節點 // 將 slow的前一步(preslow)的next 指向 slow.Next func RemoveNthFromEnd(head *ListNode, n int) *ListNode { dummyHead := &ListNode{Next: head} preSlow, slow, fast := dummyHead, head, head for fast != nil { if n tags: Medium Leetcode Two Pointers © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0020.Valid-Parentheses/":{"url":"Leetcode/0020.Valid-Parentheses/","title":"0020. Valid Parentheses","summary":"0020.Valid-Parentheses","keywords":"","body":"0020. Valid Parentheses tagsstart LeetCode Go Easy Valid Parentheses tagsstop 題目 Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets. Open brackets must be closed in the correct order. Every close bracket has a corresponding open bracket of the same type. Example 1: Input: s = \"()\" Output: true Example 2: Input: s = \"()[]{}\" Output: true Example 3: Input: s = \"(]\" Output: false Constraints: 1 題目大意 解題思路 Big O 時間複雜 : 空間複雜 : 來源 https://leetcode.com/problems/valid-parentheses/ https://leetcode.cn/problems/valid-parentheses/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0020.Valid-Parentheses/main.go package validparentheses type Stack struct { runes []rune } func NewStack() *Stack { return &Stack{runes: []rune{}} } func (s *Stack) Push(str rune) { s.runes = append(s.runes, str) } func (s *Stack) Pop() rune { str := s.runes[len(s.runes)-1] s.runes = s.runes[:len(s.runes)-1] return str } // 時間複雜 O(n), 空間複雜 O(n) func IsValid(s string) bool { runeStack := NewStack() for _, v := range s { // fmt.Println(string(v)) if v == '(' || v == '[' || v == '{' { runeStack.Push(v) } else if (v == ')' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '(') || (v == ']' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '[') || (v == '}' && len(runeStack.runes) > 0 && runeStack.runes[len(runeStack.runes)-1] == '{') { runeStack.Pop() } else { return false } } return len(runeStack.runes) == 0 } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0021.Merge-Two-Sorted-Lists/":{"url":"Leetcode/0021.Merge-Two-Sorted-Lists/","title":"0021. Merge Two Sorted Lists","summary":"0021.Merge-Two-Sorted-Lists","keywords":"","body":"0021. Merge Two Sorted Lists tagsstart LeetCode Go Easy/Medium/Hard Merge Two Sorted Lists tagsstop 題目 題目大意 解題思路 Big O 時間複雜 : O( log n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/merge-two-sorted-lists/description/ https://leetcode.cn/problems/merge-two-sorted-lists/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0021.Merge-Two-Sorted-Lists/main.go package mergetwosortedlists type ListNode struct { Val int Next *ListNode } // 時間複雜 O(log n), 空間複雜 O(1) func MergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode { head := &ListNode{Next: nil} cur := head for list1 != nil && list2 != nil { if list1.Val Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0027.Remove-Element/":{"url":"Leetcode/0027.Remove-Element/","title":"0027.Remove Element","summary":null,"keywords":"","body":"27. Remove Element tagsstart Easy Array tagsstop 題目 Given an array nums and a value val, remove all instances of that value in-place and return the new length. Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory. The order of elements can be changed. It doesn't matter what you leave beyond the new length. Example 1: Given nums = [3,2,2,3], val = 3, Your function should return length = 2, with the first two elements of nums being 2. It doesn't matter what you leave beyond the returned length. Example 2: Given nums = [0,1,2,2,3,0,4,2], val = 2, Your function should return length = 5, with the first five elements of nums containing 0, 1, 3, 0, and 4. Note that the order of those five elements can be arbitrary. It doesn't matter what values are set beyond the returned length. Clarification: Confused why the returned value is an integer but your answer is an array? Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well. Internally you can think of this: // nums is passed in by reference. (i.e., without making a copy) int len = removeElement(nums, val); // any modification to nums in your function would be known by the caller. // using the length returned by your function, it prints the first len elements. for (int i = 0; i 題目大意 給定一個數組 nums 和一個數值 val,將數組中所有等於 val 的元素刪除,並返回剩餘的元素個數。 解題思路 這道題和第 283 題很像。這道題和第 283 題基本一致,283 題是刪除 0,這一題是給定的一個 val,實質是一樣的。 這里數組的刪除並不是真的刪除,只是將刪除的元素移動到數組後面的空間內,然後返回數組實際剩餘的元素個數,OJ 最終判斷題目的時候會讀取數組剩餘個數的元素進行輸出。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0027.Remove-Element/ https://leetcode-cn.com/problems/remove-element/ https://mp.weixin.qq.com/s/wj0T-Xs88_FHJFwayElQlA 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0027.Remove-Element/Remove-Element.go package removeelement /* 雙指針法 雙指針法(快慢指針法)在數組和鍊錶的操作中是非常常見的,很多考察數組和鍊錶操作的面試題,都使用雙指針法 */ func RemoveElementDoublePoint(nums []int, val int) int { if len(nums) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/":{"url":"Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/","title":"0028. Find the Index of the First Occurrence in a String","summary":"0028.Find-the-Index-of-the-First-Occurrence-in-a-String","keywords":"","body":"0028. Find the Index of the First Occurrence in a String tagsstart LeetCode Go Easy Find the Index of the First Occurrence in a String Two Pointers String String Matching tagsstop 題目 題目大意 解題思路 Big O 時間複雜 : `` 空間複雜 : `` 來源 https://leetcode.com/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ https://leetcode.cn/problems/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/main.go Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0035.Search-Insert-Position/":{"url":"Leetcode/0035.Search-Insert-Position/","title":"0035.Search Insert Position","summary":null,"keywords":"","body":"35. Search Insert Position tagsstart Easy Array tagsstop 題目 Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Example 1: Input: [1,3,5,6], 5 Output: 2 Example 2: Input: [1,3,5,6], 2 Output: 1 Example 3: Input: [1,3,5,6], 7 Output: 4 Example 4: Input: [1,3,5,6], 0 Output: 0 題目大意 給定一個排序數組和一個目標值,在數組中找到目標值,並返回其索引。如果目標值不存在於數組中,返回它將會被按順序插入的位置。 你可以假設數組中無重複元素。 解題思路 給出一個已經從小到大排序後的數組,要求在數組中找到插入 target 元素的位置。 這一題是經典的二分搜索的變種題,在有序數組中找到最後一個比 target 小的元素。 \b- 只要看到面試題裡給出的數組是有序數組,都可以想一想是否可以使用二分法 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0035.Search-Insert-Position/ https://leetcode-cn.com/problems/search-insert-position/ 數組:每次遇到二分法,都是一看就會,一寫就廢 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0035.Search-Insert-Position/Search-Insert-Position.go package searchinsertposition // 暴力解 時間複雜 O(n) 空間複雜 O(1) func SearchInsertBurst(nums []int, target int) int { for i := 0; i = target { return i } } return len(nums) } //二分法 時間複雜 O(log n) 空間複雜 O(1) func SearchInsertBisection(nums []int, target int) int { left, right := 0, len(nums)-1 for left >1 if nums[mid] >= target { right = mid - 1 } else if nums[mid] >1 if nums[mid] >= target { right = mid - 1 } else { left = mid + 1 } } return left } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0046.Permutations/":{"url":"Leetcode/0046.Permutations/","title":"0046.Permutations","summary":null,"keywords":"","body":"46. Permutations tagsstart Medium Backtracking tagsstop 題目 Given a collection of distinct integers, return all possible permutations(排列). Example: Input: [1,2,3] Output: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 題目大意 給定一個沒有重複數字的序列,返回其所有可能的全排列。 解題思路 解決回朔問題可用一個決策樹的遍歷過程 路徑: 也就是已經做的選擇 選擇列表: 也就是當前可以做的選擇 結束條件: 也就是達到決策樹底層, 無法再做選擇的條件 result = [] def backtrack(路徑, 選擇列表): if 滿足結束條件: result.add(路徑) return for 選擇 in 選擇列表: 做選擇 backtrack(路徑, 選擇列表) 撤銷選擇 選擇:[1,2,3] [] [1]/ |[2] \\[3] [2]/ \\[3] [1]/ \\[3] [1]/ \\[2] |[3] |[2] |[3] |[1] |[2] |[1] 結果 [1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,1,2] [3,2,1] 求出一個數組的排列組合中的所有排列,用 DFS 深搜即可。 這個問題可以看作有 ñ 個排列成一行的空格,我們需要從左往右依此填入題目給定的 ñ個數,每個數只能使用一次。 那麼很直接的可以想到一種窮舉的算法,即從左往右每一個位置都依此嘗試填入一個數, 看能不能填完這ñ 個空格,在程序中我們可以用「回溯法」來模擬這個過程 回溯法: 一種通過探索所有可能的候選解來找出所有的解的算法。如果候選解被確認不是一個解(或者至少不是最後一個解), 回溯算法會通過在上一步進行一些變化拋棄該解,即回溯並且再次嘗試。 作者:LeetCode-Solution 链接:https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-by-leetcode-solution-2/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0046.Permutations/ https://leetcode-cn.com/problems/permutations/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0046.Permutations/Permutations.go 時間複雜 O(n) package permutations func Permute(nums []int) [][]int { numsLen := len(nums) if numsLen == 0 { return [][]int{} } used, path, res := make([]bool, numsLen), []int{}, [][]int{} dfs(nums, numsLen, 0, path, &used, &res) return res } /* generatePermutation: (輸入數組, 數組長度, 遞迴到第幾層depth, path, 使用過的, 結果) 找最短路徑用**BFS**, 其他時用**DFS**用得多一些, 因為遞迴較好寫 假設有棵滿的二叉樹,節點數為 N. 對DFS來說空間複雜度就是遞迴, 最壞的情況就是樹的高度 O(log N) BFS算法, Queue每次都會存二叉樹一層的節點, 最壞的情況下空間複雜度應該就是樹的最下層的數量, 也就是 N/2. 空間複雜度 O(N) DFS(深度優先搜索)通常使用堆棧(Stack)來實現。在DFS中,您首先處理一個節點,然後將其子節點按某種順序推入堆棧中,接著繼續處理堆棧頂部的節點,直到堆棧為空。 */ func generatePermutation(nums []int, numsLen int, depth int, path []int, used *[]bool, res *[][]int) { if depth == numsLen { temp := make([]int, len(path)) copy(temp, path) *res = append(*res, temp) return } for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0049.Group-Anagrams/":{"url":"Leetcode/0049.Group-Anagrams/","title":"0049.Group Anagrams","summary":"Group Anagrams","keywords":"","body":"0049.Grop Anagrams tagsstart LeetCode Go Medium Group Anagrams tagsstop 題目 Given an array of strings strs, group the anagrams together. You can 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: strs = [\"eat\",\"tea\",\"tan\",\"ate\",\"nat\",\"bat\"] Output: [[\"bat\"],[\"nat\",\"tan\"],[\"ate\",\"eat\",\"tea\"]] Example 2: Input: strs = [\"\"] Output: [[\"\"]] Example 3: Input: strs = [\"a\"] Output: [[\"a\"]] Constraints: 1 0 strs[i] consists of lowercase English letters. 題目大意 分組出只用同樣字符產生的的單字 解題思路 方法一: 計數 由於互為字母異位詞的兩個字串包含的字母相同,因此兩個字串中的相同字母出現的次數一定是相同的,故可以將每個字母出現的次數使用字串表示,作為哈希表的鍵。 方法二: 排序 由於互為字母異位詞的兩個字串包含的字母相同,因此對兩個字串分別進行排序之後得到的字串一定是相同的,故可以將排序之後的字串作為哈希表的鍵。 來源 https://leetcode.com/problems/group-anagrams/ https://leetcode.com/problems/group-anagrams/solutions/3645797/hash-solution-with-explanation-smart-solution-o-n-m/ https://leetcode.cn/problems/group-anagrams/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0049.Group-Anagams/main.go package groupanagrams import \"sort\" // 使用計數: 時間複雜 O(nk), 空間複雜 O(nk) // n 是單詞的個數 , k是單字的最大長度 // O(n)遍歷單詞, 遍歷字符O(nk) func GroupAnagrams(strs []string) [][]string { m := make(map[[26]int][]string, len(strs)) for _, str := range strs { // 建立每一個string的特徵`count`, 藉由統計每個字母出現的次數 count := [26]int{} for _, b := range str { count[b-'a']++ } // 將同樣的次數的string放置在 map中 m[count] = append(m[count], str) } // 把map中的string放入到結果的 `[][]string` array 中 ans := [][]string{} for _, v := range m { ans = append(ans, v) } return ans } // 排序: 時間複雜 O(nklog(k)), 空間複雜 O(klog(k)) // n 是單詞的個數 , k是單字的最大長度 // 遍歷單詞 O(n) // 排序字符 O(klog(k)) func GroupAnagramsBySort(strs []string) [][]string { m := make(map[string][]string, len(strs)) for _, str := range strs { // 建立每一個string的特徵, 藉由統計排序 s := []byte(str) sort.Slice(s, func(i, j int) bool { return s[i] Benchmark go test -benchmem -run=none LeetcodeGolang/Leetcode/0049.Group-Anagrams -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0049.Group-Anagrams cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkGroupAnagrams-8 899431 1615 ns/op 968 B/op 12 allocs/op BenchmarkGroupAnagramsBySort-8 592148 3566 ns/op 776 B/op 33 allocs/op PASS ok LeetcodeGolang/Leetcode/0049.Group-Anagrams 3.611s package groupanagrams import ( \"reflect\" \"sort\" \"testing\" ) var tests = []struct { arg1 []string want [][]string }{ { []string{\"eat\", \"tea\", \"tan\", \"ate\", \"nat\", \"bat\"}, [][]string{ {\"bat\"}, {\"nat\", \"tan\"}, {\"ate\", \"eat\", \"tea\"}}, }, { []string{}, [][]string{}, }, { []string{\"a\"}, [][]string{ {\"a\"}}, }, } // 創建一個輔助函數,將字符串數組排序,以便比較 func sortSubStrings(groups [][]string) { for _, group := range groups { sort.Strings(group) } // 排序整個切片 sort.Slice(groups, func(i, j int) bool { return groups[i][0] © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0053.Maximum-Subarray/":{"url":"Leetcode/0053.Maximum-Subarray/","title":"0053.Maximum Subarray","summary":"0053.Maximum-Subarray","keywords":"","body":"53. Maximum Subarray tagsstart LeetCode Go Medium Array Dynamic Programming Blind75 tagsstop 題目 Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. Example: Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6. Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle. 題目大意 給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 解題思路 這一題可以用 DP 求解也可以不用 DP。 題目要求輸出數組中某個區間內數字之和最大的那個值。 dp[i] 表示[0,i] 區間內各個子區間和的最大值,狀態轉移方程是dp[i] = nums[i] + dp[i-1] (dp[i- 1] > 0),dp[i] = nums[i] (dp[i-1] ≤ 0)。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0053.Maximum-Subarray/ https://leetcode-cn.com/problems/maximum-subarray/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0053.Maximum-Subarray/Maximum-Subarray.go package maximumsubarray // MaxSubArrayDP : DP (dynamic programming) func MaxSubArrayDP(nums []int) int { if len(nums) == 0 { return 0 } if len(nums) == 1 { return nums[0] } dp, res := make([]int, len(nums)), nums[0] dp[0] = nums[0] for i := 1; i 0 { // 前一個和是正的 繼續加下去 dp[i] = nums[i] + dp[i-1] } else { // 前一個和是小於等於0 直接拿現在值取代 dp[i] = nums[i] } res = max(res, dp[i]) } return res } // MaxSubArray1 : 模擬, 比DP快 func MaxSubArray1(nums []int) int { if len(nums) == 1 { return nums[0] } maxSum := 0 tmp := 0 for i := 0; i maxSum { maxSum = tmp } if tmp b { return a } return b } //TODO: 分治法\b, 這個分治方法類似於「線段樹求解最長公共上升子序列問題」的pushUp操作 © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0059.Spiral-Matrix-II/":{"url":"Leetcode/0059.Spiral-Matrix-II/","title":"0059.Spiral Matrix II","summary":null,"keywords":"","body":"59. Spiral Matrix II tagsstart Medium Array tagsstop 題目 Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. Example: Input: 3 Output: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 題目大意 給定一個正整數 n,生成一個包含 1 到 n^2 所有元素,且元素按順時針順序螺旋排列的正方形矩陣。 解題思路 給出一個數組 n,要求輸出一個 n n 的二維數組,裡面元素是 1 - nn,且數組排列順序是螺旋排列的 這一題是第 54 題的加強版,沒有需要注意的特殊情況,直接模擬即可。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0059.Spiral-Matrix-II/ https://leetcode-cn.com/problems/spiral-matrix-ii/ 數組:這個循環可以轉懵很多人! 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0059.Spiral-Matrix-II/Spiral-Matrix-II.go package spiralmatrixii // GenerateMatrix : 按層模擬, 時間複雜 O(n^2) 空間複雜 O(1) func GenerateMatrix(n int) [][]int { result := make([][]int, n) for i := range result { result[i] = make([]int, n) } left, right, top, botton := 0, n-1, 0, n-1 num := 1 target := n * n for num = left; i-- { result[botton][i] = num num++ } botton-- // 左層 botton to top, 左層邊界++ for i := botton; i >= top; i-- { result[i][left] = num num++ } left++ } return result } // 模擬 : O(n) // https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0059.Spiral-Matrix-II/ func GenerateMatrix2(n int) [][]int { if n == 0 { return [][]int{} } if n == 1 { return [][]int{{1}} } result, visit, round, x, y, spDir := make([][]int, n), make([][]int, n), 0, 0, 0, [][]int{ {0, 1}, // 朝右 {1, 0}, // 朝下 {0, -1}, // 朝左 {-1, 0}, // 朝上 } for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0070.Climbing-Stairs/":{"url":"Leetcode/0070.Climbing-Stairs/","title":"0070.Climbing Stairs","summary":"0070.Climbing-Stairs","keywords":"","body":"0070.Climbing Stairs tagsstart LeetCode Go Easy Climbing Stairs DP tagsstop 題目 You are climbing a staircase. It takes n steps to reach the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? Example 1: Input: n = 2 Output: 2 Explanation: There are two ways to climb to the top. 1 step + 1 step 2 steps Example 2: Input: n = 3 Output: 3 Explanation: There are three ways to climb to the top. 1 step + 1 step + 1 step 1 step + 2 steps 2 steps + 1 step Constraints: 1 Accepted: 2.8M Submissions: 5.4M Acceptance Rate: 52.3% 題目大意 類似 Fibonacci Number 解題思路 簡單的 DP,經典的爬樓梯問題. 一個樓梯可以由 n-1 和 n-2 的樓梯爬上來。 這一題求解的值就是斐波那契數列。 Big O 時間複雜 : 空間複雜 : 來源 https://leetcode.com/problems/climbing-stairs/ https://leetcode.cn/problems/climbing-stairs/ https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0070.Climbing-Stairs/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0070.Climbing-Stairs/main.go package climbingstairs // 時間複雜 O(n), 空間複雜 O(n) func ClimbStairs(n int) int { dp := make([]int, n+1) dp[0], dp[1] = 1, 1 for i := 2; i Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0070.Climbing-Stairs cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkClimbStairs-8 10386211 112.1 ns/op 320 B/op 1 allocs/op BenchmarkClimbStairsCache-8 10184984 118.8 ns/op 320 B/op 1 allocs/op BenchmarkClimbStairsRecursive-8 4 281980486 ns/op 320 B/op 1 allocs/op PASS ok LeetcodeGolang/Leetcode/0070.Climbing-Stairs 5.591s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0072.Edit-Distance/":{"url":"Leetcode/0072.Edit-Distance/","title":"0072. Edit Distance","summary":"","keywords":"","body":"0072. Edit Distance tagsstart Golang Hard Dynamic Programming Edit Distance tagsstop 题目 Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2. You have the following three operations permitted on a word: Insert a character Delete a character Replace a character Example 1: Input: word1 = \"horse\", word2 = \"ros\" Output: 3 Explanation: horse -> rorse (replace 'h' with 'r') rorse -> rose (remove 'r') rose -> ros (remove 'e') Example 2: Input: word1 = \"intention\", word2 = \"execution\" Output: 5 Explanation: intention -> inention (remove 't') inention -> enention (replace 'i' with 'e') enention -> exention (replace 'n' with 'x') exention -> exection (replace 'n' with 'c') exection -> execution (insert 'u') Constraints: 0 word1 and word2 consist of lowercase English letters. 題目大意 可以對一個字符串進行三種操作, 插入, 刪除, 替換 現在給你兩個字符串word1,word2, 計算出word1轉換成word2最少需要多少次操作 解題思路 https://mp.weixin.qq.com/s/ShoZRjM8OyvDbZwoXh6ygg 解決兩個字符串的動態規劃問題, 一班都是用兩個指針 i, j 分別指向兩個字符串的最後, 然後一步步往前走, 縮小問題的規模 if word1[i] == word2[j]: skip i,j同時往前 else: # insert # delete # replace dp = [ [0,1,2,3,4,5], [1,1,2,2,3,4], [2,2,1,2,3,4], [3,3,2,2,2,3] ] word1 \\ word2 \"\" h o r s e \"\" 0 1 2 3 4 5 r 1 1 2 2 3 4 o 2 2 1 2 3 4 s 3 3 2 2 2 3 dp(i,j) 返回值, 就是 word1[0..i] 和 word2[0..j]的最小編輯距離 dp(1,0) \"ro\" , \"h\" 最小編輯距離 2 dp[i-1][j-1] dp[i-1][j] dp[i][j-1] dp[i][j] 替換/跳過 刪除 插入 來源 https://leetcode.com/problems/edit-distance/ https://labuladong.gitee.io/algo/3/25/77/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0072.Edit-Distance/main.go package editdistance import \"fmt\" // 遞迴 (暴力解) func MinDistance(word1 string, word2 string) int { var dp func(int, int) int dp = func(i, j int) int { // base case if i == -1 { return j + 1 } if j == -1 { return i + 1 } if word1[i] == word2[j] { // word1[0..i] 和 word2[0..j]的最小編輯距離等於 word1[0..i-1] 和 word2[0..j-1] // 本來就相等所以不需要任何操作 // 也就是說 dp(i,j)等於 dp(i-1,j-1) return dp(i-1, j-1) } else { return min( dp(i, j-1)+1, // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1 dp(i-1, j)+1, // delete: 直接把 word1[i] 這個字符串刪除, 往前 i 繼續和 j 對比, 操作次數+1 dp(i-1, j-1)+1, // replace: 直接把 word1[i] 替換成 word2[j], 這樣他們就匹配了, 同時往前 i, j 繼續對比, 操作次數+1 ) } } return dp(len(word1)-1, len(word2)-1) } // Memo優化 func MinDistanceMemo(word1 string, word2 string) int { var dp func(int, int) int memo := map[string]int{} dp = func(i, j int) int { key := fmt.Sprintf(\"%d,%d\", i, j) // 查詢備忘錄 避免重複 if _, ok := memo[key]; ok == true { return memo[key] } // base case if i == -1 { return j + 1 } if j == -1 { return i + 1 } if word1[i] == word2[j] { // word1[0..i] 和 word2[0..j]的最小編輯距離等於 word1[0..i-1] 和 word2[0..j-1] // 本來就相等所以不需要任何操作 // 也就是說 dp(i,j)等於 dp(i-1,j-1) memo[key] = dp(i-1, j-1) } else { memo[key] = min( dp(i, j-1)+1, // insert: 直接在 word1[i]中插入一個和word2[j]一樣的字符, 那麼word2[j]就被匹配了,往前j, 繼續和i對比, 操作次數+1 dp(i-1, j)+1, // delete: 直接把 word1[i] 這個字符串刪除, 往前 i 繼續和 j 對比, 操作次數+1 dp(i-1, j-1)+1, // replace: 直接把 word1[i] 替換成 word2[j], 這樣他們就匹配了, 同時往前 i, j 繼續對比, 操作次數+1 ) } return memo[key] } return dp(len(word1)-1, len(word2)-1) } // DP table 優化, DP table 是自底向上求解, 遞迴是自頂向下求解 func MinDistanceDP(word1 string, word2 string) int { m, n := len(word1), len(word2) // 初始化 dp table : [][]int{} dp := make([][]int, m+1) for i := 0; i i { min = i } } return min } go test -benchmem -run=none LeetcodeGolang/Leetcode/0072.Edit-Distance -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0072.Edit-Distance cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkMinDistance-8 398260 3748 ns/op 0 B/op 0 allocs/op BenchmarkMinDistanceMemo-8 102272 10796 ns/op 2211 B/op 69 allocs/op BenchmarkMinDistanceDP-8 1944886 794.2 ns/op 688 B/op 9 allocs/op PASS ok LeetcodeGolang/Leetcode/0072.Edit-Distance 5.717s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0074.Search-a-2D-Matrix/":{"url":"Leetcode/0074.Search-a-2D-Matrix/","title":"74. Search a 2D Matrix","summary":"0074.Search-a-2D-Matrix","keywords":"","body":"74. Search a 2D Matrix tagsstart LeetCode Go Medium Search a 2D Matrix Array Binary Search Matrix Facebook Amazon Microsoft Bloomberg tagsstop 題目 題目大意 編寫一個高效的演算法來判斷 m x n 矩陣中,是否存在一個目標值。 該矩陣具有如下特性: 每行中的整數從左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。 解題思路 可以將二維轉成一維矩陣 Big O 時間複雜 : O(log⁡mn) 其中 m 和 n 分別是矩陣的行數和列數 空間複雜 : O(1) 來源 https://leetcode.com/problems/search-a-2d-matrix/description/ https://leetcode.cn/problems/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0074.Search-a-2D-Matrix/main.go package searcha2dmatrix // 時間複雜 O(logmn), 空間複雜 O(1) func searchMatrix(matrix [][]int, target int) bool { m := len(matrix) if m > 1) //left + (right-left)/2 val := getMatrix(matrix, mid) if val == target { return true } else if val Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0075.Sort-Colors/":{"url":"Leetcode/0075.Sort-Colors/","title":"0075.Sort Colors","summary":null,"keywords":"","body":"75. Sort Colors tagsstart Medium Sort tagsstop 题目 Given an array with n objects colored red, white or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white and blue. Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively. Note: You are not suppose to use the library's sort function for this problem. Example 1: Input: [2,0,2,1,1,0] Output: [0,0,1,1,2,2] Follow up: A rather straight forward solution is a two-pass algorithm using counting sort.First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's. Could you come up with a one-pass algorithm using only constant space? 給定一個包含紅色、白色和藍色,一共 n 個元素的數組,原地對它們進行排序,使得相同顏色的元素相鄰,並按照紅色、白色、藍色順序排列。 此題中,我們使用整數 0、 1 和 2 分別表示紅色、白色和藍色。 範例 1: 輸入:nums = [2,0,2,1,1,0] 輸出:[0,0,1,1,2,2] 範例 2: 輸入:nums = [2,0,1] 輸出:[0,1,2] 範例 3: 輸入:nums = [0] 輸出:[0] 範例 4: 輸入:nums = [1] 輸出:[1] 提示: n == nums.length 1 nums[i] 為 0、1 或 2 進階: 你可以不使用代碼庫中的排序函數來解決這道題嗎? 你能想出一個僅使用常數空間的一趟掃描算法嗎? 來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/sort-colors 著作權歸領扣網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。 題目大意 抽象題意其實就是排序。這題可以用快排一次通過。 解題思路 題目末尾的 Follow up 提出了一個更高的要求,能否用一次循環解決問題?這題由於數字只會出現 0,1,2 這三個數字,所以用游標移動來控制順序也是可以的。具體做法:0 是排在最前面的,所以只要添加一個 0,就需要放置 1 和 2。1 排在 2 前面,所以添加 1 的時候也需要放置 2 。至於最後的 2,只用移動游標即可。 這道題可以用計數排序,適合待排序數字很少的題目。用一個 3 個容量的數組分別計數,記錄 0,1,2 出現的個數。然後再根據個數排列 0,1,2 即可。時間複雜度 O(n),空間複雜度 O(K)。這一題 K = 3。 這道題也可以用一次三路快排。數組分為 3 部分,第一個部分都是 0,中間部分都是 1,最後部分都是 2 。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0075.Sort-Colors/ https://leetcode-cn.com/problems/sort-colors/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0075.Sort-Colors/0075.Sort-Colors.go package sortcolors func sortColors(nums []int) { if len(nums) == 0 { return } var index0, index1, index2 = 0, 0, 0 for _, num := range nums { switch num { case 0: nums[index2] = 2 index2++ nums[index1] = 1 index1++ nums[index0] = 0 index0++ case 1: nums[index2] = 2 index2++ nums[index1] = 1 index1++ case 2: index2++ } } } /* 二路快排與三路快排 先掌握二路快排, https://leetcode-cn.com/problems/sort-an-array/solution/golang-er-lu-kuai-pai-by-rqb-2/ 三路快排稍微改下即可 區別: 二路快排,分兩部分:小於等於、大於二部分。 三路快排分為,小於、等於、大於三部分。 三路快排: 相比二路快排增加一個變量記錄相等的起始元素。 假設選擇數組第一個元素作為參考元素。則起始下邊為0,即為equalHead 作者:hibrq 链接:https://leetcode-cn.com/problems/sort-an-array/solution/golang-san-lu-kuai-pai-by-rqb-2/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 */ func sortColorsQuickSort(nums []int) { if len(nums) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0078.Subsets/":{"url":"Leetcode/0078.Subsets/","title":"0078. Subsets","summary":"0078.Subsets","keywords":"","body":"0078. Subsets tagsstart LeetCode Go Medium Subsets tagsstop 題目 Given an integer array nums of unique elements, return all possible subsets (the power set). The solution set must not contain duplicate subsets. Return the solution in any order. Example 1: Input: nums = [1,2,3] Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] Example 2: Input: nums = [0] Output: [[],[0]] Constraints: 1 題目大意 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。 說明:解集不能包含重複的子集。 解題思路 找出一個集合中的所有子集,空集也算是子集。 且陣列中的數位不會出現重複。 用 DFS 暴力枚舉即可。 這一題和第 90 題,第 491 題類似,可以一起解答和複習 Big O 時間複雜 : O(n^2) 空間複雜 : O(n) 來源 https://leetcode.com/problems/subsets/description/ https://leetcode.cn/problems/subsets/description/ https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0078.Subsets/ https://github.com/suntong/lang/blob/master/lang/Go/src/ds/Recursion/LC-0B-Subsets-2.go 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0078.Subsets/main.go package subsets // 時間複雜 O(n^2) , 空間複雜 O(n) func Subsets(nums []int) [][]int { path, result := []int{}, [][]int{} for i := 0; i Benchmark go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. -cover goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkMaxEnvelopes-8 7799131 160.3 ns/op 88 B/op 3 allocs/op BenchmarkMaxEnvelopes2-8 5800399 195.6 ns/op 80 B/op 4 allocs/op PASS coverage: 96.0% of statements ok LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes 3.726s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0088.Merge-Sorted-Array/":{"url":"Leetcode/0088.Merge-Sorted-Array/","title":"0088.Merge Sorted Array","summary":null,"keywords":"","body":"88. Merge Sorted Array tagsstart Easy Array tagsstop 題目 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively. Example: Input: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 Output: [1,2,2,3,5,6] Constraints: -10^9 題目大意 合併兩個已經有序的數組,結果放在第一個數組中,第一個數組假設空間足夠大。要求算法時間複雜度足夠低。 解題思路 為了不大量移動元素,就要從2個數組長度之和的最後一個位置開始,依次選取兩個數組中大的數,從第一個數組的尾巴開始往頭放,只要循環一次以後,就生成了合併以後的數組了。 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0088.Merge-Sorted-Array/ https://leetcode-cn.com/problems/merge-sorted-array/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0088.Merge-Sorted-Array/Merge-Sorted-Array.go package mergesortedarray func Merge(nums1 []int, m int, nums2 []int, n int) { if m == 0 { copy(nums1, nums2) return } num1Idx, num2Idx, tail := m-1, n-1, m+n-1 // 從每一個array的後面開始比較, 並放入最後面的位子. 這樣只要跑一次 for ; num1Idx >= 0 && num2Idx >= 0; tail-- { if nums1[num1Idx] > nums2[num2Idx] { nums1[tail] = nums1[num1Idx] num1Idx-- } else { nums1[tail] = nums2[num2Idx] num2Idx-- } } // 將尚未跑完的補齊 for ; num2Idx > 0; tail-- { nums1[tail] = nums2[num2Idx] num2Idx-- } } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0094.Binary-Tree-Inorder-Traversal/":{"url":"Leetcode/0094.Binary-Tree-Inorder-Traversal/","title":"0094.Binary Tree Inorder Traversal","summary":null,"keywords":"","body":"94. Binary Tree Inorder Traversal tagsstart Medium Stack tagsstop 題目 Given a binary tree, return the inorder traversal of its nodes' values. Example : Input: [1,null,2,3] 1 \\ 2 / 3 Output: [1,3,2] Follow up: Recursive solution is trivial, could you do it iteratively? 題目大意 中序遍歷一顆樹 解題思路 深度優先 中序遍歷 若二元樹為空回傳空, 否則從根結點開始, 先走訪根節點的左子樹 -> 根節點 -> 右子樹 深度優先, 前序遍歷 若二元樹為空回傳空, 否則先根節點-> 左子樹 -> 右子樹 深度優先, 後序遍歷 若二元樹為空回傳空, 否則從左到右誒並從葉子節點後續走訪左子樹到右子樹, 最後是拜訪根節點 來源 https://books.halfrost.com/leetcode/ChapterFour/0001~0099/0094.Binary-Tree-Inorder-Traversal/ https://leetcode-cn.com/problems/binary-tree-inorder-traversal/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0094.Binary-Tree-Inorder-Traversal/Binary-Tree-Inorder-Traversal.go package binarytreeinordertraversal import ( \"LeetcodeGolang/Utility/structures\" ) type TreeNode = structures.TreeNode func InorderTraversalStack(root *TreeNode) []int { var result []int inorderStack(root, &result) return result } func InorderTraversalRecursion(root *TreeNode) []int { var result []int inorderRecursion(root, &result) return result } func inorderRecursion(root *TreeNode, r *[]int) { if root != nil { inorderRecursion(root.Left, r) *r = append(*r, root.Val) inorderRecursion(root.Right, r) } } func inorderStack(root *TreeNode, r *[]int) { s := structures.NewArrayStack() p := root for !s.IsEmpty() || p != nil { if p != nil { // 把中間放入stack, 往左節點繼續往下找 s.Push(p) p = p.Left } else { // 找不到時,印出 tmp := s.Pop().(*TreeNode) *r = append(*r, tmp.Val) p = tmp.Right } } } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0100.Same-Tree/":{"url":"Leetcode/0100.Same-Tree/","title":"100. Same Tree","summary":"0100.Same-Tree","keywords":"","body":"100. Same Tree tagsstart LeetCode Go Easy Same Tree Tree tagsstop 題目 Given the roots of two binary trees p and q, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identical, and the nodes have the same value. Example 1: Input: p = [1,2,3], q = [1,2,3] Output: true Example 2: Input: p = [1,2], q = [1,null,2] Output: false Example 3: Input: p = [1,2,1], q = [1,1,2] Output: false Constraints: The number of nodes in both trees is in the range [0, 100]. -104 Accepted: 1.8M Submissions: 3.1M Acceptance Rate: 60.3% 題目大意 判斷 2 顆樹是否是完全相等的 解題思路 遞歸判斷即可 Big O 時間複雜 : O(n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/same-tree/ https://leetcode.cn/problems/same-tree/ https://books.halfrost.com/leetcode/ChapterFour/0100~0199/0100.Same-Tree/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0100.Same-Tree/main.go package sametree import \"LeetcodeGolang/structures\" /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ type TreeNode = structures.TreeNode // 時間複雜 O(n), 空間複雜 O(1) func IsSameTree(p *TreeNode, q *TreeNode) bool { if p == nil && q == nil { return true } else if p != nil && q != nil { if p.Val == q.Val { return IsSameTree(p.Left, q.Left) && IsSameTree(p.Right, q.Right) } return false } else { return false } } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0104.Maximum-Depth-of-Binary-Tree/":{"url":"Leetcode/0104.Maximum-Depth-of-Binary-Tree/","title":"0104.Maximum Depth of Binary Tree","summary":"0104.Maximum-Depth-of-Binary-Tree","keywords":"","body":"0104.Maximum Depth of Binary Tree tagsstart LeetCode Go Easy LEETCODETITLE tagsstop 題目 Given the root of a binary tree, return its maximum depth. A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. Example 1: Input: root = [3,9,20,null,null,15,7] Output: 3 Example 2: Input: root = [1,null,2] Output: 2 Constraints: The number of nodes in the tree is in the range [0, 104]. -100 Accepted 2.7M Submissions 3.6M Acceptance Rate 74.7% 題目大意 解題思路 Big O 時間複雜 : 空間複雜 : 來源 https://leetcode.com/problems/maximum-depth-of-binary-tree/description/ https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0104.Maximum-Depth-of-Binary-Tree/main.go Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/":{"url":"Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/","title":"105. Construct Binary Tree from Preorder and Inorder Traversal","summary":"0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal","keywords":"","body":"105. Construct Binary Tree from Preorder and Inorder Traversal tagsstart LeetCode Go Medium Construct Binary Tree from Preorder and Inorder Traversal Array Hash Table Divide and Conquer Tree Binary Tree tagsstop 題目 題目大意 解題思路 Big O 時間複雜 : O(n) n個樹節點 空間複雜 : O(n) 遞迴調用的Stack空間是 O(h),其中 h 是樹的高度。 在每個遞迴層級中,都創建了一個 TreeNode 對象,因此空間複雜度也是 O(n),其中 n 是節點的數量。 h 來源 https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/ https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main.go /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ // 時間複雜 O(), 空間複雜 O() func buildTree(preorder []int, inorder []int) *TreeNode { if len(preorder) == 0 { return nil } result := &TreeNode{preorder[0], nil, nil} i := 0 for ; i Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0110.Balanced-Binary-Tree/":{"url":"Leetcode/0110.Balanced-Binary-Tree/","title":"110. Balanced Binary Tree","summary":"0110.Balanced-Binary-Tree","keywords":"","body":"110. Balanced Binary Tree tagsstart LeetCode Go Easy Balanced Binary Tree DFS tagsstop 題目 Given a binary tree, determine if it is height-balanced . Example 1: Input: root = [3,9,20,null,null,15,7] Output: true Example 2: Input: root = [1,2,2,3,3,null,null,4,4] Output: false Example 3: Input: root = [] Output: true Constraints: The number of nodes in the tree is in the range [0, 5000]. -104 題目大意 判斷一棵樹是不是平衡二叉樹。 平衡二叉樹的定義是:樹中每個節點都滿足左右兩個子樹的高度差 解題思路 高度運算可使用 0104.Maximum-Depth-of-Binary-Tree 平衡二叉樹(Balanced Binary Tree)是一種二叉樹,其左右子樹的高度差不超過一的二叉樹。換句話說,對於樹中的每個節點,其左子樹和右子樹的高度差不得大於1。 平衡二叉樹的主要目的是確保樹的高度平衡,這有助於保持在最壞情況下的查找、插入和刪除操作的時間複雜度在O(log n)範圍內,其中n是樹中節點的數量。這種平衡性有助於確保樹的性能良好,並減少操作的平均時間複雜度。 Big O 時間複雜 : O(n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/balanced-binary-tree/ https://leetcode.cn/problems/balanced-binary-tree/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0110.Balanced-Binary-Tree/main.go package balancedbinarytree import \"LeetcodeGolang/structures\" // 時間複雜 O(), 空間複雜 O() /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ type TreeNode = structures.TreeNode func IsBalanced(root *TreeNode) bool { if root == nil { return true } leftHight := depth(root.Left) rightHight := depth(root.Right) return abs(leftHight-rightHight) b { return a } return b } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/":{"url":"Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/","title":"0121.Best Time to Buy and Sell Stock","summary":"0121.Best-Time-to-Buy-and-Sell-Stock","keywords":"","body":"0121.Best Time to Buy and Sell Stock) tagsstart LeetCode Go Easy Slide Windows DP Best Time to Buy and Sell Stock array Blind75 tagsstop 題目 You are given an array prices where prices[i] is the price of a given stock on the ith day. You want to maximize your profit by choosing a single day to buy one stock and choosing a different day in the future to sell that stock. Return the maximum profit you can achieve from this transaction. If you cannot achieve any profit, return 0. Example 1: Input: prices = [7,1,5,3,6,4] Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell. Example 2: Input: prices = [7,6,4,3,1] Output: 0 Explanation: In this case, no transactions are done and the max profit = 0. Constraints: 1 題目大意 解題思路 Big O 時間複雜 : O(n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/valid-parentheses/ https://leetcode.cn/problems/valid-parentheses/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/main.go package besttimetobuyandsellstock type numbers interface { int | int8 | int16 | int32 | int64 | float32 | float64 } func max[T numbers](a T, b T) T { if a > b { return a } return b } // 時間複雜 O(n), 空間複雜 O(1) // Slide windows func MaxProfit(prices []int) int { left, right := 0, 1 maxProfit := 0 for right maxProfit { maxProfit = profit } } } return maxProfit } // 時間複雜 O(), 空間複雜 O() // DP func MaxProfitDP2(prices []int) int { n := len(prices) dp := make([][]int, n) for i := 0; i Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkMaxProfit-8 208734571 8.156 ns/op 0 B/op 0 allocs/op BenchmarkMaxProfitDP-8 240880467 5.720 ns/op 0 B/op 0 allocs/op BenchmarkMaxProfitDP2-8 4095866 282.6 ns/op 240 B/op 7 allocs/op PASS ok LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock 6.732s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0125.Valid-Palindrome/":{"url":"Leetcode/0125.Valid-Palindrome/","title":"0125. Valid Palindrome","summary":"Valid Palindrome","keywords":"","body":"0125. Valid Palindrome tagsstart LeetCode Go Easy Valid Palindrome tagsstop 題目 A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric characters include letters and numbers. Given a string s, return true if it is a palindrome, or false otherwise. Example 1: Input: s = \"A man, a plan, a canal: Panama\" Output: true Explanation: \"amanaplanacanalpanama\" is a palindrome. Example 2: Input: s = \"race a car\" Output: false Explanation: \"raceacar\" is not a palindrome. Example 3: Input: s = \" \" Output: true Explanation: s is an empty string \"\" after removing non-alphanumeric characters. Since an empty string reads the same forward and backward, it is a palindrome. Constraints: 1 題目大意 解題思路 左右指針 Big O 時間複雜 : O(n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/valid-palindrome https://leetcode.cn/problems/valid-palindrome 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0125.Valid-Palindrome/main.go package validpalindrome import ( \"strings\" \"unicode\" ) // 時間複雜 O(), 空間複雜 O() func IsPalindrome(s string) bool { // 將字符轉成小寫, s = strings.ToLower(s) // 使用雙指針, 一左一右相向而行, 判斷回文 left, right := 0, len(s)-1 for left Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0125.Valid-Palindrome cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkIsPalindrome-8 3840048 552.2 ns/op 32 B/op 1 allocs/op BenchmarkIsPalindromeStrBuilder-8 3164848 439.0 ns/op 88 B/op 4 allocs/op PASS ok LeetcodeGolang/Leetcode/0125.Valid-Palindrome 5.242s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0128.Longest-Consecutive-Sequence/":{"url":"Leetcode/0128.Longest-Consecutive-Sequence/","title":"128. Longest Consecutive Sequence","summary":"0128.Longest-Consecutive-Sequence","keywords":"","body":"128. Longest Consecutive Sequence tagsstart LeetCode Go Medium Longest Consecutive Sequence Array Hash Table Union Find Amazon Microsoft Google Adobe Spotify tagsstop 題目 給定一個未排序的整數數位列 nums ,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。 請你設計並實現時間複雜度為 O(n) 的演演算法解決此問題。 題目大意 解題思路 Big O 時間複雜 : O(n) 空間複雜 : O(n) 來源 https://leetcode.com/problems/longest-consecutive-sequence/description/ https://leetcode.cn/problems/longest-consecutive-sequence/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0128.Longest-Consecutive-Sequence/main.go package longestconsecutivesequence // 時間複雜 O(), 空間複雜 O() func longestConsecutive(nums []int) int { m := make(map[int]struct{}, len(nums)) for _, num := range nums { m[num] = struct{}{} } result := 0 for v := range m { // 如果沒找到該數字的前一個數字, 則把該數字刀做連續序列的第一個數 if _, ok := m[v-1]; !ok { length := 1 for _, exit := m[v+length]; exit; _, exit = m[v+length] { length++ } if result Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0138.Copy-List-with-Random-Pointer/":{"url":"Leetcode/0138.Copy-List-with-Random-Pointer/","title":"138. Copy List with Random Pointer","summary":"0138.Copy-List-with-Random-Pointer","keywords":"","body":"138. Copy List with Random Pointer tagsstart LeetCode Go Medium Copy List with Random Pointer Facebook Amazon Microsoft Bloomberg Google tagsstop 題目 題目大意 解題思路 對於數據結構複製,甭管他怎麼變,你就記住最簡單的方式:一個哈希表 + 兩次遍歷 第一次遍歷專門clone節點,藉助 Hash表把原始節點和clone節點的映射存儲起來; 第二次專門組裝節點,照著原數據結構的樣子,把clone節點的指標組裝起來。 Big O 時間複雜 : O(n) ,其中 n 是鏈表的長度。 對於每個節點,我們至多訪問其「後繼節點」和「隨機指標指向的節點」各一次,均攤每個點至多被訪問兩次。 空間複雜 : O(n) 其中 n 是鏈表的長度。 為哈希表的空間開銷 來源 https://leetcode.com/problems/copy-list-with-random-pointer/description/ https://leetcode.cn/problems/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0138.Copy-List-with-Random-Pointer/main.go package copylistwithrandompointer /** * Definition for a Node. * type Node struct { * Val int * Next *Node * Random *Node * } */ var cacheMap map[*Node]*Node // 時間複雜 O(n), 空間複雜 O(n) func copyRandomList(head *Node) *Node { cacheMap = make(map[*Node]*Node) return deepCopy(head) } func deepCopy(node *Node) *Node { if node == nil { return nil } if n, ok := cacheMap[node]; ok { return n } newNode := &Node{Val: node.Val} cacheMap[node] = newNode newNode.Next = deepCopy(node.Next) newNode.Random = deepCopy(node.Random) return newNode } func copyRandomList2(head *Node) *Node { cMap := make(map[*Node]*Node) cur := head // 第一次遍歷專門clone節點,藉助 Hash表把原始節點和clone節點的映射存儲起來; for cur != nil { newNode := &Node{Val: cur.Val} cMap[cur] = newNode cur = cur.Next } // 第二次專門組裝節點,照著原數據結構的樣子,把clone節點的指標組裝起來。 newHead := cMap[head] for head != nil { node := cMap[head] node.Next = cMap[head.Next] node.Random = cMap[head.Random] head = head.Next } return newHead } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0141.Linked-List-Cycle/":{"url":"Leetcode/0141.Linked-List-Cycle/","title":"0141.Linked List Cycle","summary":null,"keywords":"","body":"141. Linked List Cycle tagsstart Easy Linked List Two Pointers tagsstop 題目 Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using extra space? 題目大意 判斷鍊表是否有環,不能使用額外的空間。 解題思路 給 2 個指針,一個指針是另外一個指針的下一個指針。快指針一次走 2 格,慢指針一次走 1 格。如果存在環,那麼前一個指針一定會經過若干圈之後追上慢的指針。 來源 https://books.halfrost.com/leetcode/ChapterFour/0100~0199/0141.Linked-List-Cycle/ https://leetcode-cn.com/problems/linked-list-cycle/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0141.Linked-List-Cycle/Linked-List-Cycle.go package linkedlistcycle type ListNode struct { Val int Next *ListNode } func HasCycle(head *ListNode) bool { fast := head slow := head for slow != nil && fast != nil && fast.Next != nil { fast = fast.Next.Next slow = slow.Next if slow == fast { return true } } return false } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0142.Linked-List-CycleII/":{"url":"Leetcode/0142.Linked-List-CycleII/","title":"0142.Linked List Cycle II","summary":null,"keywords":"","body":"142. Linked List Cycle II tagsstart Medium Linked List Two Pointers tagsstop 題目 Given the head of a linked list, return the node where the cycle begins. If there is no cycle, return null. There is a cycle in a linked list if there is some node in the list that can be reached again by continuously following the next pointer. Internally, pos is used to denote the index of the node that tail's next pointer is connected to (0-indexed). It is -1 if there is no cycle. Note that pos is not passed as a parameter. Do not modify the linked list. Example 1: Input: head = [3,2,0,-4], pos = 1 Output: tail connects to node index 1 Explanation: There is a cycle in the linked list, where tail connects to the second node. Example 2: Input: head = [1,2], pos = 0 Output: tail connects to node index 0 Explanation: There is a cycle in the linked list, where tail connects to the first node. Example 3: Input: head = [1], pos = -1 Output: no cycle Explanation: There is no cycle in the linked list. Constraints: The number of the nodes in the list is in the range [0, 104]. -105 pos is -1 or a valid index in the linked-list. 題目大意 已知linked list 中有含有環, 返回這個環的起始位置 解題思路 假設第一次相遇, slow 走了k步, 那麼 fast就走了 2k, 也就是說fast比slow多走了k步(環長度的整數倍) 設相遇點與環的起點距離為 m, 那麼環的起點與Head的距離為 k-m 來源 https://leetcode.com/problems/linked-list-cycle-ii/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0142.Linked-List-CycleII/main.go package linkedlistcycleII /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type ListNode struct { Val int Next *ListNode } func DetectCycle(head *ListNode) *ListNode { fast, slow := head, head for fast != nil && fast.Next != nil { fast = fast.Next.Next slow = slow.Next if slow == fast { // 找到相遇點 break } } slow = head for slow != fast { fast = fast.Next slow = slow.Next } return slow } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0143.Reorder-List/":{"url":"Leetcode/0143.Reorder-List/","title":"143. Reorder List","summary":"0143.Reorder-List","keywords":"","body":"143. Reorder List tagsstart LeetCode Go /Medium 143. Reorder List Amazon Microsoft Adobe Facebook Bloomberg Linked List Two Pointers Stack Recursion tagsstop 題目 題目大意 解題思路 Big O 時間複雜 : `` 空間複雜 : `` 來源 https://leetcode.com/problems/reorder-list/description/ https://leetcode.cn/problems/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0143.Reorder-List/main.go package reorderlist /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ // 時間複雜 O(), 空間複雜 O() // 先用快慢指針找出Linked list的中間點 // 然後把Linked list分成兩半 // 再把後半的Linked list反轉 // 再把兩半的Linked list merge 起來 func reorderList(head *ListNode) { mid := middleNode(head) // 2.反轉中間節點的下一個節點 right := resverseNode(mid.Next) mid.Next = nil left := head mergeNode(left, right) } // [876. Middle of the Linked List](https://leetcode.com/problems/middle-of-the-linked-list/) func middleNode(head *ListNode) *ListNode { slow, fast := head, head for fast != nil && fast.Next != nil { slow = slow.Next fast = fast.Next.Next } return slow } // [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) func resverseNode(head *ListNode) *ListNode { var pre *ListNode for head != nil { tmp := head.Next head.Next = pre pre = head head = tmp } return pre } func mergeNode(l1, l2 *ListNode) { lcur, rcur := l1, l2 for lcur != nil && rcur != nil { lcur.Next, rcur.Next, lcur, rcur = rcur, lcur.Next, lcur.Next, rcur.Next } } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/":{"url":"Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/","title":"0167.Two Sum II Input Array Is Sorted","summary":"0167.Two-Sum-II-Input-Array-Is-Sorted","keywords":"","body":"0167.Two Sum II Input Array Is Sorted tagsstart LeetCode Go Medium Two Sum II Input Array Is Sorted Array Two Pointers Binary Search tagsstop 題目 Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two numbers be numbers[index1] and numbers[index2] where 1 Return the indices of the two numbers, index1 and index2, added by one as an integer array [index1, index2] of length 2. The tests are generated such that there is exactly one solution. You may not use the same element twice. Your solution must use only constant extra space. Example 1: Input: numbers = [2,7,11,15], target = 9 Output: [1,2] Explanation: The sum of 2 and 7 is 9. Therefore, index1 = 1, index2 = 2. We return [1, 2]. Example 2: Input: numbers = [2,3,4], target = 6 Output: [1,3] Explanation: The sum of 2 and 4 is 6. Therefore index1 = 1, index2 = 3. We return [1, 3]. Example 3: Input: numbers = [-1,0], target = -1 Output: [1,2] Explanation: The sum of -1 and 0 is -1. Therefore index1 = 1, index2 = 2. We return [1, 2]. Constraints: 2 題目大意 找出兩個數之和等於 target 的兩個數位,要求輸出它們的下標。 注意一個數位不能使用 2 次。 下標從小到大輸出。 假定題目一定有一個解。 解題思路 Big O 使用1. Two Sun來解 O(n^2) 的時間複雜度和 O(1)的空間複雜度暴力 藉助哈希表使用 O(n) 的時間複雜度和 O(n) 的空間複雜度求解 雙指針 時間複雜度: O(n),其中 n 是陣列的長度。 兩個指標移動的總次數最多為 n 次。 空間複雜度: O(1) 時間複雜 : 空間複雜 : 來源 https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/ https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/main.go package twosumiiinputarrayissorted // 雙指針. 時間複雜度: O(n),其中 n 是陣列的長度。 兩個指標移動的總次數最多為 n 次。 // 空間複雜度: O(1) func TwoSum(numbers []int, target int) []int { left, right := 0, len(numbers)-1 for left Benchmark go test -benchmem -run=none LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkTwoSum-4 35161128 39.74 ns/op 16 B/op 1 allocs/op BenchmarkTwoSum2-4 19309680 70.21 ns/op 16 B/op 1 allocs/op PASS ok LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted 2.866s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0203.Remove-Linked-List-Elements/":{"url":"Leetcode/0203.Remove-Linked-List-Elements/","title":"0203.Remove Linked List Elements","summary":null,"keywords":"","body":"203. Remove Linked List Elements tagsstart Easy Linked List tagsstop 題目 Remove all elements from a linked list of integers that have value val. Example : Input: 1->2->6->3->4->5->6, val = 6 Output: 1->2->3->4->5 題目大意 刪除鍊錶中所有指定值的結點。 解題思路 按照題意做即可 來源 https://books.halfrost.com/leetcode/ChapterFour/0200~0299/0203.Remove-Linked-List-Elements/ https://leetcode-cn.com/problems/remove-linked-list-elements/ https://mp.weixin.qq.com/s/slM1CH5Ew9XzK93YOQYSjA 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0203.Remove-Linked-List-Elements/Remove-Linked-List-Elements.go package removelinkedlistelements import ( \"LeetcodeGolang/structures\" ) /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type ListNode = structures.ListNode // 方法一: 另外考慮刪除head節點 func RemoveElements(head *ListNode, val int) *ListNode { // 刪除值相同的head for head != nil && head.Val == val { head = head.Next } if head == nil { return head } tmpHead := head for tmpHead.Next != nil { if tmpHead.Next.Val == val { tmpHead.Next = tmpHead.Next.Next } else { tmpHead = tmpHead.Next } } return head } /* 方法二 添加虛擬節點, 效能較好 可以設置一個虛擬頭結點」,這樣原鍊錶的所有節點就都可以按照統一的方式進行移除了 return newHead.Next */ func RemoveElementsVirtualNode(head *ListNode, val int) *ListNode { if head == nil { return head } // 建立一個虛擬 Head 節點 newHead := &ListNode{Val: 0, Next: head} preHead := newHead curHead := head for curHead != nil { if curHead.Val == val { preHead.Next = curHead.Next } else { preHead = curHead } curHead = curHead.Next } return newHead.Next } /* 方法二 遞迴 */ func RemoveElementsRecurse(head *ListNode, val int) *ListNode { if head == nil { return head } head.Next = RemoveElementsRecurse(head.Next, val) if head.Val == val { return head.Next } else { return head } } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0206.Reverse-Linked-List/":{"url":"Leetcode/0206.Reverse-Linked-List/","title":"206. Reverse Linked List","summary":"Reverse Linked List","keywords":"","body":"206. Reverse Linked List tagsstart LeetCode Go Easy Reverse Linked List tagsstop 題目 Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: Input: head = [1,2,3,4,5] Output: [5,4,3,2,1] Example 2: Input: head = [1,2] Output: [2,1] Example 3: Input: head = [] Output: [] Constraints: The number of nodes in the list is the range [0, 5000]. -5000 Follow up: A linked list can be reversed either iteratively or recursively. Could you implement both? 題目大意 將 Linked List 反向 解題思路 來源 https://leetcode.com/problems/Reverse Linked List/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0000.kkkk/main.go package reverselinkedlist import ( . \"LeetcodeGolang/structures\" ) /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ func ReverseList(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } var prev *ListNode for head != nil { next := head.Next head.Next = prev prev = head head = next } return prev } func ReverseListRecursively(head *ListNode) *ListNode { return ListRecursivelyChild(head, nil) } func ListRecursivelyChild(current *ListNode, prev *ListNode) *ListNode { if current == nil { return prev } next := current.Next current.Next = prev return ListRecursivelyChild(next, current) } Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0206.Reverse-Linked-List cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkReverseList-8 1000000000 0.7960 ns/op 0 B/op 0 allocs/op BenchmarkReverseListRecursively-8 276534334 4.374 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Leetcode/0206.Reverse-Linked-List 2.597s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0209.Minimum-Size-Subarray-Sum/":{"url":"Leetcode/0209.Minimum-Size-Subarray-Sum/","title":"0209. Minimum Size Subarray Sum","summary":null,"keywords":"","body":"209. Minimum Size Subarray Sum tagsstart Medium Sliding Window tagsstop 题目 Given an array of n positive integers and a positive integer s, find the minimal length of a contiguous subarray of which the sum ≥ s. If there isn't one, return 0 instead. Example 1: Input: s = 7, nums = [2,3,1,2,4,3] Output: 2 Explanation: the subarray [4,3] has the minimal length under the problem constraint. Input: s = 4, nums = [1,4,4] Output: 1 Input: s = 11, nums = [1,1,1,1,1,1,1,1] Output: 0 Follow up: If you have figured out the O(n) solution, try coding another solution of which the time complexity is O(n log n). 題目大意 給定一個整型數組和一個數字 s,找到數組中最短的一個連續子數組,使得連續子數組的數字之和 sum>=s,返回最短的連續子數組的返回值。 解題思路 這一題的解題思路是用滑動窗口。在滑動窗口[i,j]之間不斷往後移動,如果總和小於s,就擴大右邊界j,不斷加入右邊的值,直到sum > s,之和再縮小i 的左邊界,不斷縮小直到sum 進階 如果你已經實現 O(n) 時間複雜度的解法, 請嘗試設計一個 O(n log(n)) 時間複雜度的解法。 來源 https://books.halfrost.com/leetcode/ChapterFour/0200~0299/0209.Minimum-Size-Subarray-Sum/ https://leetcode-cn.com/problems/minimum-size-subarray-sum/ https://mp.weixin.qq.com/s/UrZynlqi4QpyLlLhBPglyg 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0209.Minimum-Size-Subarray-Sum/Minimum-Size-Subarray-Sum.go package minimumsizesubarraysum import ( \"math\" \"sort\" ) // MinSubArrayLenBurst : 暴力解 時間複雜 O(n^2), 空間複雜 O(1) func MinSubArrayLenBurst(target int, nums []int) int { lens := len(nums) if lens = target { minSize = min(minSize, j-i+1) } } } if minSize == math.MaxInt32 { minSize = 0 } return minSize } // MinSubArrayLenSlidingWindow : 滑動視窗 時間複雜 O(n), 空間複雜 O(1) // 滑動窗口的精妙之處在於根據當前子序列和大小的情況,不斷調節子序列的起始位置。從而將O(n^2)的暴力解法降為O(n) func MinSubArrayLenSlidingWindow(target int, nums []int) int { lens := len(nums) if lens = target { minSize = min(minSize, end-start+1) sum -= nums[start] start++ } end++ } if minSize == math.MaxInt32 { minSize = 0 } return minSize } /* MinSubArrayLenBinarysearch : 前缀和 + 二分查找 O(nlog(n)) 為了使用二分查找,需要額外創建一個數組 sums 用於存儲數組nums 的前綴和,其中 sums[i] 表示從 nums[0] 到 nums[i−1] 的元素和。 得到前綴和之後,對於每個開始下標i,可通過二分查找得到大於或等於 i 的最小下標 bound, 使得 sums[bound]-sums[i-1] >= s, 並更新子數組的最小長度(此時子數組的長度是 bound -(i-1) )。 C++ 的 lower_bound,Java 的 Arrays.binarySearch 因為這道題保證了數組中每個元素都為正,所以前綴和一定是遞增的,這一點保證了二分的正確性。如果題目沒有說明數組中每個元素都為正,這裡就不能使用二分來查找這個位置了。 */ func MinSubArrayLenBinarysearch(target int, nums []int) int { lens := len(nums) if lens © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0215.Kth-Largest-Element-in-an-Array/":{"url":"Leetcode/0215.Kth-Largest-Element-in-an-Array/","title":"0215. Kth Largest Element in an Array","summary":"Kth Largest Element in an Array","keywords":"","body":"0215. Kth Largest Element in an Array tagsstart LeetCode Go Medium Kth Largest Element in an Array Heap Priority Queue Sorting tagsstop 題目 Given an integer array nums and an integer k, return the kth largest element in the array. Note that it is the kth largest element in the sorted order, not the kth distinct element. Can you solve it without sorting? Example 1: Input: nums = [3,2,1,5,6,4], k = 2 Output: 5 Example 2: Input: nums = [3,2,3,1,2,4,5,5,6], k = 4 Output: 4 Constraints: 1 -104 題目大意 數組中的第K個最大元素 (Kth Largest Element in an Array) 給定一個未排序的整數數組,找到其中第K個最大的元素。 解題思路 一種常見的解法是使用堆數據結構。我們可以維護一個大小為K的最小堆,初始時將數組的前K個元素加入堆中。然後遍歷數組的剩餘元素,如果當前元素比堆頂元素大,則將堆頂元素出堆,並將當前元素加入堆中。最後堆頂元素即為第K個最大的元素。 時間複雜度: 構建堆的時間複雜度為O(K),遍歷數組的時間複雜度為O((N-K)logK),因此總的時間複雜度為O(NlogK)。 空間複雜度: 使用了大小為K的最小堆來存儲元素,因此空間複雜度為O(K)。 在快速選擇 quickselect 的 partition 操作中,每次 partition 操作結束都會返回一個點,這個標定點的下標和最終排序之後有序數組中這個元素所在的下標是一致的。利用這個特性,我們可以不斷的劃分數組區間,最終找到第 K 大的元素。執行一次 partition 操作以後,如果這個元素的下標比 K 小,那麼接著就在後邊的區間繼續執行 partition 操作;如果這個元素的下標比 K 大,那麼就在左邊的區間繼續執行 partition 操作;如果相等就直接輸出這個下標對應的數組元素即可。 快速選擇 quickselect 的思路實現的算法時間複雜度為 O(n),空間複雜度為 O(logn) 來源 https://leetcode.com/problems/kth-largest-element-in-an-array/ https://books.halfrost.com/leetcode/ChapterFour/0200~0299/0215.Kth-Largest-Element-in-an-Array/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0215.Kth-Largest-Element-in-an-Array/main.go package kthlargestelementinanarray import ( \"container/heap\" \"sort\" ) // 解法一:用Heap資料結構 // container/heap包可以用来構造優先級Queue。 // Heap(堆積)其實是一個Complete Binary Tree(完全二元樹). // Go的Heap特性是 各個節點都自己是其子樹的根, 且值是最小的(index = 0 的值是最小的). // 同個根節點的左子樹的值會小於右子樹 func FindKthLargestHeap(nums []int, k int) int { if k len(nums) { return 0 } // 初始化最小堆 h := &MinHeap{} heap.Init(h) // 遍歷集合 for _, num := range nums { if h.Len() (*h)[0] { heap.Pop(h) heap.Push(h, num) } } // fmt.Println(h) return (*h)[0] } // 自定義最小 Heap 結構體 type MinHeap []int func (h MinHeap) Len() int { return len(h) } func (h MinHeap) Less(i, j int) bool { // 小到大排序 return h[i] Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkFindKthLargestHeap-8 6112726 184.9 ns/op 48 B/op 3 allocs/op BenchmarkFindKthLargestSort-8 18023403 60.38 ns/op 24 B/op 1 allocs/op PASS ok LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array 3.383s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0217.Contains-Duplicate/":{"url":"Leetcode/0217.Contains-Duplicate/","title":"0217.Contains-Duplicate","summary":"Contains Duplicate","keywords":"","body":"0217.Contains-Duplicate tagsstart LeetCode Go Easy Contains Duplicate Array Blind75 tagsstop 題目 Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct. Example 1: Input: nums = [1,2,3,1] Output: true Example 2: Input: nums = [1,2,3,4] Output: false Example 3: Input: nums = [1,1,1,3,3,4,3,2,4,2] Output: true Constraints: 1 -109 題目大意 解題思路 來源 https://leetcode.com/problems/contains-duplicate/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0217.Contains-Duplicate/main.go package containsduplicate func ContainsDuplicate(nums []int) bool { numsMap := make(map[int]bool, len(nums)) for _, v := range nums { if numsMap[v] { return true } numsMap[v] = true } return false } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0226.Invert-Binary-Tree/":{"url":"Leetcode/0226.Invert-Binary-Tree/","title":"226. Invert Binary Tree","summary":"226. Invert Binary Tree","keywords":"","body":"226. Invert Binary Tree tagsstart LeetCode Go Easy Invert Binary Tree BFS tagsstop 題目 Given the root of a binary tree, invert the tree, and return its root. Example 1: Input: root = [4,2,7,1,3,6,9] Output: [4,7,2,9,6,3,1] Example 2: Input: root = [2,1,3] Output: [2,3,1] Example 3: Input: root = [] Output: [] Constraints: The number of nodes in the tree is in the range [0, 100]. -100 題目大意 反轉二叉樹 解題思路 用遞歸來解決,先遞歸調用反轉根節點的左children,然後遞歸調用反轉根節點的右children,然後左右交換根節點的左children和右children。 有點像是BFS BFS(廣度優先搜索)則使用隊列(Queue)來實現。在BFS中,您首先處理一個節點,然後將其子節點按某種順序排隊,接著繼續處理隊列的前端節點,直到隊列為空。 來源 https://leetcode.com/problems/invert-binary-tree/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0226.Invert-Binary-Tree/main.go package invertbinarytree import ( \"LeetcodeGolang/Utility/structures\" ) /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ // type TreeNode struct { // Val int // Left *TreeNode // Right *TreeNode // } func InvertTree(root *structures.TreeNode) *structures.TreeNode { if root == nil { return nil } InvertTree(root.Left) InvertTree(root.Right) root.Left, root.Right = root.Right, root.Left return root } func InvertTree2(root *structures.TreeNode) *structures.TreeNode { if root != nil { root.Left, root.Right = InvertTree2(root.Right), InvertTree2(root.Left) } return root } func InvertTree3(root *structures.TreeNode) *structures.TreeNode { queue := make([]*structures.TreeNode, 0) queue = append(queue, root) for len(queue) > 0 { current := queue[0] queue = queue[1:] current.Left, current.Right = current.Right, current.Left if current.Left != nil { queue = append(queue, current.Left) } if current.Right != nil { queue = append(queue, current.Right) } } return root } func BuildTree(nums []int, index int) *TreeNode { if index >= len(nums) || nums[index] == -1 { return nil } root := &TreeNode{Val: nums[index]} root.Left = BuildTree(nums, 2*index+1) root.Right = BuildTree(nums, 2*index+2) return root } func IntsToTree(nums []int) *TreeNode { return BuildTree(nums, 0) } Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkInvertTree-8 2533011 398.7 ns/op 168 B/op 7 allocs/op BenchmarkInvertTree2-8 2667645 392.4 ns/op 168 B/op 7 allocs/op BenchmarkInvertTree3-8 1403001 727.5 ns/op 296 B/op 13 allocs/op PASS ok LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree 4.889s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0238.Product-of-Array-Except-Self/":{"url":"Leetcode/0238.Product-of-Array-Except-Self/","title":"238. Product of Array Except Self","summary":"0238.Product-of-Array-Except-Self","keywords":"","body":"238. Product of Array Except Self tagsstart LeetCode Go Medium Product of Array Except Self Array Prefix Sum Blind75 tagsstop 題目 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: nums = [1,2,3,4] Output: [24,12,8,6] Example 2: Input: nums = [-1,1,0,-3,3] Output: [0,0,9,0,0] Constraints: 2 Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.) 題目大意 解題思路 Big O 時間複雜 : O(n) 空間複雜 : `` 來源 https://leetcode.com/problems/product-of-array-except-self/description/ https://leetcode.cn/problems/product-of-array-except-self/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0238.Product-of-Array-Except-Self/main.go package productofarrayexceptself // 時間複雜 O(), 空間複雜 O() func productExceptSelf(nums []int) []int { result, left, right := make([]int, len(nums)), make([]int, len(nums)), make([]int, len(nums)) // left 為左側所有的成績 // 索引為'0' 的元素, 因為左側沒有元素,所以left[0]=1 left[0] = 1 for i := 1; i = 0; i-- { right[i] = right[i+1] * nums[i+1] } for i := 0; i = 0; i-- { result[i] = result[i] * rightProduct rightProduct = rightProduct * nums[i] } return result } Benchmark go test -benchmem -run=none LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkProductExceptSelf-8 12772174 158.4 ns/op 96 B/op 3 allocs/op BenchmarkProductExceptSelf2-8 32292304 63.74 ns/op 32 B/op 1 allocs/op PASS ok LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self 4.228s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0242.Valid-Anagram/":{"url":"Leetcode/0242.Valid-Anagram/","title":"0242.Valid-Anagram","summary":"Valid Anagram","keywords":"","body":"0242.Valid-Anagram tagsstart LeetCode Go Easy Valid Anagram tagsstop 驗證回文串 題目 Given two strings s and t, return true if t is an anagram of s, and false otherwise. 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: s = \"anagram\", t = \"nagaram\" Output: true Example 2: Input: s = \"rat\", t = \"car\" Output: false Constraints: 1 Follow up: What if the inputs contain Unicode characters? How would you adapt your solution to such a case? 我們使用 rune 數據類型來處理 Unicode 字元,並使用 map[rune]int 來統計這些字符的出現次數。其餘的邏輯保持不變。 題目大意 解題思路 只要先把所有字符轉換成小寫,並過濾掉空格和標點這類字符,然後對剩下的字符執行 數組雙指針技巧匯總 中提到的兩端向中心的雙指針演算法即可 來源 https://leetcode.com/problems/valid-anagram/description/ https://leetcode.cn/problems/valid-anagram/description/ 數組雙指針技巧匯總 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0242.Valid-Anagram/main.go package validanagram func IsAnagram(s string, t string) bool { if len(s) != len(t) { return false } record := make(map[rune]int, len(s)) for _, v := range s { record[v]++ } for _, v := range t { record[v]-- if record[v] Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0242.Valid-Anagram cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkIsAnagram-8 6703497 276.3 ns/op 0 B/op 0 allocs/op BenchmarkIsAnagram2-8 3660909 318.9 ns/op 48 B/op 2 allocs/op PASS ok LeetcodeGolang/Leetcode/0242.Valid-Anagram 4.498s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0283.Move-Zeroes/":{"url":"Leetcode/0283.Move-Zeroes/","title":"0283. Move Zeroes","summary":"0283. Move Zeroes","keywords":"","body":"283. Move Zeroes tagsstart LeetCode Go Easy Move Zeroes tagsstop 題目 Given an integer array nums, move all 0's to the end of it while maintaining the relative order of the non-zero elements. Note that you must do this in-place without making a copy of the array. Example 1: Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0] Example 2: Input: nums = [0] Output: [0] Constraints: 1 -231 Follow up: Could you minimize the total number of operations done? 題目大意 題目要求不能利用額外的輔助空間,將數字組中 0 元素都移到數字組的末尾,並與維持所有非 0 元素的相對位置。 解題思路 非零交換數據, 左右指針都往右移 零, 右指針右移 來源 https://leetcode.com/problems/move-zeroes/ https://books.halfrost.com/leetcode/ChapterFour/0200~0299/0283.Move-Zeroes/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0283.Move-Zeroes/main.go package movezeroes // 時間O(n^2) func MoveZeroes(nums []int) { for i := 0; i Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0283.Move-Zeroes cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkMoveZeroes-4 145544966 9.164 ns/op 0 B/op 0 allocs/op BenchmarkMoveZeroes2point-4 183269922 6.149 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Leetcode/0283.Move-Zeroes 3.975s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0300.Longest-Increasing-Subsequence/":{"url":"Leetcode/0300.Longest-Increasing-Subsequence/","title":"0300.Longest Increasing Subsequence","summary":null,"keywords":"","body":"300.Longest-Increasing-Subsequence tagsstart Medium Dynamic Programming Patience Sorting Binary Search tagsstop 最長遞增子序列(Longest Increasing Subsequence, LIS) 題目 Given an integer array nums, return the length of the longest strictly increasing subsequence. A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing the order of the remaining elements. For example, [3,6,2,7] is a subsequence of the array [0,3,1,6,2,2,7]. Example 1: Input: nums = [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4. Example 2: Input: nums = [0,1,0,3,2,3] Output: 4 Example 3: Input: nums = [7,7,7,7,7,7,7] Output: 1 Constraints: 1 -104 Follow up: Can you come up with an algorithm that runs in O(n log(n)) time complexity? 題目大意 給你一個整事的數組 nums\b\b, 找到其中最長遞增子序列的長度 子序列不一定是連續的 子串一定是連續的 解題思路 方法一: DP dp[i]表示nums[i]這個數結尾的最長遞增子序列的長度 譬如要找dp[5]的直, 也就是球nums[5]為結尾的最長遞增子序列 只要找到結尾比nums[5]小的子序列, 然後把 nums[5]接到最後, 就可以形成新的遞增子序列, 而這個新子序列長度+1 方法二: DP + 二分搜尋 patience sorting (耐心排序) 給一組 [6, 3 ,5 ,10, 11, 2, 9, 14, 13, 7, 4, 8, 12] 只能把數字小的放在數字大的堆上, 如果當前數字太大沒有可以放置的堆, 則新建一個堆, 如果當前排有很多堆可以選擇, 則選擇最左邊的那一堆放, 因為這樣可以確保堆頂是有序的(2,4,7,8,12) 6 5 10 11 14 3 4 9 8 13 2 7 12 堆數就是最長遞增子序列的長度 [3,5,7,8,12] 來源 https://leetcode.com/problems/longest-increasing-subsequence/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0300.Longest-Increasing-Subsequence/main.go package longestincreasingsubsequence import \"fmt\" func max(a, b int) int { if a > b { return a } return b } // DP 解法 O(n^2) func LengthOfLIS(nums []int) int { dp := make([]int, len(nums)) for idx := 0; idx nums[j] { // 找到下一個數值比現在的大 dp[i] = max(dp[i], dp[j]+1) } } res = max(res, dp[i]) } // fmt.Println(dp) return res } func LengthOfLIS2(nums []int) int { dp := make([]int, len(nums)+1) dp[0] = 0 res := 0 for i := 1; i nums[j-1] { // 找到前面比現在結尾還小的子序列 dp[i] = max(dp[i], dp[j]) } } dp[i] = dp[i] + 1 res = max(res, dp[i]) } // fmt.Println(dp) return res } // DP + 二分搜尋:patience sorting. O(nlogn) func LengthOfLISPatience(nums []int) int { top := make([]int, len(nums)) // 牌堆數初始化為0 piles := 0 for i := 0; i poker { // 現在的牌比堆小, 縮小範圍 right = mid } else if top[mid] go test -benchmem -run=none LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkLengthOfLIS-8 18300901 64.77 ns/op 64 B/op 1 allocs/op BenchmarkLengthOfLIS2-8 17410562 68.98 ns/op 80 B/op 1 allocs/op BenchmarkLengthOfLISPatience-8 20768851 58.47 ns/op 64 B/op 1 allocs/op PASS ok LeetcodeGolang/Leetcode/300.Longest-Increasing-Subsequence 3.812s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0310.Minimum-Height-Trees/":{"url":"Leetcode/0310.Minimum-Height-Trees/","title":"0310.Minimum Height Trees","summary":null,"keywords":"","body":"310. Minimum Height Trees tagsstart Medium Breadth First Search tagsstop 題目 A tree is an undirected graph in which any two vertices are connected by exactly one path. In other words, any connected graph without simple cycles is a tree. Given a tree of n nodes labelled from 0 to n - 1, and an array of n - 1 edges where edges[i] = [ai, bi] indicates that there is an undirected edge between the two nodes ai and bi in the tree, you can choose any node of the tree as the root. When you select a node x as the root, the result tree has height h. Among all possible rooted trees, those with minimum height (i.e. min(h)) are called minimum height trees (MHTs). Return a list of all MHTs' root labels. You can return the answer in any order. The height of a rooted tree is the number of edges on the longest downward path between the root and a leaf. Example 1: Input: n = 4, edges = [[1,0],[1,2],[1,3]] Output: [1] Explanation: As shown, the height of the tree is 1 when the root is the node with label 1 which is the only MHT. Example 2: Input: n = 6, edges = [[3,0],[3,1],[3,2],[3,4],[5,4]] Output: [3,4] Constraints: 1 edges.length == n - 1 0 ai != bi All the pairs (ai, bi) are distinct. The given input is guaranteed to be a tree and there will be no repeated edges. 題目大意 輸入一個n個節點的二叉樹, 計算出最小高度(root到left的最短距離) 解題思路 用BFS來解. Queue 起點就是root, 終點就是最靠近root的那個葉節點(就是兩個子節點都是null) 來源 https://leetcode.com/problems/minimum-height-trees/ https://leetcode-cn.com/problems/minimum-height-trees/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0310.Minimum-Height-Trees/main.go package minimumheighttrees import \"fmt\" func FindMinHeightTrees(n int, edges [][]int) []int { if n == 1 { return []int{0} } graph := make(map[int][]int) degree := make(map[int]int, n) //出度: 出度是指從該節點(頂點)出發的邊的條數 // 建立對應關係 for _, v := range edges { if _, ok := graph[v[0]]; ok { graph[v[0]] = append(graph[v[0]], v[1]) } else { // 沒找到 graph[v[0]] = []int{v[1]} } if _, ok := graph[v[1]]; ok { graph[v[1]] = append(graph[v[1]], v[0]) } else { // 沒找到 graph[v[1]] = []int{v[0]} } degree[v[0]]++ degree[v[1]]++ } fmt.Printf(\"graph: %+v \\n\", graph) fmt.Printf(\"degree: %+v \\n\", degree) var queue []int for key, value := range degree { //先找到出度為1的點, 加到Queue if value == 1 { queue = append(queue, key) } } fmt.Printf(\"queue: %+v \\n\", queue) leaves := []int{} for len(queue) != 0 { leaves = leaves[0:0] size := len(queue) for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0322.Coin-Change/":{"url":"Leetcode/0322.Coin-Change/","title":"0322.Coin Change","summary":"0322.Coin Change","keywords":"","body":"322. Coin Change tagsstart LeetCode Go Coin Change Medium Dynamic Programming tagsstop 題目 You are given an integer array coins representing coins of different denominations and an integer amount representing a total amount of money. Return the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return -1. You may assume that you have an infinite number of each kind of coin. Example 1: Input: coins = [1,2,5], amount = 11 Output: 3 Explanation: 11 = 5 + 5 + 1 Example 2: Input: coins = [2], amount = 3 Output: -1 Example 3: Input: coins = [1], amount = 0 Output: 0 Constraints: 1 題目大意 給妳 k 種面值的硬幣, 面值分別為 c1,c2 ...,ck, 每種硬幣的數量無限. 再給你一個總金額. 求出最少 需要幾枚硬幣湊出這個金額, 如果不能湊出 return -1. 解題思路 dp(n) 的定義: 輸入一個目標金額n, 返回湊出目標金額n的最少硬幣數量 來源 https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0322.Coin-Change/ https://leetcode.com/problems/coin-change/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0322.Coin-Change/Coin-Change.go package coinchange import ( \"math\" ) func min(a, b int) int { if a > b { return b } return a } var memo = map[int]int{} func dp(coins []int, n int) int { // 查詢備忘錄 避免重複 if _, vok := memo[n]; vok { return memo[n] } if n == 0 { return 0 } if n amount { return -1 } return dp[amount] } func CoinChange(coins []int, n int) int { var dpClosure func(n int) int dpClosure = func(n int) int { if n == 0 { return 0 } if n go test -benchmem -run=none LeetcodeGolang/Leetcode/0322.Coin-Change -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0322.Coin-Change cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkCoinChange-4 273376 4452 ns/op 0 B/op 0 allocs/op BenchmarkCoinChangeDP-4 11071686 128.1 ns/op 96 B/op 1 allocs/op BenchmarkCoinChangeMemoryTableRecursion-4 57663068 23.69 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Leetcode/0322.Coin-Change 4.194s amount = 11. k=[1,2,5] amount 0 1 2 3 4 5 ... 9 10 11 index 0 1 2 3 4 5 ... 9 10 11 dp 0 1 1 2 2 1 ... 3 2 3 dp[5] = 1+min(dp[5-1],dp[5-2],dp[5-5]) dp[11] = 1+min(dp[10],dp[9],dp[6]) © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0344.Reverse-String/":{"url":"Leetcode/0344.Reverse-String/","title":"0344.Reverse String","summary":null,"keywords":"","body":"344. Reverse String tagsstart Easy Two Pointers tagsstop 題目 Write a function that reverses a string. The input string is given as an array of characters char[]. Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory. You may assume all the characters consist of printable ascii characters. Example 1: Input: [\"h\",\"e\",\"l\",\"l\",\"o\"] Output: [\"o\",\"l\",\"l\",\"e\",\"h\"] Example 2: Input: [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"] Output: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"] 題目大意 題目要求我們反轉一個字符串。 解題思路 這一題的解題思路是用 2 個指針,指針對撞的思路,來不斷交換首尾元素,即可。 來源 https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0344.Reverse-String/ https://leetcode-cn.com/problems/reverse-string/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0344.Reverse-Stringm/Reverse-String.go package reversestring func ReverseString(s []byte) { for i, j := 0, len(s)-1; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0347.Top-K-Frequent-Elements/":{"url":"Leetcode/0347.Top-K-Frequent-Elements/","title":"347. Top K Frequent Elements","summary":"0347.Top-K-Frequent-Elements","keywords":"","body":"347. Top K Frequent Elements tagsstart LeetCode Go Medium Top K Frequent Elements heap tagsstop 題目 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: nums = [1,1,1,2,2,3], k = 2 Output: [1,2] Example 2: Input: nums = [1], k = 1 Output: [1] Constraints: 1 Follow up: Your algorithm's time complexity must be better than O(n log n), where n is the array's size. Seen this question in a real interview before? 1/4 Accepted 1.9M Submissions 3M Acceptance Rate 62.7% 題目大意 解題思路 方法一:heap 方法一:堆 思路與演算法 首先遍歷整個數組,並使用哈希表記錄每個數字出現的次數,並形成一個「出現次數數組」。 找出原數組的前 k 個高頻元素,就等於找出「出現次數數組」的前 k 大的值。 最簡單的做法是為「出現次數數組」排序。 但由於可能有O(N) 個不同的出現次數(其中N 為原數組長度),故總的演算法複雜度會達到O(Nlog⁡N),不符合題目的要求。 在這裡,我們可以利用堆的想法:建立一個小頂堆,然後遍歷「出現次數數組」: 如果堆的元素個數小於 k,就可以直接插入堆中。 如果堆的元素個數等於 k,則檢查堆頂與目前出現次數的大小。 如果堆頂較大,表示至少有 k 個數字的出現次數比目前值大,故捨棄目前值;否則,就彈出堆頂,並將目前值插入堆中。 遍歷完成後,堆中的元素就代表了「出現次數數組」中前 k 大的值。 複雜度分析 時間複雜度:O(Nlog⁡k), 其中 N 為陣列的長度。 我們先遍歷原數組,並使用雜湊表記錄出現次數,每個元素需要O(1) 的時間,共需O(N) 的時間 。 隨後,我們遍歷「出現次數數組」,由於堆的大小至多為k,因此每次堆操作需要O(log⁡k)的時間,共需O(Nlog⁡k)的時間。 二者之和為 O(Nlog⁡k)。 空間複雜度:O(N)。 雜湊表的大小為O(N),而堆的大小為O(k),共為O(N)。 方法二: Quick Sort Name Best Average Worst Memory Stable Quick sort n log(n) n log(n) n^2 log(n) No 使用基於快速排序的方法,求出「出現次數陣列」的前 k 大的值。 Big O 方法一:heap 時間複雜 : O(Nlog⁡k) 空間複雜 : O(N) 方法二: Quick Sort 時間複雜 : 空間複雜 : 來源 https://leetcode.com/problems/top-k-frequent-elements/description/ https://leetcode.cn/problems/top-k-frequent-elements/description/ https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0347.Top-K-Frequent-Elements/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0347.Top-K-Frequent-Elements/main.go package topkfrequentelements import ( \"container/heap\" \"sort\" ) // 方法一: 使用 PriorityQueue // 時間複雜 O(Nlog⁡k), 空間複雜 O(N) // 首先遍歷整個數組,並使用哈希表記錄每個數字出現的次數,並形成一個「出現次數數組」 // 建立一個 PriortyQueue, 將「出現次數數組」丟進去 // 在把 PriortyQueue pop的值丟到 result func TopKFrequent(nums []int, k int) []int { m := make(map[int]int) for i := 0; i pq[j].count } func (pq PriorityQueue) Swap(i, j int) { pq[i], pq[j] = pq[j], pq[i] } func (pg *PriorityQueue) Push(v interface{}) { item := v.(*Item) *pg = append(*pg, item) } func (pg *PriorityQueue) Pop() interface{} { n := len(*pg) item := (*pg)[n-1] *pg = (*pg)[:n-1] return item } func (pg *PriorityQueue) PushPQ(v *Item) { heap.Push(pg, v) } func (pg *PriorityQueue) PopPQ() *Item { return heap.Pop(pg).(*Item) } // 方法二: 使用 Quick Sort // 時間複雜 O(), 空間複雜 O() func TopKFrequentQuickSort(nums []int, k int) []int { m := make(map[int]int) for i := 0; i s[j][1] } func (s sortValue) Swap(i, j int) { s[i], s[j] = s[j], s[i] } Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkTopKFrequent-8 1875834 648.6 ns/op 200 B/op 11 allocs/op BenchmarkTopKFrequentQuickSort-8 1830498 704.2 ns/op 312 B/op 11 allocs/op PASS ok LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements 3.831s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0354.Russian-Doll-Envelopes/":{"url":"Leetcode/0354.Russian-Doll-Envelopes/","title":"0354. Russian Doll Envelope","summary":null,"keywords":"","body":"354. Russian Doll Envelope tagsstart Hard Dynamic Programming Binary Search tagsstop 題目 You are given a 2D array of integers envelopes where envelopes[i] = [wi, hi] represents the width and the height of an envelope. One envelope can fit into another if and only if both the width and height of one envelope are greater than the other envelope's width and height. Return the maximum number of envelopes you can Russian doll (i.e., put one inside the other). Note: You cannot rotate an envelope. Example 1: Input: envelopes = [[5,4],[6,4],[6,7],[2,3]] Output: 3 Explanation: The maximum number of envelopes you can Russian doll is 3 ([2,3] => [5,4] => [6,7]). Example 2: Input: envelopes = [[1,1],[1,1],[1,1]] Output: 1 Constraints: 1 envelopes[i].length == 2 1 題目大意 給一些信封, 每個信封用寬度和高度的整數對形式(w,h)表示, 當一個信封A的寬度和高度都比另一個信封B大的時候, 則B就可以放進A裡. 計算出最多有多少信封能組成一組 解題思路 先對寬度w進行升序排序, 如果遇到w相同的情況, 則按照高度進行降序排序. 之後把所有的h最為一個array, 對此array做 最長遞增子序列(Longest Increasing Subsequence, LIS)的長度就是答案 此題是二維的LIS問題, 一維LIS參考 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0300.Longest-Increasing-Subsequence/main.go 三維 Leetcode No.1691 來源 https://leetcode.com/problems/russian-doll-envelopes/ https://leetcode-cn.com/problems/russian-doll-envelopes/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0354.Russian-Doll-Envelopes/main.go package russiandollenvelopes import ( longestincreasingsubsequence \"LeetcodeGolang/Leetcode/0300.Longest-Increasing-Subsequence\" \"sort\" ) type sortEnvelopes [][]int func (s sortEnvelopes) Len() int { return len(s) } func (s sortEnvelopes) Less(i, j int) bool { if s[i][0] == s[j][0] { // 遇到w相同的情況, 則按照高度進行降序排序 return s[i][1] > s[j][1] } // 對寬度w進行升序排序 return s[i][0] e[1] { // 現在的牌比堆小, 所小範圍 right = mid } else if dp[mid] go test -benchmem -run=none LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes -bench=. goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkMaxEnvelopes-8 9067520 167.0 ns/op 88 B/op 3 allocs/op BenchmarkMaxEnvelopes2-8 6726646 214.9 ns/op 80 B/op 4 allocs/op PASS ok LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes 6.237s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0380.Insert-Delete-GetRandom-O1/":{"url":"Leetcode/0380.Insert-Delete-GetRandom-O1/","title":"380. Insert Delete GetRandom O(1)","summary":"0380.Insert-Delete-GetRandom-O(1)","keywords":"","body":"380. Insert Delete GetRandom O(1) tagsstart LeetCode Go Medium Insert Delete GetRandom O(1) Array Hash tagsstop 題目 Implement the RandomizedSet class: 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: 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. Constraints: -231 題目大意 解題思路 用map紀錄每個元素的index Big O 時間複雜 : O(1) 空間複雜 : O(n) 來源 https://leetcode.com/problems/insert-delete-getrandom-o1/description/ https://leetcode.cn/problems/insert-delete-getrandom-o1/description/ https://www.youtube.com/watch?v=46dZH7LDbf8 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0380.Insert-Delete-GetRandom-O1/main.go package insertdeletegetrandom import \"math/rand\" // 時間複雜 O(1), 空間複雜 O(n) type RandomizedSet struct { arr []int set map[int]int size int } func Constructor() RandomizedSet { arr := make([]int, 0) set := make(map[int]int) size := 0 return RandomizedSet{arr, set, size} } func (this *RandomizedSet) Insert(val int) bool { if _, ok := this.set[val]; ok { return false } this.set[val] = this.size this.size++ this.arr = append(this.arr, val) return true } func (this *RandomizedSet) Remove(val int) bool { index, ok := this.set[val] if !ok { return false } // swapping lastValue := this.arr[this.size-1] this.arr[index] = lastValue this.set[lastValue] = index // Remove last value this.arr = this.arr[:this.size-1] delete(this.set, val) this.size-- return true } func (this *RandomizedSet) GetRandom() int { index := rand.Intn(this.size) return this.arr[index] } /** * Your RandomizedSet object will be instantiated and called as such: * obj := Constructor(); * param_1 := obj.Insert(val); * param_2 := obj.Remove(val); * param_3 := obj.GetRandom(); */ Benchmark Follow up 如果允許重複, 譬如多個1 0381.Insert-Delete-GetRandom-O1-Duplicates-allowed #Hard © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/":{"url":"Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/","title":"381.Insert Delete GetRandom O(1) Duplicates allowed","summary":"0381.Insert-Delete-GetRandom-O1-Duplicates-allowed","keywords":"","body":"381.Insert Delete GetRandom O(1) Duplicates allowed tagsstart LeetCode Go Hard Insert Delete GetRandom O(1) Duplicates allowed Array Hash tagsstop 題目 題目大意 解題思路 RandomizedCollection is a data structure that contains a collection of numbers, possibly duplicates (i.e., a multiset). It should support inserting and removing specific elements and also reporting a random element. Implement the RandomizedCollection class: RandomizedCollection() Initializes the empty RandomizedCollection object. bool insert(int val) Inserts an item val into the multiset, even if the item is already present. Returns true if the item is not present, false otherwise. bool remove(int val) Removes an item val from the multiset if present. Returns true if the item is present, false otherwise. Note that if val has multiple occurrences in the multiset, we only remove one of them. int getRandom() Returns a random element from the current multiset of elements. The probability of each element being returned is linearly related to the number of the same values the multiset contains. You must implement the functions of the class such that each function works on average O(1) time complexity. Note: The test cases are generated such that getRandom will only be called if there is at least one item in the RandomizedCollection. Example 1: Input [\"RandomizedCollection\", \"insert\", \"insert\", \"insert\", \"getRandom\", \"remove\", \"getRandom\"] [[], [1], [1], [2], [], [1], []] Output [null, true, false, true, 2, true, 1] Explanation RandomizedCollection randomizedCollection = new RandomizedCollection(); randomizedCollection.insert(1); // return true since the collection does not contain 1. // Inserts 1 into the collection. randomizedCollection.insert(1); // return false since the collection contains 1. // Inserts another 1 into the collection. Collection now contains [1,1]. randomizedCollection.insert(2); // return true since the collection does not contain 2. // Inserts 2 into the collection. Collection now contains [1,1,2]. randomizedCollection.getRandom(); // getRandom should: // - return 1 with probability 2/3, or // - return 2 with probability 1/3. randomizedCollection.remove(1); // return true since the collection contains 1. // Removes 1 from the collection. Collection now contains [1,2]. randomizedCollection.getRandom(); // getRandom should return 1 or 2, both equally likely. Constraints: -231 Big O 時間複雜 : O(1) 空間複雜 : O(n) 來源 https://leetcode.com/problems/insert-delete-getrandom-o1-duplicates-allowed/description/ https://leetcode.cn/problems/insert-delete-getrandom-o1-duplicates-allowed/description/ https://www.youtube.com/watch?v=46dZH7LDbf8 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/main.go package insertdeletegetrandomo1duplicatesallowed import ( \"math/rand\" ) // 時間複雜 O(1), 空間複雜 O(n) type RandomizedCollection struct { arr []int set map[int]map[int]struct{} size int } func Constructor() RandomizedCollection { arr := make([]int, 0) set := make(map[int]map[int]struct{}) size := 0 return RandomizedCollection{arr, set, size} } func (this *RandomizedCollection) Insert(val int) bool { ids, ok := this.set[val] if !ok { // 沒有此數字了, 建立一個index的map ids = map[int]struct{}{} this.set[val] = ids } // index的map, key為當前最後的index, value為空的struct{}{} ids[this.size] = struct{}{} this.arr = append(this.arr, val) this.size++ return !ok } func (this *RandomizedCollection) Remove(val int) bool { ids, ok := this.set[val] if !ok { return false } // 找出此val的的index, 並且把最後一個index的map刪除, 並且把此index的value設為空的struct{}{} var i int for id := range ids { i = id break } // 將最後一筆移到要替換的id this.arr[i] = this.arr[this.size-1] delete(ids, i) // 因為把最後一個元素移到前面了 delete(this.set[this.arr[i]], this.size-1) if i Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0409.Longest-Palindrome/":{"url":"Leetcode/0409.Longest-Palindrome/","title":"0409. Longest Palindrome","summary":null,"keywords":"","body":"409. Longest Palindrome tagsstart Easy String tagsstop 題目 Given a string s which consists of lowercase or uppercase letters, return the length of the longest palindrome that can be built with those letters. Letters are case sensitive, for example, \"Aa\" is not considered a palindrome here. Example 1: Input: s = \"abccccdd\" Output: 7 Explanation: One longest palindrome that can be built is \"dccaccd\", whose length is 7. Example 2: Input: s = \"a\" Output: 1 Explanation: The longest palindrome that can be built is \"a\", whose length is 1. Constraints: 1 s consists of lowercase and/or uppercase English letters only. 題目大意 給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的回文串。 在構造過程中,請注意區分大小寫。比如 Aa 不能當做一個回文字符串。 注意:假設字符串的長度不會超過 1010。 解題思路 給出一個字符串,要求用這個字符串裡面的字符組成一個回文串,問回文串最多可以組合成多長的? 這也是一道題水題,然後先統計每個字符的頻次,每個字符能取2個的取2個,不足2個的並且當前構造中的回文串是偶數的情況下(即每2個都陣容了),可以取1個。最後組合出來的就是終止回文串。 來源 https://leetcode.com/problems/longest-palindrome/ 解答 package longestpalindrome func LongestPalindrome(s string) int { counter := make(map[rune]int) for _, r := range s { counter[r]++ } result := 0 for _, v := range counter { result += v / 2 * 2 // 字符出現奇數次,我們可以選擇其中一個, 放在回文串的中間,這可以貢獻一個長度 if result%2 == 0 && v%2 == 1 { result++ } } return result } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0412.Fizz-Buzz/":{"url":"Leetcode/0412.Fizz-Buzz/","title":"412. Fizz Buzz","summary":"0412.Fizz-Buzz","keywords":"","body":"412. Fizz Buzz tagsstart LeetCode Go Easy Fizz Buzz Facebook Microsoft Apple string math tagsstop 題目 Facebook, Microsoft, Apple Given an integer n, return a string array answer (1-indexed) where: answer[i] == \"FizzBuzz\" if i is divisible by 3 and 5. answer[i] == \"Fizz\" if i is divisible by 3. answer[i] == \"Buzz\" if i is divisible by 5. answer[i] == i (as a string) if none of the above conditions are true. Example 1: Input: n = 3 Output: [\"1\",\"2\",\"Fizz\"] Example 2: Input: n = 5 Output: [\"1\",\"2\",\"Fizz\",\"4\",\"Buzz\"] Example 3: Input: n = 15 Output: [\"1\",\"2\",\"Fizz\",\"4\",\"Buzz\",\"Fizz\",\"7\",\"8\",\"Fizz\",\"Buzz\",\"11\",\"Fizz\",\"13\",\"14\",\"FizzBuzz\"] Constraints: 1 題目大意 解題思路 Big O 時間複雜 : O(n) 空間複雜 : O(n) 來源 https://leetcode.com/problems/fizz-buzz/description/ https://leetcode.cn/problems/fizz-buzz/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0412.Fizz-Buzz/main.go package fizzbuzz import \"strconv\" // 時間複雜 O(), 空間複雜 O() func fizzBuzz(n int) []string { var result []string for i := 1; i Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0412.Fizz-Buzz cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkFizzBuzz-4 5918809 287.1 ns/op 112 B/op 3 allocs/op BenchmarkFizzBuzz2-4 5024536 223.8 ns/op 112 B/op 3 allocs/op BenchmarkFizzBuzz3-4 5406643 196.3 ns/op 112 B/op 3 allocs/op PASS ok LeetcodeGolang/Leetcode/0412.Fizz-Buzz 5.507s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0438.Find-All-Anagrams-in-a-String/":{"url":"Leetcode/0438.Find-All-Anagrams-in-a-String/","title":"0438.Find All Anagrams in a String","summary":null,"keywords":"","body":"438. Find All Anagrams in a String tagsstart Medium Sliding Window tagsstop 题目 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: 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: 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\". Constraints: 1 題目大意 找所有字母異位詞, 就像全排列 給定一個字符串 S 和非空的字符串 P, 找到 S 中所有是 P 得排列, 並返回他的起始 index 解題思路 跟 0567.Permutation-in-String類似, 只是把找到的答案記錄起來 來源 https://leetcode.com/problems/find-all-anagrams-in-a-string/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0438.Find-All-Anagrams-in-a-String/main.go package findallanagramsinastring func FindAnagrams(s string, p string) []int { need, window := make(map[rune]int), make(map[rune]int) for _, c := range p { need[c]++ } left, right := 0, 0 valid := 0 res := []int{} //紀錄結果 for right 0 { window[c]++ if window[c] == need[c] { valid++ } } // fmt.Printf(\"[%d,%d) \\n\", left, right) // 判斷左視窗是否收縮, 看看視窗長度是否同要找的字串的長度 if (right - left) >= len(p) { if valid == len(need) { // 想要的字元都找到了, 紀錄index res = append(res, left) } d := rune(s[left]) left++ if need[d] > 0 { if window[d] == need[d] { valid-- } window[d]-- } } } return res } // 用 slice 取代 map 來優化 func FindAnagramsSlice(s string, p string) []int { need := [256]int{} for _, c := range p { need[c-'a']++ } left, right := 0, 0 count := len(p) res := []int{} for right 0 { count-- } need[c]-- right++ if count == 0 { res = append(res, left) } if (right - left) >= len(p) { d := s[left] - 'a' if need[d] >= 0 { count++ } need[d]++ left++ } } return res } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0509.Fibonacci-Number/":{"url":"Leetcode/0509.Fibonacci-Number/","title":"0509.Fibonacci Number","summary":null,"keywords":"","body":"509. Fibonacci Number tagsstart Easy Dynamic Programming tagsstop 題目 The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is, F(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1. Given n, calculate F(n). Example 1: Input: n = 2 Output: 1 Explanation: F(2) = F(1) + F(0) = 1 + 0 = 1. Example 2: Input: n = 3 Output: 2 Explanation: F(3) = F(2) + F(1) = 1 + 1 = 2. Example 3: Input: n = 4 Output: 3 Explanation: F(4) = F(3) + F(2) = 2 + 1 = 3. Constraints: 0 題目大意 斐波那契數列, 通常用 F(n) 表示 F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 給定 N,計算 F(N)。 提示:0 ≤ N ≤ 30 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377 ,610, 987…… 解題思路 遇到遞迴最好畫出遞迴樹 f(20) / \\ f(19) f(18) ... ... / \\ / \\ f(1) f(2) f(1) f(2) 這一題解法很多,大的分類是四種,遞歸,記憶化搜索(dp),矩陣快速冪,通項公式。其中記憶化搜索可以寫 3 種方法,自底向上的,自頂向下的,優化空間複雜度版的。通項公式方法實質是求 a^b 這個還可以用快速冪優化時間複雜度到 O(log n) 。 來源 https://books.halfrost.com/leetcode/ChapterFour/0500~0599/0509.Fibonacci-Number/ https://leetcode.com/problems/fibonacci-number/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0509.Fibonacci-Number/Fibonacci-Number.go // --- Directions // Print out the n-th entry in the fibonacci series. // The fibonacci series is an ordering of numbers where // each number is the sum of the preceeding two. // For example, the sequence // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] // forms the first ten entries of the fibonacci series. // Example: // fib(4) === 3 package fibonaccinumber import \"math\" // Fib : iterative 迴圈 O(n) . 空間複雜 O(n). 自底向上的記憶化搜索 func FibIterative(n int) int { var result = []int{0, 1} for i := 2; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0516.Longest-Palindromic-Subsequence/":{"url":"Leetcode/0516.Longest-Palindromic-Subsequence/","title":"516. Longest Palindromic Subsequence","summary":null,"keywords":"","body":"516. Longest Palindromic Subsequence tagsstart Medium Dynamic Programming tagsstop 題目 Given a string s, find the longest palindromic subsequence's length in s. A subsequence is a sequence that can be derived from another sequence by deleting some or no elements without changing the order of the remaining elements. Example 1: Input: s = \"bbbab\" Output: 4 Explanation: One possible longest palindromic subsequence is \"bbbb\". Example 2: Input: s = \"cbbd\" Output: 2 Explanation: One possible longest palindromic subsequence is \"bb\". Constraints: 1 s consists only of lowercase English letters. 題目大意 給你一個字符串 s,找到 s 中最長的回文子串。 解題思路 來源 https://leetcode.com/problems/longest-palindromic-subsequence/ 解答 © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0543.Diameter-of-Binary-Tree/":{"url":"Leetcode/0543.Diameter-of-Binary-Tree/","title":"0543. Diameter of Binary Tree","summary":"0543.Diameter-of-Binary-Tree","keywords":"","body":"543. Diameter of Binary Tree tagsstart LeetCode Go Easy Diameter of Binary Tree DFS tagsstop 題目 Given the root of a binary tree, return the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root. The length of a path between two nodes is represented by the number of edges between them. Example 1: Input: root = [1,2,3,4,5] Output: 3 Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3]. Example 2: Input: root = [1,2] Output: 1 Constraints: The number of nodes in the tree is in the range [1, 104]. -100 題目大意 解題思路 左邊的最高高度與右邊的最高高度相加 Big O 時間複雜 O(n), 空間複雜: 最壞 O(n), 平衡樹 O(log(n)) 來源 https://leetcode.com/problems/diameter-of-binary-tree/ https://leetcode.cn/problems/diameter-of-binary-tree/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0543.Diameter-of-Binary-Tree/main.go package diameterofbinarytree import \"LeetcodeGolang/structures\" /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ type TreeNode = structures.TreeNode var maxDiameter int // 時間複雜 O(n), 空間複雜: 最壞 O(n), 平衡樹 O(log(n)) func DiameterOfBinaryTree(root *TreeNode) int { if root == nil { return 0 } maxDiameter = 0 maxDepth(root) return maxDiameter } func maxDepth(node *TreeNode) int { if node == nil { return 0 } left := maxDepth(node.Left) right := maxDepth(node.Right) maxDiameter = max(maxDiameter, left+right) return max(left, right) + 1 } func max(a, b int) int { if a >= b { return a } else { return b } } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0567.Permutation-in-String/":{"url":"Leetcode/0567.Permutation-in-String/","title":"0567.Permutation in String","summary":null,"keywords":"","body":"567. Permutation in String tagsstart Medium Sliding Window tagsstop 題目 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: s1 = \"ab\", s2 = \"eidbaooo\" Output: true Explanation: s2 contains one permutation of s1 (\"ba\"). Example 2: Input: s1 = \"ab\", s2 = \"eidboaoo\" Output: false Constraints: 1 s1 and s2 consist of lowercase English letters. 題目大意 輸入兩個String S1 和 S2 , 判斷 S2 是否包含S1的排列, 也就是要判斷 S2 中是否存在一個子字串是S1的一種全排列 解題思路 Sliding Window 可以用 slice 取代 map 來優化 來源 https://leetcode.com/problems/permutation-in-string/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0567.Permutation-in-String/main.go package permutationinstring func CheckInclusion(s1 string, s2 string) bool { need, window := make(map[rune]int), make(map[rune]int) for _, c := range s1 { need[c]++ } left, right := 0, 0 valid := 0 for right 0 { window[c]++ if window[c] == need[c] { // 該字符長度達到 valid++ } } // fmt.Printf(\"[%d,%d) \\n\", left, right) // 判斷左視窗是否要收縮 // for (right - left) >= len(s1) if (right - left) >= len(s1) { if valid == len(need) { // 全找到 return true } d := rune(s2[left]) left++ if need[d] > 0 { if window[d] == need[d] { valid-- } window[d]-- } } } return false } // 用 slice 取代 map 來優化 func CheckInclusionSlice(s1 string, s2 string) bool { need := [256]int{} for _, c := range s1 { need[c-'a']++ } left, right := 0, 0 count := len(s1) for right 0 { // 有找到 count-- } need[c]-- right++ // fmt.Printf(\"[%d,%d)\\n\", left, right) if count == 0 { return true } // 判斷左視窗是否要收縮 if (right - left) == len(s1) { d := s2[left] - 'a' if need[d] >= 0 { // 符合預期的長度, 但是卻沒找到預期的結果 count++ } need[d]++ left++ } } return false } tags: Medium Leetcode Sliding Window © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0693.Binary-Number-with-Alternating-Bits/":{"url":"Leetcode/0693.Binary-Number-with-Alternating-Bits/","title":"0693.Binary Number with Alternating Bits","summary":null,"keywords":"","body":"693. Binary Number with Alternating Bits tagsstart Medium Bit Manipulation tagsstop 題目 Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: 5 Output: True Explanation: The binary representation of 5 is: 101 Example 2: Input: 7 Output: False Explanation: The binary representation of 7 is: 111. Example 3: Input: 11 Output: False Explanation: The binary representation of 11 is: 1011. Example 4: Input: 10 Output: True Explanation: The binary representation of 10 is: 1010. 題目大意 給定一個正整數,檢查他是否為交替位二進制數:換句話說,就是他的二進制數相鄰的兩個位數永不相等。 解題思路 判斷一個數的二進制位相鄰兩個數是不相等的,即 0101 交叉間隔的,如果是,輸出 true。這一題有多種做法,最簡單的方法就是直接模擬。比較巧妙的方法是通過位運算,合理構造特殊數據進行位運算到達目的。 010101 構造出 101010 兩者相互 & 位運算以後就為 0,因為都“插空”了。 提示: 1 來源 https://books.halfrost.com/leetcode/ChapterFour/0600~0699/0693.Binary-Number-with-Alternating-Bits/ https://leetcode-cn.com/problems/binary-number-with-alternating-bits/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0693.Binary-Number-with-Alternating-Bits/Binary-Number-with-Alternating-Bits.go package binarynumberwithalternatingbits // 暴力解 O(n) func hasAlternatingBits(n int) bool { for n > 0 { preBit := n & 1 n = n / 2 curBit := n & 1 if curBit == preBit { return false } } return true } // 數學解 func hasAlternatingBits2(n int) bool { /* n=5 n= 1 0 1 n >> 1 0 1 0 n^(n>>1) 1 1 1 (XOR 不同時得1) n 1 1 1 n+1 1 0 0 0 n & (n+1) 0 0 0 n=7 n= 1 1 1 n >> 1 0 1 1 n^(n>>1) 1 0 0 (XOR 不同時得1) n 1 0 0 n+1 1 0 1 n & (n+1) 1 0 0 */ n = n ^ (n >> 1) result := n & (n + 1) return result == 0 } © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0695.Max-Area-of-Island/":{"url":"Leetcode/0695.Max-Area-of-Island/","title":"0695.Max Area of Island","summary":"Max Area of Island","keywords":"","body":"695. Max Area of Island tagsstart LeetCode Go Medium Max Area of Island DFS BFS Array & String Matrix tagsstop 題目 You are given an m x n binary matrix grid. An island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water. The area of an island is the number of cells with a value 1 in the island. Return the maximum area of an island in grid. If there is no island, return 0. Example 1: Input: grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]] Output: 6 Explanation: The answer is not 11, because the island must be connected 4-directionally. Example 2: Input: grid = [[0,0,0,0,0,0,0,0]] Output: 0 Constraints: m == grid.length n == grid[i].length 1 grid[i][j] is either 0 or 1. 題目大意 給定一個由 '1'(陸地)和 '0'(水域)組成的二維矩陣,計算矩陣中連續的1所組成的最大區域的面積。 解題思路 使用BFS或DFS遍歷矩陣,計算每個島嶼的面積,並找到最大的面積值。 給出一個地圖,要求計算上面島嶼的。注意島嶼的定義是要求都是海(為0的點),如果土地(為1的點)靠在地圖邊緣,不能是珊瑚島。 這題和第200題,第1254題解題思路是一致的。 DPS深搜。不過這題需要多處理2件事情,一是注意靠邊緣的島嶼不能計算關係,二是動態維護島嶼的最大面積。 使用DFS的解法: 創建一個變量maxArea,用於記錄最大面積,初始化為0。 遍歷二維網格,對於每個為1的位置,調用dfs函數計算以該位置為起點的島嶼面積。 在dfs函數中,首先檢查當前位置的合法性,如果超出網格範圍或者該位置已經訪問過或者是水域(0),則返回0。 將當前位置標記為已訪問,並初始化面積為1。 遞迴地對當前位置的上、下、左、右四個相鄰位置進行dfs,並將返回的面積加到當前面積上。 返回當前面積。 更新maxArea為當前面積和maxArea中的較大值。 遍歷完整個網格後,返回maxArea作為結果。 時間複雜度: 遍歷整個網格的時間複雜度為O(mn),其中m和n分別為網格的行數和列數。 空間複雜度: 使用了遞迴調用的栈空間,空間複雜度為O(mn)。 來源 https://leetcode.com/problems/max-area-of-island/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0695.Max-Area-of-Island/main.go package maxareaofisland var ( dir = [][]int{ {-1, 0}, // 上 {0, 1}, // 右 {1, 0}, // 下 {0, -1}, // 左 } ) func MaxAreaOfIsland(grid [][]int) int { result := 0 for i, row := range grid { for j, col := range row { if col == 1 { result = max(result, areaOfIsland(grid, i, j)) } } } return result } // DFS func areaOfIsland(grid [][]int, x, y int) int { if x = len(grid) || y = len(grid[0]) || grid[x][y] == 0 { return 0 } // 設為0,避免重複計算 grid[x][y] = 0 total := 1 // 四個方向查找 for i := 0; i y { return x } return y } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0703.Kth-Largest-Element-in-a-Stream/":{"url":"Leetcode/0703.Kth-Largest-Element-in-a-Stream/","title":"0703. Kth Largest Element in a Stream","summary":"0703.Kth-Largest-Element-in-a-Stream","keywords":"","body":"0703. Kth Largest Element in a Stream tagsstart LeetCode Go Easy Kth Largest Element in a Stream Heap Priority Queue tagsstop 題目 Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Implement KthLargest class: KthLargest(int k, int[] nums) Initializes the object with the integer k and the stream of integers nums. int add(int val) Appends the integer val to the stream and returns the element representing the kth largest element in the stream. Example 1: Input [\"KthLargest\", \"add\", \"add\", \"add\", \"add\", \"add\"] [[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]] Output [null, 4, 5, 5, 8, 8] Explanation KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]); kthLargest.add(3); // return 4 kthLargest.add(5); // return 5 kthLargest.add(10); // return 5 kthLargest.add(9); // return 8 kthLargest.add(4); // return 8 Constraints: 1 題目大意 設計一個找到數據流中第 k 大元素的類(class)。 注意是排序後的第 k 大元素,不是第 k 個不同的元素。 請實現 KthLargest 類: KthLargest(int k, int[] nums) 使用整數 k 和整數流 nums 初始化物件。 int add(int val) 將 val 插入數據流 nums 後,返回當前數據流中第 k 大的元素。 解題思路 這題考察優先順序佇列的使用,可以先做下這道類似的題目 215.陣列中的第 K 個最大元素。 golang container/heap Big O 時間複雜 : 初始化時間複雜度為: O(nlog⁡k) ,其中 n 為初始化時 nums 的長度; 單次插入時間複雜度為: O(log⁡k) 空間複雜 : O(k)。 需要使用優先佇列存儲前 k 大的元素 來源 https://leetcode.com/problems/kth-largest-element-in-a-stream/ https://leetcode.cn/problems/kth-largest-element-in-a-stream/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0703.Kth-Largest-Element-in-a-Stream/main.go package kthlargestelementinastream import ( \"container/heap\" \"sort\" ) /** * Your KthLargest object will be instantiated and called as such: * obj := Constructor(k, nums); * param_1 := obj.Add(val); */ // 時間複雜 O(), 空間複雜 O() type KthLargest struct { sort.IntSlice k int } func Constructor(k int, nums []int) KthLargest { kl := KthLargest{k: k} for _, val := range nums { kl.Add(val) } return kl } func (kl *KthLargest) Add(val int) int { heap.Push(kl, val) if kl.Len() > kl.k { heap.Pop(kl) } return kl.IntSlice[0] } func (kl *KthLargest) Push(v interface{}) { kl.IntSlice = append(kl.IntSlice, v.(int)) } func (kl *KthLargest) Pop() interface{} { a := kl.IntSlice v := a[len(a)-1] kl.IntSlice = a[:len(a)-1] return v } func KthLargestStream(k int, nums []int, elem []int) []int { obj := Constructor(k, nums) result := []int{0} for _, val := range elem { obj.Add(val) result = append(result, obj.IntSlice[0]) } return result } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0704.Binary-Search/":{"url":"Leetcode/0704.Binary-Search/","title":"0704.Binary Search","summary":null,"keywords":"","body":"704. Binary Search tagsstart Easy Binary Search tagsstop 題目 Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1. You must write an algorithm with O(log n) runtime complexity. Example 1: Input: nums = [-1,0,3,5,9,12], target = 9 Output: 4 Explanation: 9 exists in nums and its index is 4 Example 2: Input: nums = [-1,0,3,5,9,12], target = 2 Output: -1 Explanation: 2 does not exist in nums so return -1 Constraints: 1 -104 All the integers in nums are unique. nums is sorted in ascending order. 題目大意 給一個已排序過後的array, 找出target所在index 若未找到回傳 -1 解題思路 提示: 來源 https://leetcode.com/problems/binary-search/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0704.Binary-Search/main.go package binarysearch import \"sort\" func Search(nums []int, target int) int { lenght := len(nums) if lenght target { // 找左邊 right = mid - 1 } } // 都沒找到 return -1 } func Search2(nums []int, target int) int { lenght := len(nums) if lenght >1 mid := int(uint(right+left) >> 1) if nums[mid] == target { return mid } else if nums[mid] target { // 找左邊 right = mid - 1 } } // 都沒找到 return -1 } // 內建sort func BinarySearch(nums []int, target int) int { length := len(nums) index := sort.Search(length, func(i int) bool { return nums[i] >= target }) if index > 1) if nums[middle] == target { return middle } else if target > nums[middle] { return BinarySearchRecursively(nums, target, middle+1, end) } else { return BinarySearchRecursively(nums, target, start, middle-1) } } // 有點類似 nums 小於 target的元素有幾個 func LeftBound(nums []int, target int) (index int) { lenght := len(nums) if lenght >1 mid := int(uint(right+left) >> 1) if nums[mid] == target { // 要繼續找左邊, 所以把右邊變小 right = mid - 1 } else if nums[mid] target { // 找左邊 right = mid - 1 } } // 都沒找到 注意: left越界情況 if left >= lenght || nums[left] != target { return -1 } return left } func RightBound(nums []int, target int) (index int) { lenght := len(nums) if lenght >1 mid := int(uint(right+left) >> 1) if nums[mid] == target { // 注意:要繼續找右邊, 所以把左邊變大=mid+1 left = mid + 1 } else if nums[mid] target { // 找左邊 right = mid - 1 } } // 都沒找到 注意:right越界情況 if right tags: Easy Leetcode Binary Search © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0721.Accounts-Merge/":{"url":"Leetcode/0721.Accounts-Merge/","title":"0721.Accounts Merge","summary":null,"keywords":"","body":"721. Accounts Merge tagsstart Easy Union Find tagsstop 题目 Given a list accounts, 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 emailsrepresenting emails of the account. Now, we would like to merge these accounts. Two accounts definitely belong to the same person if there is some email that is common 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: accounts = [[\"John\", \"johnsmith@mail.com\", \"john00@mail.com\"], [\"John\", \"johnnybravo@mail.com\"], [\"John\", \"johnsmith@mail.com\", \"john_newyork@mail.com\"], [\"Mary\", \"mary@mail.com\"]] Output: [[\"John\", 'john00@mail.com', 'john_newyork@mail.com', 'johnsmith@mail.com'], [\"John\", \"johnnybravo@mail.com\"], [\"Mary\", \"mary@mail.com\"]] Explanation: The first and third John's are the same person as they have the common email \"johnsmith@mail.com\". The second 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. Note: The length of accounts will be in the range [1, 1000]. The length of accounts[i] will be in the range [1, 10]. The length of accounts[i][j] will be in the range [1, 30]. 題目大意 給定一個列表 accounts,每個元素 accounts[i] 是一個字符串列表,其中第一個元素 accounts[i][0] 是 名稱 (name),其餘元素是 emails 表示該賬戶的郵箱地址。 現在,我們想合併這些賬戶。如果兩個賬戶都有一些共同的郵箱地址,則兩個賬戶必定屬於同一個人。請注意,即使兩個賬戶具有相同的名稱,它們也可能屬於不同的人,因為人們可能具有相同的名稱。一個人最初可以擁有任意數量的賬戶,但其所有賬戶都具有相同的名稱。 合併賬戶後,按以下格式返回賬戶:每個賬戶的第一個元素是名稱,其餘元素是按字符 ASCII 順序排列的郵箱地址。賬戶本身可以以任意順序返回。 解題思路 給出一堆賬戶和對應的郵箱。要求合併同一個人的多個郵箱賬戶。 如果這個人名和所屬的其中之一的郵箱是相同的,就判定這是同一個人的郵箱,那麼就合併這些郵箱。 這題的解題思路是並查集。不過如果用暴力合併的方法,時間複雜度非常差。優化方法是先把每組數據都進行編號,人編號,每個郵箱都進行編號。這個映射關係用 map 記錄起來。如果利用並查集的 union() 操作,把這些編號都進行合併。最後把人的編號和對應郵箱的編號拼接起來。 這一題有 2 處比較“坑”的是,不需要合併的用戶的郵箱列表也是需要排序和去重的,同一個人的所有郵箱集合都要合併到一起。具體見測試用例。不過題目中也提到了這些點,也不能算題目坑,只能歸自己沒注意這些邊界情況。 來源 https://books.halfrost.com/leetcode/ChapterFour/0700~0799/0721.Accounts-Merge/ 時間複雜度:O(n log n) 其中 n 是不同郵箱地址的數量。 需要遍歷所有郵箱地址,在並查集內進行查找和合併操作,對於兩個不同的郵箱地址, 如果它們的祖先不同則需要進行合併,需要進行 2 次查找和最多 1 次合併。一共需要進行 2n 次查找和最多 n 次合併, 因此時間複雜度是 O(2n log n) = O(n log n)。 這裡的並查集使用了路徑壓縮,但是沒有使用按秩合併, 最壞情況下的時間複雜度是O(n log n),平均情況下的時間複雜度依然是 O(nα(n)),其中α 為阿克曼函數的反函數,α(n) 可以認為是一個很小的常數。 整理出題目要求的返回賬戶的格式時需要對郵箱地址排序,時間複雜度是 O(n log n)。 其餘操作包括遍歷所有郵箱地址,在哈希表中記錄相應的信息,時間複雜度是O(n), 在漸進意義下O(n) 小於O(nlog n)。 因此總時間複雜度是 O(n log n)。 作者:LeetCode-Solution 鏈接:https://leetcode-cn.com/problems/accounts-merge/solution/zhang-hu-he-bing-by-leetcode-solution-3dyq/ 來源:力扣(LeetCode) 著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。 來源 https://books.halfrost.com/leetcode/ChapterFour/0700~0799/0721.Accounts-Merge/ https://leetcode-cn.com/problems/accounts-merge/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0721.Accounts-Merge/Accounts-Merge.go package accountsmerge import ( \"LeetcodeGolang/template\" \"sort\" ) // TODO: 優化 func AccountsMerge(accounts [][]string) (result [][]string) { // result := [][]string{} emailToIndex := map[string]int{} emailToName := map[string]string{} indexToEmails := map[int][]string{} for _, account := range accounts { name := account[0] for _, email := range account[1:] { if _, has := emailToIndex[email]; !has { // 紀錄 email, 對寫入到 對應的index 跟 對應的user name emailToIndex[email] = len(emailToIndex) emailToName[email] = name } } } parent := make([]int, len(emailToIndex)) // 初始化 for i := range parent { parent[i] = i } var find func(int) int find = func(x int) int { if parent[x] != x { // 遞迴一直找下去 parent[x] = find(parent[x]) } return parent[x] } union := func(from, to int) { parent[find(from)] = find(to) } for _, account := range accounts { firstIndex := emailToIndex[account[1]] for _, email := range account[2:] { union(emailToIndex[email], firstIndex) } } for email, index := range emailToIndex { index = find(index) indexToEmails[index] = append(indexToEmails[index], email) } for _, emails := range indexToEmails { for i := 0; i © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0733.Flood-Fill/":{"url":"Leetcode/0733.Flood-Fill/","title":"0733.Flood Fill","summary":"0733.Flood Fill","keywords":"","body":"0733.Flood Fill tagsstart LeetCode Go Easy Flood Fill BFS DFS tagsstop 題目 An image is represented by an m x n integer grid image where image[i][j] represents the pixel value of the image. You are also given three integers sr,sc, and color. You should perform a flood fill on the image starting from the pixel image[sr][sc]. To perform a flood fill, consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color), and so on. Replace the color of all of the aforementioned pixels with color. Return the modified image after performing the flood fill. Example 1: Input: image = [[1,1,1],[1,1,0],[1,0,1]], sr = 1, sc = 1, color = 2 Output: [[2,2,2],[2,2,0],[2,0,1]] Explanation: From the center of the image with position (sr, sc) = (1, 1) (i.e., the red pixel), all pixels connected by a path of the same color as the starting pixel (i.e., the blue pixels) are colored with the new color. Note the bottom corner is not colored 2, because it is not 4-directionally connected to the starting pixel. Example 2: Input: image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, color = 0 Output: [[0,0,0],[0,0,0]] Explanation: The starting pixel is already colored 0, so no changes are made to the image. Constraints: m == image.length n == image[i].length 1 0 0 0 題目大意 有一個以二維整數陣列表示的圖畫,每個整數表示該圖畫的像素值大小,數值在 0 到 65535 之間。 給你一個坐標 (sr, sc) 表示圖像渲染開始的像素值(行 ,列)和一個新的顏色值新顏色,讓您重新上色該幅圖像。 為了完成上顏色工作,從主板坐標開始,記錄主板坐標的上下四個方向上像素值與主板坐標相同的完整像素點,連接再記錄這四個方向上條件符合的像素點與它們對應的四個像素點方向上像素值與主板坐標的連通像素點相同,……,重複該過程。將所有有記錄的像素點的顏色值改為新的顏色值。最後返回經過上顏色渲染後的圖像。 注意: image 和 image[0] 的長度在範圍 [1, 50] 內。 給出的初始點將滿足 0 image[i][j] 和 newColor 表示的顏色值在範圍 [0, 65535] 內。 解題思路 一個給出二維的圖片點陣,每個點陣都有一個數字。給出起點一個坐標,要求從這個起點坐標開始,把所有與這個起點設置的點都染色成新的顏色。 這題是標準的洪水填充算法。可以用 DFS 也可以用 BFS 。 BFS比較適合找最短路徑,DFS比較適合找所有路徑 DFS使用遞迴比較好寫 使用DFS的解法: 檢查起始點的顏色是否等於新的顏色,如果是則直接返回圖像。 呼叫深度優先搜索函數dfs,傳入起始點座標sr和sc。 在dfs函數中,檢查當前座標的顏色是否等於起始點的顏色,如果是則將其顏色修改為新的顏色。 遞迴地對當前座標的四個相鄰方格進行dfs。 返回填充完成的圖像。 時間複雜度: 圖像中的每個方格最多被訪問一次,因此時間複雜度為O(mn),其中m和n分別為圖像的行數和列數。 空間複雜度: 使用了遞迴調用的栈空間,空間複雜度為O(mn)。 使用BFS的解題思路如下: 檢查起始點的顏色是否等於新的顏色,如果是則直接返回圖像。 創建一個隊列,將起始點的座標(sr, sc)加入隊列中。 創建一個訪問過的集合,將起始點的座標(sr, sc)添加到集合中,表示已經訪問過。 進入BFS循環,當隊列不為空時,執行以下操作: 從隊列中取出一個座標(current_r, current_c)。 檢查該座標的顏色是否等於起始點的顏色,如果是,將該座標的顏色修改為新的顏色。 檢查該座標的四個相鄰方格,如果相鄰方格的座標有效且顏色等於起始點的顏色,且該相鄰方格的座標還沒有被訪問過,則將該相鄰方格的座標加入隊列中,同時將該相鄰方格的座標添加到訪問過的集合中。 重複以上步驟,直到隊列為空。 返回填充完成的圖像。 時間複雜度和空間複雜度的分析與DFS解法相同。 使用BFS的解法同樣可以完成泛洪填充的任務,不同的是使用隊列來保存待處理的座標,而不是使用遞迴函數。 來源 https://leetcode.com/problems/flood-fill/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0733.Flood-Fill/main.go package floodfill // DFS func FloodFill(image [][]int, sr int, sc int, color int) [][]int { oldColor := image[sr][sc] if color == oldColor { return image } dfsfill(image, sr, sc, oldColor, color) return image } func dfsfill(image [][]int, row, col, oldColor, newColor int) { // Check if the current pixel is out of bounds or does not have the old color if row = len(image) || col = len(image[0]) || image[row][col] != oldColor { return } // Update the current pixel with the new color image[row][col] = newColor // Recursively perform flood fill on the adjacent pixels dfsfill(image, row-1, col, oldColor, newColor) // Up dfsfill(image, row+1, col, oldColor, newColor) // Down dfsfill(image, row, col-1, oldColor, newColor) // Left dfsfill(image, row, col+1, oldColor, newColor) // Right } type Point struct { row, col int } func FloodFillBFS(image [][]int, sr int, sc int, newColor int) [][]int { // Check if the starting point is out of bounds or already has the new color if sr = len(image) || sc = len(image[0]) || image[sr][sc] == newColor { return image } // Get the old color at the starting point oldColor := image[sr][sc] // Create a queue and enqueue the starting point queue := []Point{{sr, sc}} // Define the directions (up, down, left, right) directions := [][]int{{-1, 0}, {1, 0}, {0, -1}, {0, 1}} // Perform BFS for len(queue) > 0 { // Dequeue a point from the queue point := queue[0] queue = queue[1:] // Update the point with the new color image[point.row][point.col] = newColor // Explore the neighboring pixels for _, dir := range directions { newRow, newCol := point.row+dir[0], point.col+dir[1] // Check if the neighboring pixel is within bounds and has the old color if newRow >= 0 && newRow = 0 && newCol Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0733.Flood-Fill cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkFloodFillDFS-8 384756555 4.486 ns/op 0 B/op 0 allocs/op BenchmarkFloodFillBFS-8 309088303 3.642 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Leetcode/0733.Flood-Fill 3.572s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0746.Min-Cost-Climbing-Stairs/":{"url":"Leetcode/0746.Min-Cost-Climbing-Stairs/","title":"746. Min Cost Climbing Stairs","summary":"0746.Min-Cost-Climbing-Stairs","keywords":"","body":"746. Min Cost Climbing Stairs tagsstart LeetCode Go Easy Min Cost Climbing Stairs tagsstop 題目 You are given an integer array cost where cost[i] is the cost of ith step on a staircase. Once you pay the cost, you can either climb one or two steps. You can either start from the step with index 0, or the step with index 1. Return the minimum cost to reach the top of the floor. Example 1: Input: cost = [10,15,20] Output: 15 Explanation: You will start at index 1. Pay 15 and climb two steps to reach the top. The total cost is 15. Example 2: Input: cost = [1,100,1,1,1,100,1,1,100,1] Output: 6 Explanation: You will start at index 0. Pay 1 and climb two steps to reach index 2. Pay 1 and climb two steps to reach index 4. Pay 1 and climb two steps to reach index 6. Pay 1 and climb one step to reach index 7. Pay 1 and climb two steps to reach index 9. Pay 1 and climb one step to reach the top. The total cost is 6. Constraints: 2 題目大意 陣列的每個索引做為一個階梯,第 i 個階梯對應著一個非負數的體力花費值 cost[i] (索引從 0 開始)。 每當你爬上一個階梯你都要花費對應的體力花費值,然後你可以選擇繼續爬一個階梯或者爬兩個階梯。 您需要找到達到樓層頂部的最低花費。 在開始時,你可以選擇從索引為 0 或 1 的元素作為初始階梯。 解題思路 cur 變數存儲從第 i-2 步到達第 i 步的最小花費。 last 變數存儲從第 i-1 步到達第 i 步的最小花費。 在每次迭代中,函數都會比較 cur 和 last 變數的值,並選擇較小的那個存儲在 cur 變數中。 在迭代結束時,last 變數將存儲爬完所有樓梯的最小花費。 cost := []int{1, 100, 1, 1, 1, 100, 1, 1, 100, 1} 迭代 cur last 2 0 1 3 1 2 4 2 2 5 2 3 6 3 3 7 3 4 8 4 4 9 4 5 10 5 6 Big O 時間複雜 : O(n) 空間複雜 : O(1) 來源 https://leetcode.com/problems/min-cost-climbing-stairs/ https://leetcode.cn/problems/min-cost-climbing-stairs/ https://books.halfrost.com/leetcode/ChapterFour/0700~0799/0746.Min-Cost-Climbing-Stairs/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0746.Min-Cost-Climbing-Stairs/main.go package mincostclimbingstairs // 時間複雜 O(n), 空間複雜 O(1) func MinCostClimbingStairs(cost []int) int { dp := make([]int, len(cost)) dp[0], dp[1] = cost[0], cost[1] for i := 2; i b { return b } return a } // 時間複雜 O(n), 空間複雜 O(1) // 優化 // 使用了兩個變數cur和last, // cur 變數存儲從第 i-2 步到達第 i 步的最小花費。 // last 變數存儲從第 i-1 步到達第 i 步的最小花費。 // 比較兩種選擇的花費: // 從第2階開始(i := 2),一直迭代到最後一階(i cur+cost[i-2] { cur, last = last, cur+cost[i-2] } else { cur, last = last, last+cost[i-1] } // fmt.Printf(\"%-d | %-d | %-d\\n\", i, cur, last) } return last } Benchmark goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs cpu: Intel(R) Core(TM) i5-6400 CPU @ 2.70GHz BenchmarkMinCostClimbingStairs-4 36693742 30.17 ns/op 24 B/op 1 allocs/op BenchmarkMinCostClimbingStairsOptimize-4 405489464 3.091 ns/op 0 B/op 0 allocs/op PASS ok LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs 2.713s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0752.Open-the-Lock/":{"url":"Leetcode/0752.Open-the-Lock/","title":"0752.Open the Lock","summary":null,"keywords":"","body":"752. Open the Lock tagsstart Medium Breadth First Search tagsstop You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. The wheels can rotate freely and wrap around: for example we can turn '9' to be '0', or '0' to be '9'. Each move consists of turning one wheel one slot. The lock initially starts at '0000', a string representing the state of the 4 wheels. You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it. Given a target representing the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible. Example 1: Input: deadends = [\"0201\",\"0101\",\"0102\",\"1212\",\"2002\"], target = \"0202\" Output: 6 Explanation: A sequence of valid moves would be \"0000\" -> \"1000\" -> \"1100\" -> \"1200\" -> \"1201\" -> \"1202\" -> \"0202\". Note that a sequence like \"0000\" -> \"0001\" -> \"0002\" -> \"0102\" -> \"0202\" would be invalid, because the wheels of the lock become stuck after the display becomes the dead end \"0102\". Example 2: Input: deadends = [\"8888\"], target = \"0009\" Output: 1 Explanation: We can turn the last wheel in reverse to move from \"0000\" -> \"0009\". Example 3: Input: deadends = [\"8887\",\"8889\",\"8878\",\"8898\",\"8788\",\"8988\",\"7888\",\"9888\"], target = \"8888\" Output: -1 Explanation: We cannot reach the target without getting stuck. Constraints: 1 deadends[i].length == 4 target.length == 4 target will not be in the list deadends. target and deadends[i] consist of digits only. 題目大意 有一個四個圓形播盤的轉盤鎖, 每個播盤有0~9共10個數字, 每個播盤上下旋轉可以把 0變成9 或 9變成0. 每次只能旋轉一個播盤 初始直接為0.且有一組 deadends 數組. 不能接數字轉到其中任一組. 如果無法得到 target 回傳 -1 解題思路 從 0000開始轉, 轉一次可窮舉出 \"1000\", \"9000\", \"0100\", \"0900\", \"0010\", \"0090\", \"0001\", \"0009\". 8 總可能, 再以這八種密碼為基礎, 對每總密碼再轉一下, 窮舉出每個可能 可以抽象成一副圖, 每個節點有8個相鄰的節點, 讓你求出最短距離 方法二: 還可以用雙向BFS, 從起點跟終點開始擴散, 當兩邊有交集時停止 方法三: 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散, 那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集 無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的 來源 https://leetcode.com/problems/open-the-lock/ https://books.halfrost.com/leetcode/ChapterFour/0700~0799/0752.Open-the-Lock/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0752.Open-the-Lock/main.go package openthelock // 方法ㄧ: 單向BFS func OpenLock(deadends []string, target string) int { if target == \"0000\" { return 0 } targetNum := strToInt(target) // 紀錄已窮舉過的密碼, 防止走回頭路 visited := make([]bool, 10000) visited[0] = true for _, deadend := range deadends { num := strToInt(deadend) if num == 0 { return -1 } visited[num] = true } depth, curDepth, nextDepth := 0, []int16{0}, make([]int16, 0) var nextNum int16 for len(curDepth) > 0 { nextDepth = nextDepth[0:0] // 當前Queue中所有的節點向外擴散 for _, curNum := range curDepth { // 遍歷八種組合 for incrementer := int16(1000); incrementer > 0; incrementer /= 10 { nextNum = PlusOne(curNum, incrementer) if nextNum == targetNum { return depth + 1 } if !visited[nextNum] { visited[nextNum] = true nextDepth = append(nextDepth, nextNum) } nextNum = MinusOne(curNum, incrementer) if nextNum == targetNum { return depth + 1 } if !visited[nextNum] { visited[nextNum] = true nextDepth = append(nextDepth, nextNum) } } } curDepth, nextDepth = nextDepth, curDepth // 增加步數 depth++ } return -1 } /* Note: Golang set type void struct{} var member void set := make(map[string]void) // New empty set set[\"Foo\"] = member // Add for k := range set { // Loop fmt.Println(k) } delete(set, \"Foo\") // Delete size := len(set) // Size _, exists := set[\"Foo\"] // Membership */ // 方法二: 雙向BFS. 不在使用 Queue而是用 hashset, 快速判斷兩者是否交集 // 從起點跟終點開始擴散, 當兩邊有交集時停止 func OpenLockBiDirection(deadends []string, target string) int { if target == \"0000\" { return 0 } targetNum := strToInt(target) // 紀錄已窮舉過的密碼, 防止走回頭路 visited := make([]bool, 10000) for _, deadend := range deadends { num := strToInt(deadend) if num == 0 { return -1 } visited[num] = true } depth := 0 // 起點跟終點初始化 curDepth := make(map[int16]struct{}) nextDepth := make(map[int16]struct{}) curDepth[0] = struct{}{} nextDepth[targetNum] = struct{}{} var nextNum int16 for len(curDepth) != 0 && len(nextDepth) != 0 { // 儲存 curDepth 的擴散結果 tmp := make(map[int16]struct{}) // curDepth的節點向外擴散 for curNum := range curDepth { // 判斷是否達到終點 if visited[curNum] { continue } _, exists := nextDepth[curNum] if exists { return depth } visited[curNum] = true // 遍歷八種組合 for incrementer := int16(1000); incrementer > 0; incrementer /= 10 { nextNum = PlusOne(curNum, incrementer) if !visited[nextNum] { tmp[nextNum] = struct{}{} } nextNum = MinusOne(curNum, incrementer) if !visited[nextNum] { tmp[nextNum] = struct{}{} } } } // 小技巧, 這裏交換 curDepth, nextDepth . // 下一輪 whihe會擴散 nextDepth. // 所以只要默認擴散curDepth, 就相當於輪流擴散curDepth, nextDepth curDepth, nextDepth = nextDepth, tmp // 增加步數 depth++ } return -1 } // 方法三 : 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散, // 那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集 // 無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的 func OpenLockBiDirectionOptimization(deadends []string, target string) int { if target == \"0000\" { return 0 } targetNum := strToInt(target) // 紀錄已窮舉過的密碼, 防止走回頭路 visited := make([]bool, 10000) for _, deadend := range deadends { num := strToInt(deadend) if num == 0 { return -1 } visited[num] = true } depth := 0 // 起點跟終點初始化 curDepth := make(map[int16]struct{}) nextDepth := make(map[int16]struct{}) curDepth[0] = struct{}{} nextDepth[targetNum] = struct{}{} var nextNum int16 for len(curDepth) != 0 && len(nextDepth) != 0 { if len(curDepth) > len(nextDepth) { curDepth, nextDepth = nextDepth, curDepth } // 儲存 curDepth 的擴散結果 tmp := make(map[int16]struct{}) // curDepth的節點向外擴散 for curNum := range curDepth { // 判斷是否達到終點 if visited[curNum] { continue } _, exists := nextDepth[curNum] if exists { return depth } visited[curNum] = true // 遍歷八種組合 for incrementer := int16(1000); incrementer > 0; incrementer /= 10 { nextNum = PlusOne(curNum, incrementer) if !visited[nextNum] { tmp[nextNum] = struct{}{} } nextNum = MinusOne(curNum, incrementer) if !visited[nextNum] { tmp[nextNum] = struct{}{} } } } // 小技巧, 這裏交換 curDepth, nextDepth . // 下一輪 whihe會擴散 nextDepth. // 所以只要默認擴散curDepth, 就相當於輪流擴散curDepth, nextDepth curDepth, nextDepth = nextDepth, tmp // 增加步數 depth++ } return -1 } func PlusOne(curNum int16, incrementer int16) (nextNum int16) { digit := (curNum / incrementer) % 10 if digit == 9 { nextNum = curNum - 9*incrementer } else { nextNum = curNum + incrementer } return nextNum } func MinusOne(curNum int16, incrementer int16) (nextNum int16) { digit := (curNum / incrementer) % 10 if digit == 0 { nextNum = curNum + 9*incrementer } else { nextNum = curNum - incrementer } return nextNum } func strToInt(str string) int16 { return int16(str[0]-'0')*1000 + int16(str[1]-'0')*100 + int16(str[2]-'0')*10 + int16(str[3]-'0') } tags: Medium Leetcode BFS © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0875.Koko-Eating-Bananas/":{"url":"Leetcode/0875.Koko-Eating-Bananas/","title":"875. Koko Eating Bananas","summary":"0875.Koko-Eating-Bananas","keywords":"","body":"875. Koko Eating Bananas tagsstart LeetCode Go Medium Koko Eating Bananas Array Binary Search tagsstop 題目 題目大意 解題思路 Big O 時間複雜 : O(n log m),其中 n 是香蕉堆的數量,m 是香蕉堆中香蕉數量的最大值 空間複雜 : O(1) 來源 https://leetcode.com/problems/koko-eating-bananas/description/ https://leetcode.cn/problems/koko-eating-bananas/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0875.Koko-Eating-Bananas/main.go package kokoeatingbananas // 時間複雜 O(n log m), 空間複雜 O(1) func minEatingSpeed(piles []int, h int) int { // 找出最大的香蕉堆 left, right := 1, maxPile(piles) for left > 1) if executeTime(piles, mid) 0 { time++ } // time += int(math.Ceil(float64(pile) / float64(k))) } return time } func maxPile(piles []int) int { result := 0 for _, pile := range piles { if result Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/0876.Middle-of-the-Linked-List/":{"url":"Leetcode/0876.Middle-of-the-Linked-List/","title":"0876.Middle of the Linked List","summary":null,"keywords":"","body":"876. Middle of the Linked List tagsstart Easy Linked List Two Pointers tagsstop 題目 Given the head of a singly linked list, return the middle node of the linked list. If there are two middle nodes, return the second middle node. Example 1: Input: head = [1,2,3,4,5] Output: [3,4,5] Explanation: The middle node of the list is node 3. Example 2: Input: head = [1,2,3,4,5,6] Output: [4,5,6] Explanation: Since the list has two middle nodes with values 3 and 4, we return the second one. Constraints: The number of nodes in the list is in the range [1, 100]. 1 題目大意 尋找無環的 linked list 的中間節點 解題思路 使用 two pointer. 讓快指針往前兩步. 慢指針往前一步. 當快指針到達盡頭時, 慢指針就位於linked list的中間位置. 當linked list的長度為奇數時, slow剛好停在中點位置; 如果長度為偶數, slow停在中間偏右 來源 https://leetcode.com/problems/middle-of-the-linked-list/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0876.Middle-of-the-Linked-List/main.go package middleofthelinkedlist /** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ type ListNode struct { Val int Next *ListNode } func MiddleNode(head *ListNode) *ListNode { if head == nil || head.Next == nil { return head } fast, slow := head, head for fast.Next != nil && fast.Next.Next != nil { fast = fast.Next.Next slow = slow.Next } // 算出長度 curr := head length := 0 for curr != nil { length++ curr = curr.Next } if length%2 == 0 { // 偶數 return slow.Next } else { // 奇數 return slow } } tags: Medium Leetcode two pointers © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/1046.Last-Stone-Weight/":{"url":"Leetcode/1046.Last-Stone-Weight/","title":"1046. Last Stone Weight","summary":"1046.Last-Stone-Weight","keywords":"","body":"1046. Last Stone Weight tagsstart LeetCode Go Easy Heap Priority Queue Last Stone Weight tagsstop 題目 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 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: 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: Input: stones = [1] Output: 1 Constraints: 1 題目大意 有一個集合 stones,每個 stone 的重量由正整數表示。 每次可以選擇兩個不同的石頭,將它們一起粉碎,然後得到一個新的石頭,其重量為兩者之差。 你需要重複這個過程,直到集合中只剩下一個石頭,或者集合中沒有石頭為止。 在這個過程中,找到可能的最後一顆石頭的重量。如果集合中沒有石頭,則返回 0。 Input: stones = [2,7,4,1,8,1] Output: 1 Explanation: 步驟1:選擇石頭 7 和 8,得到新石頭 [2,4,1,1,1]。 步驟2:選擇石頭 2 和 4,得到新石頭 [2,1,1,1]。 步驟3:選擇石頭 2 和 1,得到新石頭 [1,1,1]。 步驟4:選擇石頭 1 和 1,得到新石頭 [0,1]。 步驟5:選擇石頭 1 和 0,得到新石頭 [1]。 最後剩下的石頭的重量為 1。 解題思路 將 stones 陣列轉換為最大堆(max heap),可以使用優先佇列實現。 進行迴圈,每次從最大堆中取出兩個最大的石頭。 如果兩個石頭不相等,將它們的差值插入最大堆。 重複上述步驟,直到最大堆中只剩下一個石頭或沒有石頭為止。 如果最大堆中有石頭,返回該石頭的重量,否則返回 0。 這樣的做法確保每次都選擇最大的兩個石頭進行粉碎,最終留下的石頭重量就是可能的最後一個石頭的重量。 參考 0215 Kth Largest Element in an Array Big O 時間複雜 : O(nlogn) 空間複雜 : O(n) n 是石頭數量. 每次從隊列中取出元素需要話O(logn) 的時間, 最多共需要需要粉碎 n−1 次石頭 來源 https://leetcode.com/problems/last-stone-weight/ https://leetcode.cn/problems/last-stone-weight/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/1046.Last-Stone-Weight/main.go package laststoneweight import ( \"container/heap\" \"fmt\" \"sort\" ) /* // IntSlice attaches the methods of Interface to []int, sorting in increasing order. type IntSlice []int func (x IntSlice) Len() int { return len(x) } func (x IntSlice) Less(i, j int) bool { return x[i] h.IntSlice[j] } func (h *hp) Push(v interface{}) { h.IntSlice = append(h.IntSlice, v.(int)) } func (h *hp) Pop() interface{} { old := h.IntSlice v := old[len(old)-1] h.IntSlice = old[:len(old)-1] return v } func (h *hp) PushInt(v int) { heap.Push(h, v) } func (h *hp) PopInt() int { return heap.Pop(h).(int) } // 時間複雜 O(nlogn), 空間複雜 O(n) // n 是石頭數量. 每次從隊列中取出元素需要話O(logn) 的時間, 最多共需要需要粉碎 n−1 次石頭 func LastStoneWeight(stones []int) int { q := &hp{stones} heap.Init(q) fmt.Println(q) for q.Len() > 1 { fmt.Println(q) x, y := q.PopInt(), q.PopInt() fmt.Printf(\"%d,%d\\n\", x, y) if x > y { q.PushInt(x - y) } } if q.Len() > 0 { return q.IntSlice[0] } return 0 } Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/1143.Longest-Common-Subsequence/":{"url":"Leetcode/1143.Longest-Common-Subsequence/","title":"1143.Longest Common Subsequence","summary":null,"keywords":"","body":"1143. Longest Common Subsequence tagsstart Medium Dynamic Programming tagsstop 題目 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: text1 = \"abcde\", text2 = \"ace\" Output: 3 Explanation: The longest common subsequence is \"ace\" and its length is 3. Example 2: 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. Constraints: 1 text1 and text2 consist of only lowercase English characters. 題目大意 給兩個string 求出, 這兩個string 的最長公共子序列的長度, 如果不存在返回0. 譬如 str1=\"abcde\", str2=\"aceb\", 輸出為3, 因為最長公共子序列是\"ace\" 解題思路 暴力解法, 用遞迴 dp(i,j) 表示 s1[0..i]和s2[0..j]中最長公共子序列的長度, 如果s1[i]==s2[j], 說明這個公共字符一定在lcs中, 如果知道了s1[0..i-1]和s2[0..j-1]中的lcs長度, 再加1就是s1[0..i]和s2[0..j]中lcs的長度 if (str[i] == str2[j]) { dp(i,j) = dp(i-1,j-1)+1 } 如果s1[i]!=s2[j], 說明這兩個字符至少有一個不在lcs中, if (str[i] != str2[j]){ dp(i,j) = max( dp(i-1,j) , dp(i,j-1)) } def longestCommonSubsequence(str1,str2) ->int: def dp(i,j): # 空的base code if i == -1 or j == -1: return 0 if str[i] == str2[j]: # 找到一個lcs中的元素 return dp(i-1, j-1)+1 if str[i] != str2[j]: # 至少有一個字符不在lcs中, 都試一下,看誰能讓lcs最長 return max( dp(i-1,j) , dp(i,j-1)) return dp(len(str1)-1,len(str2)-1) DP優化 int longestCommonSubsequence(string str1, string str2) { int m = str1.size(), n = str2.size(); // 定義對s1[0..i-1] 和 s2[0..j-1], 他們的lcs長度是dp[i][j] vector> dp(m + 1, vector(n + 1, 0)); // base case: dp[0][...] = dp[..][0] = 0, 已初始化 for (int i = 1; i 來源 https://leetcode.com/problems/longest-common-subsequence/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/1143.Longest-Common-Subsequence/main.go package longestcommonsubsequence func LongestCommonSubsequence(text1 string, text2 string) int { var dp func(int, int) int dp = func(i, j int) int { if i == -1 || j == -1 { return 0 } if text1[i] == text2[j] { return dp(i-1, j-1) + 1 } if text1[i] != text2[j] { return max(dp(i-1, j), dp(i, j-1)) } return 0 } return dp(len(text1)-1, len(text2)-1) } func LongestCommonSubsequenceDP(text1 string, text2 string) int { m, n := len(text1), len(text2) if m == 0 || n == 0 { return 0 } dp := make([][]int, m+1) for i := range dp { dp[i] = make([]int, n+1) } for i := 1; i b { return a } return b } goos: darwin goarch: amd64 pkg: LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz BenchmarkLongestCommonSubsequence-8 100 737158262 ns/op 0 B/op 0 allocs/op BenchmarkLongestCommonSubsequenceDP-8 2355297 491.3 ns/op 912 B/op 8 allocs/op PASS ok LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence 75.400s © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Leetcode/1195.Fizz-Buzz-Multithreaded/":{"url":"Leetcode/1195.Fizz-Buzz-Multithreaded/","title":"1195. Fizz Buzz Multithreaded","summary":"1195.Fizz-Buzz-Multithreaded","keywords":"","body":"1195. Fizz Buzz Multithreaded tagsstart LeetCode Go Medium Fizz Buzz Multithreaded Concurrency tagsstop 題目 You have the four functions: printFizz that prints the word \"fizz\" to the console, printBuzz that prints the word \"buzz\" to the console, printFizzBuzz that prints the word \"fizzbuzz\" to the console, and printNumber that prints a given integer to the console. You are given an instance of the class FizzBuzz that has four functions: fizz, buzz, fizzbuzz and number. The same instance of FizzBuzz will be passed to four different threads: Thread A: calls fizz() that should output the word \"fizz\". Thread B: calls buzz() that should output the word \"buzz\". Thread C: calls fizzbuzz() that should output the word \"fizzbuzz\". Thread D: calls number() that should only output the integers. Modify the given class to output the series [1, 2, \"fizz\", 4, \"buzz\", ...] where the ith token (1-indexed) of the series is: \"fizzbuzz\" if i is divisible by 3 and 5, \"fizz\" if i is divisible by 3 and not 5, \"buzz\" if i is divisible by 5 and not 3, or i if i is not divisible by 3 or 5. Implement the FizzBuzz class: FizzBuzz(int n) Initializes the object with the number n that represents the length of the sequence that should be printed. void fizz(printFizz) Calls printFizz to output \"fizz\". void buzz(printBuzz) Calls printBuzz to output \"buzz\". void fizzbuzz(printFizzBuzz) Calls printFizzBuzz to output \"fizzbuzz\". void number(printNumber) Calls printnumber to output the numbers. Example 1: Input: n = 15 Output: [1,2,\"fizz\",4,\"buzz\",\"fizz\",7,8,\"fizz\",\"buzz\",11,\"fizz\",13,14,\"fizzbuzz\"] Example 2: Input: n = 5 Output: [1,2,\"fizz\",4,\"buzz\"] Constraints: 1 題目大意 解題思路 Big O 時間複雜 : 空間複雜 : 來源 https://leetcode.com/problems/fizz-buzz-multithreaded/description/ https://leetcode.cn/problems/fizz-buzz-multithreaded/description/ 解答 https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/1195.Fizz-Buzz-Multithreaded/main.go package fizzbuzzmultithreaded import ( \"fmt\" \"sync\" ) var ( wg = sync.WaitGroup{} ) // 時間複雜 O(), 空間複雜 O() func FizzBuzz(n int) { fb := NewFizzBuzz() wg.Add(4) go fb.fizz() go fb.buzz() go fb.fizzbuzz() go fb.number() for i := 1; i Benchmark © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"structures/":{"url":"structures/","title":"Structures","keywords":"","body":"來源 https://github.com/halfrost/LeetCode-Go/tree/master/structures © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"structures/heap/index.en.html":{"url":"structures/heap/index.en.html","title":"Golang Container Heap","summary":"0703.Kth-Largest-Element-in-a-Stream","keywords":"","body":"Golang : container/heap tagsstart Go container/heap tagsstop Heap是什麼 Wiki: https://zh.wikipedia.org/wiki/%E5%A0%86%E7%A9%8D 堆積(Heap)是電腦科學中的一種特別的完全二元樹。 若是滿足以下特性,即可稱為堆積:「給定堆積中任意節點P和C,若P是C的母節點,那麼P的值會小於等於(或大於等於)C的值」。 若母節點的值恆小於等於子節點的值,此堆積稱為最小堆積(min heap); 反之,若母節點的值恆大於等於子節點的值,此堆積稱為最大堆積(max heap)。 在堆積中最頂端的那一個節點,稱作根節點(root node),根節點本身沒有母節點(parent node)。 container/heap 提供的方法 heap包為實現了 heap.Interface 的類型提供了堆方法:Init/Push/Pop/Remove/Fix。 container/heap 為最小堆, 即每個節點的值都小於它的子樹的所有元素的值(A heap is a tree with the property that each node is the minimum-valued node in its subtree)。 heap: package heap // ... // Note that Push and Pop in this interface are for package heap's // implementation to call. To add and remove things from the heap, // use heap.Push and heap.Pop. type Interface interface { sort.Interface Push(x any) // add x as element Len() Pop() any // remove and return element Len() - 1. } sort: package sort // An implementation of Interface can be sorted by the routines in this package. // The methods refer to elements of the underlying collection by integer index. type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with index i // must sort before the element with index j. // // If both Less(i, j) and Less(j, i) are false, // then the elements at index i and j are considered equal. // Sort may place equal elements in any order in the final result, // while Stable preserves the original input order of equal elements. // // Less must describe a transitive ordering: // - if both Less(i, j) and Less(j, k) are true, then Less(i, k) must be true as well. // - if both Less(i, j) and Less(j, k) are false, then Less(i, k) must be false as well. // // Note that floating-point comparison (the 由於 heap.Interface 包含了 sort.Interface ,所以,目標類型需要包含如下方法:Len/Less/Swap ,Push/Pop。 container/heap 可用在哪 container/heap包可以用來構造優先順序佇列。 https://go.dev/play/p/77zrF3PurO4 // This example demonstrates a priority queue built using the heap interface. package main import ( \"container/heap\" \"fmt\" ) // An Item is something we manage in a priority queue. type Item struct { value string // The value of the item; arbitrary. priority int // The priority of the item in the queue. // The index is needed by update and is maintained by the heap.Interface methods. index int // The index of the item in the heap. } // A PriorityQueue implements heap.Interface and holds Items. type PriorityQueue []*Item func (pq PriorityQueue) Len() int { return len(pq) } func (pq PriorityQueue) Less(i, j int) bool { // We want Pop to give us the highest, not lowest, priority so we use greater than here. return pq[i].priority > pq[j].priority } func (pq PriorityQueue) Swap(i, j int) { pq[i], pq[j] = pq[j], pq[i] pq[i].index = i pq[j].index = j } func (pq *PriorityQueue) Push(x interface{}) { n := len(*pq) item := x.(*Item) item.index = n *pq = append(*pq, item) } func (pq *PriorityQueue) Pop() interface{} { old := *pq n := len(old) item := old[n-1] item.index = -1 // for safety *pq = old[0 : n-1] return item } // update modifies the priority and value of an Item in the queue. func (pq *PriorityQueue) update(item *Item, value string, priority int) { item.value = value item.priority = priority heap.Fix(pq, item.index) } PriorityQueue 本質上是個 *Item 陣列,其Len/Less/Swap是比較常見的陣列用來sort需要定義的函數,而Push、Pop則是使用數位來插入、的方法。 PriorityQueue 還提供了update方法。 注意由於通常希望優先順序佇列Pop出來的是優先順序最高的元素,所以Less方法是反著寫的。 定義了以上方法以後, PriorityQueue 就具備了使用 container/heap 包的條件。 如下代碼,先從items map出發定義了一個pq陣列,長度為hash的size,並調用 heap.Init 初始化pq; 之後向佇列中增加了一個優先順序為1的元素,並更新該元素的佇列; 最後從佇列中依此Pop,可見元素在Pop時是依照優先順序排序的。 // This example creates a PriorityQueue with some items, adds and manipulates an item, // and then removes the items in priority order. func main() { // Some items and their priorities. items := map[string]int{ \"banana\": 3, \"apple\": 2, \"pear\": 4, } // Create a priority queue, put the items in it, and // establish the priority queue (heap) invariants. pq := make(PriorityQueue, len(items)) i := 0 for value, priority := range items { pq[i] = &Item{ value: value, priority: priority, index: i, } i++ } heap.Init(&pq) // Insert a new item and then modify its priority. item := &Item{ value: \"orange\", priority: 1, } heap.Push(&pq, item) pq.update(item, item.value, 5) // Take the items out; they arrive in decreasing priority order. for pq.Len() > 0 { item := heap.Pop(&pq).(*Item) fmt.Printf(\"%.2d:%s index:%d \\n\", item.priority, item.value, item.index) } } // Output: // 05:orange index:-1 // 04:pear index:-1 // 03:banana index:-1 // 02:apple index:-1 Reference Golang: 详解container/heap © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"template/":{"url":"template/","title":"Template","keywords":"","body":"來源 https://github.com/halfrost/LeetCode-Go/tree/master/template © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"CHANGELOG.html":{"url":"CHANGELOG.html","title":"CHANGELOG","keywords":"","body":"kk2 © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 "},"Content.html":{"url":"Content.html","title":"Content","keywords":"","body":"Kimi's LeetcodeGolang Notes Algorithms A 1 B 2 C 3 A1B2C3: Two Go Routine Print A1B2C3....Z26 Find Target Last Index Find Target Last Index Intersection Of Two Sorted Arrays Using In Place Approach Intersection Of Two Sorted Arrays Using In Place Approach Search Graph Search Graph In Golang Weighted Edit Distance Code Signal Bank Requests Bank Requests Codility Lesson 0001.Iterations Binary Gap Binary Gap 0002.Array Cyclic Rotation Cyclic Rotation Odd Occurrences In Array 0003.Time-Complexity Frog Jmp Perm Missing Elem Tape Equilibrium 0004.Counting-Elements Frog River One Max Counters Missing Integer Perm Check 0005.Prefix-Sums Count Div Genomic Range Query Min Avg Two Slice Passing Cars 0006.Sorting Distinct Max Product Of Three Number Of Disc Intersections Triangle 0007.Stacks-and-Queues Brackets Fish Nesting Stone Wall 0008.Leader Dominator Equi Leader 0009.Maximum-Slice-Problem Max Double Slice Sum Max Profit Max Slice Sum 0010.Prime-And-Composite-Numbers Count Factors Flags Min Perimeter Rectangle Peaks 0011.Sieve-of-Eratosthenes Count Non Divisible Count Semiprimes 0012.Euclidean-Algorithm Chocolates By Numbers Common Prime Divisors 0013.Fibonacci-Numbers Fib Frog 0015.Caterpillar-Method Abs Distinct Geeksfor Geeks Sorting Algorithms 0031.Find-Minimum-Difference-Between-Any-Two-Elements Leetcode 0000.xxxx NUM.LEETCODETITLE 0001.Two-Sum Merging 2 Packages 0001.Two Sum 0002.Add-Two-Numbers 0002.Add Two Numbers 0003.Longest-Substring-Without-Repeating-Characters 0003.Longest Substring Without Repeating Characters 0005.Longest-Palindromic-Substring 0005. Longest Palindromic Substring 0011.Container-With-Most-Water 0011.Container With Most Water 0015.3Sum 0015. 3Sum 0019.Remove-Nth-Node-From-End-of-List 0019. Remove Nth Node From End of List 0020.Valid-Parentheses 0020. Valid Parentheses 0021.Merge-Two-Sorted-Lists 0021. Merge Two Sorted Lists 0027.Remove-Element 0027.Remove Element 0028.Find-the-Index-of-the-First-Occurrence-in-a-String 0028. Find the Index of the First Occurrence in a String 0035.Search-Insert-Position 0035.Search Insert Position 0046.Permutations 0049.Group-Anagrams 0049.Group Anagrams 0053.Maximum-Subarray 0053.Maximum Subarray 0059.Spiral-Matrix-II 0059.Spiral Matrix II 0070.Climbing-Stairs 0070.Climbing Stairs 0072.Edit-Distance 0072. Edit Distance 0074.Search-a-2D-Matrix 74. Search a 2D Matrix 0075.Sort-Colors 0075.Sort Colors 0078.Subsets 0078. Subsets 0088.Merge-Sorted-Array 0088.Merge Sorted Array 0094.Binary-Tree-Inorder-Traversal 0094.Binary Tree Inorder Traversal 0100.Same-Tree 100. Same Tree 0104.Maximum-Depth-of-Binary-Tree 0104.Maximum Depth of Binary Tree 0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal 105. Construct Binary Tree from Preorder and Inorder Traversal 0110.Balanced-Binary-Tree 110. Balanced Binary Tree 0121.Best-Time-to-Buy-and-Sell-Stock 0121.Best Time to Buy and Sell Stock 0125.Valid-Palindrome 0125. Valid Palindrome 0128.Longest-Consecutive-Sequence 128. Longest Consecutive Sequence 0138.Copy-List-with-Random-Pointer 138. Copy List with Random Pointer 0141.Linked-List-Cycle 0141.Linked List Cycle 0142.Linked-List-CycleII 0142.Linked List Cycle II 0143.Reorder-List 143. Reorder List 0167.Two-Sum-II-Input-Array-Is-Sorted 0167.Two Sum II Input Array Is Sorted 0203.Remove-Linked-List-Elements 0203.Remove Linked List Elements 0206.Reverse-Linked-List 206. Reverse Linked List 0209.Minimum-Size-Subarray-Sum 0209. Minimum Size Subarray Sum 0215.Kth-Largest-Element-in-an-Array 0215. Kth Largest Element in an Array 0217.Contains-Duplicate 0226.Invert-Binary-Tree 226. Invert Binary Tree 0238.Product-of-Array-Except-Self 238. Product of Array Except Self 0242.Valid-Anagram 0283.Move-Zeroes 0283. Move Zeroes 0300.Longest-Increasing-Subsequence 0300.Longest Increasing Subsequence 0310.Minimum-Height-Trees 0310.Minimum Height Trees 0322.Coin-Change 0322.Coin Change 0344.Reverse-String 0344.Reverse String 0347.Top-K-Frequent-Elements 347. Top K Frequent Elements 0354.Russian-Doll-Envelopes 0354. Russian Doll Envelope 0380.Insert-Delete-GetRandom-O1 380. Insert Delete GetRandom O(1) 0381.Insert-Delete-GetRandom-O1-Duplicates-allowed 381.Insert Delete GetRandom O(1) Duplicates allowed 0409.Longest-Palindrome 0409. Longest Palindrome 0412.Fizz-Buzz 412. Fizz Buzz 0438.Find-All-Anagrams-in-a-String 0438.Find All Anagrams in a String 0509.Fibonacci-Number 0509.Fibonacci Number 0516.Longest-Palindromic-Subsequence 516. Longest Palindromic Subsequence 0543.Diameter-of-Binary-Tree 0543. Diameter of Binary Tree 0567.Permutation-in-String 0567.Permutation in String 0693.Binary-Number-with-Alternating-Bits 0693.Binary Number with Alternating Bits 0695.Max-Area-of-Island 0695.Max Area of Island 0703.Kth-Largest-Element-in-a-Stream 0703. Kth Largest Element in a Stream 0704.Binary-Search 0704.Binary Search 0721.Accounts-Merge 0721.Accounts Merge 0733.Flood-Fill 0733.Flood Fill 0746.Min-Cost-Climbing-Stairs 746. Min Cost Climbing Stairs 0752.Open-the-Lock 0752.Open the Lock 0875.Koko-Eating-Bananas 875. Koko Eating Bananas 0876.Middle-of-the-Linked-List 0876.Middle of the Linked List 1046.Last-Stone-Weight 1046. Last Stone Weight 1143.Longest-Common-Subsequence 1143.Longest Common Subsequence 1195.Fizz-Buzz-Multithreaded 1195. Fizz Buzz Multithreaded Structures Heap Golang Container Heap Template CHANGELOG Content Tags © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:14:48 "},"tags.html":{"url":"tags.html","title":"Tags","keywords":"","body":"Tags © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42 Algorithm A1B2C3: Two Go Routine Print A1B2C3....Z26 Golang A1B2C3: Two Go Routine Print A1B2C3....Z26 Intersection Of Two Sorted Arrays Using In Place Approach Search Graph In Golang Weighted Edit Distance 0072. Edit Distance A1B2C3 A1B2C3: Two Go Routine Print A1B2C3....Z26 Interview Find Target Last Index Algorithms Find Target Last Index Intersection Of Two Sorted Arrays Using In Place Approach Search Graph In Golang Go Find Target Last Index Bank Requests Binary Gap Cyclic Rotation NUM.LEETCODETITLE 0002.Add Two Numbers 0003.Longest Substring Without Repeating Characters 0005. Longest Palindromic Substring 0011.Container With Most Water 0015. 3Sum 0019. Remove Nth Node From End of List 0020. Valid Parentheses 0021. Merge Two Sorted Lists 0028. Find the Index of the First Occurrence in a String 0049.Group Anagrams 0053.Maximum Subarray 0070.Climbing Stairs 74. Search a 2D Matrix 0078. Subsets 100. Same Tree 0104.Maximum Depth of Binary Tree 105. Construct Binary Tree from Preorder and Inorder Traversal 110. Balanced Binary Tree 0121.Best Time to Buy and Sell Stock 0125. Valid Palindrome 128. Longest Consecutive Sequence 138. Copy List with Random Pointer 143. Reorder List 0167.Two Sum II Input Array Is Sorted 206. Reverse Linked List 0215. Kth Largest Element in an Array 0217.Contains-Duplicate 226. Invert Binary Tree 238. Product of Array Except Self 0242.Valid-Anagram 0283. Move Zeroes 0322.Coin Change 347. Top K Frequent Elements 380. Insert Delete GetRandom O(1) 381.Insert Delete GetRandom O(1) Duplicates allowed 412. Fizz Buzz 0543. Diameter of Binary Tree 0695.Max Area of Island 0703. Kth Largest Element in a Stream 0733.Flood Fill 746. Min Cost Climbing Stairs 875. Koko Eating Bananas 1046. Last Stone Weight 1195. Fizz Buzz Multithreaded Golang Container Heap Easy Find Target Last Index 0001.Two Sum 0020. Valid Parentheses 0027.Remove Element 0028. Find the Index of the First Occurrence in a String 0035.Search Insert Position 0070.Climbing Stairs 0088.Merge Sorted Array 100. Same Tree 0104.Maximum Depth of Binary Tree 110. Balanced Binary Tree 0121.Best Time to Buy and Sell Stock 0125. Valid Palindrome 0141.Linked List Cycle 0203.Remove Linked List Elements 206. Reverse Linked List 0217.Contains-Duplicate 226. Invert Binary Tree 0242.Valid-Anagram 0283. Move Zeroes 0344.Reverse String 0409. Longest Palindrome 412. Fizz Buzz 0509.Fibonacci Number 0543. Diameter of Binary Tree 0703. Kth Largest Element in a Stream 0704.Binary Search 0721.Accounts Merge 0733.Flood Fill 746. Min Cost Climbing Stairs 0876.Middle of the Linked List 1046. Last Stone Weight Find Target Last Index Find Target Last Index Right Bound Find Target Last Index Left Bound Find Target Last Index Intersection Intersection Of Two Sorted Arrays Using In Place Approach Search Graph Search Graph In Golang BFS Search Graph In Golang 226. Invert Binary Tree 0695.Max Area of Island 0733.Flood Fill WeightedEditDistance Weighted Edit Distance Dynamic Programming Weighted Edit Distance 0053.Maximum Subarray 0072. Edit Distance 0300.Longest Increasing Subsequence 0322.Coin Change 0354. Russian Doll Envelope 0509.Fibonacci Number 516. Longest Palindromic Subsequence 1143.Longest Common Subsequence CodeSignal Bank Requests Bank Requests Bank Requests Codility Binary Gap Cyclic Rotation Iterations Binary Gap Painless Binary Gap Cyclic Rotation Bitwise Manipulation Binary Gap Array Cyclic Rotation 0003.Longest Substring Without Repeating Characters 0011.Container With Most Water 0015. 3Sum 0027.Remove Element 0035.Search Insert Position 0053.Maximum Subarray 0059.Spiral Matrix II 74. Search a 2D Matrix 0088.Merge Sorted Array 105. Construct Binary Tree from Preorder and Inorder Traversal 128. Longest Consecutive Sequence 0167.Two Sum II Input Array Is Sorted 0217.Contains-Duplicate 238. Product of Array Except Self 380. Insert Delete GetRandom O(1) 381.Insert Delete GetRandom O(1) Duplicates allowed 875. Koko Eating Bananas Multiple Pointers Cyclic Rotation LeetCode NUM.LEETCODETITLE 0002.Add Two Numbers 0003.Longest Substring Without Repeating Characters 0005. Longest Palindromic Substring 0011.Container With Most Water 0015. 3Sum 0019. Remove Nth Node From End of List 0020. Valid Parentheses 0021. Merge Two Sorted Lists 0028. Find the Index of the First Occurrence in a String 0049.Group Anagrams 0053.Maximum Subarray 0070.Climbing Stairs 74. Search a 2D Matrix 0078. Subsets 100. Same Tree 0104.Maximum Depth of Binary Tree 105. Construct Binary Tree from Preorder and Inorder Traversal 110. Balanced Binary Tree 0121.Best Time to Buy and Sell Stock 0125. Valid Palindrome 128. Longest Consecutive Sequence 138. Copy List with Random Pointer 143. Reorder List 0167.Two Sum II Input Array Is Sorted 206. Reverse Linked List 0215. Kth Largest Element in an Array 0217.Contains-Duplicate 226. Invert Binary Tree 238. Product of Array Except Self 0242.Valid-Anagram 0283. Move Zeroes 0322.Coin Change 347. Top K Frequent Elements 380. Insert Delete GetRandom O(1) 381.Insert Delete GetRandom O(1) Duplicates allowed 412. Fizz Buzz 0543. Diameter of Binary Tree 0695.Max Area of Island 0703. Kth Largest Element in a Stream 0733.Flood Fill 746. Min Cost Climbing Stairs 875. Koko Eating Bananas 1046. Last Stone Weight 1195. Fizz Buzz Multithreaded Easy/Medium/Hard NUM.LEETCODETITLE 0021. Merge Two Sorted Lists LEETCODETITLE NUM.LEETCODETITLE 0104.Maximum Depth of Binary Tree Medium 0002.Add Two Numbers 0003.Longest Substring Without Repeating Characters 0005. Longest Palindromic Substring 0011.Container With Most Water 0015. 3Sum 0019. Remove Nth Node From End of List 0046.Permutations 0049.Group Anagrams 0053.Maximum Subarray 0059.Spiral Matrix II 74. Search a 2D Matrix 0075.Sort Colors 0078. Subsets 0094.Binary Tree Inorder Traversal 105. Construct Binary Tree from Preorder and Inorder Traversal 128. Longest Consecutive Sequence 138. Copy List with Random Pointer 0142.Linked List Cycle II 0167.Two Sum II Input Array Is Sorted 0209. Minimum Size Subarray Sum 0215. Kth Largest Element in an Array 238. Product of Array Except Self 0300.Longest Increasing Subsequence 0310.Minimum Height Trees 0322.Coin Change 347. Top K Frequent Elements 380. Insert Delete GetRandom O(1) 0438.Find All Anagrams in a String 516. Longest Palindromic Subsequence 0567.Permutation in String 0693.Binary Number with Alternating Bits 0695.Max Area of Island 0752.Open the Lock 875. Koko Eating Bananas 1143.Longest Common Subsequence 1195. Fizz Buzz Multithreaded Add Two Numbers 0002.Add Two Numbers Linked List 0002.Add Two Numbers 0019. Remove Nth Node From End of List 0141.Linked List Cycle 0142.Linked List Cycle II 143. Reorder List 0203.Remove Linked List Elements 0876.Middle of the Linked List Math 0002.Add Two Numbers Recursion 0002.Add Two Numbers 143. Reorder List Amazon 0002.Add Two Numbers 0005. Longest Palindromic Substring 0011.Container With Most Water 0019. Remove Nth Node From End of List 74. Search a 2D Matrix 128. Longest Consecutive Sequence 138. Copy List with Random Pointer 143. Reorder List Apple 0002.Add Two Numbers 412. Fizz Buzz Facebook 0002.Add Two Numbers 0005. Longest Palindromic Substring 0011.Container With Most Water 0019. Remove Nth Node From End of List 74. Search a 2D Matrix 138. Copy List with Random Pointer 143. Reorder List 412. Fizz Buzz Microsoft 0002.Add Two Numbers 0005. Longest Palindromic Substring 0011.Container With Most Water 0019. Remove Nth Node From End of List 74. Search a 2D Matrix 128. Longest Consecutive Sequence 138. Copy List with Random Pointer 143. Reorder List 412. Fizz Buzz Bloomberg 0002.Add Two Numbers 0019. Remove Nth Node From End of List 74. Search a 2D Matrix 138. Copy List with Random Pointer 143. Reorder List Longest Substring Without Repeating Characters 0003.Longest Substring Without Repeating Characters Sliding Window 0003.Longest Substring Without Repeating Characters 0209. Minimum Size Subarray Sum 0438.Find All Anagrams in a String 0567.Permutation in String DP 0005. Longest Palindromic Substring 0070.Climbing Stairs 0121.Best Time to Buy and Sell Stock Google 0005. Longest Palindromic Substring 0011.Container With Most Water 0019. Remove Nth Node From End of List 128. Longest Consecutive Sequence 138. Copy List with Random Pointer Adobe 0005. Longest Palindromic Substring 0011.Container With Most Water 128. Longest Consecutive Sequence 143. Reorder List Container With Most Water 0011.Container With Most Water Two Pointers 0011.Container With Most Water 0015. 3Sum 0019. Remove Nth Node From End of List 0028. Find the Index of the First Occurrence in a String 0141.Linked List Cycle 0142.Linked List Cycle II 143. Reorder List 0167.Two Sum II Input Array Is Sorted 0344.Reverse String 0876.Middle of the Linked List Greedy 0011.Container With Most Water 3Sum 0015. 3Sum Sorting 0015. 3Sum 0215. Kth Largest Element in an Array Valid Parentheses 0020. Valid Parentheses Merge Two Sorted Lists 0021. Merge Two Sorted Lists Find the Index of the First Occurrence in a String 0028. Find the Index of the First Occurrence in a String String 0028. Find the Index of the First Occurrence in a String 0409. Longest Palindrome String Matching 0028. Find the Index of the First Occurrence in a String Backtracking 0046.Permutations Group Anagrams 0049.Group Anagrams Blind75 0053.Maximum Subarray 0121.Best Time to Buy and Sell Stock 0217.Contains-Duplicate 238. Product of Array Except Self Climbing Stairs 0070.Climbing Stairs Hard 0072. Edit Distance 0354. Russian Doll Envelope 381.Insert Delete GetRandom O(1) Duplicates allowed Edit Distance 0072. Edit Distance Search a 2D Matrix 74. Search a 2D Matrix Binary Search 74. Search a 2D Matrix 0167.Two Sum II Input Array Is Sorted 0300.Longest Increasing Subsequence 0354. Russian Doll Envelope 0704.Binary Search 875. Koko Eating Bananas Matrix 74. Search a 2D Matrix 0695.Max Area of Island Sort 0075.Sort Colors Subsets 0078. Subsets Stack 0094.Binary Tree Inorder Traversal 143. Reorder List Same Tree 100. Same Tree Tree 100. Same Tree 105. Construct Binary Tree from Preorder and Inorder Traversal Construct Binary Tree from Preorder and Inorder Traversal 105. Construct Binary Tree from Preorder and Inorder Traversal Hash Table 105. Construct Binary Tree from Preorder and Inorder Traversal 128. Longest Consecutive Sequence Divide and Conquer 105. Construct Binary Tree from Preorder and Inorder Traversal Binary Tree 105. Construct Binary Tree from Preorder and Inorder Traversal Balanced Binary Tree 110. Balanced Binary Tree DFS 110. Balanced Binary Tree 0543. Diameter of Binary Tree 0695.Max Area of Island 0733.Flood Fill Slide Windows 0121.Best Time to Buy and Sell Stock Best Time to Buy and Sell Stock 0121.Best Time to Buy and Sell Stock array 0121.Best Time to Buy and Sell Stock Valid Palindrome 0125. Valid Palindrome Longest Consecutive Sequence 128. Longest Consecutive Sequence Union Find 128. Longest Consecutive Sequence 0721.Accounts Merge Spotify 128. Longest Consecutive Sequence Copy List with Random Pointer 138. Copy List with Random Pointer /Medium 143. Reorder List 143. Reorder List 143. Reorder List Two Sum II Input Array Is Sorted 0167.Two Sum II Input Array Is Sorted Reverse Linked List 206. Reverse Linked List Kth Largest Element in an Array 0215. Kth Largest Element in an Array Heap 0215. Kth Largest Element in an Array 0703. Kth Largest Element in a Stream 1046. Last Stone Weight Priority Queue 0215. Kth Largest Element in an Array 0703. Kth Largest Element in a Stream 1046. Last Stone Weight Contains Duplicate 0217.Contains-Duplicate Invert Binary Tree 226. Invert Binary Tree Product of Array Except Self 238. Product of Array Except Self Prefix Sum 238. Product of Array Except Self Valid Anagram 0242.Valid-Anagram Move Zeroes 0283. Move Zeroes Patience Sorting 0300.Longest Increasing Subsequence Breadth First Search 0310.Minimum Height Trees 0752.Open the Lock Coin Change 0322.Coin Change Top K Frequent Elements 347. Top K Frequent Elements heap 347. Top K Frequent Elements Insert Delete GetRandom O(1) 380. Insert Delete GetRandom O(1) Hash 380. Insert Delete GetRandom O(1) 381.Insert Delete GetRandom O(1) Duplicates allowed Insert Delete GetRandom O(1) Duplicates allowed 381.Insert Delete GetRandom O(1) Duplicates allowed Fizz Buzz 412. Fizz Buzz string 412. Fizz Buzz math 412. Fizz Buzz Diameter of Binary Tree 0543. Diameter of Binary Tree Bit Manipulation 0693.Binary Number with Alternating Bits Max Area of Island 0695.Max Area of Island Array & String 0695.Max Area of Island Kth Largest Element in a Stream 0703. Kth Largest Element in a Stream Flood Fill 0733.Flood Fill Min Cost Climbing Stairs 746. Min Cost Climbing Stairs Koko Eating Bananas 875. Koko Eating Bananas Last Stone Weight 1046. Last Stone Weight Fizz Buzz Multithreaded 1195. Fizz Buzz Multithreaded Concurrency 1195. Fizz Buzz Multithreaded container/heap Golang Container Heap "}} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..9e9bfbf26 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,129 @@ + + + https://kimi0230.github.io/LeetcodeGolang/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Algorithms/A1B2C3/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Algorithms/Find_Target_Last_Index/findtargetlastindex.html weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Algorithms/Intersection-of-Two-Sorted-Arrays-using-In-Place-Approach/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Algorithms/SearchGraph/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Algorithms/WeightedEditDistance/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/CodeSignal/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/CodeSignal/Bank-Requests/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0001.Iterations/Binary-Gap/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0002.Array/CyclicRotation/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0002.Array/OddOccurrencesInArray/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0003.Time-Complexity/FrogJmp/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0003.Time-Complexity/PermMissingElem/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0003.Time-Complexity/TapeEquilibrium/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0004.Counting-Elements/FrogRiverOne/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0004.Counting-Elements/MaxCounters/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0004.Counting-Elements/MissingInteger/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0004.Counting-Elements/PermCheck/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0005.Prefix-Sums/CountDiv/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0005.Prefix-Sums/GenomicRangeQuery/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0005.Prefix-Sums/MinAvgTwoSlice/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0005.Prefix-Sums/PassingCars/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0006.Sorting/Distinct/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0006.Sorting/MaxProductOfThree/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0006.Sorting/NumberOfDiscIntersections/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0006.Sorting/Triangle/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0007.Stacks-and-Queues/Brackets/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0007.Stacks-and-Queues/Fish/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0007.Stacks-and-Queues/Nesting/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0007.Stacks-and-Queues/StoneWall/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0008.Leader/Dominator/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0008.Leader/EquiLeader/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0009.Maximum-Slice-Problem/MaxDoubleSliceSum/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0009.Maximum-Slice-Problem/MaxProfit/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0009.Maximum-Slice-Problem/MaxSliceSum/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0010.Prime-And-Composite-Numbers/CountFactors/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0010.Prime-And-Composite-Numbers/Flags/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0010.Prime-And-Composite-Numbers/MinPerimeterRectangle/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0010.Prime-And-Composite-Numbers/Peaks/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountNonDivisible/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0011.Sieve-of-Eratosthenes/CountSemiprimes/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0012.Euclidean-Algorithm/ChocolatesByNumbers/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0012.Euclidean-Algorithm/CommonPrimeDivisors/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0013.Fibonacci-Numbers/FibFrog/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Codility/Lesson/0015.Caterpillar-Method/AbsDistinct/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/GeeksforGeeks/SortingAlgorithms/0031.Find-Minimum-Difference-Between-Any-Two-Elements/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0000.xxxx/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0001.Two-Sum/Merging-2-Packages/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0001.Two-Sum/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0002.Add-Two-Numbers/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0003.Longest-Substring-Without-Repeating-Characters/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0005.Longest-Palindromic-Substring/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0011.Container-With-Most-Water/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0015.3Sum/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0019.Remove-Nth-Node-From-End-of-List/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0020.Valid-Parentheses/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0021.Merge-Two-Sorted-Lists/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0027.Remove-Element/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0028.Find-the-Index-of-the-First-Occurrence-in-a-String/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0035.Search-Insert-Position/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0046.Permutations/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0049.Group-Anagrams/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0053.Maximum-Subarray/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0059.Spiral-Matrix-II/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0070.Climbing-Stairs/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0072.Edit-Distance/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0074.Search-a-2D-Matrix/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0075.Sort-Colors/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0078.Subsets/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0088.Merge-Sorted-Array/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0094.Binary-Tree-Inorder-Traversal/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0100.Same-Tree/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0104.Maximum-Depth-of-Binary-Tree/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0110.Balanced-Binary-Tree/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0121.Best-Time-to-Buy-and-Sell-Stock/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0125.Valid-Palindrome/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0128.Longest-Consecutive-Sequence/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0138.Copy-List-with-Random-Pointer/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0141.Linked-List-Cycle/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0142.Linked-List-CycleII/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0143.Reorder-List/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0167.Two-Sum-II-Input-Array-Is-Sorted/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0203.Remove-Linked-List-Elements/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0206.Reverse-Linked-List/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0209.Minimum-Size-Subarray-Sum/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0215.Kth-Largest-Element-in-an-Array/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0217.Contains-Duplicate/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0238.Product-of-Array-Except-Self/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0242.Valid-Anagram/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0283.Move-Zeroes/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0300.Longest-Increasing-Subsequence/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0310.Minimum-Height-Trees/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0322.Coin-Change/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0344.Reverse-String/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0347.Top-K-Frequent-Elements/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0354.Russian-Doll-Envelopes/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0380.Insert-Delete-GetRandom-O1/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0381.Insert-Delete-GetRandom-O1-Duplicates-allowed/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0409.Longest-Palindrome/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0412.Fizz-Buzz/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0438.Find-All-Anagrams-in-a-String/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0509.Fibonacci-Number/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0516.Longest-Palindromic-Subsequence/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0543.Diameter-of-Binary-Tree/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0567.Permutation-in-String/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0693.Binary-Number-with-Alternating-Bits/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0695.Max-Area-of-Island/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0703.Kth-Largest-Element-in-a-Stream/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0704.Binary-Search/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0721.Accounts-Merge/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0733.Flood-Fill/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0746.Min-Cost-Climbing-Stairs/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0752.Open-the-Lock/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0875.Koko-Eating-Bananas/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/0876.Middle-of-the-Linked-List/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/1046.Last-Stone-Weight/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/1143.Longest-Common-Subsequence/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Leetcode/1195.Fizz-Buzz-Multithreaded/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/structures/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/structures/heap/index.en.html weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/template/ weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/CHANGELOG.html weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/Content.html weekly 0.5 + https://kimi0230.github.io/LeetcodeGolang/tags.html weekly 0.5 + \ No newline at end of file diff --git a/structures/Heap.go b/structures/Heap.go new file mode 100644 index 000000000..2910773b4 --- /dev/null +++ b/structures/Heap.go @@ -0,0 +1,30 @@ +package structures + +// intHeap 实现了最小堆 heap 的接口 +type intHeap []int + +func (h intHeap) Len() int { + return len(h) +} + +func (h intHeap) Less(i, j int) bool { + return h[i] < h[j] +} + +func (h intHeap) Swap(i, j int) { + h[i], h[j] = h[j], h[i] +} + +func (h *intHeap) Push(x interface{}) { + // Push 使用 *h,是因为 + // Push 增加了 h 的长度 + *h = append(*h, x.(int)) +} + +func (h *intHeap) Pop() interface{} { + // Pop 使用 *h ,是因为 + // Pop 减短了 h 的长度 + res := (*h)[len(*h)-1] + *h = (*h)[:len(*h)-1] + return res +} diff --git a/structures/Heap_test.go b/structures/Heap_test.go new file mode 100644 index 000000000..8e6a30c40 --- /dev/null +++ b/structures/Heap_test.go @@ -0,0 +1,30 @@ +package structures + +import ( + "container/heap" + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_intHeap(t *testing.T) { + ast := assert.New(t) + + ih := new(intHeap) + heap.Init(ih) + + heap.Push(ih, 1) + heap.Pop(ih) + + begin, end := 0, 10 + for i := begin; i < end; i++ { + heap.Push(ih, i) + ast.Equal(0, (*ih)[0], "插入 %d 后的最小值却是 %d,ih=%v", i, (*ih)[0], (*ih)) + } + + for i := begin; i < end; i++ { + fmt.Println(i, *ih) + ast.Equal(i, heap.Pop(ih), "Pop 后 ih=%v", (*ih)) + } +} diff --git a/structures/Interval.go b/structures/Interval.go new file mode 100644 index 000000000..bed1432e8 --- /dev/null +++ b/structures/Interval.go @@ -0,0 +1,53 @@ +package structures + +// Interval 提供区间表示 +type Interval struct { + Start int + End int +} + +// Interval2Ints 把 Interval 转换成 整型切片 +func Interval2Ints(i Interval) []int { + return []int{i.Start, i.End} +} + +// IntervalSlice2Intss 把 []Interval 转换成 [][]int +func IntervalSlice2Intss(is []Interval) [][]int { + res := make([][]int, 0, len(is)) + for i := range is { + res = append(res, Interval2Ints(is[i])) + } + return res +} + +// Intss2IntervalSlice 把 [][]int 转换成 []Interval +func Intss2IntervalSlice(intss [][]int) []Interval { + res := make([]Interval, 0, len(intss)) + for _, ints := range intss { + res = append(res, Interval{Start: ints[0], End: ints[1]}) + } + return res +} + +// QuickSort define +func QuickSort(a []Interval, lo, hi int) { + if lo >= hi { + return + } + p := partitionSort(a, lo, hi) + QuickSort(a, lo, p-1) + QuickSort(a, p+1, hi) +} + +func partitionSort(a []Interval, lo, hi int) int { + pivot := a[hi] + i := lo - 1 + for j := lo; j < hi; j++ { + if (a[j].Start < pivot.Start) || (a[j].Start == pivot.Start && a[j].End < pivot.End) { + i++ + a[j], a[i] = a[i], a[j] + } + } + a[i+1], a[hi] = a[hi], a[i+1] + return i + 1 +} diff --git a/structures/Interval_test.go b/structures/Interval_test.go new file mode 100644 index 000000000..dd36e40a5 --- /dev/null +++ b/structures/Interval_test.go @@ -0,0 +1,59 @@ +package structures + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_Interval2Ints(t *testing.T) { + ast := assert.New(t) + + actual := Interval2Ints(Interval{Start: 1, End: 2}) + expected := []int{1, 2} + ast.Equal(expected, actual) +} + +func Test_IntervalSlice2Intss(t *testing.T) { + ast := assert.New(t) + + actual := IntervalSlice2Intss( + []Interval{ + { + Start: 1, + End: 2, + }, + { + Start: 3, + End: 4, + }, + }, + ) + expected := [][]int{ + {1, 2}, + {3, 4}, + } + + ast.Equal(expected, actual) +} +func Test_Intss2IntervalSlice(t *testing.T) { + ast := assert.New(t) + + expected := []Interval{ + { + Start: 1, + End: 2, + }, + { + Start: 3, + End: 4, + }, + } + actual := Intss2IntervalSlice([][]int{ + {1, 2}, + {3, 4}, + }, + ) + + ast.Equal(expected, actual) +} diff --git a/structures/ListNode.go b/structures/ListNode.go new file mode 100644 index 000000000..9f3dc9ed4 --- /dev/null +++ b/structures/ListNode.go @@ -0,0 +1,82 @@ +package structures + +import ( + "fmt" +) + +// ListNode 是链接节点 +// 这个不能复制到*_test.go文件中。会导致Travis失败 +type ListNode struct { + Val int + Next *ListNode +} + +// List2Ints convert List to []int +func List2Ints(head *ListNode) []int { + // 链条深度限制,链条深度超出此限制,会 panic + limit := 100 + + times := 0 + + res := []int{} + for head != nil { + times++ + if times > limit { + msg := fmt.Sprintf("链条深度超过%d,可能出现环状链条。请检查错误,或者放宽 l2s 函数中 limit 的限制。", limit) + panic(msg) + } + + res = append(res, head.Val) + head = head.Next + } + + return res +} + +// Ints2List convert []int to List +func Ints2List(nums []int) *ListNode { + if len(nums) == 0 { + return nil + } + + l := &ListNode{} + t := l + for _, v := range nums { + t.Next = &ListNode{Val: v} + t = t.Next + } + return l.Next +} + +// GetNodeWith returns the first node with val +func (l *ListNode) GetNodeWith(val int) *ListNode { + res := l + for res != nil { + if res.Val == val { + break + } + res = res.Next + } + return res +} + +// Ints2ListWithCycle returns a list whose tail point to pos-indexed node +// head's index is 0 +// if pos = -1, no cycle +func Ints2ListWithCycle(nums []int, pos int) *ListNode { + head := Ints2List(nums) + if pos == -1 { + return head + } + c := head + for pos > 0 { + c = c.Next + pos-- + } + tail := c + for tail.Next != nil { + tail = tail.Next + } + tail.Next = c + return head +} diff --git a/structures/ListNode_test.go b/structures/ListNode_test.go new file mode 100644 index 000000000..ed1df4f61 --- /dev/null +++ b/structures/ListNode_test.go @@ -0,0 +1,68 @@ +package structures + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_l2s(t *testing.T) { + ast := assert.New(t) + ast.Equal([]int{}, List2Ints(nil), "输入nil,没有返回[]int{}") + + one2three := &ListNode{ + Val: 1, + Next: &ListNode{ + Val: 2, + Next: &ListNode{ + Val: 3, + }, + }, + } + ast.Equal([]int{1, 2, 3}, List2Ints(one2three), "没有成功地转换成[]int") + + limit := 100 + overLimitList := Ints2List(make([]int, limit+1)) + ast.Panics(func() { List2Ints(overLimitList) }, "转换深度超过 %d 限制的链条,没有 panic", limit) +} + +func Test_s2l(t *testing.T) { + ast := assert.New(t) + ast.Nil(Ints2List([]int{}), "输入[]int{},没有返回nil") + + ln := Ints2List([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}) + i := 1 + for ln != nil { + ast.Equal(i, ln.Val, "对应的值不对") + ln = ln.Next + i++ + } +} + +func Test_getNodeWith(t *testing.T) { + ast := assert.New(t) + // + ln := Ints2List([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}) + val := 10 + node := &ListNode{ + Val: val, + } + tail := ln + for tail.Next != nil { + tail = tail.Next + } + tail.Next = node + expected := node + actual := ln.GetNodeWith(val) + ast.Equal(expected, actual) +} + +func Test_Ints2ListWithCycle(t *testing.T) { + ast := assert.New(t) + ints := []int{1, 2, 3} + l := Ints2ListWithCycle(ints, -1) + ast.Equal(ints, List2Ints(l)) + + l = Ints2ListWithCycle(ints, 1) + ast.Panics(func() { List2Ints(l) }) +} diff --git a/structures/NestedInteger.go b/structures/NestedInteger.go new file mode 100644 index 000000000..0a944f39c --- /dev/null +++ b/structures/NestedInteger.go @@ -0,0 +1,37 @@ +package structures + +// NestedInteger is the interface that allows for creating nested lists. +// You should not implement it, or speculate about its implementation +type NestedInteger struct { + Num int + Ns []*NestedInteger +} + +// IsInteger Return true if this NestedInteger holds a single integer, rather than a nested list. +func (n NestedInteger) IsInteger() bool { + return n.Ns == nil +} + +// GetInteger Return the single integer that this NestedInteger holds, if it holds a single integer +// The result is undefined if this NestedInteger holds a nested list +// So before calling this method, you should have a check +func (n NestedInteger) GetInteger() int { + return n.Num +} + +// SetInteger Set this NestedInteger to hold a single integer. +func (n *NestedInteger) SetInteger(value int) { + n.Num = value +} + +// Add Set this NestedInteger to hold a nested list and adds a nested integer to it. +func (n *NestedInteger) Add(elem NestedInteger) { + n.Ns = append(n.Ns, &elem) +} + +// GetList Return the nested list that this NestedInteger holds, if it holds a nested list +// The list length is zero if this NestedInteger holds a single integer +// You can access NestedInteger's List element directly if you want to modify it +func (n NestedInteger) GetList() []*NestedInteger { + return n.Ns +} diff --git a/structures/NestedInterger_test.go b/structures/NestedInterger_test.go new file mode 100644 index 000000000..bf1727b5e --- /dev/null +++ b/structures/NestedInterger_test.go @@ -0,0 +1,30 @@ +package structures + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_NestedInteger(t *testing.T) { + ast := assert.New(t) + + n := NestedInteger{} + + ast.True(n.IsInteger()) + + n.SetInteger(1) + ast.Equal(1, n.GetInteger()) + + elem := NestedInteger{Num: 1} + + expected := NestedInteger{ + Num: 1, + Ns: []*NestedInteger{&elem}, + } + n.Add(elem) + + ast.Equal(expected, n) + + ast.Equal(expected.Ns, n.GetList()) +} diff --git a/structures/Point.go b/structures/Point.go new file mode 100644 index 000000000..4e5e4c7e5 --- /dev/null +++ b/structures/Point.go @@ -0,0 +1,27 @@ +package structures + +// Point 定义了一个二维坐标点 +type Point struct { + X, Y int +} + +// Intss2Points 把 [][]int 转换成 []Point +func Intss2Points(points [][]int) []Point { + res := make([]Point, len(points)) + for i, p := range points { + res[i] = Point{ + X: p[0], + Y: p[1], + } + } + return res +} + +// Points2Intss 把 []Point 转换成 [][]int +func Points2Intss(points []Point) [][]int { + res := make([][]int, len(points)) + for i, p := range points { + res[i] = []int{p.X, p.Y} + } + return res +} diff --git a/structures/Point_test.go b/structures/Point_test.go new file mode 100644 index 000000000..48b6dc1ce --- /dev/null +++ b/structures/Point_test.go @@ -0,0 +1,78 @@ +package structures + +import ( + "reflect" + "testing" +) + +func Test_Intss2Points(t *testing.T) { + type args struct { + points [][]int + } + tests := []struct { + name string + args args + want []Point + }{ + { + "测试 [][]int 转换成 []Point ", + args{ + [][]int{ + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {5, 0}, + }, + }, + []Point{ + {X: 1, Y: 0}, + {X: 2, Y: 0}, + {X: 3, Y: 0}, + {X: 4, Y: 0}, + {X: 5, Y: 0}, + }, + }, + } + for _, tt := range tests { + if got := Intss2Points(tt.args.points); !reflect.DeepEqual(got, tt.want) { + t.Errorf("%q. intss2Points() = %v, want %v", tt.name, got, tt.want) + } + } +} + +func Test_Points2Intss(t *testing.T) { + type args struct { + points []Point + } + tests := []struct { + name string + args args + want [][]int + }{ + { + "测试 [][]int 转换成 []Point ", + args{ + []Point{ + {X: 1, Y: 0}, + {X: 2, Y: 0}, + {X: 3, Y: 0}, + {X: 4, Y: 0}, + {X: 5, Y: 0}, + }, + }, + [][]int{ + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {5, 0}, + }, + }, + } + for _, tt := range tests { + if got := Points2Intss(tt.args.points); !reflect.DeepEqual(got, tt.want) { + t.Errorf("%q. Points2Intss() = %v, want %v", tt.name, got, tt.want) + } + } +} diff --git a/structures/PriorityQueue.go b/structures/PriorityQueue.go new file mode 100644 index 000000000..01677463a --- /dev/null +++ b/structures/PriorityQueue.go @@ -0,0 +1,54 @@ +package structures + +// This example demonstrates a priority queue built using the heap interface. + +import ( + "container/heap" +) + +// entry 是 priorityQueue 中的元素 +type entry struct { + key string + priority int + // index 是 entry 在 heap 中的索引号 + // entry 加入 Priority Queue 后, Priority 会变化时,很有用 + // 如果 entry.priority 一直不变的话,可以删除 index + index int +} + +// PQ implements heap.Interface and holds entries. +type PQ []*entry + +func (pq PQ) Len() int { return len(pq) } + +func (pq PQ) Less(i, j int) bool { + return pq[i].priority < pq[j].priority +} + +func (pq PQ) Swap(i, j int) { + pq[i], pq[j] = pq[j], pq[i] + pq[i].index = i + pq[j].index = j +} + +// Push 往 pq 中放 entry +func (pq *PQ) Push(x interface{}) { + temp := x.(*entry) + temp.index = len(*pq) + *pq = append(*pq, temp) +} + +// Pop 从 pq 中取出最优先的 entry +func (pq *PQ) Pop() interface{} { + temp := (*pq)[len(*pq)-1] + temp.index = -1 // for safety + *pq = (*pq)[0 : len(*pq)-1] + return temp +} + +// update modifies the priority and value of an entry in the queue. +func (pq *PQ) update(entry *entry, value string, priority int) { + entry.key = value + entry.priority = priority + heap.Fix(pq, entry.index) +} diff --git a/structures/PriorityQueue_test.go b/structures/PriorityQueue_test.go new file mode 100644 index 000000000..e171464bd --- /dev/null +++ b/structures/PriorityQueue_test.go @@ -0,0 +1,53 @@ +package structures + +import ( + "container/heap" + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_priorityQueue(t *testing.T) { + ast := assert.New(t) + + // Some items and their priorities. + items := map[string]int{ + "banana": 2, "apple": 1, "pear": 3, + } + + // Create a priority queue, put the items in it, and + // establish the priority queue (heap) invariants. + pq := make(PQ, len(items)) + i := 0 + for value, priority := range items { + pq[i] = &entry{ + key: value, + priority: priority, + index: i, + } + i++ + } + heap.Init(&pq) + + // Insert a new item and then modify its priority. + it := &entry{ + key: "orange", + priority: 5, + } + heap.Push(&pq, it) + pq.update(it, it.key, 0) + + // Some items and their priorities. + expected := []string{ + "orange", + "apple", + "banana", + "pear", + } + + // Take the items out; they arrive in decreasing priority order. + for pq.Len() > 0 { + it := heap.Pop(&pq).(*entry) + ast.Equal(expected[it.priority], it.key) + } +} diff --git a/structures/Quadtree/Quadtree.go b/structures/Quadtree/Quadtree.go new file mode 100644 index 000000000..465039170 --- /dev/null +++ b/structures/Quadtree/Quadtree.go @@ -0,0 +1,153 @@ +package quadtree + +// 定義一個二維點的結構 +type Point struct { + X, Y float64 +} + +// 定義一個矩形結構 +type Rect struct { + // 左上 (X1,Y1) ; 右下 (X2,Y2) + X1, Y1, X2, Y2 float64 +} + +// 建立一個新的矩形 +func NewRect(x1, y1, x2, y2 float64) Rect { + return Rect{X1: x1, Y1: y1, X2: x2, Y2: y2} +} + +// 計算矩形的寬度 +func (r Rect) Width() float64 { + return r.X2 - r.X1 +} + +// 計算矩形的高度 +func (r Rect) Height() float64 { + return r.Y2 - r.Y1 +} + +// 檢查矩形是否包含某一點 +func (r Rect) Contains(point Point) bool { + return point.X >= r.X1 && point.X <= r.X2 && point.Y >= r.Y1 && point.Y <= r.Y2 +} + +// 檢查矩形是否與另一個矩形相交 +func (r Rect) Intersects(other Rect) bool { + return r.X1 < other.X2 && r.X2 > other.X1 && r.Y1 < other.Y2 && r.Y2 > other.Y1 +} + +// 定義四叉樹節點結構 +type QuadTreeNode struct { + Bounds Rect + Points []Point + NW, NE, SW, SE *QuadTreeNode +} + +// 創建一個新的四叉樹節點 +func NewQuadTreeNode(bounds Rect) *QuadTreeNode { + return &QuadTreeNode{ + Bounds: bounds, + Points: make([]Point, 0), + } +} + +// 插入一個點到四叉樹 +func (n *QuadTreeNode) Insert(point Point) { + if !n.Bounds.Contains(point) { + return + } + + if len(n.Points) < 4 { + n.Points = append(n.Points, point) + return + } + + if n.NW == nil { + n.Subdivide() + } + + n.NW.Insert(point) + n.NE.Insert(point) + n.SW.Insert(point) + n.SE.Insert(point) +} + +// 將節點分為四個子結點 +// |NW|NE| +// |SW|SE| +func (n *QuadTreeNode) Subdivide() { + xMid := (n.Bounds.X1 + n.Bounds.X2) / 2 + yMid := (n.Bounds.Y1 + n.Bounds.Y2) / 2 + + n.NW = NewQuadTreeNode(Rect{n.Bounds.X1, n.Bounds.Y1, xMid, yMid}) + n.NE = NewQuadTreeNode(Rect{xMid, n.Bounds.Y1, n.Bounds.X2, yMid}) + n.SW = NewQuadTreeNode(Rect{n.Bounds.X1, yMid, xMid, n.Bounds.Y2}) + n.SE = NewQuadTreeNode(Rect{xMid, yMid, n.Bounds.X2, n.Bounds.Y2}) +} + +// 從節點中删除一個點 +func (n *QuadTreeNode) Delete(point Point) { + if !n.Bounds.Contains(point) { + return + } + + for i, p := range n.Points { + if p == point { + // 從節點中刪除點 + n.Points = append(n.Points[:i], n.Points[i+1:]...) + return + } + } + + if n.NW == nil { + return + } + + n.NW.Delete(point) + n.NE.Delete(point) + n.SW.Delete(point) + n.SE.Delete(point) +} + +type QueryContext struct { + Visited map[Point]bool +} + +func NewQueryContext() *QueryContext { + return &QueryContext{Visited: make(map[Point]bool)} +} + +// 查詢一個範圍内的點 +func (n *QuadTreeNode) QueryRange(rangeRect Rect) []Point { + visited := NewQueryContext() + return n.queryRange(rangeRect, visited) +} + +// 查詢一個範圍内的點 +func (n *QuadTreeNode) queryRange(rangeRect Rect, context *QueryContext) []Point { + result := make([]Point, 0) + + // 判斷搜尋範圍(range)是否與當前領域有相交,沒有就直接跳掉,以節省效率 + if !n.Bounds.Intersects(rangeRect) { + return result + } + + // 如果搜尋範圍跟當前領域相交,檢查該領域有多少物體包含在搜尋範圍中,並增加至 result 中 + for _, point := range n.Points { + if rangeRect.Contains(point) && !context.Visited[point] { + result = append(result, point) + context.Visited[point] = true + } + } + + if n.NW == nil { + return result + } + + result = append(result, n.NW.queryRange(rangeRect, context)...) + result = append(result, n.NE.queryRange(rangeRect, context)...) + result = append(result, n.SW.queryRange(rangeRect, context)...) + result = append(result, n.SE.queryRange(rangeRect, context)...) + + return result +} diff --git a/structures/Quadtree/Quadtree_test.go b/structures/Quadtree/Quadtree_test.go new file mode 100644 index 000000000..ad6bbbf17 --- /dev/null +++ b/structures/Quadtree/Quadtree_test.go @@ -0,0 +1,79 @@ +package quadtree + +import ( + "fmt" + "testing" +) + +func TestQuadtree(t *testing.T) { + // 建立一個root node,表示整整個空間 + rootNode := NewQuadTreeNode(Rect{0, 0, 100, 100}) + + // 插入一些點 + points := []Point{ + {20, 20}, + {30, 30}, + {40, 40}, + {50, 50}, + {60, 60}, + } + + for _, point := range points { + rootNode.Insert(point) + } + + // 查詢一個範圍內的點 + queryRect := Rect{25, 25, 55, 55} + result := rootNode.QueryRange(queryRect) + + fmt.Println("Points within the query range:") + for _, point := range result { + fmt.Printf("X: %.2f, Y: %.2f\n", point.X, point.Y) + } +} + +func TestQuadtree2(t *testing.T) { + // 創建一個簡單的四叉樹 + rootBounds := NewRect(0, 0, 10, 10) + quadtree := NewQuadTreeNode(rootBounds) + + // 插入一些點 + points := []Point{ + {1, 1}, + {2, 2}, + {7, 7}, + {8, 8}, + {5, 5}, + } + + for _, point := range points { + quadtree.Insert(point) + } + + // 測試點是否存在 + for _, point := range points { + if !quadtree.Bounds.Contains(point) { + t.Errorf("Point should be inside the bounds") + } + } + + // 測試點是否可以查詢到 + queryRect := NewRect(1, 1, 6, 6) + queryResult := quadtree.QueryRange(queryRect) + fmt.Println(queryResult) + + if len(queryResult) != 3 { + t.Errorf("Query should return 3 points") + } + + // 測試刪除點 + pointToDelete := Point{2, 2} + quadtree.Delete(pointToDelete) + + // 再次查詢 + queryResult = quadtree.QueryRange(queryRect) + + if len(queryResult) != 2 { + t.Errorf("Query should return 2 points after deletion") + } +} diff --git a/structures/Queue.go b/structures/Queue.go new file mode 100644 index 000000000..69431c666 --- /dev/null +++ b/structures/Queue.go @@ -0,0 +1,33 @@ +package structures + +// Queue 是用于存放 int 的队列 +type Queue struct { + nums []int +} + +// NewQueue 返回 *kit.Queue +func NewQueue() *Queue { + return &Queue{nums: []int{}} +} + +// Push 把 n 放入队列 +func (q *Queue) Push(n int) { + q.nums = append(q.nums, n) +} + +// Pop 从 q 中取出最先进入队列的值 +func (q *Queue) Pop() int { + res := q.nums[0] + q.nums = q.nums[1:] + return res +} + +// Len 返回 q 的长度 +func (q *Queue) Len() int { + return len(q.nums) +} + +// IsEmpty 反馈 q 是否为空 +func (q *Queue) IsEmpty() bool { + return q.Len() == 0 +} diff --git a/structures/Queue_test.go b/structures/Queue_test.go new file mode 100644 index 000000000..9b10a39b3 --- /dev/null +++ b/structures/Queue_test.go @@ -0,0 +1,27 @@ +package structures + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_Queue(t *testing.T) { + ast := assert.New(t) + + q := NewQueue() + ast.True(q.IsEmpty(), "检查新建的 q 是否为空") + + start, end := 0, 100 + + for i := start; i < end; i++ { + q.Push(i) + ast.Equal(i-start+1, q.Len(), "Push 后检查 q 的长度。") + } + + for i := start; i < end; i++ { + ast.Equal(i, q.Pop(), "从 q 中 pop 出数来。") + } + + ast.True(q.IsEmpty(), "检查 Pop 完毕后的 q 是否为空") +} diff --git a/structures/Stack.go b/structures/Stack.go new file mode 100644 index 000000000..452c24854 --- /dev/null +++ b/structures/Stack.go @@ -0,0 +1,33 @@ +package structures + +// Stack 是用于存放 int 的 栈 +type Stack struct { + nums []int +} + +// NewStack 返回 *kit.Stack +func NewStack() *Stack { + return &Stack{nums: []int{}} +} + +// Push 把 n 放入 栈 +func (s *Stack) Push(n int) { + s.nums = append(s.nums, n) +} + +// Pop 从 s 中取出最后放入 栈 的值 +func (s *Stack) Pop() int { + res := s.nums[len(s.nums)-1] + s.nums = s.nums[:len(s.nums)-1] + return res +} + +// Len 返回 s 的长度 +func (s *Stack) Len() int { + return len(s.nums) +} + +// IsEmpty 反馈 s 是否为空 +func (s *Stack) IsEmpty() bool { + return s.Len() == 0 +} diff --git a/structures/Stack_test.go b/structures/Stack_test.go new file mode 100644 index 000000000..b0c6c60a0 --- /dev/null +++ b/structures/Stack_test.go @@ -0,0 +1,27 @@ +package structures + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func Test_Stack(t *testing.T) { + ast := assert.New(t) + + s := NewStack() + ast.True(s.IsEmpty(), "检查新建的 s 是否为空") + + start, end := 0, 100 + + for i := start; i < end; i++ { + s.Push(i) + ast.Equal(i-start+1, s.Len(), "Push 后检查 q 的长度。") + } + + for i := end - 1; i >= start; i-- { + ast.Equal(i, s.Pop(), "从 s 中 pop 出数来。") + } + + ast.True(s.IsEmpty(), "检查 Pop 完毕后的 s 是否为空") +} diff --git a/structures/TreeNode.go b/structures/TreeNode.go new file mode 100644 index 000000000..f6edb9c4b --- /dev/null +++ b/structures/TreeNode.go @@ -0,0 +1,233 @@ +package structures + +import ( + "fmt" +) + +// TreeNode is tree's node +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +// NULL 方便添加测试数据 +var NULL = -1 << 63 + +// Ints2TreeNode 利用 []int 生成 *TreeNode +func Ints2TreeNode(ints []int) *TreeNode { + n := len(ints) + if n == 0 { + return nil + } + + root := &TreeNode{ + Val: ints[0], + } + + queue := make([]*TreeNode, 1, n*2) + queue[0] = root + + i := 1 + for i < n { + node := queue[0] + queue = queue[1:] + + if i < n && ints[i] != NULL { + node.Left = &TreeNode{Val: ints[i]} + queue = append(queue, node.Left) + } + i++ + + if i < n && ints[i] != NULL { + node.Right = &TreeNode{Val: ints[i]} + queue = append(queue, node.Right) + } + i++ + } + + return root +} + +// GetTargetNode 返回 Val = target 的 TreeNode +// root 中一定有 node.Val = target +func GetTargetNode(root *TreeNode, target int) *TreeNode { + if root == nil || root.Val == target { + return root + } + + res := GetTargetNode(root.Left, target) + if res != nil { + return res + } + return GetTargetNode(root.Right, target) +} + +func indexOf(val int, nums []int) int { + for i, v := range nums { + if v == val { + return i + } + } + + msg := fmt.Sprintf("%d 不存在于 %v 中", val, nums) + panic(msg) +} + +// PreIn2Tree 把 preorder 和 inorder 切片转换成 二叉树 +func PreIn2Tree(pre, in []int) *TreeNode { + if len(pre) != len(in) { + panic("preIn2Tree 中两个切片的长度不相等") + } + + if len(in) == 0 { + return nil + } + + res := &TreeNode{ + Val: pre[0], + } + + if len(in) == 1 { + return res + } + + idx := indexOf(res.Val, in) + + res.Left = PreIn2Tree(pre[1:idx+1], in[:idx]) + res.Right = PreIn2Tree(pre[idx+1:], in[idx+1:]) + + return res +} + +// InPost2Tree 把 inorder 和 postorder 切片转换成 二叉树 +func InPost2Tree(in, post []int) *TreeNode { + if len(post) != len(in) { + panic("inPost2Tree 中两个切片的长度不相等") + } + + if len(in) == 0 { + return nil + } + + res := &TreeNode{ + Val: post[len(post)-1], + } + + if len(in) == 1 { + return res + } + + idx := indexOf(res.Val, in) + + res.Left = InPost2Tree(in[:idx], post[:idx]) + res.Right = InPost2Tree(in[idx+1:], post[idx:len(post)-1]) + + return res +} + +// Tree2Preorder 把 二叉树 转换成 preorder 的切片 +func Tree2Preorder(root *TreeNode) []int { + if root == nil { + return nil + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + res := []int{root.Val} + res = append(res, Tree2Preorder(root.Left)...) + res = append(res, Tree2Preorder(root.Right)...) + + return res +} + +// Tree2Inorder 把 二叉树转换成 inorder 的切片 +func Tree2Inorder(root *TreeNode) []int { + if root == nil { + return nil + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + res := Tree2Inorder(root.Left) + res = append(res, root.Val) + res = append(res, Tree2Inorder(root.Right)...) + + return res +} + +// Tree2Postorder 把 二叉树 转换成 postorder 的切片 +func Tree2Postorder(root *TreeNode) []int { + if root == nil { + return nil + } + + if root.Left == nil && root.Right == nil { + return []int{root.Val} + } + + res := Tree2Postorder(root.Left) + res = append(res, Tree2Postorder(root.Right)...) + res = append(res, root.Val) + + return res +} + +// Equal return ture if tn == a +func (tn *TreeNode) Equal(a *TreeNode) bool { + if tn == nil && a == nil { + return true + } + + if tn == nil || a == nil || tn.Val != a.Val { + return false + } + + return tn.Left.Equal(a.Left) && tn.Right.Equal(a.Right) +} + +// Tree2ints 把 *TreeNode 按照行还原成 []int +func Tree2ints(tn *TreeNode) []int { + res := make([]int, 0, 1024) + + queue := []*TreeNode{tn} + + for len(queue) > 0 { + size := len(queue) + for i := 0; i < size; i++ { + nd := queue[i] + if nd == nil { + res = append(res, NULL) + } else { + res = append(res, nd.Val) + queue = append(queue, nd.Left, nd.Right) + } + } + queue = queue[size:] + } + + i := len(res) + for i > 0 && res[i-1] == NULL { + i-- + } + + return res[:i] +} + +// T2s convert *TreeNode to []int +func T2s(head *TreeNode, array *[]int) { + fmt.Printf("运行到这里了 head = %v array = %v\n", head, array) + // fmt.Printf("****array = %v\n", array) + // fmt.Printf("****head = %v\n", head.Val) + *array = append(*array, head.Val) + if head.Left != nil { + T2s(head.Left, array) + } + if head.Right != nil { + T2s(head.Right, array) + } +} diff --git a/structures/TreeNode_test.go b/structures/TreeNode_test.go new file mode 100644 index 000000000..dc75bf049 --- /dev/null +++ b/structures/TreeNode_test.go @@ -0,0 +1,166 @@ +package structures + +import ( + "reflect" + "testing" + + "github.com/stretchr/testify/assert" +) + +var ( + // 同一个 TreeNode 的不同表达方式 + // 1 + // / \ + // 2 3 + // / \ / \ + // 4 5 6 7 + LeetCodeOrder = []int{1, 2, 3, 4, 5, 6, 7} + preOrder = []int{1, 2, 4, 5, 3, 6, 7} + inOrder = []int{4, 2, 5, 1, 6, 3, 7} + postOrder = []int{4, 5, 2, 6, 7, 3, 1} +) + +func Test_Ints2TreeNode(t *testing.T) { + ast := assert.New(t) + + expected := PreIn2Tree(preOrder, inOrder) + actual := Ints2TreeNode(LeetCodeOrder) + ast.Equal(expected, actual) + + actual = Ints2TreeNode([]int{}) + ast.Nil(actual) +} + +func Test_preIn2Tree(t *testing.T) { + ast := assert.New(t) + + actual := Tree2Postorder(PreIn2Tree(preOrder, inOrder)) + expected := postOrder + ast.Equal(expected, actual) + + ast.Panics(func() { PreIn2Tree([]int{1}, []int{}) }) + + ast.Nil(PreIn2Tree([]int{}, []int{})) +} + +func Test_inPost2Tree(t *testing.T) { + ast := assert.New(t) + + actual := Tree2Preorder(InPost2Tree(inOrder, postOrder)) + expected := preOrder + ast.Equal(expected, actual) + + ast.Panics(func() { InPost2Tree([]int{1}, []int{}) }) + + ast.Nil(InPost2Tree([]int{}, []int{})) +} + +func Test_tree2Ints(t *testing.T) { + ast := assert.New(t) + root := PreIn2Tree(preOrder, inOrder) + + ast.Equal(preOrder, Tree2Preorder(root)) + ast.Nil(Tree2Preorder(nil)) + + ast.Equal(inOrder, Tree2Inorder(root)) + ast.Nil(Tree2Inorder(nil)) + + ast.Equal(postOrder, Tree2Postorder(root)) + ast.Nil(Tree2Postorder(nil)) +} + +func Test_indexOf(t *testing.T) { + ast := assert.New(t) + + ast.Equal(1, indexOf(1, []int{0, 1, 2, 3})) + + ast.Panics(func() { indexOf(0, []int{1, 2, 3}) }) +} + +func Test_TreeNode_Equal(t *testing.T) { + type args struct { + a *TreeNode + } + tests := []struct { + name string + fields args + args args + want bool + }{ + + { + "相等", + args{Ints2TreeNode([]int{1, 2, 3, 4, 5})}, + args{Ints2TreeNode([]int{1, 2, 3, 4, 5})}, + true, + }, + + { + "不相等", + args{Ints2TreeNode([]int{1, 2, 3, 4, 5})}, + args{Ints2TreeNode([]int{1, 2, 3, NULL, 5})}, + false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tn := tt.fields.a + if got := tn.Equal(tt.args.a); got != tt.want { + t.Errorf("TreeNode.Equal() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_GetTargetNode(t *testing.T) { + ints := []int{3, 5, 1, 6, 2, 0, 8, NULL, NULL, 7, 4} + root := Ints2TreeNode(ints) + + type args struct { + root *TreeNode + target int + } + tests := []struct { + name string + args args + want *TreeNode + }{ + + { + "找到 root.Right.Right", + args{ + root: root, + target: 8, + }, + root.Right.Right, + }, + + { + "找到 root.Left.Left", + args{ + root: root, + target: 6, + }, + root.Left.Left, + }, + + // + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := GetTargetNode(tt.args.root, tt.args.target); !reflect.DeepEqual(got, tt.want) { + t.Errorf("GetTargetNode() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_Tree2ints(t *testing.T) { + ast := assert.New(t) + + root := PreIn2Tree(preOrder, inOrder) + actual := LeetCodeOrder + expected := Tree2ints(root) + ast.Equal(expected, actual) +} diff --git a/structures/heap/FullBT_CompleteBT.jpg b/structures/heap/FullBT_CompleteBT.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b045cb3434cf6486b38af0f025ae988bb7b1bc0a GIT binary patch literal 20036 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 N2<=3}l$Za169DfTv?u@o literal 0 HcmV?d00001 diff --git a/structures/heap/index.en.html b/structures/heap/index.en.html new file mode 100644 index 000000000..605388dd7 --- /dev/null +++ b/structures/heap/index.en.html @@ -0,0 +1,4052 @@ + + + + + + + Golang Container Heap · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              + + + + + + + + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                              Golang : container/heap

                                                                                                                                                                                                                                              Heap是什麼

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Wiki: https://zh.wikipedia.org/wiki/%E5%A0%86%E7%A9%8D

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              堆積(Heap)是電腦科學中的一種特別的完全二元樹。 +若是滿足以下特性,即可稱為堆積:「給定堆積中任意節點P和C,若P是C的母節點,那麼P的值會小於等於(或大於等於)C的值」。 +若母節點的值恆小於等於子節點的值,此堆積稱為最小堆積(min heap); +反之,若母節點的值恆大於等於子節點的值,此堆積稱為最大堆積(max heap)。 +在堆積中最頂端的那一個節點,稱作根節點(root node),根節點本身沒有母節點(parent node)。

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              container/heap 提供的方法

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              heap包為實現了 heap.Interface 的類型提供了堆方法:Init/Push/Pop/Remove/Fix。 container/heap 為最小堆, +即每個節點的值都小於它的子樹的所有元素的值(A heap is a tree with the property that each node is the minimum-valued node in its subtree)。

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              heap:

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              package heap
                                                                                                                                                                                                                                              +// ...
                                                                                                                                                                                                                                              +// Note that Push and Pop in this interface are for package heap's
                                                                                                                                                                                                                                              +// implementation to call. To add and remove things from the heap,
                                                                                                                                                                                                                                              +// use heap.Push and heap.Pop.
                                                                                                                                                                                                                                              +type Interface interface {
                                                                                                                                                                                                                                              +    sort.Interface
                                                                                                                                                                                                                                              +    Push(x any) // add x as element Len()
                                                                                                                                                                                                                                              +    Pop() any   // remove and return element Len() - 1.
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              sort:

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              package sort
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +// An implementation of Interface can be sorted by the routines in this package.
                                                                                                                                                                                                                                              +// The methods refer to elements of the underlying collection by integer index.
                                                                                                                                                                                                                                              +type Interface interface {
                                                                                                                                                                                                                                              +    // Len is the number of elements in the collection.
                                                                                                                                                                                                                                              +    Len() int
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Less reports whether the element with index i
                                                                                                                                                                                                                                              +    // must sort before the element with index j.
                                                                                                                                                                                                                                              +    //
                                                                                                                                                                                                                                              +    // If both Less(i, j) and Less(j, i) are false,
                                                                                                                                                                                                                                              +    // then the elements at index i and j are considered equal.
                                                                                                                                                                                                                                              +    // Sort may place equal elements in any order in the final result,
                                                                                                                                                                                                                                              +    // while Stable preserves the original input order of equal elements.
                                                                                                                                                                                                                                              +    //
                                                                                                                                                                                                                                              +    // Less must describe a transitive ordering:
                                                                                                                                                                                                                                              +    //  - if both Less(i, j) and Less(j, k) are true, then Less(i, k) must be true as well.
                                                                                                                                                                                                                                              +    //  - if both Less(i, j) and Less(j, k) are false, then Less(i, k) must be false as well.
                                                                                                                                                                                                                                              +    //
                                                                                                                                                                                                                                              +    // Note that floating-point comparison (the < operator on float32 or float64 values)
                                                                                                                                                                                                                                              +    // is not a transitive ordering when not-a-number (NaN) values are involved.
                                                                                                                                                                                                                                              +    // See Float64Slice.Less for a correct implementation for floating-point values.
                                                                                                                                                                                                                                              +    Less(i, j int) bool
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Swap swaps the elements with indexes i and j.
                                                                                                                                                                                                                                              +    Swap(i, j int)
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              由於 heap.Interface 包含了 sort.Interface ,所以,目標類型需要包含如下方法:Len/Less/Swap ,Push/Pop。

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              container/heap 可用在哪

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              container/heap包可以用來構造優先順序佇列。

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              https://go.dev/play/p/77zrF3PurO4

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              // This example demonstrates a priority queue built using the heap interface.
                                                                                                                                                                                                                                              +package main
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +import (
                                                                                                                                                                                                                                              +    "container/heap"
                                                                                                                                                                                                                                              +    "fmt"
                                                                                                                                                                                                                                              +)
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +// An Item is something we manage in a priority queue.
                                                                                                                                                                                                                                              +type Item struct {
                                                                                                                                                                                                                                              +    value    string // The value of the item; arbitrary.
                                                                                                                                                                                                                                              +    priority int    // The priority of the item in the queue.
                                                                                                                                                                                                                                              +    // The index is needed by update and is maintained by the heap.Interface methods.
                                                                                                                                                                                                                                              +    index int // The index of the item in the heap.
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +// A PriorityQueue implements heap.Interface and holds Items.
                                                                                                                                                                                                                                              +type PriorityQueue []*Item
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +func (pq PriorityQueue) Len() int { return len(pq) }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +func (pq PriorityQueue) Less(i, j int) bool {
                                                                                                                                                                                                                                              +    // We want Pop to give us the highest, not lowest, priority so we use greater than here.
                                                                                                                                                                                                                                              +    return pq[i].priority > pq[j].priority
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +func (pq PriorityQueue) Swap(i, j int) {
                                                                                                                                                                                                                                              +    pq[i], pq[j] = pq[j], pq[i]
                                                                                                                                                                                                                                              +    pq[i].index = i
                                                                                                                                                                                                                                              +    pq[j].index = j
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +func (pq *PriorityQueue) Push(x interface{}) {
                                                                                                                                                                                                                                              +    n := len(*pq)
                                                                                                                                                                                                                                              +    item := x.(*Item)
                                                                                                                                                                                                                                              +    item.index = n
                                                                                                                                                                                                                                              +    *pq = append(*pq, item)
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +func (pq *PriorityQueue) Pop() interface{} {
                                                                                                                                                                                                                                              +    old := *pq
                                                                                                                                                                                                                                              +    n := len(old)
                                                                                                                                                                                                                                              +    item := old[n-1]
                                                                                                                                                                                                                                              +    item.index = -1 // for safety
                                                                                                                                                                                                                                              +    *pq = old[0 : n-1]
                                                                                                                                                                                                                                              +    return item
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +// update modifies the priority and value of an Item in the queue.
                                                                                                                                                                                                                                              +func (pq *PriorityQueue) update(item *Item, value string, priority int) {
                                                                                                                                                                                                                                              +    item.value = value
                                                                                                                                                                                                                                              +    item.priority = priority
                                                                                                                                                                                                                                              +    heap.Fix(pq, item.index)
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              PriorityQueue 本質上是個 *Item 陣列,其Len/Less/Swap是比較常見的陣列用來sort需要定義的函數,而Push、Pop則是使用數位來插入、的方法。 PriorityQueue 還提供了update方法。 注意由於通常希望優先順序佇列Pop出來的是優先順序最高的元素,所以Less方法是反著寫的。

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              定義了以上方法以後, PriorityQueue 就具備了使用 container/heap 包的條件。

                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              如下代碼,先從items map出發定義了一個pq陣列,長度為hash的size,並調用 heap.Init 初始化pq; +之後向佇列中增加了一個優先順序為1的元素,並更新該元素的佇列; 最後從佇列中依此Pop,可見元素在Pop時是依照優先順序排序的。

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              // This example creates a PriorityQueue with some items, adds and manipulates an item,
                                                                                                                                                                                                                                              +// and then removes the items in priority order.
                                                                                                                                                                                                                                              +func main() {
                                                                                                                                                                                                                                              +    // Some items and their priorities.
                                                                                                                                                                                                                                              +    items := map[string]int{
                                                                                                                                                                                                                                              +        "banana": 3, "apple": 2, "pear": 4,
                                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Create a priority queue, put the items in it, and
                                                                                                                                                                                                                                              +    // establish the priority queue (heap) invariants.
                                                                                                                                                                                                                                              +    pq := make(PriorityQueue, len(items))
                                                                                                                                                                                                                                              +    i := 0
                                                                                                                                                                                                                                              +    for value, priority := range items {
                                                                                                                                                                                                                                              +        pq[i] = &Item{
                                                                                                                                                                                                                                              +            value:    value,
                                                                                                                                                                                                                                              +            priority: priority,
                                                                                                                                                                                                                                              +            index:    i,
                                                                                                                                                                                                                                              +        }
                                                                                                                                                                                                                                              +        i++
                                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                                              +    heap.Init(&pq)
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Insert a new item and then modify its priority.
                                                                                                                                                                                                                                              +    item := &Item{
                                                                                                                                                                                                                                              +        value:    "orange",
                                                                                                                                                                                                                                              +        priority: 1,
                                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                                              +    heap.Push(&pq, item)
                                                                                                                                                                                                                                              +    pq.update(item, item.value, 5)
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +    // Take the items out; they arrive in decreasing priority order.
                                                                                                                                                                                                                                              +    for pq.Len() > 0 {
                                                                                                                                                                                                                                              +        item := heap.Pop(&pq).(*Item)
                                                                                                                                                                                                                                              +        fmt.Printf("%.2d:%s index:%d \n", item.priority, item.value, item.index)
                                                                                                                                                                                                                                              +    }
                                                                                                                                                                                                                                              +}
                                                                                                                                                                                                                                              +// Output:
                                                                                                                                                                                                                                              +// 05:orange index:-1 
                                                                                                                                                                                                                                              +// 04:pear index:-1 
                                                                                                                                                                                                                                              +// 03:banana index:-1 
                                                                                                                                                                                                                                              +// 02:apple index:-1
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +

                                                                                                                                                                                                                                              Reference

                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                              results matching ""

                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                                No results matching ""

                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                + + + + + + + + + + +
                                                                                                                                                                                                                                                + + +
                                                                                                                                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/structures/index.html b/structures/index.html new file mode 100644 index 000000000..eb1f181e1 --- /dev/null +++ b/structures/index.html @@ -0,0 +1,3895 @@ + + + + + + + Structures · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                + + + + + + + + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                                來源

                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                                + + +
                                                                                                                                                                                                                                                + +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                + +

                                                                                                                                                                                                                                                results matching ""

                                                                                                                                                                                                                                                +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  No results matching ""

                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  + + + + + + + + + + +
                                                                                                                                                                                                                                                  + + +
                                                                                                                                                                                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tags.html b/tags.html new file mode 100644 index 000000000..92a75d769 --- /dev/null +++ b/tags.html @@ -0,0 +1,4630 @@ + + + + + + + Tags · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  + + + + + + + + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Tags

                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                  © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42

                                                                                                                                                                                                                                                  +

                                                                                                                                                                                                                                                  Algorithm

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Golang

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  A1B2C3

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Interview

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Algorithms

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Go

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Easy

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Find Target Last Index

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Right Bound

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Left Bound

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Intersection

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Search Graph

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  BFS

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  WeightedEditDistance

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Dynamic Programming

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  CodeSignal

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Bank Requests

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Codility

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Iterations

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Painless

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Bitwise Manipulation

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Array

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Multiple Pointers

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  LeetCode

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Easy/Medium/Hard

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  LEETCODETITLE

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Medium

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Add Two Numbers

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Linked List

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Math

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Recursion

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Amazon

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Apple

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Facebook

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Microsoft

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Bloomberg

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Longest Substring Without Repeating Characters

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Sliding Window

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  DP

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Google

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Adobe

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Container With Most Water

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Two Pointers

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Greedy

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  3Sum

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Sorting

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Valid Parentheses

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Merge Two Sorted Lists

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Find the Index of the First Occurrence in a String

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  String

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  String Matching

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Backtracking

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Group Anagrams

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Blind75

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Climbing Stairs

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Hard

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Edit Distance

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Search a 2D Matrix

                                                                                                                                                                                                                                                  + + + +

                                                                                                                                                                                                                                                  Matrix

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Sort

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Subsets

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Stack

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Same Tree

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Tree

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Construct Binary Tree from Preorder and Inorder Traversal

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Hash Table

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Divide and Conquer

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Binary Tree

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Balanced Binary Tree

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  DFS

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Slide Windows

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Best Time to Buy and Sell Stock

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  array

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Valid Palindrome

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Longest Consecutive Sequence

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Union Find

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Spotify

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Copy List with Random Pointer

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  /Medium

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  143. Reorder List

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Two Sum II Input Array Is Sorted

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Reverse Linked List

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Kth Largest Element in an Array

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Heap

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Priority Queue

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Contains Duplicate

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Invert Binary Tree

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Product of Array Except Self

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Prefix Sum

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Valid Anagram

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Move Zeroes

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Patience Sorting

                                                                                                                                                                                                                                                  + + + +

                                                                                                                                                                                                                                                  Coin Change

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Top K Frequent Elements

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  heap

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Insert Delete GetRandom O(1)

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Hash

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Insert Delete GetRandom O(1) Duplicates allowed

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Fizz Buzz

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  string

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  math

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Diameter of Binary Tree

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Bit Manipulation

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Max Area of Island

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Array & String

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Kth Largest Element in a Stream

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Flood Fill

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Min Cost Climbing Stairs

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Koko Eating Bananas

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Last Stone Weight

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Fizz Buzz Multithreaded

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  Concurrency

                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  container/heap

                                                                                                                                                                                                                                                  + + + +
                                                                                                                                                                                                                                                  + +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                  + +

                                                                                                                                                                                                                                                  results matching ""

                                                                                                                                                                                                                                                  +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                                    No results matching ""

                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    + + + + + + + + + + +
                                                                                                                                                                                                                                                    + + +
                                                                                                                                                                                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template/CLRUCache.go b/template/CLRUCache.go new file mode 100644 index 000000000..03b5115c6 --- /dev/null +++ b/template/CLRUCache.go @@ -0,0 +1,176 @@ +package template + +import ( + "container/list" + "hash/fnv" + "sync" +) + +type command int + +const ( + // MoveToFront define + MoveToFront command = iota + // PushFront define + PushFront + // Delete define + Delete +) + +type clear struct { + done chan struct{} +} + +// CLRUCache define: High Concurrency LRUCache +type CLRUCache struct { + sync.RWMutex + cap int + list *list.List + buckets []*bucket + bucketMask uint32 + deletePairs chan *list.Element + movePairs chan *list.Element + control chan interface{} +} + +// Pair define +type Pair struct { + key string + value interface{} + cmd command +} + +// New define +func New(capacity int) *CLRUCache { + c := &CLRUCache{ + cap: capacity, + list: list.New(), + bucketMask: uint32(1024) - 1, + buckets: make([]*bucket, 1024), + } + for i := 0; i < 1024; i++ { + c.buckets[i] = &bucket{ + keys: make(map[string]*list.Element), + } + } + c.restart() + return c +} + +// Get define +func (c *CLRUCache) Get(key string) interface{} { + el := c.bucket(key).get(key) + if el == nil { + return nil + } + c.move(el) + return el.Value.(Pair).value +} + +// Put define +func (c *CLRUCache) Put(key string, value interface{}) { + el, exist := c.bucket(key).set(key, value) + if exist != nil { + c.deletePairs <- exist + } + c.move(el) +} + +func (c *CLRUCache) move(el *list.Element) { + select { + case c.movePairs <- el: + default: + } +} + +// Delete define +func (c *CLRUCache) Delete(key string) bool { + el := c.bucket(key).delete(key) + if el != nil { + c.deletePairs <- el + return true + } + return false +} + +// Clear define +func (c *CLRUCache) Clear() { + done := make(chan struct{}) + c.control <- clear{done: done} + <-done +} + +// Count define +func (c *CLRUCache) Count() int { + count := 0 + for _, b := range c.buckets { + count += b.pairCount() + } + return count +} + +func (c *CLRUCache) bucket(key string) *bucket { + h := fnv.New32a() + h.Write([]byte(key)) + return c.buckets[h.Sum32()&c.bucketMask] +} + +func (c *CLRUCache) stop() { + close(c.movePairs) + <-c.control +} + +func (c *CLRUCache) restart() { + c.deletePairs = make(chan *list.Element, 128) + c.movePairs = make(chan *list.Element, 128) + c.control = make(chan interface{}) + go c.worker() +} + +func (c *CLRUCache) worker() { + defer close(c.control) + for { + select { + case el, ok := <-c.movePairs: + if ok == false { + goto clean + } + if c.doMove(el) && c.list.Len() > c.cap { + el := c.list.Back() + c.list.Remove(el) + c.bucket(el.Value.(Pair).key).delete(el.Value.(Pair).key) + } + case el := <-c.deletePairs: + c.list.Remove(el) + case control := <-c.control: + switch msg := control.(type) { + case clear: + for _, bucket := range c.buckets { + bucket.clear() + } + c.list = list.New() + msg.done <- struct{}{} + } + } + } +clean: + for { + select { + case el := <-c.deletePairs: + c.list.Remove(el) + default: + close(c.deletePairs) + return + } + } +} + +func (c *CLRUCache) doMove(el *list.Element) bool { + if el.Value.(Pair).cmd == MoveToFront { + c.list.MoveToFront(el) + return false + } + newel := c.list.PushFront(el.Value.(Pair)) + c.bucket(el.Value.(Pair).key).update(el.Value.(Pair).key, newel) + return true +} diff --git a/template/CLRUCache_test.go b/template/CLRUCache_test.go new file mode 100644 index 000000000..fa1722c54 --- /dev/null +++ b/template/CLRUCache_test.go @@ -0,0 +1,130 @@ +package template + +import ( + "container/list" + "math/rand" + "strconv" + "sync" + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func Test_CLRUCache(t *testing.T) { + obj := New(2) + time.Sleep(150 * time.Millisecond) + obj.Put("1", 1) + time.Sleep(150 * time.Millisecond) + obj.Put("2", 2) + time.Sleep(150 * time.Millisecond) + param1 := obj.Get("1") + time.Sleep(150 * time.Millisecond) + assert.Equal(t, 1, param1) + obj.Put("3", 3) + time.Sleep(150 * time.Millisecond) + param1 = obj.Get("2") + assert.Equal(t, nil, param1) + obj.Put("4", 4) + time.Sleep(150 * time.Millisecond) + param1 = obj.Get("1") + time.Sleep(150 * time.Millisecond) + assert.Equal(t, nil, param1) + param1 = obj.Get("3") + time.Sleep(150 * time.Millisecond) + assert.Equal(t, 3, param1) + param1 = obj.Get("4") + time.Sleep(150 * time.Millisecond) + assert.Equal(t, 4, param1) +} + +func MList2Ints(lru *CLRUCache) [][]interface{} { + res := [][]interface{}{} + for head := lru.list.Front(); head != nil; head = head.Next() { + tmp := []interface{}{head.Value.(Pair).key, head.Value.(Pair).value} + res = append(res, tmp) + } + return res +} + +func BenchmarkGetAndPut1(b *testing.B) { + b.ResetTimer() + obj := New(128) + wg := sync.WaitGroup{} + wg.Add(b.N * 2) + for i := 0; i < b.N; i++ { + go func() { + defer wg.Done() + obj.Get(strconv.Itoa(rand.Intn(200))) + }() + go func() { + defer wg.Done() + obj.Put(strconv.Itoa(rand.Intn(200)), strconv.Itoa(rand.Intn(200))) + }() + } + wg.Wait() +} + +type Cache struct { + sync.RWMutex + Cap int + Keys map[string]*list.Element + List *list.List +} + +type pair struct { + K, V string +} + +func NewLRUCache(capacity int) Cache { + return Cache{ + Cap: capacity, + Keys: make(map[string]*list.Element), + List: list.New(), + } +} + +func (c *Cache) Get(key string) interface{} { + c.Lock() + if el, ok := c.Keys[key]; ok { + c.List.MoveToFront(el) + return el.Value.(pair).V + } + c.Unlock() + return nil +} + +func (c *Cache) Put(key string, value string) { + c.Lock() + if el, ok := c.Keys[key]; ok { + el.Value = pair{K: key, V: value} + c.List.MoveToFront(el) + } else { + el := c.List.PushFront(pair{K: key, V: value}) + c.Keys[key] = el + } + if c.List.Len() > c.Cap { + el := c.List.Back() + c.List.Remove(el) + delete(c.Keys, el.Value.(pair).K) + } + c.Unlock() +} + +func BenchmarkGetAndPut2(b *testing.B) { + b.ResetTimer() + obj := NewLRUCache(128) + wg := sync.WaitGroup{} + wg.Add(b.N * 2) + for i := 0; i < b.N; i++ { + go func() { + defer wg.Done() + obj.Get(strconv.Itoa(rand.Intn(200))) + }() + go func() { + defer wg.Done() + obj.Put(strconv.Itoa(rand.Intn(200)), strconv.Itoa(rand.Intn(200))) + }() + } + wg.Wait() +} diff --git a/template/LFUCache.go b/template/LFUCache.go new file mode 100644 index 000000000..74a8a9a9d --- /dev/null +++ b/template/LFUCache.go @@ -0,0 +1,196 @@ +package template + +import "container/list" + +// LFUCache define +type LFUCache struct { + nodes map[int]*list.Element + lists map[int]*list.List + capacity int + min int +} + +type node struct { + key int + value int + frequency int +} + +// Constructor define +func Constructor(capacity int) LFUCache { + return LFUCache{nodes: make(map[int]*list.Element), + lists: make(map[int]*list.List), + capacity: capacity, + min: 0, + } +} + +// Get define +func (lfuCache *LFUCache) Get(key int) int { + value, ok := lfuCache.nodes[key] + if !ok { + return -1 + } + currentNode := value.Value.(*node) + lfuCache.lists[currentNode.frequency].Remove(value) + currentNode.frequency++ + if _, ok := lfuCache.lists[currentNode.frequency]; !ok { + lfuCache.lists[currentNode.frequency] = list.New() + } + newList := lfuCache.lists[currentNode.frequency] + newNode := newList.PushFront(currentNode) + lfuCache.nodes[key] = newNode + if currentNode.frequency-1 == lfuCache.min && lfuCache.lists[currentNode.frequency-1].Len() == 0 { + lfuCache.min++ + } + return currentNode.value +} + +// Put define +func (lfuCache *LFUCache) Put(key int, value int) { + if lfuCache.capacity == 0 { + return + } + if currentValue, ok := lfuCache.nodes[key]; ok { + currentNode := currentValue.Value.(*node) + currentNode.value = value + lfuCache.Get(key) + return + } + if lfuCache.capacity == len(lfuCache.nodes) { + currentList := lfuCache.lists[lfuCache.min] + backNode := currentList.Back() + delete(lfuCache.nodes, backNode.Value.(*node).key) + currentList.Remove(backNode) + } + lfuCache.min = 1 + currentNode := &node{ + key: key, + value: value, + frequency: 1, + } + if _, ok := lfuCache.lists[1]; !ok { + lfuCache.lists[1] = list.New() + } + newList := lfuCache.lists[1] + newNode := newList.PushFront(currentNode) + lfuCache.nodes[key] = newNode +} + +/** + * Your LFUCache object will be instantiated and called as such: + * obj := Constructor(capacity); + * param_1 := obj.Get(key); + * obj.Put(key,value); + */ + +// Index Priority Queue +// import "container/heap" + +// type LFUCache struct { +// capacity int +// pq PriorityQueue +// hash map[int]*Item +// counter int +// } + +// func Constructor(capacity int) LFUCache { +// lfu := LFUCache{ +// pq: PriorityQueue{}, +// hash: make(map[int]*Item, capacity), +// capacity: capacity, +// } +// return lfu +// } + +// func (this *LFUCache) Get(key int) int { +// if this.capacity == 0 { +// return -1 +// } +// if item, ok := this.hash[key]; ok { +// this.counter++ +// this.pq.update(item, item.value, item.frequency+1, this.counter) +// return item.value +// } +// return -1 +// } + +// func (this *LFUCache) Put(key int, value int) { +// if this.capacity == 0 { +// return +// } +// // fmt.Printf("Put %d\n", key) +// this.counter++ +// // 如果存在,增加 frequency,再调整堆 +// if item, ok := this.hash[key]; ok { +// this.pq.update(item, value, item.frequency+1, this.counter) +// return +// } +// // 如果不存在且缓存满了,需要删除。在 hashmap 和 pq 中删除。 +// if len(this.pq) == this.capacity { +// item := heap.Pop(&this.pq).(*Item) +// delete(this.hash, item.key) +// } +// // 新建结点,在 hashmap 和 pq 中添加。 +// item := &Item{ +// value: value, +// key: key, +// count: this.counter, +// } +// heap.Push(&this.pq, item) +// this.hash[key] = item +// } + +// // An Item is something we manage in a priority queue. +// type Item struct { +// value int // The value of the item; arbitrary. +// key int +// frequency int // The priority of the item in the queue. +// count int // use for evicting the oldest element +// // The index is needed by update and is maintained by the heap.Interface methods. +// index int // The index of the item in the heap. +// } + +// // A PriorityQueue implements heap.Interface and holds Items. +// type PriorityQueue []*Item + +// func (pq PriorityQueue) Len() int { return len(pq) } + +// func (pq PriorityQueue) Less(i, j int) bool { +// // We want Pop to give us the highest, not lowest, priority so we use greater than here. +// if pq[i].frequency == pq[j].frequency { +// return pq[i].count < pq[j].count +// } +// return pq[i].frequency < pq[j].frequency +// } + +// func (pq PriorityQueue) Swap(i, j int) { +// pq[i], pq[j] = pq[j], pq[i] +// pq[i].index = i +// pq[j].index = j +// } + +// func (pq *PriorityQueue) Push(x interface{}) { +// n := len(*pq) +// item := x.(*Item) +// item.index = n +// *pq = append(*pq, item) +// } + +// func (pq *PriorityQueue) Pop() interface{} { +// old := *pq +// n := len(old) +// item := old[n-1] +// old[n-1] = nil // avoid memory leak +// item.index = -1 // for safety +// *pq = old[0 : n-1] +// return item +// } + +// // update modifies the priority and value of an Item in the queue. +// func (pq *PriorityQueue) update(item *Item, value int, frequency int, count int) { +// item.value = value +// item.count = count +// item.frequency = frequency +// heap.Fix(pq, item.index) +// } diff --git a/template/LRUCache.go b/template/LRUCache.go new file mode 100644 index 000000000..581f42a8c --- /dev/null +++ b/template/LRUCache.go @@ -0,0 +1,139 @@ +package template + +// LRUCache define +type LRUCache struct { + head, tail *Node + keys map[int]*Node + capacity int +} + +// Node define +type Node struct { + key, val int + prev, next *Node +} + +// ConstructorLRU define +func ConstructorLRU(capacity int) LRUCache { + return LRUCache{keys: make(map[int]*Node), capacity: capacity} +} + +// Get define +func (lruCache *LRUCache) Get(key int) int { + if node, ok := lruCache.keys[key]; ok { + lruCache.Remove(node) + lruCache.Add(node) + return node.val + } + return -1 +} + +// Put define +func (lruCache *LRUCache) Put(key int, value int) { + node, ok := lruCache.keys[key] + if ok { + node.val = value + lruCache.Remove(node) + lruCache.Add(node) + return + } + node = &Node{key: key, val: value} + lruCache.keys[key] = node + lruCache.Add(node) + if len(lruCache.keys) > lruCache.capacity { + delete(lruCache.keys, lruCache.tail.key) + lruCache.Remove(lruCache.tail) + } +} + +// Add define +func (lruCache *LRUCache) Add(node *Node) { + node.prev = nil + node.next = lruCache.head + if lruCache.head != nil { + lruCache.head.prev = node + } + lruCache.head = node + if lruCache.tail == nil { + lruCache.tail = node + lruCache.tail.next = nil + } +} + +// Remove define +func (lruCache *LRUCache) Remove(node *Node) { + if node == lruCache.head { + lruCache.head = node.next + if node.next != nil { + node.next.prev = nil + } + node.next = nil + return + } + if node == lruCache.tail { + lruCache.tail = node.prev + node.prev.next = nil + node.prev = nil + return + } + node.prev.next = node.next + node.next.prev = node.prev +} + +/** + * Your LRUCache object will be instantiated and called as such: + * obj := Constructor(capacity); + * param_1 := obj.Get(key); + * obj.Put(key,value); + */ + +// 22% +// import "container/list" + +// type LRUCache struct { +// Cap int +// Keys map[int]*list.Element +// List *list.List +// } + +// type pair struct { +// K, V int +// } + +// func Constructor(capacity int) LRUCache { +// return LRUCache{ +// Cap: capacity, +// Keys: make(map[int]*list.Element), +// List: list.New(), +// } +// } + +// func (c *LRUCache) Get(key int) int { +// if el, ok := c.Keys[key]; ok { +// c.List.MoveToFront(el) +// return el.Value.(pair).V +// } +// return -1 +// } + +// func (c *LRUCache) Put(key int, value int) { +// if el, ok := c.Keys[key]; ok { +// el.Value = pair{K: key, V: value} +// c.List.MoveToFront(el) +// } else { +// el := c.List.PushFront(pair{K: key, V: value}) +// c.Keys[key] = el +// } +// if c.List.Len() > c.Cap { +// el := c.List.Back() +// c.List.Remove(el) +// delete(c.Keys, el.Value.(pair).K) +// } +// } + +/** + * Your LRUCache object will be instantiated and called as such: + * obj := Constructor(capacity); + * param_1 := obj.Get(key); + * obj.Put(key,value); + */ diff --git a/template/SegmentTree.go b/template/SegmentTree.go new file mode 100644 index 000000000..e28db284f --- /dev/null +++ b/template/SegmentTree.go @@ -0,0 +1,265 @@ +package template + +// SegmentTree define +type SegmentTree struct { + data, tree, lazy []int + left, right int + merge func(i, j int) int +} + +// Init define +func (st *SegmentTree) Init(nums []int, oper func(i, j int) int) { + st.merge = oper + data, tree, lazy := make([]int, len(nums)), make([]int, 4*len(nums)), make([]int, 4*len(nums)) + for i := 0; i < len(nums); i++ { + data[i] = nums[i] + } + st.data, st.tree, st.lazy = data, tree, lazy + if len(nums) > 0 { + st.buildSegmentTree(0, 0, len(nums)-1) + } +} + +// 在 treeIndex 的位置创建 [left....right] 区间的线段树 +func (st *SegmentTree) buildSegmentTree(treeIndex, left, right int) { + if left == right { + st.tree[treeIndex] = st.data[left] + return + } + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + st.buildSegmentTree(leftTreeIndex, left, midTreeIndex) + st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right) + st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex]) +} + +func (st *SegmentTree) leftChild(index int) int { + return 2*index + 1 +} + +func (st *SegmentTree) rightChild(index int) int { + return 2*index + 2 +} + +// 查询 [left....right] 区间内的值 + +// Query define +func (st *SegmentTree) Query(left, right int) int { + if len(st.data) > 0 { + return st.queryInTree(0, 0, len(st.data)-1, left, right) + } + return 0 +} + +// 在以 treeIndex 为根的线段树中 [left...right] 的范围里,搜索区间 [queryLeft...queryRight] 的值 +func (st *SegmentTree) queryInTree(treeIndex, left, right, queryLeft, queryRight int) int { + if left == queryLeft && right == queryRight { + return st.tree[treeIndex] + } + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + if queryLeft > midTreeIndex { + return st.queryInTree(rightTreeIndex, midTreeIndex+1, right, queryLeft, queryRight) + } else if queryRight <= midTreeIndex { + return st.queryInTree(leftTreeIndex, left, midTreeIndex, queryLeft, queryRight) + } + return st.merge(st.queryInTree(leftTreeIndex, left, midTreeIndex, queryLeft, midTreeIndex), + st.queryInTree(rightTreeIndex, midTreeIndex+1, right, midTreeIndex+1, queryRight)) +} + +// 查询 [left....right] 区间内的值 + +// QueryLazy define +func (st *SegmentTree) QueryLazy(left, right int) int { + if len(st.data) > 0 { + return st.queryLazyInTree(0, 0, len(st.data)-1, left, right) + } + return 0 +} + +func (st *SegmentTree) queryLazyInTree(treeIndex, left, right, queryLeft, queryRight int) int { + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + if left > queryRight || right < queryLeft { // segment completely outside range + return 0 // represents a null node + } + if st.lazy[treeIndex] != 0 { // this node is lazy + for i := 0; i < right-left+1; i++ { + st.tree[treeIndex] = st.merge(st.tree[treeIndex], st.lazy[treeIndex]) + // st.tree[treeIndex] += (right - left + 1) * st.lazy[treeIndex] // normalize current node by removing lazinesss + } + if left != right { // update lazy[] for children nodes + st.lazy[leftTreeIndex] = st.merge(st.lazy[leftTreeIndex], st.lazy[treeIndex]) + st.lazy[rightTreeIndex] = st.merge(st.lazy[rightTreeIndex], st.lazy[treeIndex]) + // st.lazy[leftTreeIndex] += st.lazy[treeIndex] + // st.lazy[rightTreeIndex] += st.lazy[treeIndex] + } + st.lazy[treeIndex] = 0 // current node processed. No longer lazy + } + if queryLeft <= left && queryRight >= right { // segment completely inside range + return st.tree[treeIndex] + } + if queryLeft > midTreeIndex { + return st.queryLazyInTree(rightTreeIndex, midTreeIndex+1, right, queryLeft, queryRight) + } else if queryRight <= midTreeIndex { + return st.queryLazyInTree(leftTreeIndex, left, midTreeIndex, queryLeft, queryRight) + } + // merge query results + return st.merge(st.queryLazyInTree(leftTreeIndex, left, midTreeIndex, queryLeft, midTreeIndex), + st.queryLazyInTree(rightTreeIndex, midTreeIndex+1, right, midTreeIndex+1, queryRight)) +} + +// 更新 index 位置的值 + +// Update define +func (st *SegmentTree) Update(index, val int) { + if len(st.data) > 0 { + st.updateInTree(0, 0, len(st.data)-1, index, val) + } +} + +// 以 treeIndex 为根,更新 index 位置上的值为 val +func (st *SegmentTree) updateInTree(treeIndex, left, right, index, val int) { + if left == right { + st.tree[treeIndex] = val + return + } + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + if index > midTreeIndex { + st.updateInTree(rightTreeIndex, midTreeIndex+1, right, index, val) + } else { + st.updateInTree(leftTreeIndex, left, midTreeIndex, index, val) + } + st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex]) +} + +// 更新 [updateLeft....updateRight] 位置的值 +// 注意这里的更新值是在原来值的基础上增加或者减少,而不是把这个区间内的值都赋值为 x,区间更新和单点更新不同 +// 这里的区间更新关注的是变化,单点更新关注的是定值 +// 当然区间更新也可以都更新成定值,如果只区间更新成定值,那么 lazy 更新策略需要变化,merge 策略也需要变化,这里暂不详细讨论 + +// UpdateLazy define +func (st *SegmentTree) UpdateLazy(updateLeft, updateRight, val int) { + if len(st.data) > 0 { + st.updateLazyInTree(0, 0, len(st.data)-1, updateLeft, updateRight, val) + } +} + +func (st *SegmentTree) updateLazyInTree(treeIndex, left, right, updateLeft, updateRight, val int) { + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + if st.lazy[treeIndex] != 0 { // this node is lazy + for i := 0; i < right-left+1; i++ { + st.tree[treeIndex] = st.merge(st.tree[treeIndex], st.lazy[treeIndex]) + //st.tree[treeIndex] += (right - left + 1) * st.lazy[treeIndex] // normalize current node by removing laziness + } + if left != right { // update lazy[] for children nodes + st.lazy[leftTreeIndex] = st.merge(st.lazy[leftTreeIndex], st.lazy[treeIndex]) + st.lazy[rightTreeIndex] = st.merge(st.lazy[rightTreeIndex], st.lazy[treeIndex]) + // st.lazy[leftTreeIndex] += st.lazy[treeIndex] + // st.lazy[rightTreeIndex] += st.lazy[treeIndex] + } + st.lazy[treeIndex] = 0 // current node processed. No longer lazy + } + + if left > right || left > updateRight || right < updateLeft { + return // out of range. escape. + } + + if updateLeft <= left && right <= updateRight { // segment is fully within update range + for i := 0; i < right-left+1; i++ { + st.tree[treeIndex] = st.merge(st.tree[treeIndex], val) + //st.tree[treeIndex] += (right - left + 1) * val // update segment + } + if left != right { // update lazy[] for children + st.lazy[leftTreeIndex] = st.merge(st.lazy[leftTreeIndex], val) + st.lazy[rightTreeIndex] = st.merge(st.lazy[rightTreeIndex], val) + // st.lazy[leftTreeIndex] += val + // st.lazy[rightTreeIndex] += val + } + return + } + st.updateLazyInTree(leftTreeIndex, left, midTreeIndex, updateLeft, updateRight, val) + st.updateLazyInTree(rightTreeIndex, midTreeIndex+1, right, updateLeft, updateRight, val) + // merge updates + st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex]) +} + +// SegmentCountTree define +type SegmentCountTree struct { + data, tree []int + left, right int + merge func(i, j int) int +} + +// Init define +func (st *SegmentCountTree) Init(nums []int, oper func(i, j int) int) { + st.merge = oper + + data, tree := make([]int, len(nums)), make([]int, 4*len(nums)) + for i := 0; i < len(nums); i++ { + data[i] = nums[i] + } + st.data, st.tree = data, tree +} + +// 在 treeIndex 的位置创建 [left....right] 区间的线段树 +func (st *SegmentCountTree) buildSegmentTree(treeIndex, left, right int) { + if left == right { + st.tree[treeIndex] = st.data[left] + return + } + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + st.buildSegmentTree(leftTreeIndex, left, midTreeIndex) + st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right) + st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex]) +} + +func (st *SegmentCountTree) leftChild(index int) int { + return 2*index + 1 +} + +func (st *SegmentCountTree) rightChild(index int) int { + return 2*index + 2 +} + +// 查询 [left....right] 区间内的值 + +// Query define +func (st *SegmentCountTree) Query(left, right int) int { + if len(st.data) > 0 { + return st.queryInTree(0, 0, len(st.data)-1, left, right) + } + return 0 +} + +// 在以 treeIndex 为根的线段树中 [left...right] 的范围里,搜索区间 [queryLeft...queryRight] 的值,值是计数值 +func (st *SegmentCountTree) queryInTree(treeIndex, left, right, queryLeft, queryRight int) int { + if queryRight < st.data[left] || queryLeft > st.data[right] { + return 0 + } + if queryLeft <= st.data[left] && queryRight >= st.data[right] || left == right { + return st.tree[treeIndex] + } + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + return st.queryInTree(rightTreeIndex, midTreeIndex+1, right, queryLeft, queryRight) + + st.queryInTree(leftTreeIndex, left, midTreeIndex, queryLeft, queryRight) +} + +// 更新计数 + +// UpdateCount define +func (st *SegmentCountTree) UpdateCount(val int) { + if len(st.data) > 0 { + st.updateCountInTree(0, 0, len(st.data)-1, val) + } +} + +// 以 treeIndex 为根,更新 [left...right] 区间内的计数 +func (st *SegmentCountTree) updateCountInTree(treeIndex, left, right, val int) { + if val >= st.data[left] && val <= st.data[right] { + st.tree[treeIndex]++ + if left == right { + return + } + midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex) + st.updateCountInTree(rightTreeIndex, midTreeIndex+1, right, val) + st.updateCountInTree(leftTreeIndex, left, midTreeIndex, val) + } +} diff --git a/template/UnionFind.go b/template/UnionFind.go new file mode 100644 index 000000000..a5995a5af --- /dev/null +++ b/template/UnionFind.go @@ -0,0 +1,134 @@ +package template + +// UnionFind defind +// 路径压缩 + 秩优化 +type UnionFind struct { + parent, rank []int + count int +} + +// Init define +func (uf *UnionFind) Init(n int) { + uf.count = n + uf.parent = make([]int, n) + uf.rank = make([]int, n) + for i := range uf.parent { + uf.parent[i] = i + } +} + +// Find define +func (uf *UnionFind) Find(p int) int { + root := p + for root != uf.parent[root] { + root = uf.parent[root] + } + // compress path + for p != uf.parent[p] { + tmp := uf.parent[p] + uf.parent[p] = root + p = tmp + } + return root +} + +// Union define +func (uf *UnionFind) Union(p, q int) { + proot := uf.Find(p) + qroot := uf.Find(q) + if proot == qroot { + return + } + if uf.rank[qroot] > uf.rank[proot] { + uf.parent[proot] = qroot + } else { + uf.parent[qroot] = proot + if uf.rank[proot] == uf.rank[qroot] { + uf.rank[proot]++ + } + } + uf.count-- +} + +// TotalCount define +func (uf *UnionFind) TotalCount() int { + return uf.count +} + +// UnionFindCount define +// 计算每个集合中元素的个数 + 最大集合元素个数 +type UnionFindCount struct { + parent, count []int + maxUnionCount int +} + +// Init define +func (uf *UnionFindCount) Init(n int) { + uf.parent = make([]int, n) + uf.count = make([]int, n) + for i := range uf.parent { + uf.parent[i] = i + uf.count[i] = 1 + } +} + +// Find define +func (uf *UnionFindCount) Find(p int) int { + root := p + for root != uf.parent[root] { + root = uf.parent[root] + } + return root +} + +// 不进行秩压缩,时间复杂度爆炸,太高了 +// func (uf *UnionFindCount) union(p, q int) { +// proot := uf.find(p) +// qroot := uf.find(q) +// if proot == qroot { +// return +// } +// if proot != qroot { +// uf.parent[proot] = qroot +// uf.count[qroot] += uf.count[proot] +// } +// } + +// Union define +func (uf *UnionFindCount) Union(p, q int) { + proot := uf.Find(p) + qroot := uf.Find(q) + if proot == qroot { + return + } + if proot == len(uf.parent)-1 { + //proot is root + } else if qroot == len(uf.parent)-1 { + // qroot is root, always attach to root + proot, qroot = qroot, proot + } else if uf.count[qroot] > uf.count[proot] { + proot, qroot = qroot, proot + } + + //set relation[0] as parent + uf.maxUnionCount = max(uf.maxUnionCount, (uf.count[proot] + uf.count[qroot])) + uf.parent[qroot] = proot + uf.count[proot] += uf.count[qroot] +} + +// Count define +func (uf *UnionFindCount) Count() []int { + return uf.count +} + +// MaxUnionCount define +func (uf *UnionFindCount) MaxUnionCount() int { + return uf.maxUnionCount +} + +func max(a int, b int) int { + if a > b { + return a + } + return b +} diff --git a/template/bucket.go b/template/bucket.go new file mode 100644 index 000000000..ac9ab9289 --- /dev/null +++ b/template/bucket.go @@ -0,0 +1,55 @@ +package template + +import ( + "container/list" + "sync" +) + +type bucket struct { + sync.RWMutex + keys map[string]*list.Element +} + +func (b *bucket) pairCount() int { + b.RLock() + defer b.RUnlock() + return len(b.keys) +} + +func (b *bucket) get(key string) *list.Element { + b.RLock() + defer b.RUnlock() + if el, ok := b.keys[key]; ok { + return el + } + return nil +} + +func (b *bucket) set(key string, value interface{}) (*list.Element, *list.Element) { + el := &list.Element{Value: Pair{key: key, value: value, cmd: PushFront}} + b.Lock() + exist := b.keys[key] + b.keys[key] = el + b.Unlock() + return el, exist +} + +func (b *bucket) update(key string, el *list.Element) { + b.Lock() + b.keys[key] = el + b.Unlock() +} + +func (b *bucket) delete(key string) *list.Element { + b.Lock() + el := b.keys[key] + delete(b.keys, key) + b.Unlock() + return el +} + +func (b *bucket) clear() { + b.Lock() + b.keys = make(map[string]*list.Element) + b.Unlock() +} diff --git a/template/index.html b/template/index.html new file mode 100644 index 000000000..7dc4fdc2b --- /dev/null +++ b/template/index.html @@ -0,0 +1,3901 @@ + + + + + + + Template · Kimi's LeetcodeGolang Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    + + + + + + + + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                                    來源

                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                                    + + +
                                                                                                                                                                                                                                                    + +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                    + +

                                                                                                                                                                                                                                                    results matching ""

                                                                                                                                                                                                                                                    +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      No results matching ""

                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      + + + + + + + + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      Leetcode in Golang

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Build latest tag Build my gitbook and deploy to gh-pages pages-build-deployment

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Leetcode, Codility , GeekforGeeks algorithms exercises written in Golang.

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      https://kimi0230.github.io/LeetcodeGolang/

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      leetcode Content

                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      Data Structure

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Array & String

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0001Two SumGoEasyO(n)O(n)Array
                                                                                                                                                                                                                                                      0003Longest Substring Without Repeating CharactersGoMediumO(n)O(1)Array, Sliding Window
                                                                                                                                                                                                                                                      00153 SumGoMediumO(n^2)O(n)Array
                                                                                                                                                                                                                                                      0027Remove ElementGoEasyO(n)O(1)Array
                                                                                                                                                                                                                                                      0035Search Insert PositionGoEasyO(n), O(logn)O(1)Array
                                                                                                                                                                                                                                                      0049Search Insert PositionGoMediumO(kn)O(kn)Array
                                                                                                                                                                                                                                                      0059Spiral Matrix IIGoMediumO(n)O(n^2)Array
                                                                                                                                                                                                                                                      0088Merge Sorted ArrayGoEasyO(n)O(1)Array
                                                                                                                                                                                                                                                      02170217.Contains DuplicateGoEasyO(n)O(n)Array
                                                                                                                                                                                                                                                      02420242.Valid AnagramGoEasyO(n)O(n)Array
                                                                                                                                                                                                                                                      0409409. Longest PalindromeGoEasyO(n)O(1)Array
                                                                                                                                                                                                                                                      03800380.Insert Delete GetRandom O(1)GoMediumO(1)O(n)Array
                                                                                                                                                                                                                                                      03810381.Insert Delete GetRandom O(1) Duplicates allowedGoMediumO(1)O(n)Array
                                                                                                                                                                                                                                                      04120412.Fizz BuzzGoEasyO(n)O(n)Array, string
                                                                                                                                                                                                                                                      11951195.Fizz Buzz MultithreadedGoMediumO(n)Array, string,Concurrency
                                                                                                                                                                                                                                                      0238238. Product of Array Except SelfGoMediumO(n)Array, string, Prefix Sum
                                                                                                                                                                                                                                                      0128128. Longest Consecutive SequenceGoMediumO(n)O(n)Array, Hash Table, Union Find
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Matrix

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Linked List

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0019Remove Nth Node From End of ListGoMediumO(n)O(1)Linked List, Two Pointers
                                                                                                                                                                                                                                                      0141Linked List CycleGoEasyO(n)O(1)Linked List, Two Pointers
                                                                                                                                                                                                                                                      0142Linked List Cycle IIGoMediumO(n)O(1)Linked List, Two Pointers
                                                                                                                                                                                                                                                      0203Remove Linked List ElementsGoEasyO(n)O(1)Linked List
                                                                                                                                                                                                                                                      0206Reverse Linked ListGoEasyO(n)O(1)Linked List
                                                                                                                                                                                                                                                      0876Middle of the Linked ListGoEasyLinked List, Two Pointers
                                                                                                                                                                                                                                                      0021Merge Two Sorted ListsGoEasyO(log n)O(1)Linked List
                                                                                                                                                                                                                                                      0002Add Two NumberGoMediumO(max(m,n))O(1)Linked List
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      HashSet & HashMap

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Stack & Queue

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0020Valid ParenthesesGoEasyO(n)O(n)Stack
                                                                                                                                                                                                                                                      0094Binary Tree Inorder TraversalGoMediumO(n)O(1)Stack
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Heap & Priority Queue

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Heap 總是能讓整棵樹當中最大或最小值維持在root節點上

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Heap 有幾個特色:
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • 常見架構是像 binary tree 那樣
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • 保持 balanced
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • max heap 的 root 是最大值;min heap 的 root 則是最小值
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • 雖然是 tree,卻很適合放在 array 中處理
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      heap sort
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      根據定義 heap 的 root 一定是最大(假設是 max heap),也就是說,無序數列經過 heapify 再作 n 次 root deletion 取出最大值,就可以得到排序的結果。 +最後就得到 heap sort 的 worst case 時間複雜度 O(nlogn) 的結果。 +可是 quick sort 的 worst case 時間複雜度是 O(n²),怎麼 quick sort 的時間複雜度比較糟糕卻比較受歡迎? +google 的結果是說 heap sort 比較不利於 caching 對於 spatial locality 機制,蠻有道理的阿。

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0703Kth Largest Element in a StreamGoEasyO(K + (N-K)logK)O(k)Heap, Priority Queue
                                                                                                                                                                                                                                                      1046Last Stone WeightGoEasyO(nlogn)O(n)Heap, Priority Queue
                                                                                                                                                                                                                                                      0347Top K Frequent ElementsGoMediumO(Nlog⁡k)O(n)Heap, Priority Queue, Quick Sort
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Disjoint Set Union

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Trie

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Binary Indexed Tree

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Design Data Structures

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Algorithm

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Greedy

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Sort

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0075Sort ColorsGoMediumO(n)O(1)Sort
                                                                                                                                                                                                                                                      0215Kth Largest Element in an ArrayGoMediumO(n)O(logn)Sort
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Multiple Pointers

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Backtracking (回溯法). DFS

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      DFS. 解決一個回溯問題, 實際上就是一個決策樹的遍歷過程. +算是一個暴力的窮舉算法

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      1. 路徑:也就是已經做出的選擇。
                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                      3. 選擇列表:也就是你當前可以做的選擇。
                                                                                                                                                                                                                                                      4. +
                                                                                                                                                                                                                                                      5. 結束條件:也就是到達決策樹底層,無法再做選擇的條件。
                                                                                                                                                                                                                                                      6. +
                                                                                                                                                                                                                                                      7. https://www.bilibili.com/video/BV1P5411N7Xc
                                                                                                                                                                                                                                                      8. +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      result = []
                                                                                                                                                                                                                                                      +def backtrack(路徑, 選擇列表):
                                                                                                                                                                                                                                                      +    if 滿足結束條件:
                                                                                                                                                                                                                                                      +        result.add(路徑)
                                                                                                                                                                                                                                                      +        return
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    for 選擇 in 選擇列表:
                                                                                                                                                                                                                                                      +        做選擇(前序)
                                                                                                                                                                                                                                                      +        backtrack(路徑, 選擇列表)
                                                                                                                                                                                                                                                      +        撤銷選擇(後序)
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0046Permutations (全排列)GoMediumO(n)O(n)Backtracking
                                                                                                                                                                                                                                                      0078SubsetsGoMediumO(n^2)O(n)Backtracking
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      DFS & BFS

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      找最短路徑用BFS, +其他時用DFS用得多一些, 因為遞迴較好寫

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      假設有棵滿的二叉樹,節點數為 N. 對DFS來說空間複雜度就是遞迴, 最壞的情況就是樹的高度 O(log N) +BFS算法, Queue每次都會存二叉樹一層的節點, 最壞的情況下空間複雜度應該就是樹的最下層的數量, 也就是 N/2. 空間複雜度 O(N)

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      DFS(深度優先搜索)通常使用堆棧(Stack)來實現。在DFS中,您首先處理一個節點,然後將其子節點按某種順序推入堆棧中,接著繼續處理堆棧頂部的節點,直到堆棧為空。 +BFS(廣度優先搜索)則使用隊列(Queue)來實現。在BFS中,您首先處理一個節點,然後將其子節點按某種順序排隊,接著繼續處理隊列的前端節點,直到隊列為空。

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0695Max Area of IslandGoMediumO(m*n)O(m*n)DFS & BFS
                                                                                                                                                                                                                                                      0733Flood FillGoEasyO(m*n)O(m*n)DFS & BFS
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Dynamic Programming

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      動態規劃問題的一般形式就是求最值, 最長遞增子序列, 最小編輯距離等. 核心問題是窮舉

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      1. 重疊子問題
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                        1. memory table
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                        3. DP table
                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                      3. 最優子結構
                                                                                                                                                                                                                                                      4. +
                                                                                                                                                                                                                                                      5. 狀態轉移方程式
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                        1. 這問題的 base case (最簡單情況) 是什麼?
                                                                                                                                                                                                                                                        2. +
                                                                                                                                                                                                                                                        3. 這問題有什麼狀態
                                                                                                                                                                                                                                                        4. +
                                                                                                                                                                                                                                                        5. 對於每個狀態, 可以做出什麼選擇, 使得狀態發生改變
                                                                                                                                                                                                                                                        6. +
                                                                                                                                                                                                                                                        7. 如何定義 dp 數組/函數的含義來表現狀態選擇?
                                                                                                                                                                                                                                                        8. +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      6. +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      替換 /跳過
                                                                                                                                                                                                                                                      dp[i-1][j-1]
                                                                                                                                                                                                                                                      刪除
                                                                                                                                                                                                                                                      dp[i-1][j]
                                                                                                                                                                                                                                                      插入
                                                                                                                                                                                                                                                      dp[i][j-1]
                                                                                                                                                                                                                                                      dp[i][j]
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      # 初始化 base case
                                                                                                                                                                                                                                                      +dp[0][0][...] = base
                                                                                                                                                                                                                                                      +# 進行狀態轉移
                                                                                                                                                                                                                                                      +for 狀態1 in 狀態1的所有取值:
                                                                                                                                                                                                                                                      +    for 狀態2 in 狀態2的所有取值:
                                                                                                                                                                                                                                                      +        for ...
                                                                                                                                                                                                                                                      +            dp[狀態1][狀態2][...] = 求最值(選擇1,選擇2...)
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0053Maximum SubarrayGoEasyO(n)O(n)Dynamic Programming
                                                                                                                                                                                                                                                      00720072. Edit DistanceGoHardDynamic Programming
                                                                                                                                                                                                                                                      0300Longest-Increasing-SubsequenceGoMedium方法一:O(n^2) 方法二:O(nlogn)O(n)Dynamic Programming
                                                                                                                                                                                                                                                      0322Coin ChangeGoMediumO(nm)O(n)Dynamic Programming
                                                                                                                                                                                                                                                      0354Russian Doll EnvelopeGoHardDynamic Programming
                                                                                                                                                                                                                                                      0509Fibonacci NumberGoEasy很多解法很多解法Dynamic Programming
                                                                                                                                                                                                                                                      00700070.Climbing StairsGoEasyO(n)O(n)Dynamic Programming
                                                                                                                                                                                                                                                      07460746.Min Cost Climbing StairsGoEasyO(n)O(1)Dynamic Programming
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Sliding Window

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      維護一個窗口, 不斷滑動

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      void slidingWindow(string s, string t){
                                                                                                                                                                                                                                                      +    unordered mapneed, window;
                                                                                                                                                                                                                                                      +    for (char c:t) need[c++]
                                                                                                                                                                                                                                                      +    int left = 0 , right = 0
                                                                                                                                                                                                                                                      +    int valid = 0
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    // 先移動 right 再移動 left. 直到right到達 string的末端
                                                                                                                                                                                                                                                      +    while(right < s.size()){
                                                                                                                                                                                                                                                      +        // c是將移入窗口的字符
                                                                                                                                                                                                                                                      +        char c = s[right]
                                                                                                                                                                                                                                                      +        // 右移窗口 
                                                                                                                                                                                                                                                      +        right++
                                                                                                                                                                                                                                                      +        // 進行窗口內數據的一系列更新
                                                                                                                                                                                                                                                      +        // ...
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +        /*** 用來debug 輸出位置 ***/
                                                                                                                                                                                                                                                      +        printf("window: [%d, %d)\n",left,right)
                                                                                                                                                                                                                                                      +        /************************/
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +        // 判斷左側窗口是否收縮
                                                                                                                                                                                                                                                      +        while(window needs shrink){
                                                                                                                                                                                                                                                      +           // d是將移出窗口的字符
                                                                                                                                                                                                                                                      +           // 左移窗口 
                                                                                                                                                                                                                                                      +            left++
                                                                                                                                                                                                                                                      +            // 進行窗口內數據的一系列更新
                                                                                                                                                                                                                                                      +            // ...
                                                                                                                                                                                                                                                      +        }
                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0209Minimum Size Subarray SumGoMediumO(n^2) / O(n) / O(nlog n)O(1) / O(1) / O(n)Sliding Window
                                                                                                                                                                                                                                                      0438Find All Anagrams in a StringGoMediumO(n)O(1)Sliding Window
                                                                                                                                                                                                                                                      0567Permutation in StringGoMediumO(n)O(1)Sliding Window
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Sweep Line

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Rolling Sum

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Two Pointers

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      只要array有序, 就應該想到雙指針技巧 +分為兩類 1. "快,慢指針" 2. "左,右指針"

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      1. 快,慢指針: 主要解決 linkedlist 問題, 典型的判斷 linkedlist 是否包含環
                                                                                                                                                                                                                                                      2. +
                                                                                                                                                                                                                                                      3. 左,右指針: 主要解決array(或 string)中的問題, 如二分搜尋.
                                                                                                                                                                                                                                                      4. +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      https://labuladong.gitee.io/algo/2/21/57/

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0019Remove Nth Node From End of ListGoMediumO(n)O(1)Linked List, Two Pointers
                                                                                                                                                                                                                                                      0141Linked List CycleGoEasyO(n)O(1)Linked List, Two Pointers
                                                                                                                                                                                                                                                      0283Move ZeroesGoEasyO(n)O(1)Two Pointers
                                                                                                                                                                                                                                                      0142Linked List Cycle IIGoMediumO(n)O(1)Linked List, Two Pointers
                                                                                                                                                                                                                                                      0344Reverse StringGoEasyO(n)O(1)Two Pointers
                                                                                                                                                                                                                                                      0876Middle of the Linked ListGoEasyLinked List, Two Pointers
                                                                                                                                                                                                                                                      0011Container With Most WaterGoMediumTwo Pointers
                                                                                                                                                                                                                                                      0074Search a 2D MatrixGoMediumBinary Search, Two Pointers
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Bit Manipulation∂

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0693Binary Number with Alternating BitsGoEasyO(n)/ O(1)O(1) / O(1)Bit Manipulation
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Union Find

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0721Accounts MergeGoEasyO(n) / O(n log n)O(n) / O(n)Union Find
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                      • DFS 算法可以被認為是回溯算法, BFS算法都是用Queue這種數據結構, 每次將一個截短周圍的所有節點加入Queue.
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • BFS 找到的路徑一定是最短的, 但是代價是空間複雜度比DFS大. BFS vs DFS
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      • 優化: 雙向 BFS 優化, 在 while 開始時做一個判斷. 讓每次都選擇較小的集合進行擴散, +那麼佔用的空間增長速度就會慢一些, 盡可能以最小的空間代價產生 curDepth 和 nextDepth 的交集 +無論單向的 BFS 或是 雙向BFS, 優化過的BFS 空間複雜度都是一樣的
                                                                                                                                                                                                                                                      • +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      // 計算從起點 start 到 終點 target 的最點距離
                                                                                                                                                                                                                                                      +int BFS(Node start, Node targe){
                                                                                                                                                                                                                                                      +    Queue q; // 核心數據結構
                                                                                                                                                                                                                                                      +    Set visited; // 避免走回頭路
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    q.offer(start); // 將起點加入 Queue
                                                                                                                                                                                                                                                      +    visited.add(start);
                                                                                                                                                                                                                                                      +    int step = 0; // 紀錄擴散的步數
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +    while(q not empty) {
                                                                                                                                                                                                                                                      +        int sz = q.size();
                                                                                                                                                                                                                                                      +        // 當前 Queue 中的所有節點向四周擴散
                                                                                                                                                                                                                                                      +        for (int i = 0 ; i < sz; i++) {
                                                                                                                                                                                                                                                      +            Node cur = q.poll();
                                                                                                                                                                                                                                                      +            // 這裡判斷是否到達終點
                                                                                                                                                                                                                                                      +            if (cur is target) {
                                                                                                                                                                                                                                                      +                return step;
                                                                                                                                                                                                                                                      +            }
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +            // 將cur 的相鄰節點加入 Queue
                                                                                                                                                                                                                                                      +            for (Node x : cur.adj()) {
                                                                                                                                                                                                                                                      +                if (x not in visited) {
                                                                                                                                                                                                                                                      +                    q.offer(x);
                                                                                                                                                                                                                                                      +                    visited.add(x);
                                                                                                                                                                                                                                                      +                }
                                                                                                                                                                                                                                                      +            }
                                                                                                                                                                                                                                                      +        }
                                                                                                                                                                                                                                                      +        // 在這裡更新步數
                                                                                                                                                                                                                                                      +        step++
                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0310Minimum Height TreesGoMediumBreadth First Search
                                                                                                                                                                                                                                                      0752752. Open the LockGoMediumBreadth First Search
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      分析二分搜尋技巧: 不要出現 else, 而是把所有情況用 else if 寫清楚. +計算 mid 時需要防止溢出

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      int binarySearch(int[] nums, int target){
                                                                                                                                                                                                                                                      +    int left = 0 , right = ...;
                                                                                                                                                                                                                                                      +    while(...) {
                                                                                                                                                                                                                                                      +        int mid = left + (right - left)/2
                                                                                                                                                                                                                                                      +        if (nums[mid] == target){
                                                                                                                                                                                                                                                      +            ...
                                                                                                                                                                                                                                                      +        } else if (nums[mid] < target){
                                                                                                                                                                                                                                                      +            left = ...
                                                                                                                                                                                                                                                      +        } else if (nums[mid] > target){
                                                                                                                                                                                                                                                      +            right = ...
                                                                                                                                                                                                                                                      +        }
                                                                                                                                                                                                                                                      +    }
                                                                                                                                                                                                                                                      +    return ...;
                                                                                                                                                                                                                                                      +}
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0704704. Binary SearchGoEasy最差:O(long n)
                                                                                                                                                                                                                                                      最佳O(1)剛好在中間
                                                                                                                                                                                                                                                      迭代: O(1)
                                                                                                                                                                                                                                                      遞迴O(log n)
                                                                                                                                                                                                                                                      Binary Search
                                                                                                                                                                                                                                                      0875875. Koko Eating BananasGoMediumO(n log m)O(1)Binary Search
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Minimax

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Graph

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Graph

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Topological Sort

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Tree

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      No.TitleSolutionDifficultyTimeSpaceTopic
                                                                                                                                                                                                                                                      0226Invert Binary TreeGoEasyO(n)O(1)Tree
                                                                                                                                                                                                                                                      0104Maximum Depth of Binary TreeGoEasyO(n)O(1)Tree
                                                                                                                                                                                                                                                      0543Diameter of Binary TreeGoEasyO(n)O(n), O(log(n))Tree, DFS
                                                                                                                                                                                                                                                      0110Balanced Binary TreeGoEasyO(n)O(1)Tree, DFS
                                                                                                                                                                                                                                                      0100Same TreeGoEasyO(n)O(1)Tree
                                                                                                                                                                                                                                                      0105Construct Binary Tree from Preorder and Inorder TraversalGoMediumO(n)O(n)Array
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Tree Traversal

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Binary Search Tree

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Compputational Geometry

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Selected Topics

                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Mathematics

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Random

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Bitwise Manipulation

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      GeeksforGeeks Content

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      TopicTitleNo.SolutionDifficultyTimeComplexitySpaceComplexity
                                                                                                                                                                                                                                                      SortingFind Minimum Difference Between Any Two Elements0031GoBasicO(n^2), O(n log n)O(n), O(n)
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +

                                                                                                                                                                                                                                                      Codility Content

                                                                                                                                                                                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                                                                                                                                                                                      Topic Title Solution Difficulty TimeComplexity SpaceComplexity
                                                                                                                                                                                                                                                      Lesson 1 + Iterations
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Binary Gap
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(log n) O(1)
                                                                                                                                                                                                                                                      Lesson 2 + Array
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Cyclic Rotation
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(1) O(1)
                                                                                                                                                                                                                                                      + Odd Occurrences In Array
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n), O(n) O(n), O(1)
                                                                                                                                                                                                                                                      Lesson 3 + Time Complexity
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Frog Jmp
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(1) O(1)
                                                                                                                                                                                                                                                      + Perm Missing Elem
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(1)
                                                                                                                                                                                                                                                      + Tape Equilibrium
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      Lesson 4 + Counting Elements
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Frog River One
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      + Max Counters
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(n+m) O(n)
                                                                                                                                                                                                                                                      + Missing Integer
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(n) O(n)
                                                                                                                                                                                                                                                      + Perm Check
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      Lesson 5 + Prefix Sums
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Count Div
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(1) O(1)
                                                                                                                                                                                                                                                      + Genomic Range Query
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(n+m) O(n)
                                                                                                                                                                                                                                                      + MinAvg Two Slice
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(n) O(n)
                                                                                                                                                                                                                                                      + Passing Cars
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(1)
                                                                                                                                                                                                                                                      Lesson 6 + Sorting
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Distinct
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(nlogn) O(n)
                                                                                                                                                                                                                                                      + Max Product of Three
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(nlogn) O(1)
                                                                                                                                                                                                                                                      + Number Of Disc Intersections
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(nlogn) O(n)
                                                                                                                                                                                                                                                      + Triangle
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(nlogn) O(n)
                                                                                                                                                                                                                                                      Lesson 7 + Stacks and Queues
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Brackets
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      + Fish
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      + Nesting
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(1)
                                                                                                                                                                                                                                                      + Stone Wall
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      Lesson 8 + Leader
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Dominator
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(1)
                                                                                                                                                                                                                                                      + EquiLeader
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      Lesson 9 + Maximum slice problem
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Max Profit
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(1)
                                                                                                                                                                                                                                                      + Max Slice Sum
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(n) O(n)
                                                                                                                                                                                                                                                      + Max Double Slice Sum
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(n) O(n)
                                                                                                                                                                                                                                                      Lesson 10 + Prime and composite numbers
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Count Factors
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(sqrt(n)) O(1)
                                                                                                                                                                                                                                                      + Flags
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(n) O(n)
                                                                                                                                                                                                                                                      + MinPerimeterRectangle
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(sqrt(n))) O(1)
                                                                                                                                                                                                                                                      + Peaks
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O( n*log( log(n) )) O(n)
                                                                                                                                                                                                                                                      Lesson 11 + Sieve of Eratosthenes
                                                                                                                                                                                                                                                      (質數篩)
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Count Non Divisible
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(N * log(N)) O(n)
                                                                                                                                                                                                                                                      + Count Semiprimes
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(N*log(log(N))+M) O(N+M)
                                                                                                                                                                                                                                                      Lesson 12 + Euclidean algorithm
                                                                                                                                                                                                                                                      (輾轉相除法 or 歐幾里得算法)
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Chocolates By Numbers
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless O(log(N + M)) O(1)
                                                                                                                                                                                                                                                      + Common Prime Divisors
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(Z * log(max(A) + max(B))**2) O(1)
                                                                                                                                                                                                                                                      Lesson 13 + Fibonacci numbers
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + FibFrog
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + Go
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable O(N * log(N)) O(N)
                                                                                                                                                                                                                                                      + Ladder
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable
                                                                                                                                                                                                                                                      Lesson 14 + Binary search algorithm
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + MinMaxDivision
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable
                                                                                                                                                                                                                                                      + NailingPlanks
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable
                                                                                                                                                                                                                                                      Lesson 15 + Caterpillar method
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + AbsDistinct
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless
                                                                                                                                                                                                                                                      + CountDistinctSlices
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless
                                                                                                                                                                                                                                                      + CountTriangles
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless
                                                                                                                                                                                                                                                      + MinAbsSumOfTwo
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable
                                                                                                                                                                                                                                                      Lesson 16 + Greedy algorithms
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + MaxNonoverlappingSegments
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless
                                                                                                                                                                                                                                                      + TieRopes
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Painless
                                                                                                                                                                                                                                                      Lesson 17 + Dynamic programming
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + MinAbsSum
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Ambitious
                                                                                                                                                                                                                                                      + NumberSolitaire
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      Respectable
                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      Reference

                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                                      + + +
                                                                                                                                                                                                                                                      + +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                      + +

                                                                                                                                                                                                                                                      results matching ""

                                                                                                                                                                                                                                                      +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                                        No results matching ""

                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        + + + + + + +
                                                                                                                                                                                                                                                        + + +

                                                                                                                                                                                                                                                        kR7!!dM{klFAv34S#UaF}M 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 z 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�ryJXa;q@j%d@ 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 z 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%0Dw9D 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

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        + + + + + + + + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                                        226. Invert Binary Tree

                                                                                                                                                                                                                                                        題目

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Given the root of a binary tree, invert the tree, and return its root.

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Example 1: +

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Input: root = [4,2,7,1,3,6,9] +Output: [4,7,2,9,6,3,1]

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Example 2: +

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Input: root = [2,1,3] +Output: [2,3,1] +Example 3:

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Input: root = [] +Output: []

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Constraints:

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                        • The number of nodes in the tree is in the range [0, 100].
                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                        • -100 <= Node.val <= 100
                                                                                                                                                                                                                                                        • +
                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        題目大意

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        反轉二叉樹

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        解題思路

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        用遞歸來解決,先遞歸調用反轉根節點的左children,然後遞歸調用反轉根節點的右children,然後左右交換根節點的左children和右children。 +有點像是BFS

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        BFS(廣度優先搜索)則使用隊列(Queue)來實現。在BFS中,您首先處理一個節點,然後將其子節點按某種順序排隊,接著繼續處理隊列的前端節點,直到隊列為空。

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        來源

                                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                                        解答

                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0226.Invert-Binary-Tree/main.go

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        package invertbinarytree
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +import (
                                                                                                                                                                                                                                                        +    "LeetcodeGolang/Utility/structures"
                                                                                                                                                                                                                                                        +)
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +/**
                                                                                                                                                                                                                                                        + * Definition for a binary tree node.
                                                                                                                                                                                                                                                        + * type TreeNode struct {
                                                                                                                                                                                                                                                        + *     Val int
                                                                                                                                                                                                                                                        + *     Left *TreeNode
                                                                                                                                                                                                                                                        + *     Right *TreeNode
                                                                                                                                                                                                                                                        + * }
                                                                                                                                                                                                                                                        + */
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +// type TreeNode struct {
                                                                                                                                                                                                                                                        +//     Val   int
                                                                                                                                                                                                                                                        +//     Left  *TreeNode
                                                                                                                                                                                                                                                        +//     Right *TreeNode
                                                                                                                                                                                                                                                        +// }
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +func InvertTree(root *structures.TreeNode) *structures.TreeNode {
                                                                                                                                                                                                                                                        +    if root == nil {
                                                                                                                                                                                                                                                        +        return nil
                                                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +    InvertTree(root.Left)
                                                                                                                                                                                                                                                        +    InvertTree(root.Right)
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +    root.Left, root.Right = root.Right, root.Left
                                                                                                                                                                                                                                                        +    return root
                                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +func InvertTree2(root *structures.TreeNode) *structures.TreeNode {
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +    if root != nil {
                                                                                                                                                                                                                                                        +        root.Left, root.Right = InvertTree2(root.Right), InvertTree2(root.Left)
                                                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +    return root
                                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +func InvertTree3(root *structures.TreeNode) *structures.TreeNode {
                                                                                                                                                                                                                                                        +    queue := make([]*structures.TreeNode, 0)
                                                                                                                                                                                                                                                        +    queue = append(queue, root)
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +    for len(queue) > 0 {
                                                                                                                                                                                                                                                        +        current := queue[0]
                                                                                                                                                                                                                                                        +        queue = queue[1:]
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +        current.Left, current.Right = current.Right, current.Left
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +        if current.Left != nil {
                                                                                                                                                                                                                                                        +            queue = append(queue, current.Left)
                                                                                                                                                                                                                                                        +        }
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +        if current.Right != nil {
                                                                                                                                                                                                                                                        +            queue = append(queue, current.Right)
                                                                                                                                                                                                                                                        +        }
                                                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                                                        +    return root
                                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        func BuildTree(nums []int, index int) *TreeNode {
                                                                                                                                                                                                                                                        +    if index >= len(nums) || nums[index] == -1 {
                                                                                                                                                                                                                                                        +        return nil
                                                                                                                                                                                                                                                        +    }
                                                                                                                                                                                                                                                        +    root := &TreeNode{Val: nums[index]}
                                                                                                                                                                                                                                                        +    root.Left = BuildTree(nums, 2*index+1)
                                                                                                                                                                                                                                                        +    root.Right = BuildTree(nums, 2*index+2)
                                                                                                                                                                                                                                                        +    return root
                                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +func IntsToTree(nums []int) *TreeNode {
                                                                                                                                                                                                                                                        +    return BuildTree(nums, 0)
                                                                                                                                                                                                                                                        +}
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +

                                                                                                                                                                                                                                                        Benchmark

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        goos: darwin
                                                                                                                                                                                                                                                        +goarch: amd64
                                                                                                                                                                                                                                                        +pkg: LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree
                                                                                                                                                                                                                                                        +cpu: Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
                                                                                                                                                                                                                                                        +BenchmarkInvertTree-8            2533011               398.7 ns/op           168 B/op          7 allocs/op
                                                                                                                                                                                                                                                        +BenchmarkInvertTree2-8           2667645               392.4 ns/op           168 B/op          7 allocs/op
                                                                                                                                                                                                                                                        +BenchmarkInvertTree3-8           1403001               727.5 ns/op           296 B/op         13 allocs/op
                                                                                                                                                                                                                                                        +PASS
                                                                                                                                                                                                                                                        +ok      LeetcodeGolang/Leetcode/0226.Invert-Binary-Tree 4.889s
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        + +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                        + +

                                                                                                                                                                                                                                                        results matching ""

                                                                                                                                                                                                                                                        +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                                          No results matching ""

                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          + + + + + + +
                                                                                                                                                                                                                                                          + + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          + + + + + + + + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                                          110. Balanced Binary Tree

                                                                                                                                                                                                                                                          題目

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Given a binary tree, determine if it is +height-balanced +.

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Example 1: +

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Input: root = [3,9,20,null,null,15,7] +Output: true

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Example 2: +

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Input: root = [1,2,2,3,3,null,null,4,4] +Output: false +Example 3:

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Input: root = [] +Output: true

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Constraints:

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          The number of nodes in the tree is in the range [0, 5000]. +-104 <= Node.val <= 104

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          題目大意

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          判斷一棵樹是不是平衡二叉樹。 平衡二叉樹的定義是:樹中每個節點都滿足左右兩個子樹的高度差 <= 1 的這個條件。

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          解題思路

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          高度運算可使用 0104.Maximum-Depth-of-Binary-Tree

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          平衡二叉樹(Balanced Binary Tree)是一種二叉樹,其左右子樹的高度差不超過一的二叉樹。換句話說,對於樹中的每個節點,其左子樹和右子樹的高度差不得大於1。

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          平衡二叉樹的主要目的是確保樹的高度平衡,這有助於保持在最壞情況下的查找、插入和刪除操作的時間複雜度在O(log n)範圍內,其中n是樹中節點的數量。這種平衡性有助於確保樹的性能良好,並減少操作的平均時間複雜度。

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Big O

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          時間複雜 : O(n) +空間複雜 : O(1)

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          來源

                                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                                          解答

                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0110.Balanced-Binary-Tree/main.go

                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          package balancedbinarytree
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +import "LeetcodeGolang/structures"
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +/**
                                                                                                                                                                                                                                                          + * Definition for a binary tree node.
                                                                                                                                                                                                                                                          + * type TreeNode struct {
                                                                                                                                                                                                                                                          + *     Val int
                                                                                                                                                                                                                                                          + *     Left *TreeNode
                                                                                                                                                                                                                                                          + *     Right *TreeNode
                                                                                                                                                                                                                                                          + * }
                                                                                                                                                                                                                                                          + */
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +type TreeNode = structures.TreeNode
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +func IsBalanced(root *TreeNode) bool {
                                                                                                                                                                                                                                                          +    if root == nil {
                                                                                                                                                                                                                                                          +        return true
                                                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                                                          +    leftHight := depth(root.Left)
                                                                                                                                                                                                                                                          +    rightHight := depth(root.Right)
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +    return abs(leftHight-rightHight) <= 0="" 1="" &&="" isbalanced(root.left)="" isbalanced(root.right)="" }="" func="" depth(root="" *treenode)="" int="" {="" if="" root="=" nil="" return="" max(depth(root.left),="" depth(root.right))="" +="" abs(n="" int)="" n="" <="" -n="" max(a,="" b="" a=""> b {
                                                                                                                                                                                                                                                          +        return a
                                                                                                                                                                                                                                                          +    }
                                                                                                                                                                                                                                                          +    return b
                                                                                                                                                                                                                                                          +}
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +

                                                                                                                                                                                                                                                          Benchmark

                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          + +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                          + +

                                                                                                                                                                                                                                                          results matching ""

                                                                                                                                                                                                                                                          +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                            No results matching ""

                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            + + + + + + +
                                                                                                                                                                                                                                                            + + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            + + + + + + + + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                            105. Construct Binary Tree from Preorder and Inorder Traversal

                                                                                                                                                                                                                                                            題目

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            題目大意

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            解題思路

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Big O

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • 時間複雜 : O(n) +n個樹節點

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                            • 空間複雜 : O(n) +遞迴調用的Stack空間是 O(h),其中 h 是樹的高度。 +在每個遞迴層級中,都創建了一個 TreeNode 對象,因此空間複雜度也是 O(n),其中 n 是節點的數量。 +h< n所以空間複雜為 O(n)

                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                            • +
                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            來源

                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                            解答

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            https://github.com/kimi0230/LeetcodeGolang/blob/master/Leetcode/0105.Construct-Binary-Tree-from-Preorder-and-Inorder-Traversal/main.go

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            /**
                                                                                                                                                                                                                                                            + * Definition for a binary tree node.
                                                                                                                                                                                                                                                            + * type TreeNode struct {
                                                                                                                                                                                                                                                            + *     Val int
                                                                                                                                                                                                                                                            + *     Left *TreeNode
                                                                                                                                                                                                                                                            + *     Right *TreeNode
                                                                                                                                                                                                                                                            + * }
                                                                                                                                                                                                                                                            + */
                                                                                                                                                                                                                                                            +// 時間複雜 O(), 空間複雜 O()
                                                                                                                                                                                                                                                            +func buildTree(preorder []int, inorder []int) *TreeNode {
                                                                                                                                                                                                                                                            +    if len(preorder) == 0 {
                                                                                                                                                                                                                                                            +        return nil
                                                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                                                            +    result := &TreeNode{preorder[0], nil, nil}
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +    i := 0
                                                                                                                                                                                                                                                            +    for ; i < len(inorder); i++ {
                                                                                                                                                                                                                                                            +        if preorder[0] == inorder[i] {
                                                                                                                                                                                                                                                            +            break
                                                                                                                                                                                                                                                            +        }
                                                                                                                                                                                                                                                            +    }
                                                                                                                                                                                                                                                            +    result.Left = buildTree(preorder[1:i+1], inorder[:i])
                                                                                                                                                                                                                                                            +    result.Right = buildTree(preorder[i+1:], inorder[i+1:])
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +    return result
                                                                                                                                                                                                                                                            +}
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            +

                                                                                                                                                                                                                                                            Benchmark

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            © Kimi Tsai all right reserved.            Updated : 2024-03-28 14:13:42
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            + +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                            + +

                                                                                                                                                                                                                                                            results matching ""

                                                                                                                                                                                                                                                            +
                                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              + +

                                                                                                                                                                                                                                                              No results matching ""

                                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                                              +
                                                                                                                                                                                                                                                              + +
                                                                                                                                                                                                                                                              + + + + + + +
                                                                                                                                                                                                                                                              + + +