Skip to content

Commit ec4e304

Browse files
authored
Merge branch 'master' into feat/ds/splay_tree
2 parents 7125270 + b396a97 commit ec4e304

File tree

266 files changed

+8437
-5245
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

266 files changed

+8437
-5245
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
* @yanglbme @vil02 @BamaCharanChhandogi
1+
* @yanglbme @vil02 @BamaCharanChhandogi @alxkm @siriak

.github/workflows/clang-format-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99

1010
steps:
1111
- uses: actions/checkout@v4
12-
- uses: DoozyX/clang-format-lint-action@v0.17
12+
- uses: DoozyX/clang-format-lint-action@v0.18
1313
with:
1414
source: './src'
1515
extensions: 'java'

.gitpod.dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM gitpod/workspace-java-21:2024-06-24-08-46-07
1+
FROM gitpod/workspace-java-21:2024-07-14-17-19-51
22

33
ENV LLVM_SCRIPT="tmp_llvm.sh"
44

DIRECTORY.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,6 @@
440440
* [RemoveDuplicateFromString](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/RemoveDuplicateFromString.java)
441441
* [ReturnSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/ReturnSubsequence.java)
442442
* [ReverseStackUsingRecursion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/ReverseStackUsingRecursion.java)
443-
* [RootPrecision](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/RootPrecision.java)
444443
* [RotateMatrixBy90Degrees](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/RotateMatrixBy90Degrees.java)
445444
* [SieveOfEratosthenes](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/SieveOfEratosthenes.java)
446445
* [SkylineProblem](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/SkylineProblem.java)
@@ -491,7 +490,7 @@
491490
* [BitonicSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BitonicSort.java)
492491
* [BogoSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BogoSort.java)
493492
* [BubbleSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BubbleSort.java)
494-
* [BubbleSortRecursion](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BubbleSortRecursion.java)
493+
* [BubbleSortRecursive](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BubbleSortRecursive.java)
495494
* [BucketSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/BucketSort.java)
496495
* [CircleSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/CircleSort.java)
497496
* [CocktailShakerSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/CocktailShakerSort.java)
@@ -502,6 +501,7 @@
502501
* [DualPivotQuickSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/DualPivotQuickSort.java)
503502
* [DutchNationalFlagSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/DutchNationalFlagSort.java)
504503
* [ExchangeSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/ExchangeSort.java)
504+
* [FlashSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/FlashSort.java)
505505
* [GnomeSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/GnomeSort.java)
506506
* [HeapSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/HeapSort.java)
507507
* [InsertionSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/InsertionSort.java)
@@ -512,6 +512,7 @@
512512
* [MergeSortRecursive](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/MergeSortRecursive.java)
513513
* [OddEvenSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/OddEvenSort.java)
514514
* [PancakeSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/PancakeSort.java)
515+
* [PatienceSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/PatienceSort.java)
515516
* [PigeonholeSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/PigeonholeSort.java)
516517
* [QuickSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/QuickSort.java)
517518
* [RadixSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/RadixSort.java)
@@ -523,6 +524,7 @@
523524
* [SortAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SortAlgorithm.java)
524525
* [SortUtils](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SortUtils.java)
525526
* [SortUtilsRandomGenerator](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SortUtilsRandomGenerator.java)
527+
* [SpreadSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SpreadSort.java)
526528
* [StoogeSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/StoogeSort.java)
527529
* [StrandSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/StrandSort.java)
528530
* [SwapSort](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/sorts/SwapSort.java)
@@ -863,23 +865,30 @@
863865
* [BinaryInsertionSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BinaryInsertionSortTest.java)
864866
* [BitonicSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BitonicSortTest.java)
865867
* [BogoSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BogoSortTest.java)
868+
* [BubbleSortRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BubbleSortRecursiveTest.java)
866869
* [BubbleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BubbleSortTest.java)
867870
* [BucketSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/BucketSortTest.java)
868871
* [CircleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CircleSortTest.java)
869872
* [CocktailShakerSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CocktailShakerSortTest.java)
870873
* [CombSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CombSortTest.java)
874+
* [CountingSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CountingSortTest.java)
875+
* [CycleSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/CycleSortTest.java)
871876
* [DualPivotQuickSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/DualPivotQuickSortTest.java)
872877
* [DutchNationalFlagSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/DutchNationalFlagSortTest.java)
873878
* [ExchangeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/ExchangeSortTest.java)
879+
* [FlashSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/FlashSortTest.java)
874880
* [GnomeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/GnomeSortTest.java)
875881
* [HeapSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/HeapSortTest.java)
876882
* [InsertionSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/InsertionSortTest.java)
877883
* [IntrospectiveSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/IntrospectiveSortTest.java)
884+
* [MergeSortNoExtraSpaceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/MergeSortNoExtraSpaceTest.java)
878885
* [MergeSortRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/MergeSortRecursiveTest.java)
879886
* [MergeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/MergeSortTest.java)
880887
* [OddEvenSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/OddEvenSortTest.java)
881888
* [PancakeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/PancakeSortTest.java)
889+
* [PatienceSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/PatienceSortTest.java)
882890
* [QuickSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/QuickSortTest.java)
891+
* [RadixSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/RadixSortTest.java)
883892
* [SelectionSortRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SelectionSortRecursiveTest.java)
884893
* [SelectionSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SelectionSortTest.java)
885894
* [ShellSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/ShellSortTest.java)
@@ -888,6 +897,8 @@
888897
* [SortingAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SortingAlgorithmTest.java)
889898
* [SortUtilsRandomGeneratorTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SortUtilsRandomGeneratorTest.java)
890899
* [SortUtilsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SortUtilsTest.java)
900+
* [SpreadSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SpreadSortTest.java)
901+
* [StoogeSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/StoogeSortTest.java)
891902
* [StrandSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/StrandSortTest.java)
892903
* [SwapSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/SwapSortTest.java)
893904
* [TimSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/sorts/TimSortTest.java)

pmd-exclude.properties

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ com.thealgorithms.datastructures.crdt.LWWElementSet=UselessParentheses
1212
com.thealgorithms.datastructures.crdt.Pair=UnusedPrivateField
1313
com.thealgorithms.datastructures.graphs.AStar=UselessParentheses
1414
com.thealgorithms.datastructures.graphs.AdjacencyMatrixGraph=CollapsibleIfStatements,UnnecessaryFullyQualifiedName,UselessParentheses
15-
com.thealgorithms.datastructures.graphs.BipartiteGrapfDFS=CollapsibleIfStatements
15+
com.thealgorithms.datastructures.graphs.BipartiteGraphDFS=CollapsibleIfStatements
1616
com.thealgorithms.datastructures.graphs.Kruskal=UselessParentheses
1717
com.thealgorithms.datastructures.hashmap.hashing.HashMapCuckooHashing=UselessParentheses
1818
com.thealgorithms.datastructures.heaps.FibonacciHeap=UselessParentheses
@@ -39,15 +39,14 @@ com.thealgorithms.dynamicprogramming.WineProblem=UselessParentheses
3939
com.thealgorithms.maths.BinomialCoefficient=UselessParentheses
4040
com.thealgorithms.maths.Complex=UselessParentheses
4141
com.thealgorithms.maths.DistanceFormulaTest=UnnecessaryFullyQualifiedName
42-
com.thealgorithms.maths.FibonacciJavaStreamsTest=BigIntegerInstantiation
4342
com.thealgorithms.maths.Gaussian=UselessParentheses
4443
com.thealgorithms.maths.GcdSolutionWrapper=UselessParentheses
4544
com.thealgorithms.maths.HeronsFormula=UselessParentheses
4645
com.thealgorithms.maths.KaprekarNumbers=UselessParentheses
4746
com.thealgorithms.maths.KeithNumber=UselessParentheses
4847
com.thealgorithms.maths.LeonardoNumber=UselessParentheses
4948
com.thealgorithms.maths.LinearDiophantineEquationsSolver=UselessParentheses
50-
com.thealgorithms.maths.MatrixUtil=BigIntegerInstantiation,UselessParentheses
49+
com.thealgorithms.maths.MatrixUtil=UselessParentheses
5150
com.thealgorithms.maths.RomanNumeralUtil=UselessParentheses
5251
com.thealgorithms.maths.SecondMinMax=UselessParentheses
5352
com.thealgorithms.maths.SecondMinMaxTest=UnnecessaryFullyQualifiedName
@@ -76,7 +75,6 @@ com.thealgorithms.searches.InterpolationSearch=UselessParentheses
7675
com.thealgorithms.searches.KMPSearch=UselessParentheses
7776
com.thealgorithms.searches.LinearSearchThread=EmptyCatchBlock
7877
com.thealgorithms.searches.RabinKarpAlgorithm=UselessParentheses
79-
com.thealgorithms.sorts.BubbleSortRecursion=UselessParentheses
8078
com.thealgorithms.sorts.CircleSort=EmptyControlStatement
8179
com.thealgorithms.sorts.CombSort=UselessParentheses
8280
com.thealgorithms.sorts.DutchNationalFlagSort=UselessParentheses

pom.xml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@
1212
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1313
<maven.compiler.source>21</maven.compiler.source>
1414
<maven.compiler.target>21</maven.compiler.target>
15-
<assertj.version>3.26.0</assertj.version>
15+
<assertj.version>3.26.3</assertj.version>
1616
</properties>
1717

1818
<dependencyManagement>
1919
<dependencies>
2020
<dependency>
2121
<groupId>org.junit</groupId>
2222
<artifactId>junit-bom</artifactId>
23-
<version>5.10.3</version>
23+
<version>5.11.0</version>
2424
<type>pom</type>
2525
<scope>import</scope>
2626
</dependency>
@@ -31,7 +31,7 @@
3131
<dependency>
3232
<groupId>org.junit.jupiter</groupId>
3333
<artifactId>junit-jupiter</artifactId>
34-
<version>5.10.3</version>
34+
<version>5.11.0</version>
3535
<scope>test</scope>
3636
</dependency>
3737
<dependency>
@@ -44,13 +44,13 @@
4444
<dependency>
4545
<groupId>org.junit.jupiter</groupId>
4646
<artifactId>junit-jupiter-api</artifactId>
47-
<version>5.10.3</version>
47+
<version>5.11.0</version>
4848
<scope>test</scope>
4949
</dependency>
5050
<dependency>
5151
<groupId>org.apache.commons</groupId>
5252
<artifactId>commons-lang3</artifactId>
53-
<version>3.14.0</version>
53+
<version>3.17.0</version>
5454
</dependency>
5555
<dependency>
5656
<groupId>org.apache.commons</groupId>
@@ -63,7 +63,7 @@
6363
<plugins>
6464
<plugin>
6565
<artifactId>maven-surefire-plugin</artifactId>
66-
<version>3.3.0</version>
66+
<version>3.5.0</version>
6767
<configuration>
6868
<forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
6969
</configuration>
@@ -107,7 +107,7 @@
107107
<plugin>
108108
<groupId>org.apache.maven.plugins</groupId>
109109
<artifactId>maven-checkstyle-plugin</artifactId>
110-
<version>3.4.0</version>
110+
<version>3.5.0</version>
111111
<configuration>
112112
<configLocation>checkstyle.xml</configLocation>
113113
<consoleOutput>true</consoleOutput>
@@ -118,14 +118,14 @@
118118
<dependency>
119119
<groupId>com.puppycrawl.tools</groupId>
120120
<artifactId>checkstyle</artifactId>
121-
<version>10.17.0</version>
121+
<version>10.18.1</version>
122122
</dependency>
123123
</dependencies>
124124
</plugin>
125125
<plugin>
126126
<groupId>com.github.spotbugs</groupId>
127127
<artifactId>spotbugs-maven-plugin</artifactId>
128-
<version>4.8.6.1</version>
128+
<version>4.8.6.2</version>
129129
<configuration>
130130
<excludeFilterFile>spotbugs-exclude.xml</excludeFilterFile>
131131
<includeTests>true</includeTests>
@@ -146,7 +146,7 @@
146146
<plugin>
147147
<groupId>org.apache.maven.plugins</groupId>
148148
<artifactId>maven-pmd-plugin</artifactId>
149-
<version>3.23.0</version>
149+
<version>3.25.0</version>
150150
<configuration>
151151
<printFailingErrors>true</printFailingErrors>
152152
<includeTests>true</includeTests>

spotbugs-exclude.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,6 @@
6565
<Match>
6666
<Bug pattern="UWF_UNWRITTEN_FIELD" />
6767
</Match>
68-
<Match>
69-
<Bug pattern="DLS_DEAD_LOCAL_STORE" />
70-
</Match>
7168
<Match>
7269
<Bug pattern="UWF_NULL_FIELD" />
7370
</Match>
@@ -89,9 +86,6 @@
8986
<Match>
9087
<Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" />
9188
</Match>
92-
<Match>
93-
<Bug pattern="RV_ABSOLUTE_VALUE_OF_HASHCODE" />
94-
</Match>
9589
<!-- fb-contrib -->
9690
<Match>
9791
<Bug pattern="OCP_OVERLY_CONCRETE_PARAMETER" />
@@ -126,9 +120,6 @@
126120
<Match>
127121
<Bug pattern="BL_BURYING_LOGIC" />
128122
</Match>
129-
<Match>
130-
<Bug pattern="OI_OPTIONAL_ISSUES_USES_IMMEDIATE_EXECUTION" />
131-
</Match>
132123
<Match>
133124
<Bug pattern="PCOA_PARTIALLY_CONSTRUCTED_OBJECT_ACCESS" />
134125
</Match>
Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,42 @@
11
package com.thealgorithms.backtracking;
22

3+
import java.util.ArrayList;
34
import java.util.List;
4-
import java.util.TreeSet;
55

66
/**
7-
* Finds all permutations of 1...n of length k
8-
* @author TheClerici (<a href="https://github.com/TheClerici">git-TheClerici</a>)
7+
* Finds all combinations of 0...n-1 of length k
98
*/
109
public final class ArrayCombination {
1110
private ArrayCombination() {
1211
}
13-
private static int length;
1412

1513
/**
16-
* Find all combinations of 1..n by creating an array and using backtracking in Combination.java
17-
* @param n max value of the array.
18-
* @param k length of combination
19-
* @return a list of all combinations of length k. If k == 0, return null.
14+
* Finds all combinations of length k of 0..n-1 using backtracking.
15+
*
16+
* @param n Number of the elements.
17+
* @param k Length of the combination.
18+
* @return A list of all combinations of length k.
2019
*/
21-
public static List<TreeSet<Integer>> combination(int n, int k) {
22-
if (n <= 0) {
23-
return null;
20+
public static List<List<Integer>> combination(int n, int k) {
21+
if (n < 0 || k < 0 || k > n) {
22+
throw new IllegalArgumentException("Wrong input.");
2423
}
25-
length = k;
26-
Integer[] arr = new Integer[n];
27-
for (int i = 1; i <= n; i++) {
28-
arr[i - 1] = i;
24+
25+
List<List<Integer>> combinations = new ArrayList<>();
26+
combine(combinations, new ArrayList<>(), 0, n, k);
27+
return combinations;
28+
}
29+
30+
private static void combine(List<List<Integer>> combinations, List<Integer> current, int start, int n, int k) {
31+
if (current.size() == k) { // Base case: combination found
32+
combinations.add(new ArrayList<>(current)); // Copy to avoid modification
33+
return;
34+
}
35+
36+
for (int i = start; i < n; i++) {
37+
current.add(i);
38+
combine(combinations, current, i + 1, n, k);
39+
current.removeLast(); // Backtrack
2940
}
30-
return Combination.combination(arr, length);
3141
}
3242
}

0 commit comments

Comments
 (0)