Skip to content

Commit dfff8d9

Browse files
authored
Add MinimumWaitingTime algorithm (TheAlgorithms#5794)
1 parent a537654 commit dfff8d9

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

DIRECTORY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@
320320
* [JobSequencing](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/greedyalgorithms/JobSequencing.java)
321321
* [MergeIntervals](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/greedyalgorithms/MergeIntervals.java)
322322
* [MinimizingLateness](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/greedyalgorithms/MinimizingLateness.java)
323+
* [MinimumWaitingTime](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/greedyalgorithms/MinimumWaitingTime.java)
323324
* [StockProfitCalculator](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/greedyalgorithms/StockProfitCalculator.java)
324325
* io
325326
* [BufferedReader](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/io/BufferedReader.java)
@@ -921,6 +922,7 @@
921922
* [JobSequencingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/greedyalgorithms/JobSequencingTest.java)
922923
* [MergeIntervalsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/greedyalgorithms/MergeIntervalsTest.java)
923924
* [MinimizingLatenessTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/greedyalgorithms/MinimizingLatenessTest.java)
925+
* [MinimumWaitingTimeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/greedyalgorithms/MinimumWaitingTimeTest.java)
924926
* [StockProfitCalculatorTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/greedyalgorithms/StockProfitCalculatorTest.java)
925927
* io
926928
* [BufferedReaderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/io/BufferedReaderTest.java)
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* The MinimumWaitingTime class provides a method to calculate the minimum
7+
* waiting time for a list of queries using a greedy algorithm.
8+
*
9+
* @author Hardvan
10+
*/
11+
public final class MinimumWaitingTime {
12+
private MinimumWaitingTime() {
13+
}
14+
15+
/**
16+
* Calculates the minimum waiting time for a list of queries.
17+
* The function sorts the queries in non-decreasing order and then calculates
18+
* the waiting time for each query based on its position in the sorted list.
19+
*
20+
* @param queries an array of integers representing the query times in picoseconds
21+
* @return the minimum waiting time in picoseconds
22+
*/
23+
public static int minimumWaitingTime(int[] queries) {
24+
int n = queries.length;
25+
if (n <= 1) {
26+
return 0;
27+
}
28+
29+
Arrays.sort(queries);
30+
31+
int totalWaitingTime = 0;
32+
for (int i = 0; i < n; i++) {
33+
totalWaitingTime += queries[i] * (n - i - 1);
34+
}
35+
return totalWaitingTime;
36+
}
37+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.thealgorithms.greedyalgorithms;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.stream.Stream;
6+
import org.junit.jupiter.params.ParameterizedTest;
7+
import org.junit.jupiter.params.provider.Arguments;
8+
import org.junit.jupiter.params.provider.MethodSource;
9+
10+
public class MinimumWaitingTimeTest {
11+
12+
@ParameterizedTest
13+
@MethodSource("provideTestCases")
14+
public void testMinimumWaitingTime(int[] queries, int expected) {
15+
assertEquals(expected, MinimumWaitingTime.minimumWaitingTime(queries));
16+
}
17+
18+
private static Stream<Arguments> provideTestCases() {
19+
return Stream.of(Arguments.of(new int[] {3, 2, 1, 2, 6}, 17), Arguments.of(new int[] {3, 2, 1}, 4), Arguments.of(new int[] {1, 2, 3, 4}, 10), Arguments.of(new int[] {5, 5, 5, 5}, 30), Arguments.of(new int[] {}, 0));
20+
}
21+
}

0 commit comments

Comments
 (0)