From f0a83a56b9eafcf5a520e14022799a10f7108dfb Mon Sep 17 00:00:00 2001 From: andyalgorithm <1141338015@qq.com> Date: Sun, 16 Mar 2025 23:27:14 +0800 Subject: [PATCH] update --- algorithm/pom.xml | 38 ++++++ .../BinaryTreeLevelOrderTraversal.java | 49 +++++++ .../BinaryTreeLevelOrderTraversalII.java | 44 +++++++ .../BinaryTreeZigzagLevelOrderTraversal.java | 58 +++++++++ .../main/java/BFS_DFS/CountSubIslands.java | 51 ++++++++ .../src/main/java/BFS_DFS/MaxAreaIsland.java | 44 +++++++ .../java/BFS_DFS/MinimumDepthBinaryTree.java | 40 ++++++ .../java/BFS_DFS/NumberClosedIslands.java | 51 ++++++++ .../java/BFS_DFS/NumberDistinctIslands.java | 59 +++++++++ .../src/main/java/BFS_DFS/NumberEnclaves.java | 54 ++++++++ .../src/main/java/BFS_DFS/NumberIslands.java | 41 ++++++ .../src/main/java/BFS_DFS/OpenTheLock.java | 70 ++++++++++ .../src/main/java/BFS_DFS/SlidingPuzzle.java | 98 ++++++++++++++ .../main/java/BFS_DFS/SurroundedRegions.java | 70 ++++++++++ .../src/main/java/DP/BloodSimilarity.java | 42 ++++++ algorithm/src/main/java/DP/DisjointLines.java | 41 ++++++ algorithm/src/main/java/DP/Envelops.java | 28 ++++ algorithm/src/main/java/DP/IsSubsequence.java | 27 ++++ .../java/DP/LongestCommonSubsequence.java | 25 ++++ .../java/DP/LongestCommonSubsequenceII.java | 40 ++++++ .../src/main/java/DP/MinFallingPathSum.java | 65 +++++++++ .../src/main/java/DP/MinFallingPathSum2.java | 49 +++++++ .../src/main/java/DP/MinFallingPathSumII.java | 55 ++++++++ algorithm/src/main/java/DP/MinPathSum.java | 42 ++++++ .../main/java/DP/MinimumTriangleTotal.java | 52 ++++++++ .../main/java/DP/MinimumTriangleTotalII.java | 47 +++++++ .../src/main/java/DP/PalindromeList.java | 65 +++++++++ algorithm/src/main/java/DP/ReverseNode.java | 18 +++ algorithm/src/main/java/DP/ReverseNode2.java | 25 ++++ algorithm/src/main/java/DP/ReverseNode3.java | 36 +++++ .../src/main/java/DP/ReverseNodeKGroup.java | 43 ++++++ .../main/java/DP/RussianDollEnvelopes.java | 45 +++++++ .../java/DP/UniquePathsWithObstacles.java | 53 ++++++++ .../main/java/alibaba/DuplicateLength.java | 30 +++++ .../src/main/java/alibaba/ThreadPrintABC.java | 55 ++++++++ .../main/java/alibaba/ThreadPrintABC2.java | 48 +++++++ .../main/java/alibaba/ThreadPrintCharNum.java | 56 ++++++++ .../main/java/alibaba/ThreadPrintNums.java | 46 +++++++ .../java/array/binarySearch/EatBanana.java | 55 ++++++++ .../array/binarySearch/IsSubsequence.java | 29 +++++ .../java/array/binarySearch/PeakArray.java | 42 ++++++ .../array/binarySearch/PreimageSizeZF.java | 51 ++++++++ .../binarySearch/SearchInsertPosition.java | 71 ++++++++++ .../java/array/binarySearch/SearchMatrix.java | 88 +++++++++++++ .../array/binarySearch/SearchPosition.java | 33 +++++ .../java/array/binarySearch/SearchRange.java | 53 ++++++++ .../array/binarySearch/ShipWithinDays.java | 48 +++++++ .../java/array/binarySearch/TailingZeros.java | 20 +++ .../java/array/other/AdvantageShuffle.java | 49 +++++++ .../array/other/ContainerWithMostWater.java | 33 +++++ .../other/IntervalListIntersections.java | 35 +++++ .../java/array/other/MaxRepeatSubString.java | 33 +++++ .../other/RemoveDuplicateSortedArray.java | 29 +++++ .../java/array/other/Search2DMatrixII.java | 26 ++++ .../java/array/other/SquaresSortedArray.java | 27 ++++ .../java/array/other/TrappingRainWater.java | 45 +++++++ .../java/array/other/TwoSumLessThanK.java | 30 +++++ .../java/array/slideWindow/FindAnagrams.java | 53 ++++++++ .../slideWindow/LengthOfLongestSubstring.java | 30 +++++ .../array/slideWindow/MinWindowSubstring.java | 57 ++++++++ .../java/array/slideWindow/MinimumWindow.java | 60 +++++++++ .../java/array/slideWindow/Permutation.java | 50 +++++++ .../slideWindow/SlidingWindowMaximum.java | 84 ++++++++++++ .../main/java/backTrack/CombinationSum.java | 38 ++++++ .../src/main/java/backTrack/Combinations.java | 49 +++++++ .../java/backTrack/GenerateParentheses.java | 54 ++++++++ .../backTrack/MaximumDepthBinaryTree.java | 22 ++++ .../src/main/java/backTrack/NQueues.java | 77 +++++++++++ .../backTrack/PartitionKEqualSumSubsets.java | 53 ++++++++ .../src/main/java/backTrack/Permutations.java | 40 ++++++ .../src/main/java/backTrack/Subsets.java | 24 ++++ .../src/main/java/backTrack/SudokuSolver.java | 70 ++++++++++ .../src/main/java/backTrack/TargetSum.java | 38 ++++++ .../src/main/java/backTrack/TargetSum2.java | 38 ++++++ .../main/java/binaryHeap/KthLargestData.java | 27 ++++ .../java/binaryHeap/KthLargestElement.java | 44 +++++++ .../main/java/binaryHeap/MaxFrequency.java | 18 +++ .../src/main/java/binaryHeap/MedianData.java | 49 +++++++ .../src/main/java/binaryHeap/MinStack.java | 46 +++++++ .../src/main/java/binaryHeap/SeatReserve.java | 38 ++++++ .../main/java/binaryHeap/SingleThreadCPU.java | 91 +++++++++++++ .../BinaryTreeLevelOrderTraversal.java | 30 +++++ .../BinaryTreePostorderTraversal.java | 28 ++++ .../BinaryTreeZigzagLevelOrderTraversal.java | 39 ++++++ .../java/binaryTree/DiameterBinaryTree.java | 24 ++++ .../FlattenBinaryTreeToLinkedList.java | 37 ++++++ .../java/binaryTree/InorderTraversal.java | 46 +++++++ .../java/binaryTree/InvertBinaryTree.java | 28 ++++ .../java/binaryTree/LevelOrderTraversal.java | 45 +++++++ .../main/java/binaryTree/MaximumDepth.java | 15 +++ .../java/binaryTree/MaximumDepthNTree.java | 10 ++ .../binaryTree/MinimumDepthBinaryTree.java | 25 ++++ .../src/main/java/binaryTree/SameTree.java | 19 +++ .../src/main/java/binaryTree/SameTree2.java | 30 +++++ .../SerializeAndDeserializeBinaryTree.java | 66 ++++++++++ .../src/main/java/binaryTree/TreeNode.java | 82 ++++++++++++ .../binaryTree/ZigzagLevelOrderTraversal.java | 44 +++++++ .../main/java/competition/AverageValue.java | 22 ++++ .../InsertDeleteGetRandom.java | 39 ++++++ .../java/dataStructureDesign/LFUCache.java | 86 ++++++++++++ .../java/dataStructureDesign/LRUCache.java | 86 ++++++++++++ .../java/dataStructureDesign/LRUCache2.java | 54 ++++++++ .../MaximumFrequencyStack.java | 48 +++++++ .../java/dataStructureDesign/MinStack.java | 36 +++++ .../main/java/differenceArray/CarPooling.java | 38 ++++++ .../java/differenceArray/FlightBooking.java | 32 +++++ .../main/java/differenceArray/RangeAdd.java | 36 +++++ .../main/java/graphTheory/AllPathList.java | 46 +++++++ .../java/images/binary-tree-traversal.jpg | Bin 0 -> 254010 bytes algorithm/src/main/java/images/graph.jpg | Bin 0 -> 19630 bytes algorithm/src/main/java/images/plugin4.png | Bin 0 -> 1640774 bytes ...72\214\345\217\211\346\240\221plugin1.png" | Bin 0 -> 253839 bytes ...72\214\345\217\211\346\240\221plugin2.png" | Bin 0 -> 581748 bytes ...1\346\240\221\344\276\213\345\255\220.jpg" | Bin 0 -> 12823 bytes ...\346\240\221\346\241\210\344\276\2132.png" | Bin 0 -> 32606 bytes ...1\346\240\221\351\201\215\345\216\206.gif" | Bin 0 -> 97354 bytes ...346\240\221\351\201\215\345\216\2062.jpeg" | Bin 0 -> 106910 bytes ...\344\272\214\345\217\211\346\240\221.jpeg" | Bin 0 -> 106910 bytes ...\347\273\255\351\201\215\345\216\206.jpeg" | Bin 0 -> 105784 bytes ...345\272\217\351\201\215\345\216\2062.jpeg" | Bin 0 -> 103512 bytes ...\350\275\254\351\223\276\350\241\2502.jpg" | Bin 0 -> 80907 bytes ...\347\244\272\346\226\271\346\263\225.jpeg" | Bin 0 -> 70648 bytes .../src/main/java/images/\345\272\246.jpg" | Bin 0 -> 19630 bytes ...\347\216\257\351\201\215\345\216\206.jpeg" | Bin 0 -> 75882 bytes ...4N\344\270\252\350\212\202\347\202\271.md" | 11 ++ ...07\345\272\217\351\223\276\350\241\250.md" | 22 ++++ .../doublePointer/AddTwoNumbers.java | 45 +++++++ .../doublePointer/AddTwoNumbers2.java | 89 +++++++++++++ .../doublePointer/DeleteNthNode.java | 32 +++++ .../doublePointer/LinkedListCycle.java | 29 +++++ .../doublePointer/LinkedListCycleII.java | 31 +++++ .../doublePointer/LinkedListIntersect.java | 28 ++++ .../linkedList/doublePointer/ListNode.java | 43 ++++++ .../doublePointer/MergeKSortedList.java | 36 +++++ .../doublePointer/MergeSortedList.java | 34 +++++ .../linkedList/doublePointer/MiddleNode.java | 21 +++ .../doublePointer/PalindromeLinkedList.java | 4 + .../doublePointer/RemoveDuplicate.java | 21 +++ .../doublePointer/ReverseLinkedListII.java | 4 + .../doublePointer/ReverseNodesInKGroup.java | 14 ++ ...0+\345\217\214\346\214\207\351\222\210.md" | 54 ++++++++ .../src/main/java/multiThread/FizzBuzz.java | 91 +++++++++++++ .../src/main/java/multiThread/FizzBuzzII.java | 123 ++++++++++++++++++ .../main/java/multiThread/FizzBuzzIII.java | 103 +++++++++++++++ .../multiThread/PrintFooBarAlternately.java | 79 +++++++++++ .../main/java/multiThread/PrintInOrder.java | 117 +++++++++++++++++ .../main/java/multiThread/PrintInOrder2.java | 107 +++++++++++++++ .../main/java/multiThread/PrintInOrder3.java | 100 ++++++++++++++ .../java/multiThread/PrintZeroOddEven.java | 68 ++++++++++ .../src/main/java/multiThread/ProduceH2O.java | 30 +++++ algorithm/src/main/java/nSum/NSum.java | 53 ++++++++ algorithm/src/main/java/nSum/ThreeSum.java | 51 ++++++++ algorithm/src/main/java/nSum/TwoSum.java | 60 +++++++++ .../src/main/java/other/IsIsomorphic.java | 40 ++++++ .../src/main/java/prefixSum/MatrixSum.java | 33 +++++ .../src/main/java/prefixSum/NumArray.java | 48 +++++++ .../src/main/java/prefixSum/NumMatrix.java | 32 +++++ .../main/java/prefixSum/ProductOfNumbers.java | 39 ++++++ .../src/main/java/stack_queue/EvalRPN.java | 41 ++++++ .../ImplementQueueUsingStacks.java | 48 +++++++ .../ImplementStackUsingQueues.java | 44 +++++++ .../stack_queue/LongestValidParentheses.java | 40 ++++++ .../java/stack_queue/MinAddMakeValid.java | 29 +++++ .../src/main/java/stack_queue/MinStack.java | 41 ++++++ ...MinimumInsertionsToBalanceParentheses.java | 38 ++++++ .../main/java/stack_queue/SimplifyPath.java | 42 ++++++ .../java/stack_queue/SlidingWindowMax.java | 55 ++++++++ .../java/stack_queue/ValidParentheses.java | 35 +++++ .../BinaryTreeLevelOrderTraversalIITest.java | 29 +++++ .../BinaryTreeLevelOrderTraversalTest.java | 30 +++++ ...naryTreeZigzagLevelOrderTraversalTest.java | 61 +++++++++ .../java/BSF_DSF/CountSubIslandsTest.java | 53 ++++++++ .../test/java/BSF_DSF/MaxAreaIslandTest.java | 38 ++++++ .../BSF_DSF/MinimumDepthBinaryTreeTest.java | 19 +++ .../java/BSF_DSF/NumberClosedIslandsTest.java | 25 ++++ .../BSF_DSF/NumberDistinctIslandsTest.java | 38 ++++++ .../test/java/BSF_DSF/NumberEnclavesTest.java | 22 ++++ .../test/java/BSF_DSF/NumberIslandsTest.java | 37 ++++++ .../test/java/BSF_DSF/OpenTheLockTest.java | 50 +++++++ .../test/java/BSF_DSF/SlidingPuzzleTest.java | 41 ++++++ .../java/BSF_DSF/SurroundedRegionsTest.java | 31 +++++ .../src/test/java/DP/BloodSimilarityTest.java | 15 +++ .../src/test/java/DP/DisjointLinesTest.java | 35 +++++ algorithm/src/test/java/DP/EnvelopsTest.java | 4 + .../src/test/java/DP/IsSubsequenceTest.java | 25 ++++ .../DP/LongestCommonSubsequenceIITest.java | 35 +++++ .../java/DP/LongestCommonSubsequenceTest.java | 35 +++++ .../test/java/DP/MinFallingPathSum2Test.java | 42 ++++++ .../test/java/DP/MinFallingPathSumIITest.java | 39 ++++++ .../test/java/DP/MinFallingPathSumTest.java | 41 ++++++ .../src/test/java/DP/MinPathSumTest.java | 35 +++++ .../java/DP/MinimumTriangleTotalIITest.java | 50 +++++++ .../java/DP/MinimumTriangleTotalTest.java | 52 ++++++++ .../src/test/java/DP/PalindromeListTest.java | 59 +++++++++ .../src/test/java/DP/ReverseNode2Test.java | 37 ++++++ .../src/test/java/DP/ReverseNode3Test.java | 39 ++++++ .../test/java/DP/ReverseNodeKGroupTest.java | 28 ++++ .../src/test/java/DP/ReverseNodeTest.java | 32 +++++ .../java/DP/RussianDollEnvelopesTest.java | 4 + .../java/DP/UniquePathsWithObstaclesTest.java | 40 ++++++ algorithm/src/test/java/JavaStudy.java | 10 ++ .../java/alibaba/DuplicateLengthTest.java | 43 ++++++ .../array/binarySearch/EatBananaTest.java | 33 +++++ .../array/binarySearch/IsSubsequenceTest.java | 26 ++++ .../array/binarySearch/PeakArrayTest.java | 30 +++++ .../binarySearch/PreimageSizeZFTest.java | 39 ++++++ .../SearchInsertPositionTest.java | 49 +++++++ .../array/binarySearch/SearchMatrixTest.java | 53 ++++++++ .../binarySearch/SearchPositionTest.java | 30 +++++ .../array/binarySearch/SearchRangeTest.java | 44 +++++++ .../binarySearch/ShipWithinDaysTest.java | 30 +++++ .../array/binarySearch/TailingZerosTest.java | 27 ++++ .../array/other/AdvantageShuffleTest.java | 28 ++++ .../other/ContainerWithMostWaterTest.java | 16 +++ .../other/IntervalListIntersectionsTest.java | 29 +++++ .../array/other/MaxRepeatSubStringTest.java | 15 +++ .../other/RemoveDuplicateSortedArrayTest.java | 18 +++ .../array/other/Search2DMatrixIITest.java | 41 ++++++ .../array/other/SquaresSortedArrayTest.java | 18 +++ .../array/other/TrappingRainWaterTest.java | 24 ++++ .../java/array/other/TwoSumLessThanKTest.java | 26 ++++ .../array/slideWIndow/FindAnagramsTest.java | 43 ++++++ .../LengthOfLongestSubstringTest.java | 32 +++++ .../slideWIndow/MinWindowSubstringTest.java | 30 +++++ .../array/slideWIndow/MinimumWindowTest.java | 24 ++++ .../array/slideWIndow/PermutationTest.java | 17 +++ .../slideWIndow/SlidingWindowMaximumTest.java | 18 +++ .../java/backTrack/CombinationSumTest.java | 45 +++++++ .../test/java/backTrack/CombinationsTest.java | 20 +++ .../backTrack/GenerateParenthesesTest.java | 18 +++ .../backTrack/MaximumDepthBinaryTreeTest.java | 4 + .../src/test/java/backTrack/NQueuesTest.java | 32 +++++ .../PartitionKEqualSumSubsetsTest.java | 26 ++++ .../test/java/backTrack/PermutationsTest.java | 28 ++++ .../src/test/java/backTrack/SubsetsTest.java | 29 +++++ .../test/java/backTrack/SudokuSolverTest.java | 47 +++++++ .../test/java/backTrack/TargetSum2Test.java | 17 +++ .../test/java/backTrack/TargetSumTest.java | 17 +++ .../java/binaryHeap/KthLargestDataTest.java | 39 ++++++ .../binaryHeap/KthLargestElementTest.java | 23 ++++ .../test/java/binaryHeap/LRUCacheTest.java | 4 + .../java/binaryHeap/MaxFrequencyTest.java | 4 + .../test/java/binaryHeap/MedianDataTest.java | 26 ++++ .../java/binaryHeap/MergeSortedListsTest.java | 9 ++ .../test/java/binaryHeap/MinStackTest.java | 32 +++++ .../test/java/binaryHeap/SeatReserveTest.java | 42 ++++++ .../java/binaryHeap/SingleThreadCPUTest.java | 31 +++++ .../BinaryTreeLevelOrderTraversalTest.java | 25 ++++ .../BinaryTreePostorderTraversalTest.java | 4 + ...naryTreeZigzagLevelOrderTraversalTest.java | 25 ++++ .../binaryTree/DiameterBinaryTreeTest.java | 17 +++ .../FlattenBinaryTreeToLinkedListTest.java | 21 +++ .../java/binaryTree/InorderTraversalTest.java | 14 ++ .../src/test/java/binaryTree/IntegerTest.java | 18 +++ .../java/binaryTree/InvertBinaryTreeTest.java | 21 +++ .../binaryTree/MaximumDepthNTreeTest.java | 4 + .../MinimumDepthBinaryTreeTest.java | 17 +++ .../test/java/binaryTree/SameTree2Test.java | 19 +++ ...SerializeAndDeserializeBinaryTreeTest.java | 22 ++++ .../FlattenNestedListIterator.java | 68 ++++++++++ .../InsertDeleteGetRandomTest.java | 19 +++ .../dataStructureDesign/LFUCacheTest.java | 23 ++++ .../dataStructureDesign/LRUCache2Test.java | 34 +++++ .../dataStructureDesign/LRUCacheTest.java | 34 +++++ .../java/differenceArray/CarPoolingTest.java | 29 +++++ .../differenceArray/FlightBookingTest.java | 21 +++ .../java/differenceArray/RangeAddTest.java | 21 +++ .../java/graphTherory/AllPathListTest.java | 4 + .../doublePointer/AddTwoNumbers2Test.java | 79 +++++++++++ .../doublePointer/AddTwoNumbersTest.java | 79 +++++++++++ .../doublePointer/DeleteNthNodeTest.java | 27 ++++ .../doublePointer/LinkedListCycleIITest.java | 46 +++++++ .../doublePointer/LinkedListCycleTest.java | 50 +++++++ .../LinkedListIntersectTest.java | 4 + .../doublePointer/MergeKSortedListTest.java | 39 ++++++ .../doublePointer/MergeSortedListTest.java | 43 ++++++ .../doublePointer/MiddleNodeTest.java | 29 +++++ .../doublePointer/RemoveDuplicateTest.java | 43 ++++++ algorithm/src/test/java/nSum/NSumTest.java | 87 +++++++++++++ .../src/test/java/nSum/ThreeSumTest.java | 52 ++++++++ algorithm/src/test/java/nSum/TwoSumTest.java | 52 ++++++++ .../src/test/java/other/IsIsomorphicTest.java | 25 ++++ .../test/java/prefixSum/MatrixSumTest.java | 27 ++++ .../src/test/java/prefixSum/NumArrayTest.java | 23 ++++ .../test/java/prefixSum/NumMatrixTest.java | 34 +++++ .../java/prefixSum/ProductOfNumbersTest.java | 32 +++++ .../test/java/stack_queue/EvalRPNTest.java | 33 +++++ .../ImplementQueueUsingStacksTest.java | 22 ++++ .../ImplementStackUsingQueuesTest.java | 23 ++++ .../LongestValidParenthesesTest.java | 37 ++++++ .../java/stack_queue/MinAddMakeValidTest.java | 30 +++++ .../test/java/stack_queue/MinStackTest.java | 32 +++++ ...mumInsertionsToBalanceParenthesesTest.java | 30 +++++ .../src/test/java/stack_queue/QueueTest.java | 55 ++++++++ .../java/stack_queue/SimplifyPathTest.java | 41 ++++++ .../stack_queue/SlidingWindowMaxTest.java | 22 ++++ .../stack_queue/ValidParenthesesTest.java | 40 ++++++ .../BinaryTreeLevelOrderTraversal.class | Bin 0 -> 1623 bytes .../BinaryTreeLevelOrderTraversalII.class | Bin 0 -> 1660 bytes .../BinaryTreeZigzagLevelOrderTraversal.class | Bin 0 -> 1760 bytes .../classes/BFS_DFS/CountSubIslands.class | Bin 0 -> 959 bytes .../classes/BFS_DFS/MaxAreaIsland.class | Bin 0 -> 903 bytes .../BFS_DFS/MinimumDepthBinaryTree.class | Bin 0 -> 1105 bytes .../classes/BFS_DFS/NumberClosedIslands.class | Bin 0 -> 952 bytes .../BFS_DFS/NumberDistinctIslands.class | Bin 0 -> 2075 bytes .../classes/BFS_DFS/NumberEnclaves.class | Bin 0 -> 929 bytes .../classes/BFS_DFS/NumberIslands.class | Bin 0 -> 800 bytes .../target/classes/BFS_DFS/OpenTheLock.class | Bin 0 -> 2088 bytes .../classes/BFS_DFS/SlidingPuzzle.class | Bin 0 -> 2326 bytes .../classes/BFS_DFS/SurroundedRegions.class | Bin 0 -> 1139 bytes .../target/classes/DP/BloodSimilarity.class | Bin 0 -> 1667 bytes .../target/classes/DP/DisjointLines.class | Bin 0 -> 1013 bytes algorithm/target/classes/DP/Envelops$1.class | Bin 0 -> 826 bytes algorithm/target/classes/DP/Envelops.class | Bin 0 -> 570 bytes .../target/classes/DP/IsSubsequence.class | Bin 0 -> 830 bytes .../classes/DP/LongestCommonSubsequence.class | Bin 0 -> 926 bytes .../DP/LongestCommonSubsequenceII.class | Bin 0 -> 1225 bytes .../target/classes/DP/MinFallingPathSum.class | Bin 0 -> 1284 bytes .../classes/DP/MinFallingPathSum2.class | Bin 0 -> 1195 bytes .../classes/DP/MinFallingPathSumII.class | Bin 0 -> 1198 bytes algorithm/target/classes/DP/MinPathSum.class | Bin 0 -> 985 bytes .../classes/DP/MinimumTriangleTotal.class | Bin 0 -> 1661 bytes .../classes/DP/MinimumTriangleTotalII.class | Bin 0 -> 1612 bytes .../target/classes/DP/PalindromeList.class | Bin 0 -> 1106 bytes algorithm/target/classes/DP/ReverseNode.class | Bin 0 -> 630 bytes .../target/classes/DP/ReverseNode2.class | Bin 0 -> 714 bytes .../target/classes/DP/ReverseNode3.class | Bin 0 -> 1056 bytes .../target/classes/DP/ReverseNodeKGroup.class | Bin 0 -> 1075 bytes .../classes/DP/RussianDollEnvelopes$1.class | Bin 0 -> 909 bytes .../classes/DP/RussianDollEnvelopes.class | Bin 0 -> 658 bytes .../classes/DP/UniquePathsWithObstacles.class | Bin 0 -> 961 bytes .../classes/alibaba/DuplicateLength.class | Bin 0 -> 1311 bytes .../classes/alibaba/ThreadPrintABC$1.class | Bin 0 -> 655 bytes .../classes/alibaba/ThreadPrintABC.class | Bin 0 -> 2226 bytes .../classes/alibaba/ThreadPrintABC2.class | Bin 0 -> 2236 bytes .../classes/alibaba/ThreadPrintCharNum.class | Bin 0 -> 2230 bytes .../classes/alibaba/ThreadPrintNums.class | Bin 0 -> 1847 bytes .../array/binarySearch/EatBanana.class | Bin 0 -> 1035 bytes .../array/binarySearch/IsSubsequence.class | Bin 0 -> 739 bytes .../array/binarySearch/PeakArray.class | Bin 0 -> 573 bytes .../array/binarySearch/PreimageSizeZF.class | Bin 0 -> 938 bytes .../binarySearch/SearchInsertPosition.class | Bin 0 -> 692 bytes .../array/binarySearch/SearchMatrix.class | Bin 0 -> 832 bytes .../array/binarySearch/SearchPosition.class | Bin 0 -> 622 bytes .../array/binarySearch/SearchRange.class | Bin 0 -> 893 bytes .../array/binarySearch/ShipWithinDays.class | Bin 0 -> 998 bytes .../array/binarySearch/TailingZeros.class | Bin 0 -> 499 bytes .../array/other/AdvantageShuffle.class | Bin 0 -> 2446 bytes .../array/other/ContainerWithMostWater.class | Bin 0 -> 848 bytes .../other/IntervalListIntersections.class | Bin 0 -> 1384 bytes .../array/other/MaxRepeatSubString.class | Bin 0 -> 1100 bytes .../other/RemoveDuplicateSortedArray.class | Bin 0 -> 642 bytes .../array/other/Search2DMatrixII.class | Bin 0 -> 611 bytes .../array/other/SquaresSortedArray.class | Bin 0 -> 703 bytes .../array/other/TrappingRainWater.class | Bin 0 -> 893 bytes .../classes/array/other/TwoSumLessThanK.class | Bin 0 -> 714 bytes .../array/slideWindow/FindAnagrams.class | Bin 0 -> 1971 bytes .../LengthOfLongestSubstring.class | Bin 0 -> 1449 bytes .../slideWindow/MinWindowSubstring.class | Bin 0 -> 1907 bytes .../array/slideWindow/MinimumWindow.class | Bin 0 -> 814 bytes .../array/slideWindow/MonotonicMinQueue.class | Bin 0 -> 1109 bytes .../array/slideWindow/MonotonicQueue.class | Bin 0 -> 1110 bytes .../array/slideWindow/Permutation.class | Bin 0 -> 1671 bytes .../slideWindow/SlidingWindowMaximum.class | Bin 0 -> 1254 bytes .../classes/backTrack/CombinationSum.class | Bin 0 -> 1552 bytes .../classes/backTrack/Combinations.class | Bin 0 -> 1722 bytes .../backTrack/GenerateParentheses.class | Bin 0 -> 1445 bytes .../backTrack/MaximumDepthBinaryTree.class | Bin 0 -> 721 bytes .../target/classes/backTrack/NQueues.class | Bin 0 -> 2026 bytes .../backTrack/PartitionKEqualSumSubsets.class | Bin 0 -> 1009 bytes .../classes/backTrack/Permutations.class | Bin 0 -> 1549 bytes .../target/classes/backTrack/Subsets.class | Bin 0 -> 1445 bytes .../classes/backTrack/SudokuSolver.class | Bin 0 -> 1105 bytes .../target/classes/backTrack/TargetSum.class | Bin 0 -> 760 bytes .../target/classes/backTrack/TargetSum2.class | Bin 0 -> 734 bytes .../classes/binaryHeap/KthLargestData.class | Bin 0 -> 1777 bytes .../binaryHeap/KthLargestElement.class | Bin 0 -> 1720 bytes .../classes/binaryHeap/MaxFrequency.class | Bin 0 -> 444 bytes .../classes/binaryHeap/MedianData.class | Bin 0 -> 2118 bytes .../target/classes/binaryHeap/MinStack.class | Bin 0 -> 1200 bytes .../classes/binaryHeap/SeatReserve.class | Bin 0 -> 1789 bytes .../binaryHeap/SingleThreadCPU$1Task.class | Bin 0 -> 724 bytes .../classes/binaryHeap/SingleThreadCPU.class | Bin 0 -> 2653 bytes .../BinaryTreeLevelOrderTraversal.class | Bin 0 -> 1484 bytes .../BinaryTreePostorderTraversal.class | Bin 0 -> 1296 bytes .../BinaryTreeZigzagLevelOrderTraversal.class | Bin 0 -> 1577 bytes .../binaryTree/DiameterBinaryTree.class | Bin 0 -> 784 bytes .../FlattenBinaryTreeToLinkedList.class | Bin 0 -> 1393 bytes .../classes/binaryTree/InorderTraversal.class | Bin 0 -> 1382 bytes .../classes/binaryTree/InvertBinaryTree.class | Bin 0 -> 711 bytes .../binaryTree/LevelOrderTraversal.class | Bin 0 -> 1595 bytes .../classes/binaryTree/MaximumDepth.class | Bin 0 -> 450 bytes .../binaryTree/MaximumDepthNTree.class | Bin 0 -> 298 bytes .../binaryTree/MinimumDepthBinaryTree.class | Bin 0 -> 786 bytes .../target/classes/binaryTree/SameTree.class | Bin 0 -> 652 bytes .../target/classes/binaryTree/SameTree2.class | Bin 0 -> 775 bytes .../SerializeAndDeserializeBinaryTree.class | Bin 0 -> 2386 bytes .../target/classes/binaryTree/TreeNode.class | Bin 0 -> 2304 bytes .../ZigzagLevelOrderTraversal.class | Bin 0 -> 1733 bytes .../InsertDeleteGetRandom.class | Bin 0 -> 1166 bytes .../dataStructureDesign/LFUCache.class | Bin 0 -> 2570 bytes .../classes/dataStructureDesign/LFUNode.class | Bin 0 -> 552 bytes .../dataStructureDesign/LRUCache.class | Bin 0 -> 1340 bytes .../dataStructureDesign/LRUCache2.class | Bin 0 -> 1619 bytes .../MaximumFrequencyStack.class | Bin 0 -> 1686 bytes .../dataStructureDesign/MinStack.class | Bin 0 -> 1219 bytes .../classes/dataStructureDesign/Node.class | Bin 0 -> 398 bytes .../classes/differenceArray/CarPooling.class | Bin 0 -> 775 bytes .../differenceArray/FlightBooking.class | Bin 0 -> 717 bytes .../classes/differenceArray/RangeAdd.class | Bin 0 -> 704 bytes .../classes/graphTheory/AllPathList.class | Bin 0 -> 1495 bytes .../doublePointer/AddTwoNumbers.class | Bin 0 -> 1018 bytes .../doublePointer/AddTwoNumbers2.class | Bin 0 -> 1574 bytes .../doublePointer/DeleteNthNode.class | Bin 0 -> 800 bytes .../doublePointer/LinkedListCycle.class | Bin 0 -> 745 bytes .../doublePointer/LinkedListCycleII.class | Bin 0 -> 772 bytes .../doublePointer/LinkedListIntersect.class | Bin 0 -> 784 bytes .../linkedList/doublePointer/ListNode.class | Bin 0 -> 1205 bytes .../doublePointer/MergeKSortedList.class | Bin 0 -> 2032 bytes .../doublePointer/MergeSortedList.class | Bin 0 -> 981 bytes .../linkedList/doublePointer/MiddleNode.class | Bin 0 -> 695 bytes .../doublePointer/PalindromeLinkedList.class | Bin 0 -> 335 bytes .../doublePointer/RemoveDuplicate.class | Bin 0 -> 726 bytes .../doublePointer/ReverseLinkedListII.class | Bin 0 -> 332 bytes .../doublePointer/ReverseNodesInKGroup.class | Bin 0 -> 629 bytes .../target/classes/multiThread/FizzBuzz.class | Bin 0 -> 3076 bytes .../classes/multiThread/FizzBuzzII$1.class | Bin 0 -> 662 bytes .../classes/multiThread/FizzBuzzII$2.class | Bin 0 -> 662 bytes .../classes/multiThread/FizzBuzzII$3.class | Bin 0 -> 666 bytes .../classes/multiThread/FizzBuzzII.class | Bin 0 -> 3768 bytes .../classes/multiThread/FizzBuzzIII.class | Bin 0 -> 3653 bytes .../classes/multiThread/IntConsumer.class | Bin 0 -> 488 bytes .../PrintFooBarAlternately$1.class | Bin 0 -> 821 bytes .../PrintFooBarAlternately$2.class | Bin 0 -> 821 bytes .../multiThread/PrintFooBarAlternately.class | Bin 0 -> 2731 bytes .../classes/multiThread/PrintInOrder$1.class | Bin 0 -> 765 bytes .../classes/multiThread/PrintInOrder$2.class | Bin 0 -> 767 bytes .../classes/multiThread/PrintInOrder$3.class | Bin 0 -> 765 bytes .../classes/multiThread/PrintInOrder.class | Bin 0 -> 3309 bytes .../classes/multiThread/PrintInOrder2$1.class | Bin 0 -> 771 bytes .../classes/multiThread/PrintInOrder2$2.class | Bin 0 -> 773 bytes .../classes/multiThread/PrintInOrder2$3.class | Bin 0 -> 771 bytes .../classes/multiThread/PrintInOrder2.class | Bin 0 -> 3308 bytes .../classes/multiThread/PrintInOrder3$1.class | Bin 0 -> 771 bytes .../classes/multiThread/PrintInOrder3$2.class | Bin 0 -> 773 bytes .../classes/multiThread/PrintInOrder3$3.class | Bin 0 -> 771 bytes .../classes/multiThread/PrintInOrder3.class | Bin 0 -> 3246 bytes .../multiThread/PrintZeroOddEven.class | Bin 0 -> 2511 bytes .../classes/multiThread/ProduceH2O.class | Bin 0 -> 945 bytes algorithm/target/classes/nSum/NSum.class | Bin 0 -> 1881 bytes algorithm/target/classes/nSum/ThreeSum.class | Bin 0 -> 1828 bytes algorithm/target/classes/nSum/TwoSum.class | Bin 0 -> 2094 bytes algorithm/target/classes/offer/Divide.class | Bin 0 -> 255 bytes .../target/classes/other/IsIsomorphic.class | Bin 0 -> 1439 bytes .../target/classes/prefixSum/MatrixSum.class | Bin 0 -> 967 bytes .../target/classes/prefixSum/NumArray.class | Bin 0 -> 621 bytes .../target/classes/prefixSum/NumMatrix.class | Bin 0 -> 726 bytes .../classes/prefixSum/ProductOfNumbers.class | Bin 0 -> 1172 bytes .../target/classes/stack_queue/EvalRPN.class | Bin 0 -> 1418 bytes .../ImplementQueueUsingStacks.class | Bin 0 -> 1382 bytes .../ImplementStackUsingQueues.class | Bin 0 -> 1294 bytes .../stack_queue/LongestValidParentheses.class | Bin 0 -> 1331 bytes .../classes/stack_queue/MinAddMakeValid.class | Bin 0 -> 710 bytes .../target/classes/stack_queue/MinStack.class | Bin 0 -> 1216 bytes ...inimumInsertionsToBalanceParentheses.class | Bin 0 -> 794 bytes .../classes/stack_queue/MonotonicQueue.class | Bin 0 -> 1085 bytes .../classes/stack_queue/SimplifyPath.class | Bin 0 -> 1381 bytes .../stack_queue/SlidingWindowMax.class | Bin 0 -> 851 bytes .../stack_queue/ValidParentheses.class | Bin 0 -> 1199 bytes .../BinaryTreeLevelOrderTraversalIITest.class | Bin 0 -> 1532 bytes .../BinaryTreeLevelOrderTraversalTest.class | Bin 0 -> 1521 bytes ...aryTreeZigzagLevelOrderTraversalTest.class | Bin 0 -> 2085 bytes .../BSF_DSF/CountSubIslandsTest.class | Bin 0 -> 1466 bytes .../BSF_DSF/MaxAreaIslandTest.class | Bin 0 -> 1450 bytes .../BSF_DSF/MinimumDepthBinaryTreeTest.class | Bin 0 -> 977 bytes .../BSF_DSF/NumberClosedIslandsTest.class | Bin 0 -> 992 bytes .../BSF_DSF/NumberDistinctIslandsTest.class | Bin 0 -> 1179 bytes .../BSF_DSF/NumberEnclavesTest.class | Bin 0 -> 845 bytes .../BSF_DSF/NumberIslandsTest.class | Bin 0 -> 1131 bytes .../BSF_DSF/OpenTheLockTest.class | Bin 0 -> 1460 bytes .../BSF_DSF/SlidingPuzzleTest.class | Bin 0 -> 1125 bytes .../BSF_DSF/SurroundedRegionsTest.class | Bin 0 -> 963 bytes .../test-classes/DP/BloodSimilarityTest.class | Bin 0 -> 825 bytes .../test-classes/DP/DisjointLinesTest.class | Bin 0 -> 1174 bytes .../target/test-classes/DP/EnvelopsTest.class | Bin 0 -> 267 bytes .../test-classes/DP/IsSubsequenceTest.class | Bin 0 -> 966 bytes .../DP/LongestCommonSubsequenceIITest.class | Bin 0 -> 1208 bytes .../DP/LongestCommonSubsequenceTest.class | Bin 0 -> 1198 bytes .../DP/MinFallingPathSum2Test.class | Bin 0 -> 1248 bytes .../DP/MinFallingPathSumIITest.class | Bin 0 -> 1371 bytes .../DP/MinFallingPathSumTest.class | Bin 0 -> 1361 bytes .../test-classes/DP/MinPathSumTest.class | Bin 0 -> 936 bytes .../DP/MinimumTriangleTotalIITest.class | Bin 0 -> 1857 bytes .../DP/MinimumTriangleTotalTest.class | Bin 0 -> 1847 bytes .../test-classes/DP/PalindromeListTest.class | Bin 0 -> 1657 bytes .../test-classes/DP/ReverseNode2Test.class | Bin 0 -> 1493 bytes .../test-classes/DP/ReverseNode3Test.class | Bin 0 -> 1500 bytes .../DP/ReverseNodeKGroupTest.class | Bin 0 -> 1301 bytes .../test-classes/DP/ReverseNodeTest.class | Bin 0 -> 1192 bytes .../DP/RussianDollEnvelopesTest.class | Bin 0 -> 303 bytes .../DP/UniquePathsWithObstaclesTest.class | Bin 0 -> 1167 bytes algorithm/target/test-classes/JavaStudy.class | Bin 0 -> 370 bytes .../alibaba/DuplicateLengthTest.class | Bin 0 -> 1216 bytes .../array/binarySearch/EatBananaTest.class | Bin 0 -> 1127 bytes .../binarySearch/IsSubsequenceTest.class | Bin 0 -> 1030 bytes .../array/binarySearch/PeakArrayTest.class | Bin 0 -> 1035 bytes .../binarySearch/PreimageSizeZFTest.class | Bin 0 -> 1244 bytes .../SearchInsertPositionTest.class | Bin 0 -> 1354 bytes .../array/binarySearch/SearchMatrixTest.class | Bin 0 -> 1772 bytes .../binarySearch/SearchPositionTest.class | Bin 0 -> 1069 bytes .../array/binarySearch/SearchRangeTest.class | Bin 0 -> 1029 bytes .../binarySearch/ShipWithinDaysTest.class | Bin 0 -> 1144 bytes .../array/binarySearch/TailingZerosTest.class | Bin 0 -> 966 bytes .../array/other/AdvantageShuffleTest.class | Bin 0 -> 1119 bytes .../other/ContainerWithMostWaterTest.class | Bin 0 -> 854 bytes .../other/IntervalListIntersectionsTest.class | Bin 0 -> 1502 bytes .../array/other/MaxRepeatSubStringTest.class | Bin 0 -> 909 bytes .../RemoveDuplicateSortedArrayTest.class | Bin 0 -> 931 bytes .../array/other/Search2DMatrixIITest.class | Bin 0 -> 1266 bytes .../array/other/SquaresSortedArrayTest.class | Bin 0 -> 893 bytes .../array/other/TrappingRainWaterTest.class | Bin 0 -> 991 bytes .../array/other/TwoSumLessThanKTest.class | Bin 0 -> 997 bytes .../array/slideWIndow/FindAnagramsTest.class | Bin 0 -> 1637 bytes .../LengthOfLongestSubstringTest.class | Bin 0 -> 1132 bytes .../slideWIndow/MinWindowSubstringTest.class | Bin 0 -> 1251 bytes .../array/slideWIndow/MinimumWindowTest.class | Bin 0 -> 1015 bytes .../array/slideWIndow/PermutationTest.class | Bin 0 -> 802 bytes .../SlidingWindowMaximumTest.class | Bin 0 -> 836 bytes .../backTrack/CombinationSumTest.class | Bin 0 -> 1577 bytes .../backTrack/CombinationsTest.class | Bin 0 -> 1249 bytes .../backTrack/GenerateParenthesesTest.class | Bin 0 -> 1189 bytes .../MaximumDepthBinaryTreeTest.class | Bin 0 -> 323 bytes .../test-classes/backTrack/NQueuesTest.class | Bin 0 -> 1284 bytes .../PartitionKEqualSumSubsetsTest.class | Bin 0 -> 1040 bytes .../backTrack/PermutationsTest.class | Bin 0 -> 1237 bytes .../test-classes/backTrack/SubsetsTest.class | Bin 0 -> 1207 bytes .../backTrack/SudokuSolverTest.class | Bin 0 -> 1537 bytes .../backTrack/TargetSum2Test.class | Bin 0 -> 751 bytes .../backTrack/TargetSumTest.class | Bin 0 -> 746 bytes .../binaryHeap/KthLargestDataTest.class | Bin 0 -> 1019 bytes .../binaryHeap/KthLargestElementTest.class | Bin 0 -> 782 bytes .../binaryHeap/LRUCacheTest.class | Bin 0 -> 283 bytes .../binaryHeap/MaxFrequencyTest.class | Bin 0 -> 295 bytes .../binaryHeap/MedianDataTest.class | Bin 0 -> 757 bytes .../binaryHeap/MergeSortedListsTest.class | Bin 0 -> 307 bytes .../binaryHeap/MinStackTest.class | Bin 0 -> 813 bytes .../binaryHeap/SeatReserveTest.class | Bin 0 -> 869 bytes .../binaryHeap/SingleThreadCPUTest.class | Bin 0 -> 1059 bytes .../BinaryTreeLevelOrderTraversalTest.class | Bin 0 -> 1533 bytes .../BinaryTreePostorderTraversalTest.class | Bin 0 -> 343 bytes ...aryTreeZigzagLevelOrderTraversalTest.class | Bin 0 -> 1551 bytes .../binaryTree/DiameterBinaryTreeTest.class | Bin 0 -> 961 bytes .../FlattenBinaryTreeToLinkedListTest.class | Bin 0 -> 1690 bytes .../binaryTree/InorderTraversalTest.class | Bin 0 -> 543 bytes .../test-classes/binaryTree/IntegerTest.class | Bin 0 -> 792 bytes .../binaryTree/InvertBinaryTreeTest.class | Bin 0 -> 1161 bytes .../binaryTree/MaximumDepthNTreeTest.class | Bin 0 -> 310 bytes .../MinimumDepthBinaryTreeTest.class | Bin 0 -> 989 bytes .../binaryTree/SameTree2Test.class | Bin 0 -> 973 bytes ...erializeAndDeserializeBinaryTreeTest.class | Bin 0 -> 1383 bytes .../FlattenNestedListIterator.class | Bin 0 -> 1537 bytes .../InsertDeleteGetRandomTest.class | Bin 0 -> 934 bytes .../dataStructureDesign/LFUCacheTest.class | Bin 0 -> 868 bytes .../dataStructureDesign/LRUCache2Test.class | Bin 0 -> 1076 bytes .../dataStructureDesign/LRUCacheTest.class | Bin 0 -> 1071 bytes .../dataStructureDesign/NestedInteger.class | Bin 0 -> 1316 bytes .../differenceArray/CarPoolingTest.class | Bin 0 -> 924 bytes .../differenceArray/FlightBookingTest.class | Bin 0 -> 812 bytes .../differenceArray/RangeAddTest.class | Bin 0 -> 771 bytes .../graphTherory/AllPathListTest.class | Bin 0 -> 296 bytes .../doublePointer/AddTwoNumbers2Test.class | Bin 0 -> 2309 bytes .../doublePointer/AddTwoNumbersTest.class | Bin 0 -> 2304 bytes .../doublePointer/DeleteNthNodeTest.class | Bin 0 -> 1332 bytes .../doublePointer/LinkedListCycleIITest.class | Bin 0 -> 1542 bytes .../doublePointer/LinkedListCycleTest.class | Bin 0 -> 1547 bytes .../LinkedListIntersectTest.class | Bin 0 -> 344 bytes .../doublePointer/MergeKSortedListTest.class | Bin 0 -> 1564 bytes .../doublePointer/MergeSortedListTest.class | Bin 0 -> 1661 bytes .../doublePointer/MiddleNodeTest.class | Bin 0 -> 1307 bytes .../doublePointer/RemoveDuplicateTest.class | Bin 0 -> 1494 bytes .../target/test-classes/nSum/NSumTest.class | Bin 0 -> 2380 bytes .../test-classes/nSum/ThreeSumTest.class | Bin 0 -> 1793 bytes .../target/test-classes/nSum/TwoSumTest.class | Bin 0 -> 1760 bytes .../test-classes/offer/DivideTest.class | Bin 0 -> 267 bytes .../test-classes/other/IsIsomorphicTest.class | Bin 0 -> 984 bytes .../prefixSum/MatrixSumTest.class | Bin 0 -> 861 bytes .../test-classes/prefixSum/NumArrayTest.class | Bin 0 -> 747 bytes .../prefixSum/NumMatrixTest.class | Bin 0 -> 1097 bytes .../prefixSum/ProductOfNumbersTest.class | Bin 0 -> 866 bytes .../stack_queue/EvalRPNTest.class | Bin 0 -> 1232 bytes .../ImplementQueueUsingStacksTest.class | Bin 0 -> 904 bytes .../ImplementStackUsingQueuesTest.class | Bin 0 -> 904 bytes .../LongestValidParenthesesTest.class | Bin 0 -> 1313 bytes .../stack_queue/MinAddMakeValidTest.class | Bin 0 -> 1102 bytes .../stack_queue/MinStackTest.class | Bin 0 -> 769 bytes ...umInsertionsToBalanceParenthesesTest.class | Bin 0 -> 1223 bytes .../stack_queue/QueueTest$QueueNode.class | Bin 0 -> 515 bytes .../test-classes/stack_queue/QueueTest.class | Bin 0 -> 2416 bytes .../stack_queue/SimplifyPathTest.class | Bin 0 -> 1425 bytes .../stack_queue/SlidingWindowMaxTest.class | Bin 0 -> 832 bytes .../stack_queue/ValidParenthesesTest.class | Bin 0 -> 1255 bytes .../target/classes/AreNumbersAscending.class | Bin 0 -> 1041 bytes .../target/classes/ArrayStringsAreEqual.class | Bin 0 -> 830 bytes .../classes/ArrayStringsAreEqualRedoI.class | Bin 0 -> 879 bytes leetcode/target/classes/BuildTree.class | Bin 0 -> 1469 bytes leetcode/target/classes/CanJump.class | Bin 0 -> 542 bytes leetcode/target/classes/CheckInclusion.class | Bin 0 -> 1767 bytes .../target/classes/CheckOnesSegment.class | Bin 0 -> 1148 bytes leetcode/target/classes/CombinationSum.class | Bin 0 -> 1501 bytes leetcode/target/classes/CombinationSum2.class | Bin 0 -> 1594 bytes leetcode/target/classes/Combine.class | Bin 0 -> 1398 bytes leetcode/target/classes/CommonChars.class | Bin 0 -> 2293 bytes leetcode/target/classes/CountPrimes.class | Bin 0 -> 728 bytes leetcode/target/classes/CuttingRope.class | Bin 0 -> 555 bytes leetcode/target/classes/CuttingRopeII.class | Bin 0 -> 699 bytes leetcode/target/classes/DecodeString.class | Bin 0 -> 547 bytes leetcode/target/classes/DeleteAndEarn.class | Bin 0 -> 1013 bytes .../target/classes/DeleteDuplicates.class | Bin 0 -> 679 bytes .../target/classes/DeleteDuplicatesII.class | Bin 0 -> 749 bytes leetcode/target/classes/Divide.class | Bin 0 -> 385 bytes leetcode/target/classes/Exist.class | Bin 0 -> 1148 bytes leetcode/target/classes/Expand.class | Bin 0 -> 3673 bytes leetcode/target/classes/FindDuplicate.class | Bin 0 -> 539 bytes .../classes/FindMedianSortedArrays.class | Bin 0 -> 848 bytes .../classes/FindMedianSortedArraysII.class | Bin 0 -> 798 bytes .../classes/FindMedianSortedArraysIII.class | Bin 0 -> 900 bytes leetcode/target/classes/FindMin.class | Bin 0 -> 633 bytes leetcode/target/classes/FindPeakElement.class | Bin 0 -> 537 bytes .../target/classes/FirstMissingPositive.class | Bin 0 -> 647 bytes leetcode/target/classes/FourSum.class | Bin 0 -> 699 bytes leetcode/target/classes/FullJustify.class | Bin 0 -> 1300 bytes .../target/classes/GenerateParenthesis.class | Bin 0 -> 1428 bytes leetcode/target/classes/GroupAnagrams.class | Bin 0 -> 1659 bytes leetcode/target/classes/HIndexII.class | Bin 0 -> 540 bytes leetcode/target/classes/HammingWeight.class | Bin 0 -> 481 bytes leetcode/target/classes/InsertInterval.class | Bin 0 -> 1241 bytes leetcode/target/classes/IntToRoman.class | Bin 0 -> 1875 bytes leetcode/target/classes/IntegerReverse.class | Bin 0 -> 570 bytes leetcode/target/classes/IsInterleave.class | Bin 0 -> 1092 bytes leetcode/target/classes/IsMatch.class | Bin 0 -> 878 bytes leetcode/target/classes/IsNumber$1.class | Bin 0 -> 783 bytes leetcode/target/classes/IsNumber$2.class | Bin 0 -> 755 bytes leetcode/target/classes/IsNumber$3.class | Bin 0 -> 784 bytes leetcode/target/classes/IsNumber$4.class | Bin 0 -> 770 bytes leetcode/target/classes/IsNumber$5.class | Bin 0 -> 741 bytes leetcode/target/classes/IsNumber$6.class | Bin 0 -> 757 bytes leetcode/target/classes/IsNumber$7.class | Bin 0 -> 742 bytes leetcode/target/classes/IsNumber$8.class | Bin 0 -> 757 bytes leetcode/target/classes/IsNumber$9.class | Bin 0 -> 742 bytes leetcode/target/classes/IsNumber.class | Bin 0 -> 1569 bytes leetcode/target/classes/IsSubstructure.class | Bin 0 -> 1182 bytes leetcode/target/classes/Jump.class | Bin 0 -> 569 bytes leetcode/target/classes/LengthOfLIS.class | Bin 0 -> 940 bytes .../target/classes/LengthOfLastWord.class | Bin 0 -> 634 bytes .../classes/LetterCasePermutation.class | Bin 0 -> 1270 bytes .../target/classes/LetterCombinations.class | Bin 0 -> 2113 bytes leetcode/target/classes/ListNode.class | Bin 0 -> 1597 bytes .../target/classes/LongestPalindrome.class | Bin 0 -> 1336 bytes .../classes/LongestValidParentheses.class | Bin 0 -> 1028 bytes .../classes/LongestValidParenthesesII.class | Bin 0 -> 1188 bytes .../classes/META-INF/leetcode.kotlin_module | Bin 0 -> 16 bytes leetcode/target/classes/MaxArea.class | Bin 0 -> 578 bytes leetcode/target/classes/MaxPoints.class | Bin 0 -> 382 bytes leetcode/target/classes/MaxSubArray.class | Bin 0 -> 678 bytes leetcode/target/classes/MaxSubArrayII.class | Bin 0 -> 919 bytes .../classes/MaxSubarraySumCircular.class | Bin 0 -> 1372 bytes .../classes/MaxSubarraySumCircularII.class | Bin 0 -> 826 bytes leetcode/target/classes/MergeIntervals.class | Bin 0 -> 2420 bytes .../target/classes/MergeIntervalsII.class | Bin 0 -> 1814 bytes leetcode/target/classes/MergeKLists.class | Bin 0 -> 1733 bytes leetcode/target/classes/MergeTwoLists.class | Bin 0 -> 1788 bytes leetcode/target/classes/MiddleNode.class | Bin 0 -> 534 bytes leetcode/target/classes/MinArea.class | Bin 0 -> 859 bytes leetcode/target/classes/MinMeetingRooms.class | Bin 0 -> 1172 bytes leetcode/target/classes/Multiply.class | Bin 0 -> 1185 bytes leetcode/target/classes/MyAtoi.class | Bin 0 -> 917 bytes leetcode/target/classes/MyPow.class | Bin 0 -> 569 bytes leetcode/target/classes/MySqrt.class | Bin 0 -> 568 bytes leetcode/target/classes/NQueens.class | Bin 0 -> 2205 bytes leetcode/target/classes/NQueens2.class | Bin 0 -> 1529 bytes leetcode/target/classes/Node.class | Bin 0 -> 1257 bytes .../target/classes/NumMatchingSubseq.class | Bin 0 -> 1731 bytes .../target/classes/OrderCycleLinkedList.class | Bin 0 -> 507 bytes leetcode/target/classes/Partition.class | Bin 0 -> 1039 bytes leetcode/target/classes/ReadBinaryWatch.class | Bin 0 -> 1583 bytes leetcode/target/classes/RecordSpaces.class | Bin 0 -> 1667 bytes .../target/classes/RemoveDuplicates.class | Bin 0 -> 520 bytes .../classes/RemoveZeroSumSublists.class | Bin 0 -> 1140 bytes leetcode/target/classes/ReorderList.class | Bin 0 -> 1087 bytes leetcode/target/classes/ReorderListII.class | Bin 0 -> 1213 bytes leetcode/target/classes/ReverseBits.class | Bin 0 -> 480 bytes .../target/classes/ReverseLeftWords.class | Bin 0 -> 704 bytes leetcode/target/classes/ReverseList.class | Bin 0 -> 623 bytes leetcode/target/classes/ReverseWords.class | Bin 0 -> 1009 bytes leetcode/target/classes/ReverseWords2.class | Bin 0 -> 519 bytes leetcode/target/classes/Rob.class | Bin 0 -> 719 bytes leetcode/target/classes/Rob2.class | Bin 0 -> 784 bytes leetcode/target/classes/Search.class | Bin 0 -> 637 bytes leetcode/target/classes/SearchII.class | Bin 0 -> 718 bytes leetcode/target/classes/SearchMatrixII.class | Bin 0 -> 605 bytes leetcode/target/classes/SearchRange.class | Bin 0 -> 720 bytes leetcode/target/classes/SimplifyPath.class | Bin 0 -> 550 bytes leetcode/target/classes/SortColors.class | Bin 0 -> 562 bytes leetcode/target/classes/SpiralOrder.class | Bin 0 -> 951 bytes .../target/classes/SplitIntoFibonacci.class | Bin 0 -> 674 bytes leetcode/target/classes/StrStr.class | Bin 0 -> 1962 bytes leetcode/target/classes/Subsets.class | Bin 0 -> 1383 bytes leetcode/target/classes/SubsetsWithDup.class | Bin 0 -> 1498 bytes leetcode/target/classes/SwapPairs.class | Bin 0 -> 621 bytes leetcode/target/classes/ThreeSum.class | Bin 0 -> 1090 bytes leetcode/target/classes/ThreeSumClosest.class | Bin 0 -> 795 bytes leetcode/target/classes/ThreeSumSmaller.class | Bin 0 -> 740 bytes leetcode/target/classes/Trap.class | Bin 0 -> 761 bytes leetcode/target/classes/TreeNode.class | Bin 0 -> 1735 bytes .../classes/ValidateStackSequences.class | Bin 0 -> 1036 bytes leetcode/target/classes/ZigZagConvert.class | Bin 0 -> 1568 bytes .../AreNumbersAscendingTest.class | Bin 0 -> 1322 bytes .../ArrayStringsAreEqualRedoITest.class | Bin 0 -> 1316 bytes .../ArrayStringsAreEqualTest.class | Bin 0 -> 1291 bytes .../target/test-classes/CanJumpTest.class | Bin 0 -> 839 bytes .../test-classes/CheckInclusionTest.class | Bin 0 -> 964 bytes .../test-classes/CheckOnesSegmentTest.class | Bin 0 -> 899 bytes .../test-classes/CombinationSum2Test.class | Bin 0 -> 1529 bytes .../test-classes/CombinationSumTest.class | Bin 0 -> 1762 bytes .../target/test-classes/CombineTest.class | Bin 0 -> 1402 bytes .../target/test-classes/CommonCharsTest.class | Bin 0 -> 1123 bytes .../target/test-classes/CountPrimesTest.class | Bin 0 -> 811 bytes .../test-classes/CuttingRopeIITest.class | Bin 0 -> 1064 bytes .../target/test-classes/CuttingRopeTest.class | Bin 0 -> 926 bytes .../test-classes/DecodeStringTest.class | Bin 0 -> 773 bytes .../test-classes/DeleteAndEarnTest.class | Bin 0 -> 1030 bytes .../test-classes/DeleteDuplicatesIITest.class | Bin 0 -> 1278 bytes .../test-classes/DeleteDuplicatesTest.class | Bin 0 -> 1250 bytes leetcode/target/test-classes/DivideTest.class | Bin 0 -> 689 bytes leetcode/target/test-classes/ExistTest.class | Bin 0 -> 1681 bytes leetcode/target/test-classes/ExpandTest.class | Bin 0 -> 1141 bytes .../test-classes/FindDuplicateTest.class | Bin 0 -> 875 bytes .../FindMedianSortedArraysIIITest.class | Bin 0 -> 1477 bytes .../FindMedianSortedArraysIITest.class | Bin 0 -> 976 bytes .../FindMedianSortedArraysTest.class | Bin 0 -> 966 bytes .../target/test-classes/FindMinTest.class | Bin 0 -> 835 bytes .../test-classes/FindPeakElementTest.class | Bin 0 -> 734 bytes .../FirstMissingPositiveTest.class | Bin 0 -> 1059 bytes .../target/test-classes/FourSumTest.class | Bin 0 -> 1196 bytes .../target/test-classes/FullJustifyTest.class | Bin 0 -> 1029 bytes .../GenerateParenthesisTest.class | Bin 0 -> 1009 bytes .../test-classes/GroupAnagramsTest.class | Bin 0 -> 2471 bytes .../target/test-classes/HIndexIITest.class | Bin 0 -> 1109 bytes .../test-classes/HammingWeightTest.class | Bin 0 -> 953 bytes .../test-classes/InsertIntervalTest.class | Bin 0 -> 1817 bytes .../target/test-classes/IntToRomanTest.class | Bin 0 -> 1246 bytes .../test-classes/IntegerReverseTest.class | Bin 0 -> 1517 bytes .../test-classes/IsInterleaveTest.class | Bin 0 -> 1789 bytes .../target/test-classes/IsMatchTest.class | Bin 0 -> 1414 bytes .../target/test-classes/IsNumberTest.class | Bin 0 -> 851 bytes .../test-classes/IsSubstructureTest.class | Bin 0 -> 1394 bytes leetcode/target/test-classes/JumpTest.class | Bin 0 -> 958 bytes .../test-classes/LengthOfLastWordTest.class | Bin 0 -> 285 bytes .../LetterCasePermutationTest.class | Bin 0 -> 1134 bytes .../test-classes/LetterCombinationsTest.class | Bin 0 -> 1211 bytes .../test-classes/LongestOfLISTest.class | Bin 0 -> 911 bytes .../test-classes/LongestPalindromeTest.class | Bin 0 -> 805 bytes .../LongestValidParenthesesIITest.class | Bin 0 -> 1226 bytes .../LongestValidParenthesesTest.class | Bin 0 -> 1216 bytes .../META-INF/leetcode.kotlin_module | Bin 0 -> 16 bytes .../target/test-classes/MaxAreaTest.class | Bin 0 -> 716 bytes .../target/test-classes/MaxPointsTest.class | Bin 0 -> 737 bytes .../test-classes/MaxSubArrayIITest.class | Bin 0 -> 1164 bytes .../target/test-classes/MaxSubArrayTest.class | Bin 0 -> 1154 bytes .../MaxSubarraySumCircularIITest.class | Bin 0 -> 1210 bytes .../MaxSubarraySumCircularTest.class | Bin 0 -> 1200 bytes .../test-classes/MergeIntervalsIITest.class | Bin 0 -> 1461 bytes .../test-classes/MergeIntervalsTest.class | Bin 0 -> 1451 bytes .../target/test-classes/MergeKListsTest.class | Bin 0 -> 270 bytes .../test-classes/MergeTwoListsTest.class | Bin 0 -> 907 bytes .../target/test-classes/MinAreaTest.class | Bin 0 -> 975 bytes .../test-classes/MinMeetingRoomsTest.class | Bin 0 -> 780 bytes .../target/test-classes/MultiplyTest.class | Bin 0 -> 1476 bytes leetcode/target/test-classes/MyAtoiTest.class | Bin 0 -> 989 bytes leetcode/target/test-classes/MyPowTest.class | Bin 0 -> 1224 bytes leetcode/target/test-classes/MySqrtTest.class | Bin 0 -> 1103 bytes .../target/test-classes/NQueens2Test.class | Bin 0 -> 796 bytes .../target/test-classes/NQueensTest.class | Bin 0 -> 1341 bytes .../test-classes/NumMatchingSubseqTest.class | Bin 0 -> 1150 bytes .../OrderCycleLinkedListTest.class | Bin 0 -> 1224 bytes .../target/test-classes/PartitionTest.class | Bin 0 -> 1097 bytes .../test-classes/ReadBinaryWatchTest.class | Bin 0 -> 1136 bytes .../test-classes/RecordSpacesTest.class | Bin 0 -> 1403 bytes .../test-classes/RemoveDuplicatesTest.class | Bin 0 -> 285 bytes .../RemoveZeroSumSublistsTest.class | Bin 0 -> 1498 bytes .../test-classes/ReorderListIITest.class | Bin 0 -> 994 bytes .../target/test-classes/ReorderListTest.class | Bin 0 -> 984 bytes .../target/test-classes/ReverseBitsTest.class | Bin 0 -> 811 bytes .../test-classes/ReverseLeftWordsTest.class | Bin 0 -> 983 bytes .../target/test-classes/ReverseListTest.class | Bin 0 -> 870 bytes .../test-classes/ReverseWords2Test.class | Bin 0 -> 1243 bytes .../test-classes/ReverseWordsTest.class | Bin 0 -> 1078 bytes leetcode/target/test-classes/Rob2Test.class | Bin 0 -> 1082 bytes leetcode/target/test-classes/RobTest.class | Bin 0 -> 813 bytes .../target/test-classes/SearchIITest.class | Bin 0 -> 737 bytes .../test-classes/SearchMatrixIITest.class | Bin 0 -> 1211 bytes .../target/test-classes/SearchRangeTest.class | Bin 0 -> 1323 bytes leetcode/target/test-classes/SearchTest.class | Bin 0 -> 1051 bytes .../test-classes/SimplifyPathTest.class | Bin 0 -> 1205 bytes .../target/test-classes/SortColorsTest.class | Bin 0 -> 901 bytes .../target/test-classes/SpiralOrderTest.class | Bin 0 -> 1291 bytes .../test-classes/SplitIntoFibonacciTest.class | Bin 0 -> 1910 bytes leetcode/target/test-classes/StrStrTest.class | Bin 0 -> 931 bytes .../target/test-classes/SubsetsTest.class | Bin 0 -> 1370 bytes .../test-classes/SubsetsWithDupTest.class | Bin 0 -> 1412 bytes .../target/test-classes/SwapPairsTest.class | Bin 0 -> 264 bytes .../test-classes/ThreeSumClosestTest.class | Bin 0 -> 920 bytes .../test-classes/ThreeSumSmallerTest.class | Bin 0 -> 1221 bytes .../target/test-classes/ThreeSumTest.class | Bin 0 -> 1639 bytes leetcode/target/test-classes/TrapTest.class | Bin 0 -> 863 bytes .../ValidateStackSequencesTest.class | Bin 0 -> 1192 bytes .../test-classes/ZigZagConvertTest.class | Bin 0 -> 1256 bytes offer/pom.xml | 20 +++ offer/src/main/java/AddBinary.java | 38 ++++++ offer/src/main/java/CheckInclusion.java | 51 ++++++++ offer/src/main/java/CheckInclusionII.java | 57 ++++++++ offer/src/main/java/CountBits.java | 25 ++++ offer/src/main/java/CountSubstrings.java | 41 ++++++ offer/src/main/java/DetectCycle.java | 27 ++++ offer/src/main/java/Divide.java | 16 +++ offer/src/main/java/FindAnagrams.java | 39 ++++++ offer/src/main/java/FindMaxLength.java | 36 +++++ offer/src/main/java/IntersectionNode.java | 25 ++++ offer/src/main/java/IsPalindrome.java | 35 +++++ .../main/java/LengthOfLongestSubstring.java | 30 +++++ offer/src/main/java/ListNode.java | 54 ++++++++ offer/src/main/java/MinSubArrayLength.java | 30 +++++ offer/src/main/java/MinWindow.java | 44 +++++++ offer/src/main/java/NumMatrix.java | 21 +++ .../java/NumSubArrayProductLessThanK.java | 32 +++++ offer/src/main/java/PivotIndex.java | 38 ++++++ offer/src/main/java/PivotIndexII.java | 27 ++++ offer/src/main/java/PivotIndexIII.java | 23 ++++ offer/src/main/java/RemoveNthFromEnd.java | 25 ++++ offer/src/main/java/RemoveNthFromEndII.java | 35 +++++ offer/src/main/java/SingleNumber.java | 22 ++++ offer/src/main/java/SubArraySum.java | 25 ++++ offer/src/main/java/ThreeSum.java | 59 +++++++++ offer/src/main/java/ThreeSumII.java | 80 ++++++++++++ offer/src/main/java/TwoIntegerDivide.java | 37 ++++++ offer/src/main/java/TwoIntegerDivide2.java | 50 +++++++ offer/src/main/java/TwoSum.java | 25 ++++ offer/src/main/java/ValidPalindrome.java | 31 +++++ offer/src/main/java/WordMaxProduct.java | 40 ++++++ offer/src/test/java/AddBinaryTest.java | 22 ++++ offer/src/test/java/CheckInclusionIITest.java | 51 ++++++++ offer/src/test/java/CheckInclusionTest.java | 33 +++++ offer/src/test/java/CountBitsTest.java | 21 +++ offer/src/test/java/CountSubstringsTest.java | 23 ++++ offer/src/test/java/DetectCycleTest.java | 27 ++++ offer/src/test/java/FindAnagramsTest.java | 26 ++++ offer/src/test/java/FindMaxLengthTest.java | 31 +++++ offer/src/test/java/IntersectionNodeTest.java | 31 +++++ offer/src/test/java/IsPalindromeTest.java | 30 +++++ .../java/LengthOfLongestSubstringTest.java | 37 ++++++ .../src/test/java/MinSubArrayLengthTest.java | 42 ++++++ offer/src/test/java/MinWindowTest.java | 50 +++++++ offer/src/test/java/NumMatrixTest.java | 34 +++++ .../java/NumSubArrayProductLessThanKTest.java | 32 +++++ offer/src/test/java/PivotIndexIIITest.java | 30 +++++ offer/src/test/java/PivotIndexIITest.java | 30 +++++ offer/src/test/java/PivotIndexTest.java | 30 +++++ .../src/test/java/RemoveNthFromEndIITest.java | 43 ++++++ offer/src/test/java/RemoveNthFromEndTest.java | 43 ++++++ offer/src/test/java/SingleNumberTest.java | 22 ++++ offer/src/test/java/StringBuilderTest.java | 19 +++ offer/src/test/java/SubArraySumTest.java | 24 ++++ offer/src/test/java/ThreeSumIITest.java | 44 +++++++ offer/src/test/java/ThreeSumTest.java | 44 +++++++ .../src/test/java/TwoIntegerDivide2Test.java | 54 ++++++++ offer/src/test/java/TwoIntegerDivideTest.java | 54 ++++++++ offer/src/test/java/TwoSumTes.java | 2 + offer/src/test/java/ValidPalindromeTest.java | 46 +++++++ offer/src/test/java/WordMaxProductTest.java | 35 +++++ pom.xml | 54 ++++++++ 880 files changed, 13148 insertions(+) create mode 100644 algorithm/pom.xml create mode 100644 algorithm/src/main/java/BFS_DFS/BinaryTreeLevelOrderTraversal.java create mode 100644 algorithm/src/main/java/BFS_DFS/BinaryTreeLevelOrderTraversalII.java create mode 100644 algorithm/src/main/java/BFS_DFS/BinaryTreeZigzagLevelOrderTraversal.java create mode 100644 algorithm/src/main/java/BFS_DFS/CountSubIslands.java create mode 100644 algorithm/src/main/java/BFS_DFS/MaxAreaIsland.java create mode 100644 algorithm/src/main/java/BFS_DFS/MinimumDepthBinaryTree.java create mode 100644 algorithm/src/main/java/BFS_DFS/NumberClosedIslands.java create mode 100644 algorithm/src/main/java/BFS_DFS/NumberDistinctIslands.java create mode 100644 algorithm/src/main/java/BFS_DFS/NumberEnclaves.java create mode 100644 algorithm/src/main/java/BFS_DFS/NumberIslands.java create mode 100644 algorithm/src/main/java/BFS_DFS/OpenTheLock.java create mode 100644 algorithm/src/main/java/BFS_DFS/SlidingPuzzle.java create mode 100644 algorithm/src/main/java/BFS_DFS/SurroundedRegions.java create mode 100644 algorithm/src/main/java/DP/BloodSimilarity.java create mode 100644 algorithm/src/main/java/DP/DisjointLines.java create mode 100644 algorithm/src/main/java/DP/Envelops.java create mode 100644 algorithm/src/main/java/DP/IsSubsequence.java create mode 100644 algorithm/src/main/java/DP/LongestCommonSubsequence.java create mode 100644 algorithm/src/main/java/DP/LongestCommonSubsequenceII.java create mode 100644 algorithm/src/main/java/DP/MinFallingPathSum.java create mode 100644 algorithm/src/main/java/DP/MinFallingPathSum2.java create mode 100644 algorithm/src/main/java/DP/MinFallingPathSumII.java create mode 100644 algorithm/src/main/java/DP/MinPathSum.java create mode 100644 algorithm/src/main/java/DP/MinimumTriangleTotal.java create mode 100644 algorithm/src/main/java/DP/MinimumTriangleTotalII.java create mode 100644 algorithm/src/main/java/DP/PalindromeList.java create mode 100644 algorithm/src/main/java/DP/ReverseNode.java create mode 100644 algorithm/src/main/java/DP/ReverseNode2.java create mode 100644 algorithm/src/main/java/DP/ReverseNode3.java create mode 100644 algorithm/src/main/java/DP/ReverseNodeKGroup.java create mode 100644 algorithm/src/main/java/DP/RussianDollEnvelopes.java create mode 100644 algorithm/src/main/java/DP/UniquePathsWithObstacles.java create mode 100644 algorithm/src/main/java/alibaba/DuplicateLength.java create mode 100644 algorithm/src/main/java/alibaba/ThreadPrintABC.java create mode 100644 algorithm/src/main/java/alibaba/ThreadPrintABC2.java create mode 100644 algorithm/src/main/java/alibaba/ThreadPrintCharNum.java create mode 100644 algorithm/src/main/java/alibaba/ThreadPrintNums.java create mode 100644 algorithm/src/main/java/array/binarySearch/EatBanana.java create mode 100644 algorithm/src/main/java/array/binarySearch/IsSubsequence.java create mode 100644 algorithm/src/main/java/array/binarySearch/PeakArray.java create mode 100644 algorithm/src/main/java/array/binarySearch/PreimageSizeZF.java create mode 100644 algorithm/src/main/java/array/binarySearch/SearchInsertPosition.java create mode 100644 algorithm/src/main/java/array/binarySearch/SearchMatrix.java create mode 100644 algorithm/src/main/java/array/binarySearch/SearchPosition.java create mode 100644 algorithm/src/main/java/array/binarySearch/SearchRange.java create mode 100644 algorithm/src/main/java/array/binarySearch/ShipWithinDays.java create mode 100644 algorithm/src/main/java/array/binarySearch/TailingZeros.java create mode 100644 algorithm/src/main/java/array/other/AdvantageShuffle.java create mode 100644 algorithm/src/main/java/array/other/ContainerWithMostWater.java create mode 100644 algorithm/src/main/java/array/other/IntervalListIntersections.java create mode 100644 algorithm/src/main/java/array/other/MaxRepeatSubString.java create mode 100644 algorithm/src/main/java/array/other/RemoveDuplicateSortedArray.java create mode 100644 algorithm/src/main/java/array/other/Search2DMatrixII.java create mode 100644 algorithm/src/main/java/array/other/SquaresSortedArray.java create mode 100644 algorithm/src/main/java/array/other/TrappingRainWater.java create mode 100644 algorithm/src/main/java/array/other/TwoSumLessThanK.java create mode 100644 algorithm/src/main/java/array/slideWindow/FindAnagrams.java create mode 100644 algorithm/src/main/java/array/slideWindow/LengthOfLongestSubstring.java create mode 100644 algorithm/src/main/java/array/slideWindow/MinWindowSubstring.java create mode 100644 algorithm/src/main/java/array/slideWindow/MinimumWindow.java create mode 100644 algorithm/src/main/java/array/slideWindow/Permutation.java create mode 100644 algorithm/src/main/java/array/slideWindow/SlidingWindowMaximum.java create mode 100644 algorithm/src/main/java/backTrack/CombinationSum.java create mode 100644 algorithm/src/main/java/backTrack/Combinations.java create mode 100644 algorithm/src/main/java/backTrack/GenerateParentheses.java create mode 100644 algorithm/src/main/java/backTrack/MaximumDepthBinaryTree.java create mode 100644 algorithm/src/main/java/backTrack/NQueues.java create mode 100644 algorithm/src/main/java/backTrack/PartitionKEqualSumSubsets.java create mode 100644 algorithm/src/main/java/backTrack/Permutations.java create mode 100644 algorithm/src/main/java/backTrack/Subsets.java create mode 100644 algorithm/src/main/java/backTrack/SudokuSolver.java create mode 100644 algorithm/src/main/java/backTrack/TargetSum.java create mode 100644 algorithm/src/main/java/backTrack/TargetSum2.java create mode 100644 algorithm/src/main/java/binaryHeap/KthLargestData.java create mode 100644 algorithm/src/main/java/binaryHeap/KthLargestElement.java create mode 100644 algorithm/src/main/java/binaryHeap/MaxFrequency.java create mode 100644 algorithm/src/main/java/binaryHeap/MedianData.java create mode 100644 algorithm/src/main/java/binaryHeap/MinStack.java create mode 100644 algorithm/src/main/java/binaryHeap/SeatReserve.java create mode 100644 algorithm/src/main/java/binaryHeap/SingleThreadCPU.java create mode 100644 algorithm/src/main/java/binaryTree/BinaryTreeLevelOrderTraversal.java create mode 100644 algorithm/src/main/java/binaryTree/BinaryTreePostorderTraversal.java create mode 100644 algorithm/src/main/java/binaryTree/BinaryTreeZigzagLevelOrderTraversal.java create mode 100644 algorithm/src/main/java/binaryTree/DiameterBinaryTree.java create mode 100644 algorithm/src/main/java/binaryTree/FlattenBinaryTreeToLinkedList.java create mode 100644 algorithm/src/main/java/binaryTree/InorderTraversal.java create mode 100644 algorithm/src/main/java/binaryTree/InvertBinaryTree.java create mode 100644 algorithm/src/main/java/binaryTree/LevelOrderTraversal.java create mode 100644 algorithm/src/main/java/binaryTree/MaximumDepth.java create mode 100644 algorithm/src/main/java/binaryTree/MaximumDepthNTree.java create mode 100644 algorithm/src/main/java/binaryTree/MinimumDepthBinaryTree.java create mode 100644 algorithm/src/main/java/binaryTree/SameTree.java create mode 100644 algorithm/src/main/java/binaryTree/SameTree2.java create mode 100644 algorithm/src/main/java/binaryTree/SerializeAndDeserializeBinaryTree.java create mode 100644 algorithm/src/main/java/binaryTree/TreeNode.java create mode 100644 algorithm/src/main/java/binaryTree/ZigzagLevelOrderTraversal.java create mode 100644 algorithm/src/main/java/competition/AverageValue.java create mode 100644 algorithm/src/main/java/dataStructureDesign/InsertDeleteGetRandom.java create mode 100644 algorithm/src/main/java/dataStructureDesign/LFUCache.java create mode 100644 algorithm/src/main/java/dataStructureDesign/LRUCache.java create mode 100644 algorithm/src/main/java/dataStructureDesign/LRUCache2.java create mode 100644 algorithm/src/main/java/dataStructureDesign/MaximumFrequencyStack.java create mode 100644 algorithm/src/main/java/dataStructureDesign/MinStack.java create mode 100644 algorithm/src/main/java/differenceArray/CarPooling.java create mode 100644 algorithm/src/main/java/differenceArray/FlightBooking.java create mode 100644 algorithm/src/main/java/differenceArray/RangeAdd.java create mode 100644 algorithm/src/main/java/graphTheory/AllPathList.java create mode 100644 algorithm/src/main/java/images/binary-tree-traversal.jpg create mode 100644 algorithm/src/main/java/images/graph.jpg create mode 100644 algorithm/src/main/java/images/plugin4.png create mode 100644 "algorithm/src/main/java/images/\344\272\214\345\217\211\346\240\221plugin1.png" create mode 100644 "algorithm/src/main/java/images/\344\272\214\345\217\211\346\240\221plugin2.png" create mode 100644 "algorithm/src/main/java/images/\344\272\214\345\217\211\346\240\221\344\276\213\345\255\220.jpg" create mode 100644 "algorithm/src/main/java/images/\344\272\214\345\217\211\346\240\221\346\241\210\344\276\2132.png" create mode 100644 "algorithm/src/main/java/images/\344\272\214\345\217\211\346\240\221\351\201\215\345\216\206.gif" create mode 100644 "algorithm/src/main/java/images/\344\272\214\345\217\211\346\240\221\351\201\215\345\216\2062.jpeg" create mode 100644 "algorithm/src/main/java/images/\345\211\215\344\270\255\345\220\216\345\272\217\344\272\214\345\217\211\346\240\221.jpeg" create mode 100644 "algorithm/src/main/java/images/\345\211\215\345\272\217\345\220\216\347\273\255\351\201\215\345\216\206.jpeg" create mode 100644 "algorithm/src/main/java/images/\345\211\215\345\272\217\351\201\215\345\216\2062.jpeg" create mode 100644 "algorithm/src/main/java/images/\345\217\215\350\275\254\351\223\276\350\241\2502.jpg" create mode 100644 "algorithm/src/main/java/images/\345\233\276\350\256\272\350\241\250\347\244\272\346\226\271\346\263\225.jpeg" create mode 100644 "algorithm/src/main/java/images/\345\272\246.jpg" create mode 100644 "algorithm/src/main/java/images/\345\276\252\347\216\257\351\201\215\345\216\206.jpeg" create mode 100644 "algorithm/src/main/java/linkedList/doublePointer/19 \345\210\240\351\231\244\351\223\276\350\241\250\347\232\204\345\200\222\346\225\260\347\254\254N\344\270\252\350\212\202\347\202\271.md" create mode 100644 "algorithm/src/main/java/linkedList/doublePointer/23 \345\220\210\345\271\266K\344\270\252\345\215\207\345\272\217\351\223\276\350\241\250.md" create mode 100644 algorithm/src/main/java/linkedList/doublePointer/AddTwoNumbers.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/AddTwoNumbers2.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/DeleteNthNode.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/LinkedListCycle.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/LinkedListCycleII.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/LinkedListIntersect.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/ListNode.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/MergeKSortedList.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/MergeSortedList.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/MiddleNode.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/PalindromeLinkedList.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/RemoveDuplicate.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/ReverseLinkedListII.java create mode 100644 algorithm/src/main/java/linkedList/doublePointer/ReverseNodesInKGroup.java create mode 100644 "algorithm/src/main/java/linkedList/doublePointer/\351\223\276\350\241\250+\345\217\214\346\214\207\351\222\210.md" create mode 100644 algorithm/src/main/java/multiThread/FizzBuzz.java create mode 100644 algorithm/src/main/java/multiThread/FizzBuzzII.java create mode 100644 algorithm/src/main/java/multiThread/FizzBuzzIII.java create mode 100644 algorithm/src/main/java/multiThread/PrintFooBarAlternately.java create mode 100644 algorithm/src/main/java/multiThread/PrintInOrder.java create mode 100644 algorithm/src/main/java/multiThread/PrintInOrder2.java create mode 100644 algorithm/src/main/java/multiThread/PrintInOrder3.java create mode 100644 algorithm/src/main/java/multiThread/PrintZeroOddEven.java create mode 100644 algorithm/src/main/java/multiThread/ProduceH2O.java create mode 100644 algorithm/src/main/java/nSum/NSum.java create mode 100644 algorithm/src/main/java/nSum/ThreeSum.java create mode 100644 algorithm/src/main/java/nSum/TwoSum.java create mode 100644 algorithm/src/main/java/other/IsIsomorphic.java create mode 100644 algorithm/src/main/java/prefixSum/MatrixSum.java create mode 100644 algorithm/src/main/java/prefixSum/NumArray.java create mode 100644 algorithm/src/main/java/prefixSum/NumMatrix.java create mode 100644 algorithm/src/main/java/prefixSum/ProductOfNumbers.java create mode 100644 algorithm/src/main/java/stack_queue/EvalRPN.java create mode 100644 algorithm/src/main/java/stack_queue/ImplementQueueUsingStacks.java create mode 100644 algorithm/src/main/java/stack_queue/ImplementStackUsingQueues.java create mode 100644 algorithm/src/main/java/stack_queue/LongestValidParentheses.java create mode 100644 algorithm/src/main/java/stack_queue/MinAddMakeValid.java create mode 100644 algorithm/src/main/java/stack_queue/MinStack.java create mode 100644 algorithm/src/main/java/stack_queue/MinimumInsertionsToBalanceParentheses.java create mode 100644 algorithm/src/main/java/stack_queue/SimplifyPath.java create mode 100644 algorithm/src/main/java/stack_queue/SlidingWindowMax.java create mode 100644 algorithm/src/main/java/stack_queue/ValidParentheses.java create mode 100644 algorithm/src/test/java/BSF_DSF/BinaryTreeLevelOrderTraversalIITest.java create mode 100644 algorithm/src/test/java/BSF_DSF/BinaryTreeLevelOrderTraversalTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/BinaryTreeZigzagLevelOrderTraversalTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/CountSubIslandsTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/MaxAreaIslandTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/MinimumDepthBinaryTreeTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/NumberClosedIslandsTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/NumberDistinctIslandsTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/NumberEnclavesTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/NumberIslandsTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/OpenTheLockTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/SlidingPuzzleTest.java create mode 100644 algorithm/src/test/java/BSF_DSF/SurroundedRegionsTest.java create mode 100644 algorithm/src/test/java/DP/BloodSimilarityTest.java create mode 100644 algorithm/src/test/java/DP/DisjointLinesTest.java create mode 100644 algorithm/src/test/java/DP/EnvelopsTest.java create mode 100644 algorithm/src/test/java/DP/IsSubsequenceTest.java create mode 100644 algorithm/src/test/java/DP/LongestCommonSubsequenceIITest.java create mode 100644 algorithm/src/test/java/DP/LongestCommonSubsequenceTest.java create mode 100644 algorithm/src/test/java/DP/MinFallingPathSum2Test.java create mode 100644 algorithm/src/test/java/DP/MinFallingPathSumIITest.java create mode 100644 algorithm/src/test/java/DP/MinFallingPathSumTest.java create mode 100644 algorithm/src/test/java/DP/MinPathSumTest.java create mode 100644 algorithm/src/test/java/DP/MinimumTriangleTotalIITest.java create mode 100644 algorithm/src/test/java/DP/MinimumTriangleTotalTest.java create mode 100644 algorithm/src/test/java/DP/PalindromeListTest.java create mode 100644 algorithm/src/test/java/DP/ReverseNode2Test.java create mode 100644 algorithm/src/test/java/DP/ReverseNode3Test.java create mode 100644 algorithm/src/test/java/DP/ReverseNodeKGroupTest.java create mode 100644 algorithm/src/test/java/DP/ReverseNodeTest.java create mode 100644 algorithm/src/test/java/DP/RussianDollEnvelopesTest.java create mode 100644 algorithm/src/test/java/DP/UniquePathsWithObstaclesTest.java create mode 100644 algorithm/src/test/java/JavaStudy.java create mode 100644 algorithm/src/test/java/alibaba/DuplicateLengthTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/EatBananaTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/IsSubsequenceTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/PeakArrayTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/PreimageSizeZFTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/SearchInsertPositionTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/SearchMatrixTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/SearchPositionTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/SearchRangeTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/ShipWithinDaysTest.java create mode 100644 algorithm/src/test/java/array/binarySearch/TailingZerosTest.java create mode 100644 algorithm/src/test/java/array/other/AdvantageShuffleTest.java create mode 100644 algorithm/src/test/java/array/other/ContainerWithMostWaterTest.java create mode 100644 algorithm/src/test/java/array/other/IntervalListIntersectionsTest.java create mode 100644 algorithm/src/test/java/array/other/MaxRepeatSubStringTest.java create mode 100644 algorithm/src/test/java/array/other/RemoveDuplicateSortedArrayTest.java create mode 100644 algorithm/src/test/java/array/other/Search2DMatrixIITest.java create mode 100644 algorithm/src/test/java/array/other/SquaresSortedArrayTest.java create mode 100644 algorithm/src/test/java/array/other/TrappingRainWaterTest.java create mode 100644 algorithm/src/test/java/array/other/TwoSumLessThanKTest.java create mode 100644 algorithm/src/test/java/array/slideWIndow/FindAnagramsTest.java create mode 100644 algorithm/src/test/java/array/slideWIndow/LengthOfLongestSubstringTest.java create mode 100644 algorithm/src/test/java/array/slideWIndow/MinWindowSubstringTest.java create mode 100644 algorithm/src/test/java/array/slideWIndow/MinimumWindowTest.java create mode 100644 algorithm/src/test/java/array/slideWIndow/PermutationTest.java create mode 100644 algorithm/src/test/java/array/slideWIndow/SlidingWindowMaximumTest.java create mode 100644 algorithm/src/test/java/backTrack/CombinationSumTest.java create mode 100644 algorithm/src/test/java/backTrack/CombinationsTest.java create mode 100644 algorithm/src/test/java/backTrack/GenerateParenthesesTest.java create mode 100644 algorithm/src/test/java/backTrack/MaximumDepthBinaryTreeTest.java create mode 100644 algorithm/src/test/java/backTrack/NQueuesTest.java create mode 100644 algorithm/src/test/java/backTrack/PartitionKEqualSumSubsetsTest.java create mode 100644 algorithm/src/test/java/backTrack/PermutationsTest.java create mode 100644 algorithm/src/test/java/backTrack/SubsetsTest.java create mode 100644 algorithm/src/test/java/backTrack/SudokuSolverTest.java create mode 100644 algorithm/src/test/java/backTrack/TargetSum2Test.java create mode 100644 algorithm/src/test/java/backTrack/TargetSumTest.java create mode 100644 algorithm/src/test/java/binaryHeap/KthLargestDataTest.java create mode 100644 algorithm/src/test/java/binaryHeap/KthLargestElementTest.java create mode 100644 algorithm/src/test/java/binaryHeap/LRUCacheTest.java create mode 100644 algorithm/src/test/java/binaryHeap/MaxFrequencyTest.java create mode 100644 algorithm/src/test/java/binaryHeap/MedianDataTest.java create mode 100644 algorithm/src/test/java/binaryHeap/MergeSortedListsTest.java create mode 100644 algorithm/src/test/java/binaryHeap/MinStackTest.java create mode 100644 algorithm/src/test/java/binaryHeap/SeatReserveTest.java create mode 100644 algorithm/src/test/java/binaryHeap/SingleThreadCPUTest.java create mode 100644 algorithm/src/test/java/binaryTree/BinaryTreeLevelOrderTraversalTest.java create mode 100644 algorithm/src/test/java/binaryTree/BinaryTreePostorderTraversalTest.java create mode 100644 algorithm/src/test/java/binaryTree/BinaryTreeZigzagLevelOrderTraversalTest.java create mode 100644 algorithm/src/test/java/binaryTree/DiameterBinaryTreeTest.java create mode 100644 algorithm/src/test/java/binaryTree/FlattenBinaryTreeToLinkedListTest.java create mode 100644 algorithm/src/test/java/binaryTree/InorderTraversalTest.java create mode 100644 algorithm/src/test/java/binaryTree/IntegerTest.java create mode 100644 algorithm/src/test/java/binaryTree/InvertBinaryTreeTest.java create mode 100644 algorithm/src/test/java/binaryTree/MaximumDepthNTreeTest.java create mode 100644 algorithm/src/test/java/binaryTree/MinimumDepthBinaryTreeTest.java create mode 100644 algorithm/src/test/java/binaryTree/SameTree2Test.java create mode 100644 algorithm/src/test/java/binaryTree/SerializeAndDeserializeBinaryTreeTest.java create mode 100644 algorithm/src/test/java/dataStructureDesign/FlattenNestedListIterator.java create mode 100644 algorithm/src/test/java/dataStructureDesign/InsertDeleteGetRandomTest.java create mode 100644 algorithm/src/test/java/dataStructureDesign/LFUCacheTest.java create mode 100644 algorithm/src/test/java/dataStructureDesign/LRUCache2Test.java create mode 100644 algorithm/src/test/java/dataStructureDesign/LRUCacheTest.java create mode 100644 algorithm/src/test/java/differenceArray/CarPoolingTest.java create mode 100644 algorithm/src/test/java/differenceArray/FlightBookingTest.java create mode 100644 algorithm/src/test/java/differenceArray/RangeAddTest.java create mode 100644 algorithm/src/test/java/graphTherory/AllPathListTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/AddTwoNumbers2Test.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/AddTwoNumbersTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/DeleteNthNodeTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/LinkedListCycleIITest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/LinkedListCycleTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/LinkedListIntersectTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/MergeKSortedListTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/MergeSortedListTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/MiddleNodeTest.java create mode 100644 algorithm/src/test/java/linkedList/doublePointer/RemoveDuplicateTest.java create mode 100644 algorithm/src/test/java/nSum/NSumTest.java create mode 100644 algorithm/src/test/java/nSum/ThreeSumTest.java create mode 100644 algorithm/src/test/java/nSum/TwoSumTest.java create mode 100644 algorithm/src/test/java/other/IsIsomorphicTest.java create mode 100644 algorithm/src/test/java/prefixSum/MatrixSumTest.java create mode 100644 algorithm/src/test/java/prefixSum/NumArrayTest.java create mode 100644 algorithm/src/test/java/prefixSum/NumMatrixTest.java create mode 100644 algorithm/src/test/java/prefixSum/ProductOfNumbersTest.java create mode 100644 algorithm/src/test/java/stack_queue/EvalRPNTest.java create mode 100644 algorithm/src/test/java/stack_queue/ImplementQueueUsingStacksTest.java create mode 100644 algorithm/src/test/java/stack_queue/ImplementStackUsingQueuesTest.java create mode 100644 algorithm/src/test/java/stack_queue/LongestValidParenthesesTest.java create mode 100644 algorithm/src/test/java/stack_queue/MinAddMakeValidTest.java create mode 100644 algorithm/src/test/java/stack_queue/MinStackTest.java create mode 100644 algorithm/src/test/java/stack_queue/MinimumInsertionsToBalanceParenthesesTest.java create mode 100644 algorithm/src/test/java/stack_queue/QueueTest.java create mode 100644 algorithm/src/test/java/stack_queue/SimplifyPathTest.java create mode 100644 algorithm/src/test/java/stack_queue/SlidingWindowMaxTest.java create mode 100644 algorithm/src/test/java/stack_queue/ValidParenthesesTest.java create mode 100644 algorithm/target/classes/BFS_DFS/BinaryTreeLevelOrderTraversal.class create mode 100644 algorithm/target/classes/BFS_DFS/BinaryTreeLevelOrderTraversalII.class create mode 100644 algorithm/target/classes/BFS_DFS/BinaryTreeZigzagLevelOrderTraversal.class create mode 100644 algorithm/target/classes/BFS_DFS/CountSubIslands.class create mode 100644 algorithm/target/classes/BFS_DFS/MaxAreaIsland.class create mode 100644 algorithm/target/classes/BFS_DFS/MinimumDepthBinaryTree.class create mode 100644 algorithm/target/classes/BFS_DFS/NumberClosedIslands.class create mode 100644 algorithm/target/classes/BFS_DFS/NumberDistinctIslands.class create mode 100644 algorithm/target/classes/BFS_DFS/NumberEnclaves.class create mode 100644 algorithm/target/classes/BFS_DFS/NumberIslands.class create mode 100644 algorithm/target/classes/BFS_DFS/OpenTheLock.class create mode 100644 algorithm/target/classes/BFS_DFS/SlidingPuzzle.class create mode 100644 algorithm/target/classes/BFS_DFS/SurroundedRegions.class create mode 100644 algorithm/target/classes/DP/BloodSimilarity.class create mode 100644 algorithm/target/classes/DP/DisjointLines.class create mode 100644 algorithm/target/classes/DP/Envelops$1.class create mode 100644 algorithm/target/classes/DP/Envelops.class create mode 100644 algorithm/target/classes/DP/IsSubsequence.class create mode 100644 algorithm/target/classes/DP/LongestCommonSubsequence.class create mode 100644 algorithm/target/classes/DP/LongestCommonSubsequenceII.class create mode 100644 algorithm/target/classes/DP/MinFallingPathSum.class create mode 100644 algorithm/target/classes/DP/MinFallingPathSum2.class create mode 100644 algorithm/target/classes/DP/MinFallingPathSumII.class create mode 100644 algorithm/target/classes/DP/MinPathSum.class create mode 100644 algorithm/target/classes/DP/MinimumTriangleTotal.class create mode 100644 algorithm/target/classes/DP/MinimumTriangleTotalII.class create mode 100644 algorithm/target/classes/DP/PalindromeList.class create mode 100644 algorithm/target/classes/DP/ReverseNode.class create mode 100644 algorithm/target/classes/DP/ReverseNode2.class create mode 100644 algorithm/target/classes/DP/ReverseNode3.class create mode 100644 algorithm/target/classes/DP/ReverseNodeKGroup.class create mode 100644 algorithm/target/classes/DP/RussianDollEnvelopes$1.class create mode 100644 algorithm/target/classes/DP/RussianDollEnvelopes.class create mode 100644 algorithm/target/classes/DP/UniquePathsWithObstacles.class create mode 100644 algorithm/target/classes/alibaba/DuplicateLength.class create mode 100644 algorithm/target/classes/alibaba/ThreadPrintABC$1.class create mode 100644 algorithm/target/classes/alibaba/ThreadPrintABC.class create mode 100644 algorithm/target/classes/alibaba/ThreadPrintABC2.class create mode 100644 algorithm/target/classes/alibaba/ThreadPrintCharNum.class create mode 100644 algorithm/target/classes/alibaba/ThreadPrintNums.class create mode 100644 algorithm/target/classes/array/binarySearch/EatBanana.class create mode 100644 algorithm/target/classes/array/binarySearch/IsSubsequence.class create mode 100644 algorithm/target/classes/array/binarySearch/PeakArray.class create mode 100644 algorithm/target/classes/array/binarySearch/PreimageSizeZF.class create mode 100644 algorithm/target/classes/array/binarySearch/SearchInsertPosition.class create mode 100644 algorithm/target/classes/array/binarySearch/SearchMatrix.class create mode 100644 algorithm/target/classes/array/binarySearch/SearchPosition.class create mode 100644 algorithm/target/classes/array/binarySearch/SearchRange.class create mode 100644 algorithm/target/classes/array/binarySearch/ShipWithinDays.class create mode 100644 algorithm/target/classes/array/binarySearch/TailingZeros.class create mode 100644 algorithm/target/classes/array/other/AdvantageShuffle.class create mode 100644 algorithm/target/classes/array/other/ContainerWithMostWater.class create mode 100644 algorithm/target/classes/array/other/IntervalListIntersections.class create mode 100644 algorithm/target/classes/array/other/MaxRepeatSubString.class create mode 100644 algorithm/target/classes/array/other/RemoveDuplicateSortedArray.class create mode 100644 algorithm/target/classes/array/other/Search2DMatrixII.class create mode 100644 algorithm/target/classes/array/other/SquaresSortedArray.class create mode 100644 algorithm/target/classes/array/other/TrappingRainWater.class create mode 100644 algorithm/target/classes/array/other/TwoSumLessThanK.class create mode 100644 algorithm/target/classes/array/slideWindow/FindAnagrams.class create mode 100644 algorithm/target/classes/array/slideWindow/LengthOfLongestSubstring.class create mode 100644 algorithm/target/classes/array/slideWindow/MinWindowSubstring.class create mode 100644 algorithm/target/classes/array/slideWindow/MinimumWindow.class create mode 100644 algorithm/target/classes/array/slideWindow/MonotonicMinQueue.class create mode 100644 algorithm/target/classes/array/slideWindow/MonotonicQueue.class create mode 100644 algorithm/target/classes/array/slideWindow/Permutation.class create mode 100644 algorithm/target/classes/array/slideWindow/SlidingWindowMaximum.class create mode 100644 algorithm/target/classes/backTrack/CombinationSum.class create mode 100644 algorithm/target/classes/backTrack/Combinations.class create mode 100644 algorithm/target/classes/backTrack/GenerateParentheses.class create mode 100644 algorithm/target/classes/backTrack/MaximumDepthBinaryTree.class create mode 100644 algorithm/target/classes/backTrack/NQueues.class create mode 100644 algorithm/target/classes/backTrack/PartitionKEqualSumSubsets.class create mode 100644 algorithm/target/classes/backTrack/Permutations.class create mode 100644 algorithm/target/classes/backTrack/Subsets.class create mode 100644 algorithm/target/classes/backTrack/SudokuSolver.class create mode 100644 algorithm/target/classes/backTrack/TargetSum.class create mode 100644 algorithm/target/classes/backTrack/TargetSum2.class create mode 100644 algorithm/target/classes/binaryHeap/KthLargestData.class create mode 100644 algorithm/target/classes/binaryHeap/KthLargestElement.class create mode 100644 algorithm/target/classes/binaryHeap/MaxFrequency.class create mode 100644 algorithm/target/classes/binaryHeap/MedianData.class create mode 100644 algorithm/target/classes/binaryHeap/MinStack.class create mode 100644 algorithm/target/classes/binaryHeap/SeatReserve.class create mode 100644 algorithm/target/classes/binaryHeap/SingleThreadCPU$1Task.class create mode 100644 algorithm/target/classes/binaryHeap/SingleThreadCPU.class create mode 100644 algorithm/target/classes/binaryTree/BinaryTreeLevelOrderTraversal.class create mode 100644 algorithm/target/classes/binaryTree/BinaryTreePostorderTraversal.class create mode 100644 algorithm/target/classes/binaryTree/BinaryTreeZigzagLevelOrderTraversal.class create mode 100644 algorithm/target/classes/binaryTree/DiameterBinaryTree.class create mode 100644 algorithm/target/classes/binaryTree/FlattenBinaryTreeToLinkedList.class create mode 100644 algorithm/target/classes/binaryTree/InorderTraversal.class create mode 100644 algorithm/target/classes/binaryTree/InvertBinaryTree.class create mode 100644 algorithm/target/classes/binaryTree/LevelOrderTraversal.class create mode 100644 algorithm/target/classes/binaryTree/MaximumDepth.class create mode 100644 algorithm/target/classes/binaryTree/MaximumDepthNTree.class create mode 100644 algorithm/target/classes/binaryTree/MinimumDepthBinaryTree.class create mode 100644 algorithm/target/classes/binaryTree/SameTree.class create mode 100644 algorithm/target/classes/binaryTree/SameTree2.class create mode 100644 algorithm/target/classes/binaryTree/SerializeAndDeserializeBinaryTree.class create mode 100644 algorithm/target/classes/binaryTree/TreeNode.class create mode 100644 algorithm/target/classes/binaryTree/ZigzagLevelOrderTraversal.class create mode 100644 algorithm/target/classes/dataStructureDesign/InsertDeleteGetRandom.class create mode 100644 algorithm/target/classes/dataStructureDesign/LFUCache.class create mode 100644 algorithm/target/classes/dataStructureDesign/LFUNode.class create mode 100644 algorithm/target/classes/dataStructureDesign/LRUCache.class create mode 100644 algorithm/target/classes/dataStructureDesign/LRUCache2.class create mode 100644 algorithm/target/classes/dataStructureDesign/MaximumFrequencyStack.class create mode 100644 algorithm/target/classes/dataStructureDesign/MinStack.class create mode 100644 algorithm/target/classes/dataStructureDesign/Node.class create mode 100644 algorithm/target/classes/differenceArray/CarPooling.class create mode 100644 algorithm/target/classes/differenceArray/FlightBooking.class create mode 100644 algorithm/target/classes/differenceArray/RangeAdd.class create mode 100644 algorithm/target/classes/graphTheory/AllPathList.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/AddTwoNumbers.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/AddTwoNumbers2.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/DeleteNthNode.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/LinkedListCycle.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/LinkedListCycleII.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/LinkedListIntersect.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/ListNode.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/MergeKSortedList.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/MergeSortedList.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/MiddleNode.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/PalindromeLinkedList.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/RemoveDuplicate.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/ReverseLinkedListII.class create mode 100644 algorithm/target/classes/linkedList/doublePointer/ReverseNodesInKGroup.class create mode 100644 algorithm/target/classes/multiThread/FizzBuzz.class create mode 100644 algorithm/target/classes/multiThread/FizzBuzzII$1.class create mode 100644 algorithm/target/classes/multiThread/FizzBuzzII$2.class create mode 100644 algorithm/target/classes/multiThread/FizzBuzzII$3.class create mode 100644 algorithm/target/classes/multiThread/FizzBuzzII.class create mode 100644 algorithm/target/classes/multiThread/FizzBuzzIII.class create mode 100644 algorithm/target/classes/multiThread/IntConsumer.class create mode 100644 algorithm/target/classes/multiThread/PrintFooBarAlternately$1.class create mode 100644 algorithm/target/classes/multiThread/PrintFooBarAlternately$2.class create mode 100644 algorithm/target/classes/multiThread/PrintFooBarAlternately.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder$1.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder$2.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder$3.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder2$1.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder2$2.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder2$3.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder2.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder3$1.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder3$2.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder3$3.class create mode 100644 algorithm/target/classes/multiThread/PrintInOrder3.class create mode 100644 algorithm/target/classes/multiThread/PrintZeroOddEven.class create mode 100644 algorithm/target/classes/multiThread/ProduceH2O.class create mode 100644 algorithm/target/classes/nSum/NSum.class create mode 100644 algorithm/target/classes/nSum/ThreeSum.class create mode 100644 algorithm/target/classes/nSum/TwoSum.class create mode 100644 algorithm/target/classes/offer/Divide.class create mode 100644 algorithm/target/classes/other/IsIsomorphic.class create mode 100644 algorithm/target/classes/prefixSum/MatrixSum.class create mode 100644 algorithm/target/classes/prefixSum/NumArray.class create mode 100644 algorithm/target/classes/prefixSum/NumMatrix.class create mode 100644 algorithm/target/classes/prefixSum/ProductOfNumbers.class create mode 100644 algorithm/target/classes/stack_queue/EvalRPN.class create mode 100644 algorithm/target/classes/stack_queue/ImplementQueueUsingStacks.class create mode 100644 algorithm/target/classes/stack_queue/ImplementStackUsingQueues.class create mode 100644 algorithm/target/classes/stack_queue/LongestValidParentheses.class create mode 100644 algorithm/target/classes/stack_queue/MinAddMakeValid.class create mode 100644 algorithm/target/classes/stack_queue/MinStack.class create mode 100644 algorithm/target/classes/stack_queue/MinimumInsertionsToBalanceParentheses.class create mode 100644 algorithm/target/classes/stack_queue/MonotonicQueue.class create mode 100644 algorithm/target/classes/stack_queue/SimplifyPath.class create mode 100644 algorithm/target/classes/stack_queue/SlidingWindowMax.class create mode 100644 algorithm/target/classes/stack_queue/ValidParentheses.class create mode 100644 algorithm/target/test-classes/BSF_DSF/BinaryTreeLevelOrderTraversalIITest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/BinaryTreeLevelOrderTraversalTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/BinaryTreeZigzagLevelOrderTraversalTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/CountSubIslandsTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/MaxAreaIslandTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/MinimumDepthBinaryTreeTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/NumberClosedIslandsTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/NumberDistinctIslandsTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/NumberEnclavesTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/NumberIslandsTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/OpenTheLockTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/SlidingPuzzleTest.class create mode 100644 algorithm/target/test-classes/BSF_DSF/SurroundedRegionsTest.class create mode 100644 algorithm/target/test-classes/DP/BloodSimilarityTest.class create mode 100644 algorithm/target/test-classes/DP/DisjointLinesTest.class create mode 100644 algorithm/target/test-classes/DP/EnvelopsTest.class create mode 100644 algorithm/target/test-classes/DP/IsSubsequenceTest.class create mode 100644 algorithm/target/test-classes/DP/LongestCommonSubsequenceIITest.class create mode 100644 algorithm/target/test-classes/DP/LongestCommonSubsequenceTest.class create mode 100644 algorithm/target/test-classes/DP/MinFallingPathSum2Test.class create mode 100644 algorithm/target/test-classes/DP/MinFallingPathSumIITest.class create mode 100644 algorithm/target/test-classes/DP/MinFallingPathSumTest.class create mode 100644 algorithm/target/test-classes/DP/MinPathSumTest.class create mode 100644 algorithm/target/test-classes/DP/MinimumTriangleTotalIITest.class create mode 100644 algorithm/target/test-classes/DP/MinimumTriangleTotalTest.class create mode 100644 algorithm/target/test-classes/DP/PalindromeListTest.class create mode 100644 algorithm/target/test-classes/DP/ReverseNode2Test.class create mode 100644 algorithm/target/test-classes/DP/ReverseNode3Test.class create mode 100644 algorithm/target/test-classes/DP/ReverseNodeKGroupTest.class create mode 100644 algorithm/target/test-classes/DP/ReverseNodeTest.class create mode 100644 algorithm/target/test-classes/DP/RussianDollEnvelopesTest.class create mode 100644 algorithm/target/test-classes/DP/UniquePathsWithObstaclesTest.class create mode 100644 algorithm/target/test-classes/JavaStudy.class create mode 100644 algorithm/target/test-classes/alibaba/DuplicateLengthTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/EatBananaTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/IsSubsequenceTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/PeakArrayTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/PreimageSizeZFTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/SearchInsertPositionTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/SearchMatrixTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/SearchPositionTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/SearchRangeTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/ShipWithinDaysTest.class create mode 100644 algorithm/target/test-classes/array/binarySearch/TailingZerosTest.class create mode 100644 algorithm/target/test-classes/array/other/AdvantageShuffleTest.class create mode 100644 algorithm/target/test-classes/array/other/ContainerWithMostWaterTest.class create mode 100644 algorithm/target/test-classes/array/other/IntervalListIntersectionsTest.class create mode 100644 algorithm/target/test-classes/array/other/MaxRepeatSubStringTest.class create mode 100644 algorithm/target/test-classes/array/other/RemoveDuplicateSortedArrayTest.class create mode 100644 algorithm/target/test-classes/array/other/Search2DMatrixIITest.class create mode 100644 algorithm/target/test-classes/array/other/SquaresSortedArrayTest.class create mode 100644 algorithm/target/test-classes/array/other/TrappingRainWaterTest.class create mode 100644 algorithm/target/test-classes/array/other/TwoSumLessThanKTest.class create mode 100644 algorithm/target/test-classes/array/slideWIndow/FindAnagramsTest.class create mode 100644 algorithm/target/test-classes/array/slideWIndow/LengthOfLongestSubstringTest.class create mode 100644 algorithm/target/test-classes/array/slideWIndow/MinWindowSubstringTest.class create mode 100644 algorithm/target/test-classes/array/slideWIndow/MinimumWindowTest.class create mode 100644 algorithm/target/test-classes/array/slideWIndow/PermutationTest.class create mode 100644 algorithm/target/test-classes/array/slideWIndow/SlidingWindowMaximumTest.class create mode 100644 algorithm/target/test-classes/backTrack/CombinationSumTest.class create mode 100644 algorithm/target/test-classes/backTrack/CombinationsTest.class create mode 100644 algorithm/target/test-classes/backTrack/GenerateParenthesesTest.class create mode 100644 algorithm/target/test-classes/backTrack/MaximumDepthBinaryTreeTest.class create mode 100644 algorithm/target/test-classes/backTrack/NQueuesTest.class create mode 100644 algorithm/target/test-classes/backTrack/PartitionKEqualSumSubsetsTest.class create mode 100644 algorithm/target/test-classes/backTrack/PermutationsTest.class create mode 100644 algorithm/target/test-classes/backTrack/SubsetsTest.class create mode 100644 algorithm/target/test-classes/backTrack/SudokuSolverTest.class create mode 100644 algorithm/target/test-classes/backTrack/TargetSum2Test.class create mode 100644 algorithm/target/test-classes/backTrack/TargetSumTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/KthLargestDataTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/KthLargestElementTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/LRUCacheTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/MaxFrequencyTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/MedianDataTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/MergeSortedListsTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/MinStackTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/SeatReserveTest.class create mode 100644 algorithm/target/test-classes/binaryHeap/SingleThreadCPUTest.class create mode 100644 algorithm/target/test-classes/binaryTree/BinaryTreeLevelOrderTraversalTest.class create mode 100644 algorithm/target/test-classes/binaryTree/BinaryTreePostorderTraversalTest.class create mode 100644 algorithm/target/test-classes/binaryTree/BinaryTreeZigzagLevelOrderTraversalTest.class create mode 100644 algorithm/target/test-classes/binaryTree/DiameterBinaryTreeTest.class create mode 100644 algorithm/target/test-classes/binaryTree/FlattenBinaryTreeToLinkedListTest.class create mode 100644 algorithm/target/test-classes/binaryTree/InorderTraversalTest.class create mode 100644 algorithm/target/test-classes/binaryTree/IntegerTest.class create mode 100644 algorithm/target/test-classes/binaryTree/InvertBinaryTreeTest.class create mode 100644 algorithm/target/test-classes/binaryTree/MaximumDepthNTreeTest.class create mode 100644 algorithm/target/test-classes/binaryTree/MinimumDepthBinaryTreeTest.class create mode 100644 algorithm/target/test-classes/binaryTree/SameTree2Test.class create mode 100644 algorithm/target/test-classes/binaryTree/SerializeAndDeserializeBinaryTreeTest.class create mode 100644 algorithm/target/test-classes/dataStructureDesign/FlattenNestedListIterator.class create mode 100644 algorithm/target/test-classes/dataStructureDesign/InsertDeleteGetRandomTest.class create mode 100644 algorithm/target/test-classes/dataStructureDesign/LFUCacheTest.class create mode 100644 algorithm/target/test-classes/dataStructureDesign/LRUCache2Test.class create mode 100644 algorithm/target/test-classes/dataStructureDesign/LRUCacheTest.class create mode 100644 algorithm/target/test-classes/dataStructureDesign/NestedInteger.class create mode 100644 algorithm/target/test-classes/differenceArray/CarPoolingTest.class create mode 100644 algorithm/target/test-classes/differenceArray/FlightBookingTest.class create mode 100644 algorithm/target/test-classes/differenceArray/RangeAddTest.class create mode 100644 algorithm/target/test-classes/graphTherory/AllPathListTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/AddTwoNumbers2Test.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/AddTwoNumbersTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/DeleteNthNodeTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/LinkedListCycleIITest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/LinkedListCycleTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/LinkedListIntersectTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/MergeKSortedListTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/MergeSortedListTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/MiddleNodeTest.class create mode 100644 algorithm/target/test-classes/linkedList/doublePointer/RemoveDuplicateTest.class create mode 100644 algorithm/target/test-classes/nSum/NSumTest.class create mode 100644 algorithm/target/test-classes/nSum/ThreeSumTest.class create mode 100644 algorithm/target/test-classes/nSum/TwoSumTest.class create mode 100644 algorithm/target/test-classes/offer/DivideTest.class create mode 100644 algorithm/target/test-classes/other/IsIsomorphicTest.class create mode 100644 algorithm/target/test-classes/prefixSum/MatrixSumTest.class create mode 100644 algorithm/target/test-classes/prefixSum/NumArrayTest.class create mode 100644 algorithm/target/test-classes/prefixSum/NumMatrixTest.class create mode 100644 algorithm/target/test-classes/prefixSum/ProductOfNumbersTest.class create mode 100644 algorithm/target/test-classes/stack_queue/EvalRPNTest.class create mode 100644 algorithm/target/test-classes/stack_queue/ImplementQueueUsingStacksTest.class create mode 100644 algorithm/target/test-classes/stack_queue/ImplementStackUsingQueuesTest.class create mode 100644 algorithm/target/test-classes/stack_queue/LongestValidParenthesesTest.class create mode 100644 algorithm/target/test-classes/stack_queue/MinAddMakeValidTest.class create mode 100644 algorithm/target/test-classes/stack_queue/MinStackTest.class create mode 100644 algorithm/target/test-classes/stack_queue/MinimumInsertionsToBalanceParenthesesTest.class create mode 100644 algorithm/target/test-classes/stack_queue/QueueTest$QueueNode.class create mode 100644 algorithm/target/test-classes/stack_queue/QueueTest.class create mode 100644 algorithm/target/test-classes/stack_queue/SimplifyPathTest.class create mode 100644 algorithm/target/test-classes/stack_queue/SlidingWindowMaxTest.class create mode 100644 algorithm/target/test-classes/stack_queue/ValidParenthesesTest.class create mode 100644 leetcode/target/classes/AreNumbersAscending.class create mode 100644 leetcode/target/classes/ArrayStringsAreEqual.class create mode 100644 leetcode/target/classes/ArrayStringsAreEqualRedoI.class create mode 100644 leetcode/target/classes/BuildTree.class create mode 100644 leetcode/target/classes/CanJump.class create mode 100644 leetcode/target/classes/CheckInclusion.class create mode 100644 leetcode/target/classes/CheckOnesSegment.class create mode 100644 leetcode/target/classes/CombinationSum.class create mode 100644 leetcode/target/classes/CombinationSum2.class create mode 100644 leetcode/target/classes/Combine.class create mode 100644 leetcode/target/classes/CommonChars.class create mode 100644 leetcode/target/classes/CountPrimes.class create mode 100644 leetcode/target/classes/CuttingRope.class create mode 100644 leetcode/target/classes/CuttingRopeII.class create mode 100644 leetcode/target/classes/DecodeString.class create mode 100644 leetcode/target/classes/DeleteAndEarn.class create mode 100644 leetcode/target/classes/DeleteDuplicates.class create mode 100644 leetcode/target/classes/DeleteDuplicatesII.class create mode 100644 leetcode/target/classes/Divide.class create mode 100644 leetcode/target/classes/Exist.class create mode 100644 leetcode/target/classes/Expand.class create mode 100644 leetcode/target/classes/FindDuplicate.class create mode 100644 leetcode/target/classes/FindMedianSortedArrays.class create mode 100644 leetcode/target/classes/FindMedianSortedArraysII.class create mode 100644 leetcode/target/classes/FindMedianSortedArraysIII.class create mode 100644 leetcode/target/classes/FindMin.class create mode 100644 leetcode/target/classes/FindPeakElement.class create mode 100644 leetcode/target/classes/FirstMissingPositive.class create mode 100644 leetcode/target/classes/FourSum.class create mode 100644 leetcode/target/classes/FullJustify.class create mode 100644 leetcode/target/classes/GenerateParenthesis.class create mode 100644 leetcode/target/classes/GroupAnagrams.class create mode 100644 leetcode/target/classes/HIndexII.class create mode 100644 leetcode/target/classes/HammingWeight.class create mode 100644 leetcode/target/classes/InsertInterval.class create mode 100644 leetcode/target/classes/IntToRoman.class create mode 100644 leetcode/target/classes/IntegerReverse.class create mode 100644 leetcode/target/classes/IsInterleave.class create mode 100644 leetcode/target/classes/IsMatch.class create mode 100644 leetcode/target/classes/IsNumber$1.class create mode 100644 leetcode/target/classes/IsNumber$2.class create mode 100644 leetcode/target/classes/IsNumber$3.class create mode 100644 leetcode/target/classes/IsNumber$4.class create mode 100644 leetcode/target/classes/IsNumber$5.class create mode 100644 leetcode/target/classes/IsNumber$6.class create mode 100644 leetcode/target/classes/IsNumber$7.class create mode 100644 leetcode/target/classes/IsNumber$8.class create mode 100644 leetcode/target/classes/IsNumber$9.class create mode 100644 leetcode/target/classes/IsNumber.class create mode 100644 leetcode/target/classes/IsSubstructure.class create mode 100644 leetcode/target/classes/Jump.class create mode 100644 leetcode/target/classes/LengthOfLIS.class create mode 100644 leetcode/target/classes/LengthOfLastWord.class create mode 100644 leetcode/target/classes/LetterCasePermutation.class create mode 100644 leetcode/target/classes/LetterCombinations.class create mode 100644 leetcode/target/classes/ListNode.class create mode 100644 leetcode/target/classes/LongestPalindrome.class create mode 100644 leetcode/target/classes/LongestValidParentheses.class create mode 100644 leetcode/target/classes/LongestValidParenthesesII.class create mode 100644 leetcode/target/classes/META-INF/leetcode.kotlin_module create mode 100644 leetcode/target/classes/MaxArea.class create mode 100644 leetcode/target/classes/MaxPoints.class create mode 100644 leetcode/target/classes/MaxSubArray.class create mode 100644 leetcode/target/classes/MaxSubArrayII.class create mode 100644 leetcode/target/classes/MaxSubarraySumCircular.class create mode 100644 leetcode/target/classes/MaxSubarraySumCircularII.class create mode 100644 leetcode/target/classes/MergeIntervals.class create mode 100644 leetcode/target/classes/MergeIntervalsII.class create mode 100644 leetcode/target/classes/MergeKLists.class create mode 100644 leetcode/target/classes/MergeTwoLists.class create mode 100644 leetcode/target/classes/MiddleNode.class create mode 100644 leetcode/target/classes/MinArea.class create mode 100644 leetcode/target/classes/MinMeetingRooms.class create mode 100644 leetcode/target/classes/Multiply.class create mode 100644 leetcode/target/classes/MyAtoi.class create mode 100644 leetcode/target/classes/MyPow.class create mode 100644 leetcode/target/classes/MySqrt.class create mode 100644 leetcode/target/classes/NQueens.class create mode 100644 leetcode/target/classes/NQueens2.class create mode 100644 leetcode/target/classes/Node.class create mode 100644 leetcode/target/classes/NumMatchingSubseq.class create mode 100644 leetcode/target/classes/OrderCycleLinkedList.class create mode 100644 leetcode/target/classes/Partition.class create mode 100644 leetcode/target/classes/ReadBinaryWatch.class create mode 100644 leetcode/target/classes/RecordSpaces.class create mode 100644 leetcode/target/classes/RemoveDuplicates.class create mode 100644 leetcode/target/classes/RemoveZeroSumSublists.class create mode 100644 leetcode/target/classes/ReorderList.class create mode 100644 leetcode/target/classes/ReorderListII.class create mode 100644 leetcode/target/classes/ReverseBits.class create mode 100644 leetcode/target/classes/ReverseLeftWords.class create mode 100644 leetcode/target/classes/ReverseList.class create mode 100644 leetcode/target/classes/ReverseWords.class create mode 100644 leetcode/target/classes/ReverseWords2.class create mode 100644 leetcode/target/classes/Rob.class create mode 100644 leetcode/target/classes/Rob2.class create mode 100644 leetcode/target/classes/Search.class create mode 100644 leetcode/target/classes/SearchII.class create mode 100644 leetcode/target/classes/SearchMatrixII.class create mode 100644 leetcode/target/classes/SearchRange.class create mode 100644 leetcode/target/classes/SimplifyPath.class create mode 100644 leetcode/target/classes/SortColors.class create mode 100644 leetcode/target/classes/SpiralOrder.class create mode 100644 leetcode/target/classes/SplitIntoFibonacci.class create mode 100644 leetcode/target/classes/StrStr.class create mode 100644 leetcode/target/classes/Subsets.class create mode 100644 leetcode/target/classes/SubsetsWithDup.class create mode 100644 leetcode/target/classes/SwapPairs.class create mode 100644 leetcode/target/classes/ThreeSum.class create mode 100644 leetcode/target/classes/ThreeSumClosest.class create mode 100644 leetcode/target/classes/ThreeSumSmaller.class create mode 100644 leetcode/target/classes/Trap.class create mode 100644 leetcode/target/classes/TreeNode.class create mode 100644 leetcode/target/classes/ValidateStackSequences.class create mode 100644 leetcode/target/classes/ZigZagConvert.class create mode 100644 leetcode/target/test-classes/AreNumbersAscendingTest.class create mode 100644 leetcode/target/test-classes/ArrayStringsAreEqualRedoITest.class create mode 100644 leetcode/target/test-classes/ArrayStringsAreEqualTest.class create mode 100644 leetcode/target/test-classes/CanJumpTest.class create mode 100644 leetcode/target/test-classes/CheckInclusionTest.class create mode 100644 leetcode/target/test-classes/CheckOnesSegmentTest.class create mode 100644 leetcode/target/test-classes/CombinationSum2Test.class create mode 100644 leetcode/target/test-classes/CombinationSumTest.class create mode 100644 leetcode/target/test-classes/CombineTest.class create mode 100644 leetcode/target/test-classes/CommonCharsTest.class create mode 100644 leetcode/target/test-classes/CountPrimesTest.class create mode 100644 leetcode/target/test-classes/CuttingRopeIITest.class create mode 100644 leetcode/target/test-classes/CuttingRopeTest.class create mode 100644 leetcode/target/test-classes/DecodeStringTest.class create mode 100644 leetcode/target/test-classes/DeleteAndEarnTest.class create mode 100644 leetcode/target/test-classes/DeleteDuplicatesIITest.class create mode 100644 leetcode/target/test-classes/DeleteDuplicatesTest.class create mode 100644 leetcode/target/test-classes/DivideTest.class create mode 100644 leetcode/target/test-classes/ExistTest.class create mode 100644 leetcode/target/test-classes/ExpandTest.class create mode 100644 leetcode/target/test-classes/FindDuplicateTest.class create mode 100644 leetcode/target/test-classes/FindMedianSortedArraysIIITest.class create mode 100644 leetcode/target/test-classes/FindMedianSortedArraysIITest.class create mode 100644 leetcode/target/test-classes/FindMedianSortedArraysTest.class create mode 100644 leetcode/target/test-classes/FindMinTest.class create mode 100644 leetcode/target/test-classes/FindPeakElementTest.class create mode 100644 leetcode/target/test-classes/FirstMissingPositiveTest.class create mode 100644 leetcode/target/test-classes/FourSumTest.class create mode 100644 leetcode/target/test-classes/FullJustifyTest.class create mode 100644 leetcode/target/test-classes/GenerateParenthesisTest.class create mode 100644 leetcode/target/test-classes/GroupAnagramsTest.class create mode 100644 leetcode/target/test-classes/HIndexIITest.class create mode 100644 leetcode/target/test-classes/HammingWeightTest.class create mode 100644 leetcode/target/test-classes/InsertIntervalTest.class create mode 100644 leetcode/target/test-classes/IntToRomanTest.class create mode 100644 leetcode/target/test-classes/IntegerReverseTest.class create mode 100644 leetcode/target/test-classes/IsInterleaveTest.class create mode 100644 leetcode/target/test-classes/IsMatchTest.class create mode 100644 leetcode/target/test-classes/IsNumberTest.class create mode 100644 leetcode/target/test-classes/IsSubstructureTest.class create mode 100644 leetcode/target/test-classes/JumpTest.class create mode 100644 leetcode/target/test-classes/LengthOfLastWordTest.class create mode 100644 leetcode/target/test-classes/LetterCasePermutationTest.class create mode 100644 leetcode/target/test-classes/LetterCombinationsTest.class create mode 100644 leetcode/target/test-classes/LongestOfLISTest.class create mode 100644 leetcode/target/test-classes/LongestPalindromeTest.class create mode 100644 leetcode/target/test-classes/LongestValidParenthesesIITest.class create mode 100644 leetcode/target/test-classes/LongestValidParenthesesTest.class create mode 100644 leetcode/target/test-classes/META-INF/leetcode.kotlin_module create mode 100644 leetcode/target/test-classes/MaxAreaTest.class create mode 100644 leetcode/target/test-classes/MaxPointsTest.class create mode 100644 leetcode/target/test-classes/MaxSubArrayIITest.class create mode 100644 leetcode/target/test-classes/MaxSubArrayTest.class create mode 100644 leetcode/target/test-classes/MaxSubarraySumCircularIITest.class create mode 100644 leetcode/target/test-classes/MaxSubarraySumCircularTest.class create mode 100644 leetcode/target/test-classes/MergeIntervalsIITest.class create mode 100644 leetcode/target/test-classes/MergeIntervalsTest.class create mode 100644 leetcode/target/test-classes/MergeKListsTest.class create mode 100644 leetcode/target/test-classes/MergeTwoListsTest.class create mode 100644 leetcode/target/test-classes/MinAreaTest.class create mode 100644 leetcode/target/test-classes/MinMeetingRoomsTest.class create mode 100644 leetcode/target/test-classes/MultiplyTest.class create mode 100644 leetcode/target/test-classes/MyAtoiTest.class create mode 100644 leetcode/target/test-classes/MyPowTest.class create mode 100644 leetcode/target/test-classes/MySqrtTest.class create mode 100644 leetcode/target/test-classes/NQueens2Test.class create mode 100644 leetcode/target/test-classes/NQueensTest.class create mode 100644 leetcode/target/test-classes/NumMatchingSubseqTest.class create mode 100644 leetcode/target/test-classes/OrderCycleLinkedListTest.class create mode 100644 leetcode/target/test-classes/PartitionTest.class create mode 100644 leetcode/target/test-classes/ReadBinaryWatchTest.class create mode 100644 leetcode/target/test-classes/RecordSpacesTest.class create mode 100644 leetcode/target/test-classes/RemoveDuplicatesTest.class create mode 100644 leetcode/target/test-classes/RemoveZeroSumSublistsTest.class create mode 100644 leetcode/target/test-classes/ReorderListIITest.class create mode 100644 leetcode/target/test-classes/ReorderListTest.class create mode 100644 leetcode/target/test-classes/ReverseBitsTest.class create mode 100644 leetcode/target/test-classes/ReverseLeftWordsTest.class create mode 100644 leetcode/target/test-classes/ReverseListTest.class create mode 100644 leetcode/target/test-classes/ReverseWords2Test.class create mode 100644 leetcode/target/test-classes/ReverseWordsTest.class create mode 100644 leetcode/target/test-classes/Rob2Test.class create mode 100644 leetcode/target/test-classes/RobTest.class create mode 100644 leetcode/target/test-classes/SearchIITest.class create mode 100644 leetcode/target/test-classes/SearchMatrixIITest.class create mode 100644 leetcode/target/test-classes/SearchRangeTest.class create mode 100644 leetcode/target/test-classes/SearchTest.class create mode 100644 leetcode/target/test-classes/SimplifyPathTest.class create mode 100644 leetcode/target/test-classes/SortColorsTest.class create mode 100644 leetcode/target/test-classes/SpiralOrderTest.class create mode 100644 leetcode/target/test-classes/SplitIntoFibonacciTest.class create mode 100644 leetcode/target/test-classes/StrStrTest.class create mode 100644 leetcode/target/test-classes/SubsetsTest.class create mode 100644 leetcode/target/test-classes/SubsetsWithDupTest.class create mode 100644 leetcode/target/test-classes/SwapPairsTest.class create mode 100644 leetcode/target/test-classes/ThreeSumClosestTest.class create mode 100644 leetcode/target/test-classes/ThreeSumSmallerTest.class create mode 100644 leetcode/target/test-classes/ThreeSumTest.class create mode 100644 leetcode/target/test-classes/TrapTest.class create mode 100644 leetcode/target/test-classes/ValidateStackSequencesTest.class create mode 100644 leetcode/target/test-classes/ZigZagConvertTest.class create mode 100644 offer/pom.xml create mode 100644 offer/src/main/java/AddBinary.java create mode 100644 offer/src/main/java/CheckInclusion.java create mode 100644 offer/src/main/java/CheckInclusionII.java create mode 100644 offer/src/main/java/CountBits.java create mode 100644 offer/src/main/java/CountSubstrings.java create mode 100644 offer/src/main/java/DetectCycle.java create mode 100644 offer/src/main/java/Divide.java create mode 100644 offer/src/main/java/FindAnagrams.java create mode 100644 offer/src/main/java/FindMaxLength.java create mode 100644 offer/src/main/java/IntersectionNode.java create mode 100644 offer/src/main/java/IsPalindrome.java create mode 100644 offer/src/main/java/LengthOfLongestSubstring.java create mode 100644 offer/src/main/java/ListNode.java create mode 100644 offer/src/main/java/MinSubArrayLength.java create mode 100644 offer/src/main/java/MinWindow.java create mode 100644 offer/src/main/java/NumMatrix.java create mode 100644 offer/src/main/java/NumSubArrayProductLessThanK.java create mode 100644 offer/src/main/java/PivotIndex.java create mode 100644 offer/src/main/java/PivotIndexII.java create mode 100644 offer/src/main/java/PivotIndexIII.java create mode 100644 offer/src/main/java/RemoveNthFromEnd.java create mode 100644 offer/src/main/java/RemoveNthFromEndII.java create mode 100644 offer/src/main/java/SingleNumber.java create mode 100644 offer/src/main/java/SubArraySum.java create mode 100644 offer/src/main/java/ThreeSum.java create mode 100644 offer/src/main/java/ThreeSumII.java create mode 100644 offer/src/main/java/TwoIntegerDivide.java create mode 100644 offer/src/main/java/TwoIntegerDivide2.java create mode 100644 offer/src/main/java/TwoSum.java create mode 100644 offer/src/main/java/ValidPalindrome.java create mode 100644 offer/src/main/java/WordMaxProduct.java create mode 100644 offer/src/test/java/AddBinaryTest.java create mode 100644 offer/src/test/java/CheckInclusionIITest.java create mode 100644 offer/src/test/java/CheckInclusionTest.java create mode 100644 offer/src/test/java/CountBitsTest.java create mode 100644 offer/src/test/java/CountSubstringsTest.java create mode 100644 offer/src/test/java/DetectCycleTest.java create mode 100644 offer/src/test/java/FindAnagramsTest.java create mode 100644 offer/src/test/java/FindMaxLengthTest.java create mode 100644 offer/src/test/java/IntersectionNodeTest.java create mode 100644 offer/src/test/java/IsPalindromeTest.java create mode 100644 offer/src/test/java/LengthOfLongestSubstringTest.java create mode 100644 offer/src/test/java/MinSubArrayLengthTest.java create mode 100644 offer/src/test/java/MinWindowTest.java create mode 100644 offer/src/test/java/NumMatrixTest.java create mode 100644 offer/src/test/java/NumSubArrayProductLessThanKTest.java create mode 100644 offer/src/test/java/PivotIndexIIITest.java create mode 100644 offer/src/test/java/PivotIndexIITest.java create mode 100644 offer/src/test/java/PivotIndexTest.java create mode 100644 offer/src/test/java/RemoveNthFromEndIITest.java create mode 100644 offer/src/test/java/RemoveNthFromEndTest.java create mode 100644 offer/src/test/java/SingleNumberTest.java create mode 100644 offer/src/test/java/StringBuilderTest.java create mode 100644 offer/src/test/java/SubArraySumTest.java create mode 100644 offer/src/test/java/ThreeSumIITest.java create mode 100644 offer/src/test/java/ThreeSumTest.java create mode 100644 offer/src/test/java/TwoIntegerDivide2Test.java create mode 100644 offer/src/test/java/TwoIntegerDivideTest.java create mode 100644 offer/src/test/java/TwoSumTes.java create mode 100644 offer/src/test/java/ValidPalindromeTest.java create mode 100644 offer/src/test/java/WordMaxProductTest.java create mode 100644 pom.xml diff --git a/algorithm/pom.xml b/algorithm/pom.xml new file mode 100644 index 0000000..629cdd0 --- /dev/null +++ b/algorithm/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + com.andy + leetcode + 1.0-SNAPSHOT + + + org.testng + testng + 7.6.1 + test + + + JUNIT + JUNIT + 4.12 + test + + + org.apache.commons + commons-lang3 + 3.12.0 + compile + + + JUNIT + JUNIT + 4.12 + compile + + + + + \ No newline at end of file diff --git a/algorithm/src/main/java/BFS_DFS/BinaryTreeLevelOrderTraversal.java b/algorithm/src/main/java/BFS_DFS/BinaryTreeLevelOrderTraversal.java new file mode 100644 index 0000000..a6a5e2e --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/BinaryTreeLevelOrderTraversal.java @@ -0,0 +1,49 @@ +package BFS_DFS; + +import binaryTree.TreeNode; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.PriorityQueue; +import java.util.Queue; + +/** + * 102. 二叉树层序遍历 + */ + +public class BinaryTreeLevelOrderTraversal { + + public ArrayList> binaryTreeLevelOrderTraversal(TreeNode root) { + ArrayList> res = new ArrayList<>(); + + // 设置一个队列,队列中存放根节点 + Queue queue = new LinkedList<>(); + queue.offer(root); + + while(!queue.isEmpty()) { + int size = queue.size(); + // 将当前队列中的所有节点向四周扩散 + ArrayList temp = new ArrayList<>(); + for(int i=0; i> binaryTreeLevelOrderTraverseII(TreeNode root) { + ArrayList> res = new ArrayList<>(); + + Queue queue = new LinkedList<>(); + queue.offer(root); + + while(!queue.isEmpty()) { + int size = queue.size(); + ArrayList temp = new ArrayList<>(); + + for(int i=0; i> binaryTreeZigzagLevelOrderTraversal(TreeNode root) { + ArrayList> res = new ArrayList<>(); + + if(root==null) { + return res; + } + + Queue queue = new LinkedList<>(); + queue.offer(root); + // 用于记录遍历方向 + boolean leftToRight = false; + while(!queue.isEmpty()) { + int size = queue.size(); + + ArrayList temp = new ArrayList<>(); + + for(int i=0; i=grid.length || j>=grid[0].length) { + return; + } + + if(grid[i][j]==0) { + return; + } + + grid[i][j]=0; + dfs(i-1, j, grid); + dfs(i+1, j, grid); + dfs(i,j-1, grid); + dfs(i, j+1, grid); + + } +} diff --git a/algorithm/src/main/java/BFS_DFS/MaxAreaIsland.java b/algorithm/src/main/java/BFS_DFS/MaxAreaIsland.java new file mode 100644 index 0000000..5528dfc --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/MaxAreaIsland.java @@ -0,0 +1,44 @@ +package BFS_DFS; + +/** + * 695 岛屿最大面积 + */ + +public class MaxAreaIsland { + + int area = 0; + + public int maxAreaIsland(int[][] grid) { + int res=0; + for(int i=0; i=grid.length || j>=grid[0].length) { + return; + } + + if(grid[i][j]==0) { + return; + } + + grid[i][j]=0; + area += 1; + dfs(i-1, j, grid); + dfs(i+1, j, grid); + dfs(i, j-1, grid); + dfs(i, j+1, grid); + } + + +} diff --git a/algorithm/src/main/java/BFS_DFS/MinimumDepthBinaryTree.java b/algorithm/src/main/java/BFS_DFS/MinimumDepthBinaryTree.java new file mode 100644 index 0000000..0feea89 --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/MinimumDepthBinaryTree.java @@ -0,0 +1,40 @@ +package BFS_DFS; + +import binaryTree.TreeNode; + +import java.util.LinkedList; +import java.util.Queue; + +/** + * 111. 二叉树的最小深度 + */ + +public class MinimumDepthBinaryTree { + + public int minimumDepthBinaryTree(TreeNode root) { + int res = 0; + + if(root==null) { + return res; + } + + Queue queue = new LinkedList<>(); + queue.offer(root); + res += 1; + + while (!queue.isEmpty()) { + int sz = queue.size(); + + for(int i=0; i=grid.length || j>=grid[0].length) { + return; + } + + // 海水 + if(grid[i][j]==1) { + return; + } + + grid[i][j]=1; + dfs(i-1, j, grid); + dfs(i+1, j, grid); + dfs(i, j-1, grid); + dfs(i, j+1, grid); + } +} diff --git a/algorithm/src/main/java/BFS_DFS/NumberDistinctIslands.java b/algorithm/src/main/java/BFS_DFS/NumberDistinctIslands.java new file mode 100644 index 0000000..009716b --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/NumberDistinctIslands.java @@ -0,0 +1,59 @@ +package BFS_DFS; + +import java.util.ArrayList; + +/** + * 694 不同的岛屿数量 + */ + +public class NumberDistinctIslands { + + public int numberDistinctIslands(char[][] grid) { + int res = 0; + ArrayList shape = new ArrayList<>(); + StringBuilder temp = new StringBuilder(); + for(int i=0; i=grid.length || j>=grid[0].length) { + return; + } + if(grid[i][j]=='0') { + return; + } + + // 记录外形 + s.append(dir); + + grid[i][j]='0'; + dfs(i-1, j, grid, s, "1"); + dfs(i+1, j, grid, s, "2"); + dfs(i, j-1, grid, s, "3"); + dfs(i, j+1, grid, s, "4"); + + } + + boolean contain(String s, ArrayList shape) { + for(String t: shape) { + if(t.equals(s)) { + return true; + } + } + return false; + } + +} diff --git a/algorithm/src/main/java/BFS_DFS/NumberEnclaves.java b/algorithm/src/main/java/BFS_DFS/NumberEnclaves.java new file mode 100644 index 0000000..ef87c27 --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/NumberEnclaves.java @@ -0,0 +1,54 @@ +package BFS_DFS; + +/** + * 1020 飞地的数量 + */ + +public class NumberEnclaves { + + int res = 0; + + public int numberEnclaves(int[][] grid) { + + int m=grid.length, n=grid[0].length; + + + for(int i=0; i=grid.length || j>=grid[0].length) { + return; + } + + if(grid[i][j]==0) { + return; + } + + + grid[i][j] = 0; + res += 1; + dfs(i, j-1, grid); // 上 + dfs(i, j+1, grid); // 下 + dfs(i-1, j, grid); // 左 + dfs(i+1, j, grid); // 右 + + + } +} diff --git a/algorithm/src/main/java/BFS_DFS/NumberIslands.java b/algorithm/src/main/java/BFS_DFS/NumberIslands.java new file mode 100644 index 0000000..1431bd5 --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/NumberIslands.java @@ -0,0 +1,41 @@ +package BFS_DFS; + +/** + * 200 岛屿数量 + */ + +public class NumberIslands { + + public int numberIslands(char[][] grid) { + int res = 0; + + for(int i=0; i=grid.length || j>=grid[0].length) { + return; + } + + if(grid[i][j]=='0') { + return; + } + + grid[i][j]='0'; + dfs(i-1,j,grid); + dfs(i+1, j, grid); + dfs(i, j-1, grid); + dfs(i, j+1, grid); + } + + +} diff --git a/algorithm/src/main/java/BFS_DFS/OpenTheLock.java b/algorithm/src/main/java/BFS_DFS/OpenTheLock.java new file mode 100644 index 0000000..a4782d9 --- /dev/null +++ b/algorithm/src/main/java/BFS_DFS/OpenTheLock.java @@ -0,0 +1,70 @@ +package BFS_DFS; + +import java.util.*; + +/** + * 752. 打开转盘锁 + */ + +public class OpenTheLock { + + public int openTheLock(ArrayList depends, String target) { + int res = 0; + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(depends); + queue.add("0000"); + + while (!queue.isEmpty()) { + int sz = queue.size(); + + for(int i=0; i queue = new LinkedList<>(); + Set visited = new HashSet<>(); + String target = "123450"; + StringBuilder sb = new StringBuilder(); + for(int i=0;i0) { + String sLeft = swap(cur, index, index-1); + queue.add(sLeft); + } + // 右交换 + if(col0) { + String sTop = swap(cur, index, index-nums[0].length); + queue.add(sTop); + } + + // 下交换 + if(row=m || col>=n) { + // 超出搜索边界 + return; + } + + if(board[row][col]=='X') { + // 已经是海水 + return; + } + // 将(row, col)变成海水,标记为 # + board[row][col] = '#'; + // 淹没上下左右陆地 + dfs(row+1, col, board); + dfs(row, col+1, board); + dfs(row-1, col, board); + dfs(row-1, col-1, board); + } + + + + +} diff --git a/algorithm/src/main/java/DP/BloodSimilarity.java b/algorithm/src/main/java/DP/BloodSimilarity.java new file mode 100644 index 0000000..b34a4af --- /dev/null +++ b/algorithm/src/main/java/DP/BloodSimilarity.java @@ -0,0 +1,42 @@ +package DP; + +import java.util.Scanner; + +/** + * 字节跳动 -- 古生物血缘远近判定 + */ + +public class BloodSimilarity { + + public int bloodSimilarity(String str1, String str2){ + int res = 0; + + res = traverse(str1, 0, str2, 0, 0); + return res; + } + + int traverse(String str1, int pos1, String str2, int pos2, int res){ + if(pos1==str1.length()) { + return res+str2.length()-pos2; + }else if(pos2==str2.length()){ + return res+str1.length()-pos1; + } + + if(str1.charAt(pos1)==str2.charAt(pos2)) { + return traverse(str1, pos1+1, str2, pos2+1, res); + } + + int res1 = traverse(str1, pos1+1, str2, pos2, res+1); + int res2 = traverse(str1, pos1, str2, pos2+1, res+1); + int res3 = traverse(str1, pos1+1, str2, pos2+1, res+1); + return Math.min(res1, Math.min(res2, res3)); + } + + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + String[] strs = sc.nextLine().trim().split(","); + BloodSimilarity solver = new BloodSimilarity(); + int res = solver.bloodSimilarity(strs[0], strs[1]); + System.out.print(res); + } +} diff --git a/algorithm/src/main/java/DP/DisjointLines.java b/algorithm/src/main/java/DP/DisjointLines.java new file mode 100644 index 0000000..873003a --- /dev/null +++ b/algorithm/src/main/java/DP/DisjointLines.java @@ -0,0 +1,41 @@ +package DP; + +import java.util.Arrays; +import java.util.HashMap; + +/** + * 1035 不相交的线 + */ + +public class DisjointLines { + public int maxUncrossedLines(int[] nums1, int[] nums2) { + int res=0; + int[][] memo = new int[nums1.length][nums2.length]; + for(int[] ints: memo){ + Arrays.fill(ints,-1); + } + + res = dp(nums1, nums1.length-1, nums2, nums2.length-1, memo); + return res; + } + + int dp(int[] nums1, int p1, int[] nums2, int p2, int[][] memo){ + if(p1<0 || p2<0) { + return 0; + } + + if(memo[p1][p2]!=-1) { + return memo[p1][p2]; + } + if(nums1[p1]==nums2[p2]) { + memo[p1][p2] = dp(nums1, p1-1, nums2, p2-1, memo)+1; + }else { + memo[p1][p2] = Math.max( + dp(nums1, p1-1, nums2, p2, memo), + dp(nums1, p1, nums2, p2-1, memo) + ); + } + + return memo[p1][p2]; + } +} diff --git a/algorithm/src/main/java/DP/Envelops.java b/algorithm/src/main/java/DP/Envelops.java new file mode 100644 index 0000000..ceb488e --- /dev/null +++ b/algorithm/src/main/java/DP/Envelops.java @@ -0,0 +1,28 @@ +package DP; + +import java.util.Arrays; +import java.util.Comparator; + +/** + * 354. 俄罗斯套娃信封问题 + * + * 思路:对信封进行排序。先比较width,width相同则比较height + */ + +public class Envelops { + + public int maxEnvelops(int[][] envelops) { + int res = 0; + // 对二维数组进行排序 + Arrays.sort(envelops, new Comparator() { + public int compare(int[] a, int[] b) { + if(a[0]==b[0]) { + return a[1]-b[1]; + } + return a[0]-b[0]; + } + }); + + return res; + } +} diff --git a/algorithm/src/main/java/DP/IsSubsequence.java b/algorithm/src/main/java/DP/IsSubsequence.java new file mode 100644 index 0000000..91a51eb --- /dev/null +++ b/algorithm/src/main/java/DP/IsSubsequence.java @@ -0,0 +1,27 @@ +package DP; + +/** + * 392 判断子序列 + */ + +public class IsSubsequence { + + public boolean isSubsequence(String s, String t) { + boolean res = true; + res = dp(s, s.length()-1, t, t.length()-1); + return res; + } + + boolean dp(String s, int p1, String t, int p2){ + if(p1<0){ + return true; + }else if(p2<0){ + return false; + } + if(s.charAt(p1)==t.charAt(p2)){ + return dp(s, p1-1, t, p2-1); + }else { + return dp(s, p1, t, p2-1); + } + } +} \ No newline at end of file diff --git a/algorithm/src/main/java/DP/LongestCommonSubsequence.java b/algorithm/src/main/java/DP/LongestCommonSubsequence.java new file mode 100644 index 0000000..dd13986 --- /dev/null +++ b/algorithm/src/main/java/DP/LongestCommonSubsequence.java @@ -0,0 +1,25 @@ +package DP; + +/** + * 1143 最长公共子序列 + */ + +public class LongestCommonSubsequence { + + public int longestCommonSubsequence(String text1, String text2){ + int res = 0; + res = dp(text1, 0, text2, 0); + + return res; + } + + int dp(String text1, int p1, String text2, int p2){ + if(p1>=text1.length() || p2>=text2.length()) { + return 0; + } + if(text1.charAt(p1)==text2.charAt(p2)){ + return dp(text1, p1+1, text2, p2+1)+1; + } + return Math.max(dp(text1, p1+1, text2, p2), dp(text1, p1, text2, p2+1)); + } +} diff --git a/algorithm/src/main/java/DP/LongestCommonSubsequenceII.java b/algorithm/src/main/java/DP/LongestCommonSubsequenceII.java new file mode 100644 index 0000000..06dd809 --- /dev/null +++ b/algorithm/src/main/java/DP/LongestCommonSubsequenceII.java @@ -0,0 +1,40 @@ +package DP; + +import java.util.Arrays; + +/** + * 1143 最长公共子序列 + */ + +public class LongestCommonSubsequenceII { + + public int longestCommonSubsequence(String text1, String text2){ + int res = 0; + int[][] memo = new int[text1.length()][text2.length()]; + for (int[] ints : memo) { + Arrays.fill(ints, -1); + } + res = dp(text1, text1.length()-1, text2, text2.length()-1, memo); + + return res; + } + + int dp(String text1, int p1, String text2, int p2, int[][] memo){ + if(p1<0 || p2<0) { + return 0; + } + // 查询备忘录中是否存在数据 + if(memo[p1][p2]!=-1){ + return memo[p1][p2]; + } + + if(text1.charAt(p1)==text2.charAt(p2)){ + memo[p1][p2] = dp(text1, p1-1, text2, p2-1, memo)+1; + }else { + memo[p1][p2] = Math.max(dp(text1, p1 - 1, text2, p2, memo), + dp(text1, p1, text2, p2 - 1, memo) + ); + } + return memo[p1][p2]; + } +} diff --git a/algorithm/src/main/java/DP/MinFallingPathSum.java b/algorithm/src/main/java/DP/MinFallingPathSum.java new file mode 100644 index 0000000..d5ebe63 --- /dev/null +++ b/algorithm/src/main/java/DP/MinFallingPathSum.java @@ -0,0 +1,65 @@ +package DP; + +import java.util.Arrays; + +/** + * 931 最小下降和 + */ + +public class MinFallingPathSum { + + public int minFallingPathSum(int[][] matrix) { + int res = Integer.MAX_VALUE; + int[][] memo = new int[matrix.length][matrix[0].length]; // 创建备忘录 + for(int[] t: memo) { + Arrays.fill(t, Integer.MAX_VALUE); + } + + dp(matrix.length-1, matrix[0].length-1, matrix, memo); + for(int i=0; i1) { + memo[row][i] = Math.min(dp(row - 1, i, matrix, memo), dp(row - 1, i + 1, matrix, memo))+matrix[row][i]; + }else{ + // 列数为1列 + memo[row][i] = dp(row-1, i, matrix, memo)+ matrix[row][i]; + } + }else if(i+1==matrix[0].length) { + // 最后一列(默认列数大于1) + memo[row][i] = Math.min(dp(row-1, i-1, matrix, memo), dp(row-1, i, matrix, memo))+matrix[row][i]; + }else { + memo[row][i] = Math.min( + dp(row - 1, i - 1, matrix, memo), + Math.min( + dp(row - 1, i, matrix, memo), + dp(row - 1, i + 1, matrix, memo) + ) + ) + matrix[row][i]; + } + + } + return memo[row][col]; + } + + +} diff --git a/algorithm/src/main/java/DP/MinFallingPathSum2.java b/algorithm/src/main/java/DP/MinFallingPathSum2.java new file mode 100644 index 0000000..bb6359b --- /dev/null +++ b/algorithm/src/main/java/DP/MinFallingPathSum2.java @@ -0,0 +1,49 @@ +package DP; + +import java.util.Arrays; + +/** + * 1289. 下降路径最小和II + */ + +public class MinFallingPathSum2 { + public int minFallingPathSum(int[][] grid) { + int res = Integer.MAX_VALUE; + int[][] memo = new int[grid.length][grid[0].length]; + for(int[] t: memo) { + Arrays.fill(t, Integer.MAX_VALUE); + } + dp(grid.length-1, grid[0].length-1, grid, memo); + for(int i=0; i1 && i>0){ + temp = Math.min(temp, dp(row-1, i-1, matrix, memo)); + } + // 列数大于1,且未到达最右侧,那么比较 + if(matrix[0].length>1 && i+1> triangle) { + int res = 0; + int[][] memo = new int[triangle.size()][triangle.size()]; + for(int[] t: memo){ + Arrays.fill(t, 666); + } + +// memo[0][0] = triangle.get(0).get(0); + res = dp(triangle.size()-1, triangle.size()-1, memo, triangle); + for(int i=0; i> triangle) { + if(row<0 || col<0) { + return 0; + } + + if(memo[row][col]!=666) { + return memo[row][col]; + } + + for(int i=0; i<=row; i++) { + // 处于最左侧 + if (i == 0) { + memo[row][i] = dp(row-1, i, memo, triangle)+triangle.get(row).get(i); + } else if (i == row) { + // 处于最右侧 + memo[row][i] = dp(row - 1, i-1, memo, triangle) + triangle.get(row).get(i); + } else { + // 取最小值 + memo[row][i] = Math.min( + dp(row - 1, i - 1, memo, triangle), + dp(row - 1, i, memo, triangle) + ) + triangle.get(row).get(i); + } + } + return memo[row][col]; + } +} diff --git a/algorithm/src/main/java/DP/MinimumTriangleTotalII.java b/algorithm/src/main/java/DP/MinimumTriangleTotalII.java new file mode 100644 index 0000000..f24663b --- /dev/null +++ b/algorithm/src/main/java/DP/MinimumTriangleTotalII.java @@ -0,0 +1,47 @@ +package DP; + +import java.util.Arrays; +import java.util.List; + +/** + * 120 三角形最小路径和(简化if判断语句) + */ + +public class MinimumTriangleTotalII { + public int minimumTotal(List> triangle) { + int res = 0; + int[][] memo = new int[triangle.size()][triangle.size()]; + for(int[] t: memo){ + Arrays.fill(t, Integer.MAX_VALUE); + } + + res = dp(triangle.size()-1, triangle.size()-1, memo, triangle); + for(int i=0; i> triangle) { + if(row<0 || col<0) { + return 0; + } + + if(memo[row][col]!=Integer.MAX_VALUE) { + return memo[row][col]; + } + + + for(int i=0; i<=row; i++) { + int temp = dp(row-1, i, memo, triangle); + if(i>0) { + temp = Math.min(temp, dp(row-1, i-1, memo, triangle)); + } + if(i+1<=row) { + temp = Math.min(temp, dp(row-1, i, memo, triangle)); + } + memo[row][i] = temp+triangle.get(row).get(i); + } + return memo[row][col]; + } +} diff --git a/algorithm/src/main/java/DP/PalindromeList.java b/algorithm/src/main/java/DP/PalindromeList.java new file mode 100644 index 0000000..3eea95c --- /dev/null +++ b/algorithm/src/main/java/DP/PalindromeList.java @@ -0,0 +1,65 @@ +package DP; + +import linkedList.doublePointer.ListNode; + +/** + * 234. 回⽂链表 + * + * 快慢指针 + */ + + +public class PalindromeList { + + public boolean palindrome(ListNode head) { + if(head==null) { + return true; + } + boolean res = true; + boolean even = false; // 默认为奇数 + + ListNode slow=head, fast=head; + + // 首先获取中间节点,并判断个数的奇偶性 + while(fast!=null && fast.next!=null) { + slow = slow.next; + if(fast.next.next==null) { + even = true; + } + fast = fast.next.next; + } + + if(even) { + fast = slow; + }else { + fast = slow.next; + } + + fast = reverse(fast); + slow = head; + + + + // 判断是否为回文链表 + while(fast!=null) { + if(slow.val!=fast.val) { + res = false; + break; + } + slow = slow.next; + fast = fast.next; + } + + return res; + } + + public ListNode reverse(ListNode head) { + if(head==null || head.next==null) { + return head; + } + ListNode last = reverse(head.next); + head.next.next = head; + head.next = null; + return last; + } +} diff --git a/algorithm/src/main/java/DP/ReverseNode.java b/algorithm/src/main/java/DP/ReverseNode.java new file mode 100644 index 0000000..efd4b41 --- /dev/null +++ b/algorithm/src/main/java/DP/ReverseNode.java @@ -0,0 +1,18 @@ +package DP; + +// 反转链表 + +import linkedList.doublePointer.ListNode; + +public class ReverseNode { + + public ListNode reverseNode(ListNode list) { + if(list==null || list.next==null) { + return list; + } + ListNode last = reverseNode(list.next); + list.next.next = list; + list.next = null; + return last; + } +} diff --git a/algorithm/src/main/java/DP/ReverseNode2.java b/algorithm/src/main/java/DP/ReverseNode2.java new file mode 100644 index 0000000..19702db --- /dev/null +++ b/algorithm/src/main/java/DP/ReverseNode2.java @@ -0,0 +1,25 @@ +package DP; + +import linkedList.doublePointer.ListNode; + +/** + * 对题目 [206. 反转链表]的扩展 + * 反转链表前N个节点 + */ + +public class ReverseNode2 { + + ListNode successor = null; // 后驱节点 + + public ListNode reverseNode(ListNode list, int n) { + if(list==null || list.next==null || n<=1) { + successor = list.next; + return list; + } + ListNode last = reverseNode(list.next, n-1); + list.next.next = list; + list.next = successor; + + return last; + } +} diff --git a/algorithm/src/main/java/DP/ReverseNode3.java b/algorithm/src/main/java/DP/ReverseNode3.java new file mode 100644 index 0000000..1f8d57b --- /dev/null +++ b/algorithm/src/main/java/DP/ReverseNode3.java @@ -0,0 +1,36 @@ +package DP; + +import linkedList.doublePointer.ListNode; + +public class ReverseNode3 { + + private ListNode successor=null; + + public ListNode reverseBetween(ListNode list, int m, int n) { + if(list==null || m<0 || n<0 || m>=n) { + return list; + } + + ListNode p=list; + for(int i=0;i() { + @Override + public int compare(int[] o1, int[] o2) { + if(o1[0]==o2[0]) { + return o1[1]-o2[1]; + }else { + return o2[1]-o1[1]; + } + } + }); + +// dp(envelopes.length-1, envelopes, memo); + + return memo[envelopes.length-1]; + } + +// int dp(int start, int[][] envelopes, int[] memo) { +// if(start==0) { +// return 1; +// } +// +// if(envelopes[start][0]>envelopes[start-1][0] && envelopes[start][1]>envelopes[start-1][1]) { +// if(memo[start-1]==0) { +// memo[start-1] = dp(start-1, envelopes, memo); +// } +// memo[start]=memo[start-1]+1; +// }else{ +//// dp +// } +// } + + +} diff --git a/algorithm/src/main/java/DP/UniquePathsWithObstacles.java b/algorithm/src/main/java/DP/UniquePathsWithObstacles.java new file mode 100644 index 0000000..3f31ce9 --- /dev/null +++ b/algorithm/src/main/java/DP/UniquePathsWithObstacles.java @@ -0,0 +1,53 @@ +package DP; + +import java.util.Arrays; + +/** + * 63 不同路径II + */ + +public class UniquePathsWithObstacles { + public int uniquePathsWithObstacles(int[][] obstacleGrid) { + int res = 0; + int[][] memo = new int[obstacleGrid.length][obstacleGrid[0].length]; + for(int[] ints:memo) { + Arrays.fill(ints, -1); + } + if(obstacleGrid[0][0]==0) { + memo[0][0] = 1; + }else{ + memo[0][0] = 0; + } +// if(memo.length>1){ +// if(obstacleGrid[1][0]==0 && memo[0][0]==1) { +// memo[1][0] = 1; +// }else { +// memo[1][0] = 0; +// } +// } +// if(memo[0].length>1){ +// if(obstacleGrid[0][1]==0 && memo[0][0]==1) { +// memo[0][1] = 1; +// }else { +// memo[0][1] = 0; +// } +// } + res = dp(memo.length-1, memo[0].length-1, memo, obstacleGrid); + + + return res; + } + + int dp(int row, int col, int[][] memo, int[][] obs){ + if(row<0 || col<0 || obs[row][col]==1) { + return 0; + } + + if(memo[row][col]!=-1) { + return memo[row][col]; + } + + memo[row][col] = dp(row-1, col,memo, obs) + dp(row, col-1, memo, obs); + return memo[row][col]; + } +} diff --git a/algorithm/src/main/java/alibaba/DuplicateLength.java b/algorithm/src/main/java/alibaba/DuplicateLength.java new file mode 100644 index 0000000..003d282 --- /dev/null +++ b/algorithm/src/main/java/alibaba/DuplicateLength.java @@ -0,0 +1,30 @@ +package alibaba; + +import java.util.HashMap; + +public class DuplicateLength { + + int duplicateLength(String str) { + int res = -1; + + HashMap map = new HashMap<>(); + int pos=0; + + // 移动位置 + while(pos { + p.printABC("B", 1); + }); + + Thread thread3 = new Thread(() -> { + p.printABC("C", 2); + }); + + thread1.start(); + thread2.start(); + thread3.start(); + } +} \ No newline at end of file diff --git a/algorithm/src/main/java/alibaba/ThreadPrintABC2.java b/algorithm/src/main/java/alibaba/ThreadPrintABC2.java new file mode 100644 index 0000000..dc7e9fb --- /dev/null +++ b/algorithm/src/main/java/alibaba/ThreadPrintABC2.java @@ -0,0 +1,48 @@ +package alibaba; + +import java.util.concurrent.locks.ReentrantLock; + +public class ThreadPrintABC2 { + int size; + int state; + int count; + + ReentrantLock lock = new ReentrantLock(); + + public ThreadPrintABC2(int size, int group) { + this.size = size; + this.count = size*group; + } + + public void printABC(String s, int nums, int val) { + while(state { + p.printABC("AA", 1, 0); + }).start(); + + new Thread(() -> { + p.printABC("BB", 2, 1); + }).start(); + + new Thread(() -> { + p.printABC("CC", 3, 2); + }).start(); + } +} diff --git a/algorithm/src/main/java/alibaba/ThreadPrintCharNum.java b/algorithm/src/main/java/alibaba/ThreadPrintCharNum.java new file mode 100644 index 0000000..15ec719 --- /dev/null +++ b/algorithm/src/main/java/alibaba/ThreadPrintCharNum.java @@ -0,0 +1,56 @@ +package alibaba; + +import java.util.concurrent.locks.ReentrantLock; + +public class ThreadPrintCharNum { + int size; + int count; + int state; + int n=1; + char c = 'A'; + ReentrantLock lock = new ReentrantLock(); + + public ThreadPrintCharNum(int size, int group) { + this.size = size; + this.count = size*group; + } + + public void printNum(int val) { + while (state + p.printNum(0) + ).start(); + + + new Thread(() -> { + p.printChar(1); + }).start(); + + } +} diff --git a/algorithm/src/main/java/alibaba/ThreadPrintNums.java b/algorithm/src/main/java/alibaba/ThreadPrintNums.java new file mode 100644 index 0000000..8506ee9 --- /dev/null +++ b/algorithm/src/main/java/alibaba/ThreadPrintNums.java @@ -0,0 +1,46 @@ +package alibaba; + +import java.util.concurrent.locks.ReentrantLock; + +public class ThreadPrintNums { + int size; + int state; + ReentrantLock lock = new ReentrantLock(); + + public ThreadPrintNums(int nums) { + this.size = size; + } + + void printNum(int val) { + while (state <= 100) { + lock.lock(); + if(state<=100 && state%2==val) { + System.out.println(state); + state += 1; + } + lock.unlock(); + } + } + + + public static void main(String[] args) { + ThreadPrintNums p = new ThreadPrintNums(100); + + // 打印奇数 + new Thread( + () -> { + p.printNum(0); + } + ).start(); + + // 打印偶数 + new Thread( + () -> { + p.printNum(1); + } + ).start(); + + + } +} + diff --git a/algorithm/src/main/java/array/binarySearch/EatBanana.java b/algorithm/src/main/java/array/binarySearch/EatBanana.java new file mode 100644 index 0000000..8ed88e4 --- /dev/null +++ b/algorithm/src/main/java/array/binarySearch/EatBanana.java @@ -0,0 +1,55 @@ +package array.binarySearch; + +public class EatBanana { + + public int eatBanana(int[] piles, int hour) { + if(piles.length==0) { + return -1; + } + if(piles.length==1) { + return (piles[0]+hour-1)/hour; + } + + int sum = 0; + for(int t: piles) { + sum += t; + } + + int left = sum/hour; + int right = sum; + while(left<=right) { + int mid = (left+right)>>1; + int h = calHour(piles, mid); + if(h==hour) { + left=mid; + break; + }else if(h0) { + if(calHour(piles, left-1)<=hour) { + left-=1; + }else { + break; + } + } + + return left; + } + + private int calHour(int[] piles, int speed) { + int hour = 0; + for(int i=0;i0) { + hour += 1; + } + } + return hour; + } +} diff --git a/algorithm/src/main/java/array/binarySearch/IsSubsequence.java b/algorithm/src/main/java/array/binarySearch/IsSubsequence.java new file mode 100644 index 0000000..37bd4ba --- /dev/null +++ b/algorithm/src/main/java/array/binarySearch/IsSubsequence.java @@ -0,0 +1,29 @@ +package array.binarySearch; + +/** + * 392.判断子序列 + */ + +public class IsSubsequence { + + boolean isSubsequence(String s, String t) { + + boolean res = false; + + int left = 0; + int right = 0; + while (left> 1; +// if(nums[mid]>1; + if(nums[mid]>1; + long sz = tailingZeros(mid); + if(sz==k) { + found = true; + break; + }else if(k>sz) { + left = mid+1; + }else { + right = mid; + } + } + if(found) { + res = 5; + } + return res; + } + + private long tailingZeros(long n) { + long divisor=5; + long res=0; + while(n>=divisor) { + res += n/divisor; + divisor*=5; + } + return res; + } +} diff --git a/algorithm/src/main/java/array/binarySearch/SearchInsertPosition.java b/algorithm/src/main/java/array/binarySearch/SearchInsertPosition.java new file mode 100644 index 0000000..1b01a13 --- /dev/null +++ b/algorithm/src/main/java/array/binarySearch/SearchInsertPosition.java @@ -0,0 +1,71 @@ +package array.binarySearch; + +/** + * 35. 搜索插⼊位置 + */ + +public class SearchInsertPosition { + + /** + * 最初写法 + */ +// public int searchInsert(int[] nums, int target) { +// // 处理边界问题 +// if(nums.length==0 || nums[0]>target) { +// return 0; +// } +// if(nums[nums.length-1]>1; +// if(nums[mid]>target) { +// high = mid-1; +// }else if(nums[mid]0 && nums[mid-1]==target) { +// mid--; +// } +// return mid; +// } +// } +// return mid; +// } + + /** + * 按照模板写法 + */ + public int searchInsert(int[] nums, int target) { + // 对参数进行处理 + if(nums.length==0 || nums[0]>target) { + return 0; + } + if(nums[nums.length-1]>1; + if(nums[mid]0 && nums[left-1]==target) { + left--; + } + return left; + } + + +} diff --git a/algorithm/src/main/java/array/binarySearch/SearchMatrix.java b/algorithm/src/main/java/array/binarySearch/SearchMatrix.java new file mode 100644 index 0000000..44ff2c7 --- /dev/null +++ b/algorithm/src/main/java/array/binarySearch/SearchMatrix.java @@ -0,0 +1,88 @@ +package array.binarySearch; + +/** + * 74. 搜索⼆维矩阵 + */ + +public class SearchMatrix { + + /** + * 最初算法 + */ +// public boolean searchMatrix(int[][] nums, int target) { +// +// if(nums.length==0 || nums[0].length==0) { +// return false; +// } +// +// if(nums[0][0]>target || nums[nums.length-1][nums[0].length-1]>1; +// int m = mid/N; +// int n = mid%N; +// if(nums[m][n]target) { +// high = mid-1; +// }else { +// res = true; +// break; +// } +// } +// if(low==high && nums[low/N][low%N]==target) { +// res = true; +// } +// return res; +// } + + /** + * 使用框架算法 + */ + public boolean searchMatrix(int[][] nums, int target) { + + // 参数处理 + if(nums.length==0 || nums[0].length==0) { + return false; + } + if(nums[0][0]>target || nums[nums.length-1][nums[0].length-1]>1; + int m = mid/N; + int n = mid%N; + if(nums[m][n]> 1; + if(nums[mid]>1; + if(nums[mid]target) { + high = mid-1; + }else { + // 找到目标值 + int tLeft = mid; + int tRight = mid; + // 向左边遍历,取左边界 + while(tLeft>0 && nums[tLeft-1]==target) { + tLeft--; + } + + // 向右边遍历,取右边界 + while(tRight+1> 1; + if (calDays(nums, mid)>days) { + left = mid+1; + + }else { + right=mid; + } + } + return left; + } + + private int calDays(int[] nums, int target) { + int index = 0; + int days = 0; + + while (index < nums.length) { + int sum = 0; + while (index=m) { + res += n/m; + m*=5; + } + return res; + } +} diff --git a/algorithm/src/main/java/array/other/AdvantageShuffle.java b/algorithm/src/main/java/array/other/AdvantageShuffle.java new file mode 100644 index 0000000..5028f5f --- /dev/null +++ b/algorithm/src/main/java/array/other/AdvantageShuffle.java @@ -0,0 +1,49 @@ +package array.other; + +import java.util.*; + +/** + * 870 优势洗牌 + */ + +public class AdvantageShuffle { + + public int[] advantageShuffle(int[] nums1, int[] nums2) { + int[] res = new int[nums1.length]; + PriorityQueue> queue = new PriorityQueue<>( + (ArrayListt1, ArrayListt2) -> { + // 从大到小排序 + return t2.get(1)-t1.get(1); + } + ); + for(int i=0; i arr = new ArrayList<>(); + arr.add(i); + arr.add(nums2[i]); + queue.add(arr); + } + + Arrays.sort(nums1); + + int left = 0, right = nums1.length-1; + + + while(left<=right) { + // 获取nums2的最大值 + ArrayList arr = queue.poll(); + assert arr != null; + int index = arr.get(0); + int value = arr.get(1); + + if(nums1[right]>value) { + res[index] = nums1[right]; + right--; + }else{ + res[index] = nums1[left]; + left++; + } + } + + return res; + } +} diff --git a/algorithm/src/main/java/array/other/ContainerWithMostWater.java b/algorithm/src/main/java/array/other/ContainerWithMostWater.java new file mode 100644 index 0000000..cf0b806 --- /dev/null +++ b/algorithm/src/main/java/array/other/ContainerWithMostWater.java @@ -0,0 +1,33 @@ +package array.other; + +/** + * 11 盛最多水的容器 + */ + +public class ContainerWithMostWater { + + int containerWithMOstWater(int[] nums) { + int res = 0; + if(nums.length<2) { + return res; + } + + int left=0, right=nums.length-1; + while (left> intervalListIntersections(int[][] nums1, int[][] nums2){ + ArrayList> res = new ArrayList<>(); + int left=0, right=0; + while (left arr = new ArrayList<>(); + arr.add(leftBound); + arr.add(rightBound); + res.add(arr); + } + if(nums1[left][1]<= nums2[right][1]) { + left++; + } else if(nums1[left][1]> nums2[right][1]) { + right++; + } + } + + return res; + + } +} diff --git a/algorithm/src/main/java/array/other/MaxRepeatSubString.java b/algorithm/src/main/java/array/other/MaxRepeatSubString.java new file mode 100644 index 0000000..7ab144f --- /dev/null +++ b/algorithm/src/main/java/array/other/MaxRepeatSubString.java @@ -0,0 +1,33 @@ +package array.other; + +/** + * 1668 最大重复子字符串 + */ + +public class MaxRepeatSubString { + public int maxRepeating(String sequence, String word) { + int res = 0; + int pos=0, p1=0, p2=0; + while(pos=0) { + if(nums[i][j]==target) { + res = true; + break; + } else if(nums[i][j]>target) { + j--; + } else { + i++; + } + + } + return res; + + } +} diff --git a/algorithm/src/main/java/array/other/SquaresSortedArray.java b/algorithm/src/main/java/array/other/SquaresSortedArray.java new file mode 100644 index 0000000..be52187 --- /dev/null +++ b/algorithm/src/main/java/array/other/SquaresSortedArray.java @@ -0,0 +1,27 @@ +package array.other; + +/** + * 977 有序数组的平方 + */ + +public class SquaresSortedArray { + + int[] squaresSortedArray(int[] nums) { + int[] res = new int[nums.length]; + int left=0, right=nums.length-1, index=nums.length-1; + + while (left<=right){ + if(Math.abs(nums[left])>Math.abs(nums[right])) { + res[index] = nums[left]*nums[left]; + index--; + left++; + }else{ + res[index] = nums[right]*nums[right]; + index--; + right--; + } + } + + return res; + } +} diff --git a/algorithm/src/main/java/array/other/TrappingRainWater.java b/algorithm/src/main/java/array/other/TrappingRainWater.java new file mode 100644 index 0000000..ed02766 --- /dev/null +++ b/algorithm/src/main/java/array/other/TrappingRainWater.java @@ -0,0 +1,45 @@ +package array.other; + +import java.util.PriorityQueue; +import java.util.Stack; + +/** + * 42 接雨水 + */ + +public class TrappingRainWater { + + int trappingRainWater(int[] nums) { + int res = 0; + if(nums.length<2) { + return res; + } + + int[] leftHeight = new int[nums.length]; + int[] rightHeight = new int[nums.length]; + for(int i=0;i=0;i--) { + if(i==nums.length-1) { + rightHeight[i] = nums[i]; + } else { + rightHeight[i] = Math.max(nums[i], rightHeight[i+1]); + } + } + + for(int i=0; i findAnagrams(String s, String p) { + HashMap map = new HashMap<>(); + HashMap need = new HashMap<>(); + int count=0; + + // 对need进行初始化 + for(int i=0;i res = new ArrayList<>(); + int left = 0, right=0; + while(right=p.length()) { + + // 进行窗口数据更新 + if(count==p.length()) { + res.add(left); + } + char t = s.charAt(left); + if(map.get(t).equals(need.getOrDefault(t, 0))) { + count--; + } + map.replace(t, map.get(t)-1); + left++; + } + + } + + return res; + } + +} diff --git a/algorithm/src/main/java/array/slideWindow/LengthOfLongestSubstring.java b/algorithm/src/main/java/array/slideWindow/LengthOfLongestSubstring.java new file mode 100644 index 0000000..97a3401 --- /dev/null +++ b/algorithm/src/main/java/array/slideWindow/LengthOfLongestSubstring.java @@ -0,0 +1,30 @@ +package array.slideWindow; + +import java.util.HashMap; + + +public class LengthOfLongestSubstring { + + public int lengthOfLongestSubstring(String s) { + HashMap map = new HashMap(); + + int res=0; + int left=0, right=0; + while(right1) { + char temp = s.charAt(left); + map.replace(temp,map.get(temp)-1); + left++; + } + res = Math.max(res, right-left); + } + + return res; + + } +} diff --git a/algorithm/src/main/java/array/slideWindow/MinWindowSubstring.java b/algorithm/src/main/java/array/slideWindow/MinWindowSubstring.java new file mode 100644 index 0000000..0b8be00 --- /dev/null +++ b/algorithm/src/main/java/array/slideWindow/MinWindowSubstring.java @@ -0,0 +1,57 @@ +package array.slideWindow; + +/** + * 76. 最⼩覆盖⼦串 + */ + +import java.util.HashMap; + +public class MinWindowSubstring { + + public String minWindowSubstring(String s, String t) { + HashMap map = new HashMap<>(); + HashMap need = new HashMap<>(); + + // 对参数进行处理 + for(int i=0; i right-left) { + tleft = left; + tright = right; + } + + char tt = s.charAt(left); + left++; + if(map.get(tt).equals(need.getOrDefault(tt,0))) { + count--; + } + map.replace(tt, map.get(tt)-1); + } + } + + if(tleft<0) { + return ""; + }else { + return s.substring(tleft, tright); + } + } +} diff --git a/algorithm/src/main/java/array/slideWindow/MinimumWindow.java b/algorithm/src/main/java/array/slideWindow/MinimumWindow.java new file mode 100644 index 0000000..4863801 --- /dev/null +++ b/algorithm/src/main/java/array/slideWindow/MinimumWindow.java @@ -0,0 +1,60 @@ +package array.slideWindow; + +import java.util.LinkedList; + +// 这是对 [239. 滑动窗⼝最⼤值] 的改编,求最小值 + +public class MinimumWindow { + + // 使用单调队列求解,时间复杂度为O(N) + public int[] minimumWindow(int[] nums, int k) { + if (k < 1 || nums.length < k) { + return new int[]{}; + } + + MonotonicMinQueue window = new MonotonicMinQueue(); + int[] res = new int[nums.length+1-k]; + + for(int i=0;i minq = new LinkedList(); + + public void push(int n) { + // 将大于 n 的元素全部删除(等于时保留) + while(!minq.isEmpty() && minq.getLast()>n) { + minq.pollLast(); + } + // 然后将 n 加入尾部 + minq.addLast(n); + } + + public int min() { + return minq.getFirst(); + } + + // 若元素大于 队列头部元素,那么会在添加的时候自动删除 + // 所以我们只需要判断是否为第一个元素,是的话才需要手动删除 + public void pop(int n) { + if(n==minq.getFirst()) { + minq.pollFirst(); + } + } +} diff --git a/algorithm/src/main/java/array/slideWindow/Permutation.java b/algorithm/src/main/java/array/slideWindow/Permutation.java new file mode 100644 index 0000000..fc8a713 --- /dev/null +++ b/algorithm/src/main/java/array/slideWindow/Permutation.java @@ -0,0 +1,50 @@ +package array.slideWindow; + +import java.util.HashMap; + +/** + * 567. 字符串的排列 + */ + +public class Permutation { + + public boolean permutation(String s1, String s2) { + HashMap map = new HashMap<>(); + HashMap need = new HashMap<>(); + + int left=0, right=0; + int count=0; + + // 参数初始化 + for(int i=0; i=s1.length()) { + if(right-left==count) { + return true; + } + + char t = s2.charAt(left); + if(map.get(t).equals(need.getOrDefault(t, 0))) { + count --; + } + map.replace(t, map.get(t)-1); + left++; + + } + } + return false; + + } +} diff --git a/algorithm/src/main/java/array/slideWindow/SlidingWindowMaximum.java b/algorithm/src/main/java/array/slideWindow/SlidingWindowMaximum.java new file mode 100644 index 0000000..614e6e3 --- /dev/null +++ b/algorithm/src/main/java/array/slideWindow/SlidingWindowMaximum.java @@ -0,0 +1,84 @@ +package array.slideWindow; + +import java.util.*; + +/** + * 239. 滑动窗⼝最⼤值 + */ + +public class SlidingWindowMaximum { + + // 两个循环,时间复杂度为O(kN) + public int[] maximumWindow(int[] nums, int k) { + // 参数处理 + if(k<1 || nums.length maxq = new LinkedList(); + + public void push(int n) { + // 将小于 n 的元素全部删除(等于时保留) + while(!maxq.isEmpty() && maxq.getLast()> combinationSum(int[] candidates, int target) { + ArrayList> res = new ArrayList<>(); + + // 初始化值为false +// boolean[] visited = new boolean[candidates.length]; + ArrayList temp = new ArrayList<>(); + + backtrack(0, candidates, target, temp, res); + + return res; + } + + void backtrack(int start, int[] candidates, int target, ArrayList temp, ArrayList> res) { + if(target == 0) { + res.add(new ArrayList<>(temp)); + return; + } else if(target < 0) { + return; + } + + //从当前的位置往后遍历,可以排除例如[2,2,3]和[2,3,2]的情况,最终得到[2,2,3] + for(int i=start; i> combinations(int n, int k) { + ArrayList> res = new ArrayList<>(); + ArrayList temp = new ArrayList<>(); + boolean[] visited = new boolean[n]; + int[] nums = new int[n]; + for(int i=0;i temp, ArrayList> res) { + if(k==temp.size()) { + res.add(new ArrayList<>(temp)); + } + + for(int i=start;i generateParentheses(int n) { + ArrayList res = new ArrayList<>(); + backtrack(n, n, new StringBuilder(), res); + return res; + } + + void backtrack(int left, int right, StringBuilder s, ArrayListres) { + // 左括号数量小于右括号,表明括号不合法 + if(left > right) { + return; + } + // 数量小于0,表示不合法 + if(left < 0 || right < 0) { + return; + } + // 当所有的括号都恰好用完,表明合法 + if(left==0 && right==0) { + res.add(new String(s)); + return; + } + + // 添加左括号 + s.append('('); + backtrack(left-1, right, s, res); + // 撤销添加 + s.deleteCharAt(s.length()-1); + + // 添加右括号 + s.append(')'); + backtrack(left, right-1, s, res); + // 撤销添加 + s.deleteCharAt(s.length()-1); + + + + } + + +} diff --git a/algorithm/src/main/java/backTrack/MaximumDepthBinaryTree.java b/algorithm/src/main/java/backTrack/MaximumDepthBinaryTree.java new file mode 100644 index 0000000..236f36c --- /dev/null +++ b/algorithm/src/main/java/backTrack/MaximumDepthBinaryTree.java @@ -0,0 +1,22 @@ +package backTrack; + +/** + * 104 二叉树最大深度 + */ + +import java.util.ArrayList; + +public class MaximumDepthBinaryTree { + + int maximumDepth(ArrayList nums) { + int res = 0; + backtrack(); + + return res; + + } + + public void backtrack() { + + } +} diff --git a/algorithm/src/main/java/backTrack/NQueues.java b/algorithm/src/main/java/backTrack/NQueues.java new file mode 100644 index 0000000..9087446 --- /dev/null +++ b/algorithm/src/main/java/backTrack/NQueues.java @@ -0,0 +1,77 @@ +package backTrack; + +/** + * 52 N-Queues + */ + +import java.util.ArrayList; + +public class NQueues { + + public ArrayList> nQueues(int n) { + ArrayList> res = new ArrayList<>(); + char[][] board = new char[n][n]; + for(int i=0; i> res) { + if(row==board.length) { + ArrayList temp = new ArrayList<>(); + for(int i=0; i=0 && j=0 && j>=0; i--,j--) { + if(board[i][j]=='Q') { + return false; + } + } + + return true; + } +} diff --git a/algorithm/src/main/java/backTrack/PartitionKEqualSumSubsets.java b/algorithm/src/main/java/backTrack/PartitionKEqualSumSubsets.java new file mode 100644 index 0000000..25073d0 --- /dev/null +++ b/algorithm/src/main/java/backTrack/PartitionKEqualSumSubsets.java @@ -0,0 +1,53 @@ +package backTrack; + +/** + * 698 划分为k个相等的子集 + */ + +public class PartitionKEqualSumSubsets { + + public boolean partitionKEqualSumSubsets(int[] nums, int k) { + int sum = 0; + for(int i=0; i 0) { + return false; + } + + int target = sum /k; + boolean[] visited = new boolean[nums.length]; + + boolean res = backtrack(k, nums, 0, visited, target); + + return res; + } + + boolean backtrack(int k, int[] nums, int bucket, boolean[] visited, int target) { + if(k==0) { + return true; + } + + //桶装满了,那么装下一个桶 + if(bucket==target) { + return backtrack(k-1, nums, 0, visited, target); + } + + for(int i=0; i> permutations(int[] nums) { + ArrayList> res = new ArrayList<>(); + ArrayList temp = new ArrayList<>(); + boolean[] visited = new boolean[nums.length]; + backtrack(nums, visited, temp, res); + return res; + } + + void backtrack(int[] nums, boolean[] visited, ArrayList temp, ArrayList> res) { + if(nums.length==temp.size()) { + res.add(new ArrayList<>(temp)); + return; + } + + for(int i=0; i> subsets(int[] nums) { + ArrayList> res = new ArrayList<>(); + ArrayList temp = new ArrayList<>(); + backtrack(0, nums, temp, res); + + return res; + } + + void backtrack(int start,int[] nums, ArrayList temp, ArrayList> res) { + res.add(new ArrayList<>(temp)); + + for(int i=start; i large = new PriorityQueue<>((a,b) -> { + return a-b; + }); + int capacity; + + + public KthLargestData(int k, int[] nums) { + capacity = k; + for(int num : nums) { + this.add(num); + } + } + + public int add(int val) { + large.add(val); + if(large.size()>capacity) { + large.poll(); + } + return large.peek(); + } +} diff --git a/algorithm/src/main/java/binaryHeap/KthLargestElement.java b/algorithm/src/main/java/binaryHeap/KthLargestElement.java new file mode 100644 index 0000000..fd14eb2 --- /dev/null +++ b/algorithm/src/main/java/binaryHeap/KthLargestElement.java @@ -0,0 +1,44 @@ +package binaryHeap; + +import java.util.Comparator; +import java.util.PriorityQueue; + +/** + * 215. 数组中的第K个最⼤元素 + */ + +public class KthLargestElement { + + public int kthLargest(int[] nums, int k) { + int res = 0; + +// Comparator comparator = new Comparator() { +// @Override +// public int compare(Integer o1, Integer o2) { +// return o1-o2; // 从小到大排序 +// } +// }; + +// PriorityQueue queue = new PriorityQueue<>(comparator); + // 等价于 + + // 从小到大排序 + PriorityQueue queue = new PriorityQueue( + (o1, o2) -> { + return o1-o2; + } + ); + for(int i=0;ik) { + queue.poll(); // 移除最上面的元素 + } + } + res = queue.peek(); + + + return res; + } + + +} diff --git a/algorithm/src/main/java/binaryHeap/MaxFrequency.java b/algorithm/src/main/java/binaryHeap/MaxFrequency.java new file mode 100644 index 0000000..c3c8ecd --- /dev/null +++ b/algorithm/src/main/java/binaryHeap/MaxFrequency.java @@ -0,0 +1,18 @@ +package binaryHeap; + +/** + * 895. 最⼤频率栈 + * ======================== 未完成 + */ + +public class MaxFrequency { + + + + public void push(int val) { + } + + public int pop() { + return -1; + } +} diff --git a/algorithm/src/main/java/binaryHeap/MedianData.java b/algorithm/src/main/java/binaryHeap/MedianData.java new file mode 100644 index 0000000..6ccd7bb --- /dev/null +++ b/algorithm/src/main/java/binaryHeap/MedianData.java @@ -0,0 +1,49 @@ +package binaryHeap; + +/** + * 295 数据流中的中位数 + */ + +import java.util.PriorityQueue; + +public class MedianData { + // large的最小值 >= small的最大值 + // 从小到大排序 + private PriorityQueue large = new PriorityQueue<>((a, b) -> { + return a-b; + }); + // 从大到小排序 + private PriorityQueue small = new PriorityQueue<>((a, b) -> { + return b-a; + }); + + public void addNum(int num) { + // 先往small队列中存入值,然后将最大值传递给large队列 + if(small.size()>large.size()) { + small.add(num); + Integer temp = small.poll(); + large.add(temp); + } else { + large.add(num); + small.add(large.poll()); + } + + } + + public double findMedian() { + // 判断数据小于2个的情况 + if(small.isEmpty() && large.isEmpty()) { + return 0; + } else if(large.isEmpty()) { + return small.peek(); + } + // 若small队列长度>大于large队列长度,那么small顶部就是中位数 + if(small.size()==large.size()) { + return (small.peek()+large.peek())/2.0; + } else if(small.size() stack = new Stack<>(); + // 从小到大排序 + private Stack min = new Stack<>(); + + public MinStack() { + + } + + public void push(int val) { + stack.push(val); + if(min.isEmpty()) { + min.add(val); + } else if(min.peek()>val) { + min.add(val); + } else { + min.add(min.peek()); + } + } + + public void pop() { + stack.pop(); + min.pop(); + } + + public int top() { + return stack.peek(); + } + + public int getMin() { + return min.peek(); + } + + + +} diff --git a/algorithm/src/main/java/binaryHeap/SeatReserve.java b/algorithm/src/main/java/binaryHeap/SeatReserve.java new file mode 100644 index 0000000..4bc469b --- /dev/null +++ b/algorithm/src/main/java/binaryHeap/SeatReserve.java @@ -0,0 +1,38 @@ +package binaryHeap; + +/** + * 1845. 座位预约管理系统 + */ + +import java.util.PriorityQueue; + +public class SeatReserve { + + // 从小到大排序,表示可预订座位编号 + private PriorityQueue queue = new PriorityQueue((a, b) -> { + return a-b; + }); + private int num; + + public SeatReserve(int n) { + num = n; + for(int i=0;i0) { + return queue.poll(); + } else { + return -1; + } + } + + public void unreserve(int seatNumber) { + if(queue.size() queue1 = new PriorityQueue( + (Task o1, Task o2) -> { + if(o1.start==o2.start) { + if(o1.cost==o2.cost) { + return o1.index-o2.index; + }else { + return o1.cost-o2.cost; + } + }else { + return o1.start - o2.start; + } + }); + // 对任务执行时长、索引编号从小到大排序 + PriorityQueue queue2 = new PriorityQueue<>( + (o1, o2) -> { + if(o1.cost==o2.cost) { + return o1.index-o2.index; + }else { + return o1.cost-o2.cost; + } + } + ); + + // 实例化Task + for(int i=0; i> binaryTreeLevelOrderTraversal(TreeNode root) { + + ArrayList> res = new ArrayList<>(); + traverse(root, 0, res); + return res; + } + + void traverse(TreeNode root, int level, ArrayList> res) { + if(root==null) { + return; + } + if(level>=res.size()) { + res.add(new ArrayList<>()); + } + res.get(level).add(root.val); + + traverse(root.left, level+1, res); + traverse(root.right, level+1, res); + } +} diff --git a/algorithm/src/main/java/binaryTree/BinaryTreePostorderTraversal.java b/algorithm/src/main/java/binaryTree/BinaryTreePostorderTraversal.java new file mode 100644 index 0000000..db81d07 --- /dev/null +++ b/algorithm/src/main/java/binaryTree/BinaryTreePostorderTraversal.java @@ -0,0 +1,28 @@ +package binaryTree; + +import java.util.LinkedList; + +/** + * 145 二叉树的后续遍历 + */ + +public class BinaryTreePostorderTraversal { + LinkedList binaryTreePostorderTraversal(TreeNode root) { + LinkedList res = new LinkedList<>(); + + traverse(root, res); + + return res; + } + + void traverse(TreeNode root, LinkedList res) { + if(root==null) { + return; + } + traverse(root.left, res); + traverse(root.right, res); + res.addFirst(root.val); + } + + +} diff --git a/algorithm/src/main/java/binaryTree/BinaryTreeZigzagLevelOrderTraversal.java b/algorithm/src/main/java/binaryTree/BinaryTreeZigzagLevelOrderTraversal.java new file mode 100644 index 0000000..aa28cd8 --- /dev/null +++ b/algorithm/src/main/java/binaryTree/BinaryTreeZigzagLevelOrderTraversal.java @@ -0,0 +1,39 @@ +package binaryTree; + +/** + * [103. 二叉树的锯齿形层序遍历] + */ + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +public class BinaryTreeZigzagLevelOrderTraversal { + + public LinkedList> zigzagOrder(TreeNode root) { + LinkedList> res = new LinkedList<>(); + + traverse(root, 0, res); + return res; + } + + void traverse(TreeNode root, int level, LinkedList> res) { + if(root==null) { + return; + } + if(level>=res.size()) { +// System.out.println(root.val); + res.add(new LinkedList<>()); + } + + // 偶数层从左到右,奇数层从右到左 + if(level%2==1) { + res.get(level).addFirst(root.val); + }else { + res.get(level).add(root.val); + } + + traverse(root.left, level+1, res); + traverse(root.right, level+1, res); + } +} diff --git a/algorithm/src/main/java/binaryTree/DiameterBinaryTree.java b/algorithm/src/main/java/binaryTree/DiameterBinaryTree.java new file mode 100644 index 0000000..77359f3 --- /dev/null +++ b/algorithm/src/main/java/binaryTree/DiameterBinaryTree.java @@ -0,0 +1,24 @@ +package binaryTree; + +/** + * 543 二叉树的直径 + */ + +public class DiameterBinaryTree { + + public int diameterBinaryTree(TreeNode root) { + int left = traverse(root.left); + int right = traverse(root.right); + return left+right; + } + + int traverse(TreeNode root) { + if(root==null) { + return 0; + } + + int left = traverse(root.left); + int right = traverse(root.right); + return 1+Math.max(left, right); + } +} diff --git a/algorithm/src/main/java/binaryTree/FlattenBinaryTreeToLinkedList.java b/algorithm/src/main/java/binaryTree/FlattenBinaryTreeToLinkedList.java new file mode 100644 index 0000000..7c18871 --- /dev/null +++ b/algorithm/src/main/java/binaryTree/FlattenBinaryTreeToLinkedList.java @@ -0,0 +1,37 @@ +package binaryTree; + +import java.util.LinkedList; + +/** + * 114 二叉树展开为链表 + */ + +public class FlattenBinaryTreeToLinkedList { + + LinkedList flattenBinaryTreeToLinkedList(TreeNode root) { + LinkedList res = new LinkedList<>(); + traverse(root, res); + // 重新排列 + for(int i=0; i res) { + if(root==null) { + return; + } +// if(res.size()>0) { +// TreeNode last = res.getLast(); +// last.left = null; +// last.right = root; +// } + res.add(root); + traverse(root.left, res); + traverse(root.right, res); + + } +} diff --git a/algorithm/src/main/java/binaryTree/InorderTraversal.java b/algorithm/src/main/java/binaryTree/InorderTraversal.java new file mode 100644 index 0000000..0e23281 --- /dev/null +++ b/algorithm/src/main/java/binaryTree/InorderTraversal.java @@ -0,0 +1,46 @@ +package binaryTree; + +import java.util.LinkedList; +import java.util.List; + +/** + * 94. ⼆叉树的中序遍历 + */ + +public class InorderTraversal { + /* 回溯算法思路*/ + LinkedList res = new LinkedList<>(); + + + // 中序遍历结果 + public List inorderTraversal(TreeNode root) { + LinkedList res = new LinkedList<>(); + if(root == null) { + return res; + } + + res.addAll(inorderTraversal(root.left)); + res.add(root.val); + res.addAll(inorderTraversal(root.right)); + return res; + } + + // 返回前序遍历结果 + public List preorderTraversal(TreeNode root) { + traverse(root); + return res; + } + + // 二叉树遍历函数 + void traverse(TreeNode root) { + if(root == null) { + return; + } + + traverse(root.left); + //中序遍历 + res.add(root.val); + traverse(root.right); + } + +} diff --git a/algorithm/src/main/java/binaryTree/InvertBinaryTree.java b/algorithm/src/main/java/binaryTree/InvertBinaryTree.java new file mode 100644 index 0000000..b95c22e --- /dev/null +++ b/algorithm/src/main/java/binaryTree/InvertBinaryTree.java @@ -0,0 +1,28 @@ +package binaryTree; + +/** + * 226 翻转二叉树 + */ + +public class InvertBinaryTree { + + public void invertBinaryTree(TreeNode root) { + traverse(root); + } + + void traverse(TreeNode root) { + if(root==null) { + return; + } + + + TreeNode temp = null; + temp = root.left; + root.left = root.right; + root.right = temp; + + traverse(root.left); + traverse(root.right); + + } +} diff --git a/algorithm/src/main/java/binaryTree/LevelOrderTraversal.java b/algorithm/src/main/java/binaryTree/LevelOrderTraversal.java new file mode 100644 index 0000000..5bee268 --- /dev/null +++ b/algorithm/src/main/java/binaryTree/LevelOrderTraversal.java @@ -0,0 +1,45 @@ +package binaryTree; + +import java.util.LinkedList; +import java.util.Queue; + +/** + * 102. ⼆叉树的层序遍历 + */ + +public class LevelOrderTraversal { + + + + LinkedList> levelOrderTraversal(TreeNode root) { + LinkedList> res = new LinkedList<>(); + + if(root == null) { + return res; + } + + Queue q = new LinkedList<>(); + q.offer(root); // 添加二叉树 + while(!q.isEmpty()) { + int sz = q.size(); + // 记录下这一层节点值 + LinkedList temp = new LinkedList<>(); + // for循环控制每一层从左向右遍历 + for(int i=0;i list = new LinkedList<>(); + for(String t : str.split(",")) { + list.add(t); + } + + TreeNode res = deserializeTraverse(list); + + return res; + } + + TreeNode deserializeTraverse(LinkedList list) { + // 采用后序遍历 + if(list.isEmpty()) { + return null; + } + + String first = list.removeFirst(); + if(first.equals("null")) { + return null; + } + + // 前序创建节点 + int val = Integer.parseInt(first); + + TreeNode root = new TreeNode(val); + + //后续关联节点 + root.left = deserializeTraverse(list); + root.right = deserializeTraverse(list); + return root; + + + } +} diff --git a/algorithm/src/main/java/binaryTree/TreeNode.java b/algorithm/src/main/java/binaryTree/TreeNode.java new file mode 100644 index 0000000..632244d --- /dev/null +++ b/algorithm/src/main/java/binaryTree/TreeNode.java @@ -0,0 +1,82 @@ +package binaryTree; + +import java.util.LinkedList; +import java.util.List; +import java.util.PriorityQueue; + +public class TreeNode { + public int val; + public TreeNode left; + public TreeNode right; + + static LinkedList res = new LinkedList<>(); + + public TreeNode() {} + + public TreeNode(int val) { + this.val = val; + } + + public TreeNode(int val, TreeNode left, TreeNode right) { + this.val = val; + this.left = left; + this.right = right; + } + + public static LinkedList treeNodeToNum(TreeNode root) { + LinkedList list = new LinkedList<>(); + preorderTraversal(root, list); + return list; + } + + // 返回前序遍历结果 + static void preorderTraversal(TreeNode root, LinkedList res) { + if(root==null) { + return; + } + res.add(root.val); + preorderTraversal(root.left, res); + preorderTraversal(root.right, res); + } + + // 二叉树遍历函数 + static void traverse(TreeNode root) { + if(root == null) { + return; + } + + traverse(root.left); + //中序遍历 + res.add(root.val); + traverse(root.right); + } + + public static TreeNode numsToTreeNode (int[] nums) { + if(nums.length==0) { + return null; + } + LinkedList queue = new LinkedList<>(); + TreeNode root = new TreeNode(nums[0]); + queue.add(root); + + for(int index=1; index< nums.length;) { + int size = queue.size(); + for(int i=0; i> zigzagOrder(TreeNode root) { + LinkedList> res = new LinkedList<>(); + if (root == null) { + return res; + } + + Queue q = new LinkedList<>(); + boolean flag = false; + q.offer(root); // 添加 + + while (!q.isEmpty()) { + int sz = q.size(); + LinkedList temp = new LinkedList<>(); + for (int i = 0; i < sz; i++) { + TreeNode curr = q.poll(); // 弹出 + if (!flag) { + temp.addFirst(curr.val); + }else { + temp.addLast(curr.val); + } + if(curr.left!=null){ + q.offer(curr.left); + } + if(curr.right!=null){ + q.offer(curr.right); + } + } + flag = !flag; + res.add(temp); + } + return res; + } +} diff --git a/algorithm/src/main/java/competition/AverageValue.java b/algorithm/src/main/java/competition/AverageValue.java new file mode 100644 index 0000000..b756dba --- /dev/null +++ b/algorithm/src/main/java/competition/AverageValue.java @@ -0,0 +1,22 @@ +package competition; + +/** + * 2455 可被三整除的偶数的平均值 + */ + +public class AverageValue { + public int averageValue(int[] nums) { + int res = 0; + int count = 0; + for(int n: nums) { + if(n%6==0) { + res+=n; + count++; + } + } + if(count>0) { + res = res/count; + } + return res; + } +} diff --git a/algorithm/src/main/java/dataStructureDesign/InsertDeleteGetRandom.java b/algorithm/src/main/java/dataStructureDesign/InsertDeleteGetRandom.java new file mode 100644 index 0000000..53b5cca --- /dev/null +++ b/algorithm/src/main/java/dataStructureDesign/InsertDeleteGetRandom.java @@ -0,0 +1,39 @@ +package dataStructureDesign; + + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Random; + +/** + * 380 O(1)时间插入、删除、获取随机元素 + */ + +public class InsertDeleteGetRandom { + + ArrayList data = new ArrayList<>(); + + boolean insert(int val) { + if(data.contains(val)) { + return false; + }else { + data.add(val); + return true; + } + } + + boolean remove(int val) { + if(data.contains(val)) { + // 若不转换成对象,那么默认按照索引删除 + data.remove((Integer) val); + return true; + }else { + return false; + } + } + + int getRandom() { + int index = new Random().nextInt()%data.size(); + return data.get(index); + } +} diff --git a/algorithm/src/main/java/dataStructureDesign/LFUCache.java b/algorithm/src/main/java/dataStructureDesign/LFUCache.java new file mode 100644 index 0000000..5641852 --- /dev/null +++ b/algorithm/src/main/java/dataStructureDesign/LFUCache.java @@ -0,0 +1,86 @@ +package dataStructureDesign; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.PriorityQueue; + +/** + * 460 LFU缓存 + */ + +class LFUNode { + int index; + int key; + int val; + int count; + + public LFUNode(int index, int key, int val) { + this.index = index; + this.key = key; + this.val = val; + this.count = 0; + } + + public void increase() { + count++; + } +} + +public class LFUCache { + int capacity; + int index = 0; + HashMap map = new HashMap<>(); + + // 按照访问次数、存放时间从小到大排序、 + PriorityQueue queue = new PriorityQueue<>( + (o1, o2) -> { + if(o1.count==o2.count) { + return o1.index - o2.index; + }else { + return o1.count - o2.count; + } + } + ); + + + public LFUCache(int capacity) { + this.capacity = capacity; + } + + int get(int key) { + if(map.containsKey(key)) { + LFUNode temp = map.get(key); + // 更新访问次数 + temp.increase(); + // 更新索引编号 + temp.index = index; + index++; + return temp.val; + } + return -1; + } + + void put(int key, int val) { + if(map.containsKey(key)) { + // 更新数据 + LFUNode data = map.get(key); + data.val = val; + data.increase(); + data.index = index; + index++; + } else { + // 判断是否超过缓存 + if(map.size()>=capacity) { + + LFUNode d = queue.poll(); + d.count = 0; + map.remove(d.key); + } + + LFUNode temp = new LFUNode(index, key, val); + map.put(key, temp); + queue.add(temp); + index++; + } + } +} diff --git a/algorithm/src/main/java/dataStructureDesign/LRUCache.java b/algorithm/src/main/java/dataStructureDesign/LRUCache.java new file mode 100644 index 0000000..c3a498f --- /dev/null +++ b/algorithm/src/main/java/dataStructureDesign/LRUCache.java @@ -0,0 +1,86 @@ +package dataStructureDesign; + +import linkedList.doublePointer.ListNode; +import org.w3c.dom.NodeList; + +/** + * 146 LRU 缓存机制 + */ + + +class Node { + int key; + int val; + Node next; + public Node(int key, int val) { + this.key = key; + this.val = val; + } +} + +// 使用单链表来处理 +public class LRUCache { + + private int capacity; + private int size = 0; + Node dummy = new Node(-1, -1); + + public LRUCache(int capacity) { + this.capacity = capacity; + } + + public int get(int key) { + Node pre = dummy; + Node cur = pre.next; + while (cur!=null) { + if(cur.key==key) { + moveCurrentNode(pre, cur); + return cur.val; + } + pre = pre.next; + cur = pre.next; + } + return -1; + + } + + public void put(int key, int value) { + + Node pre =dummy; + Node cur = dummy.next; + + // 先遍历,数据是否存在 + while (cur!=null) { + if(cur.key==key) { + cur.val = value; + moveCurrentNode(pre, cur); + return; + } + cur = cur.next; + // 保留倒数第二个节点 + if(cur!=null) { + pre = pre.next; + } + } + + // 若数据不存在,那么添加数据 + Node head = dummy.next; + dummy.next = new Node(key, value); + dummy.next.next = head; + // 节点数自增1 + size++; + if(size>capacity) { + pre.next = null; + size = capacity; + } + + } + + void moveCurrentNode(Node pre, Node cur) { + pre.next = cur.next; + cur.next = dummy.next; + dummy.next = cur; + } + + +} diff --git a/algorithm/src/main/java/dataStructureDesign/LRUCache2.java b/algorithm/src/main/java/dataStructureDesign/LRUCache2.java new file mode 100644 index 0000000..0c35cbe --- /dev/null +++ b/algorithm/src/main/java/dataStructureDesign/LRUCache2.java @@ -0,0 +1,54 @@ +package dataStructureDesign; + +import java.util.LinkedHashMap; + +/** + * 146 LRU 缓存机制 + */ + + +// 使用LinkedHashMap双链表来处理 + +public class LRUCache2 { + + private int capacity; + LinkedHashMap map = new LinkedHashMap<>(); + + public LRUCache2(int capacity) { + this.capacity = capacity; + } + + public int get(int key) { + if(map.containsKey(key)) { + int value = map.get(key); + moveHead(key); + return value; + } + return -1; + } + + public void put(int key, int value) { + if(map.containsKey(key)) { + map.replace(key, value); + } else { + map.put(key, value); + } + + if(map.size()>capacity) { + int removeKey = map.keySet().iterator().next(); + map.remove(removeKey); + } + + + } + + void moveHead(int key) { + int value = map.get(key); + // 删除元素 + map.remove(key); + // 添加到队尾 + map.put(key, value); + } + + +} diff --git a/algorithm/src/main/java/dataStructureDesign/MaximumFrequencyStack.java b/algorithm/src/main/java/dataStructureDesign/MaximumFrequencyStack.java new file mode 100644 index 0000000..200e28c --- /dev/null +++ b/algorithm/src/main/java/dataStructureDesign/MaximumFrequencyStack.java @@ -0,0 +1,48 @@ +package dataStructureDesign; + +import java.util.HashMap; +import java.util.PriorityQueue; +import java.util.Stack; + +/** + * 895 最大频率栈 + */ + + +public class MaximumFrequencyStack { + + // 当前最大频率 + int maxFre = 0; + + // 数值与频率的映射表 + HashMap valToFre = new HashMap<>(); + // 频率与数值的映射表 + HashMap> freToVal = new HashMap>(); + + + public void push(int val) { + // 修改 VF 表:val 对应的 freq 加⼀ + int fre = valToFre.getOrDefault(val, 0) + 1; + valToFre.put(val, fre); + // 修改 FV 表:在 freq 对应的列表加上 val + freToVal.putIfAbsent(fre, new Stack<>()); + freToVal.get(fre).push(val); + // 更新 maxFreq + maxFre = Math.max(maxFre, fre); + + } + + public int pop() { + Stack vals = freToVal.get(maxFre); + int v = vals.pop(); + valToFre.replace(v, maxFre-1); + if(vals.isEmpty()) { + maxFre--; + freToVal.remove(maxFre); + } + return v; + } + +} + + diff --git a/algorithm/src/main/java/dataStructureDesign/MinStack.java b/algorithm/src/main/java/dataStructureDesign/MinStack.java new file mode 100644 index 0000000..abd5fb0 --- /dev/null +++ b/algorithm/src/main/java/dataStructureDesign/MinStack.java @@ -0,0 +1,36 @@ +package dataStructureDesign; + +import java.util.Stack; + +/** + * 155 最小栈 + */ + +public class MinStack { + + Stack stack1 = new Stack<>(); + Stack stack2 = new Stack<>(); + + void push(int val) { + if(stack1.isEmpty()) { + stack2.push(val); + }else { + int minVal = Math.min(stack2.peek(), val); + stack2.push(minVal); + } + stack1.push(val); + } + + void pop() { + stack1.pop(); + stack2.pop(); + } + + int top() { + return stack1.peek(); + } + + int getMin() { + return stack2.peek(); + } +} diff --git a/algorithm/src/main/java/differenceArray/CarPooling.java b/algorithm/src/main/java/differenceArray/CarPooling.java new file mode 100644 index 0000000..c417772 --- /dev/null +++ b/algorithm/src/main/java/differenceArray/CarPooling.java @@ -0,0 +1,38 @@ +package differenceArray; + +/** + * 1094. 拼车 + * 公交站台数量不多于1000个 + */ + +public class CarPooling { + + public boolean carPooling(int[][] trips, int capacity) { + if(trips.length==0) { + return true; + } + boolean res = true; + + // 初始化差分数组 + int[] diff = new int[1001]; + + // 对差分数组进行操作 + for(int i=0;icapacity) { + res = false; + break; + } + } + return res; + } +} diff --git a/algorithm/src/main/java/differenceArray/FlightBooking.java b/algorithm/src/main/java/differenceArray/FlightBooking.java new file mode 100644 index 0000000..830e398 --- /dev/null +++ b/algorithm/src/main/java/differenceArray/FlightBooking.java @@ -0,0 +1,32 @@ +package differenceArray; + +/** + * 1109. 航班预订统计 + */ + +public class FlightBooking { + + int[] flightBooking(int[][] bookings, int n) { + + int[] diff = new int[n]; + + // 初始化差分数组 + for(int i=0;i> res = new LinkedList<>(); + + public List> allPathResourceTarget(int[][] graph) { + LinkedList path = new LinkedList<>(); + traverse(graph, 0, path); + return res; + + } + + // 图的遍历框架 + private void traverse(int[][] graph, int s, LinkedList path) { + + // 添加节点 s 到路径 + path.addLast(s); + + int n = graph.length; + if(s == n-1) { + // 到达终点 + res.add(new LinkedList<>(path)); + path.removeLast(); + return; + } + + // 递归每个相邻节点 + for(int v: graph[s]) { + traverse(graph, v, path); + } + + // 从路径移除节点 s + path.removeLast(); + } + +} diff --git a/algorithm/src/main/java/images/binary-tree-traversal.jpg b/algorithm/src/main/java/images/binary-tree-traversal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d5ec630b811f13e4baa193936ebe78a0066b33bc GIT binary patch literal 254010 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