From a28977c631088e91dac44a1470ec326b9aae1cee Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Mon, 30 Sep 2024 22:41:17 +0530 Subject: [PATCH 1/3] Improve comments --- .../greedyalgorithms/ActivitySelection.java | 56 ++++++++++++++----- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java b/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java index 88fbc50129ca..9f1fcfcd18ab 100644 --- a/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java +++ b/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java @@ -4,39 +4,65 @@ import java.util.Arrays; import java.util.Comparator; -// Problem Link: https://en.wikipedia.org/wiki/Activity_selection_problem +// Problem Link: https://en.wikipedia.org/wiki/Activity_selection_problem public final class ActivitySelection { + + // Private constructor to prevent instantiation of the utility class private ActivitySelection() { } - // Function to perform activity selection + + /** + * Function to perform activity selection using a greedy approach. + * + * The goal is to select the maximum number of activities that don't overlap + * with each other, based on their start and end times. Activities are chosen + * such that no two selected activities overlap. + * + * @param startTimes Array containing the start times of the activities. + * @param endTimes Array containing the end times of the activities. + * @return A list of indices representing the selected activities that can be + * performed without overlap. + */ public static ArrayList activitySelection(int[] startTimes, int[] endTimes) { int n = startTimes.length; - int[][] activities = new int[n][3]; - // Create a 2D array to store activities and their start/end times. - // Each row: [activity index, start time, end time] + // Create a 2D array to store activity indices along with their start and end + // times. + // Each row represents an activity in the format: [activity index, start time, + // end time]. + int[][] activities = new int[n][3]; + // Populate the 2D array with the activity index, start time, and end time. for (int i = 0; i < n; i++) { - activities[i][0] = i; // Assign activity index - activities[i][1] = startTimes[i]; // Assign start time - activities[i][2] = endTimes[i]; // Assign end time + activities[i][0] = i; // Assign the activity index + activities[i][1] = startTimes[i]; // Assign the start time of the activity + activities[i][2] = endTimes[i]; // Assign the end time of the activity } - // Sort activities by their end times in ascending order. + // Sort activities based on their end times in ascending order. + // This ensures that we always try to finish earlier activities first. Arrays.sort(activities, Comparator.comparingDouble(activity -> activity[2])); - int lastEndTime; + int lastEndTime; // Variable to store the end time of the last selected activity + // List to store the indices of selected activities ArrayList selectedActivities = new ArrayList<>(); - selectedActivities.add(activities[0][0]); - lastEndTime = activities[0][2]; - // Iterate through sorted activities to select compatible ones. + // Select the first activity (as it has the earliest end time after sorting) + selectedActivities.add(activities[0][0]); // Add the first activity index to the result + lastEndTime = activities[0][2]; // Keep track of the end time of the last selected activity + + // Iterate over the sorted activities to select the maximum number of compatible + // activities. for (int i = 1; i < n; i++) { + // If the start time of the current activity is greater than or equal to the + // end time of the last selected activity, it means there's no overlap. if (activities[i][1] >= lastEndTime) { - selectedActivities.add(activities[i][0]); - lastEndTime = activities[i][2]; + selectedActivities.add(activities[i][0]); // Select this activity + lastEndTime = activities[i][2]; // Update the end time of the last selected activity } } + + // Return the list of selected activity indices. return selectedActivities; } } From 73093b01b4a3262adce627fb0c91b77a2881f121 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Mon, 30 Sep 2024 17:11:41 +0000 Subject: [PATCH 2/3] Update directory --- DIRECTORY.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index bbcee88e52be..0e96e8fb22bf 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -560,6 +560,7 @@ * [LongestNonRepetitiveSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestNonRepetitiveSubstring.java) * [LongestPalindromicSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestPalindromicSubstring.java) * [Lower](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Lower.java) + * [Manacher](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Manacher.java) * [MyAtoi](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/MyAtoi.java) * [Palindrome](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Palindrome.java) * [Pangram](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/Pangram.java) @@ -846,6 +847,8 @@ * [TwinPrimeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/TwinPrimeTest.java) * [VolumeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/VolumeTest.java) * misc + * [ColorContrastRatioTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/ColorContrastRatioTest.java) + * [InverseOfMatrixTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/InverseOfMatrixTest.java) * [MapReduceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MapReduceTest.java) * [MedianOfMatrixtest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MedianOfMatrixtest.java) * [MedianOfRunningArrayTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MedianOfRunningArrayTest.java) @@ -857,6 +860,7 @@ * [ArrayRightRotation](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ArrayRightRotation.java) * [ArrayRightRotationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ArrayRightRotationTest.java) * [BestFitCPUTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BestFitCPUTest.java) + * [BFPRTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BFPRTTest.java) * [BoyerMooreTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BoyerMooreTest.java) * cn * [HammingDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/cn/HammingDistanceTest.java) @@ -976,6 +980,7 @@ * [LongestNonRepetitiveSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestNonRepetitiveSubstringTest.java) * [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LongestPalindromicSubstringTest.java) * [LowerTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/LowerTest.java) + * [ManacherTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/ManacherTest.java) * [MyAtoiTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/MyAtoiTest.java) * [PalindromeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PalindromeTest.java) * [PangramTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PangramTest.java) From fc9dc61829e7169b19e074b0fe2ae3808b9c6f98 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Mon, 30 Sep 2024 22:43:29 +0530 Subject: [PATCH 3/3] Fix trailing whitespaces --- .../com/thealgorithms/greedyalgorithms/ActivitySelection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java b/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java index 9f1fcfcd18ab..54ba4eb650a8 100644 --- a/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java +++ b/src/main/java/com/thealgorithms/greedyalgorithms/ActivitySelection.java @@ -14,11 +14,11 @@ private ActivitySelection() { /** * Function to perform activity selection using a greedy approach. - * + * * The goal is to select the maximum number of activities that don't overlap * with each other, based on their start and end times. Activities are chosen * such that no two selected activities overlap. - * + * * @param startTimes Array containing the start times of the activities. * @param endTimes Array containing the end times of the activities. * @return A list of indices representing the selected activities that can be