mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-13 07:13:37 +08:00
Improve comments in ActivitySelection.java (#5485)
This commit is contained in:
@ -560,6 +560,7 @@
|
|||||||
* [LongestNonRepetitiveSubstring](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/strings/LongestNonRepetitiveSubstring.java)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [VolumeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/VolumeTest.java)
|
||||||
* misc
|
* 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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [BoyerMooreTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/BoyerMooreTest.java)
|
||||||
* cn
|
* cn
|
||||||
* [HammingDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/cn/HammingDistanceTest.java)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [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)
|
* [PangramTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/strings/PangramTest.java)
|
||||||
|
@ -7,36 +7,62 @@ 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 {
|
public final class ActivitySelection {
|
||||||
|
|
||||||
|
// Private constructor to prevent instantiation of the utility class
|
||||||
private ActivitySelection() {
|
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<Integer> activitySelection(int[] startTimes, int[] endTimes) {
|
public static ArrayList<Integer> activitySelection(int[] startTimes, int[] endTimes) {
|
||||||
int n = startTimes.length;
|
int n = startTimes.length;
|
||||||
|
|
||||||
|
// 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];
|
int[][] activities = new int[n][3];
|
||||||
|
|
||||||
// Create a 2D array to store activities and their start/end times.
|
// Populate the 2D array with the activity index, start time, and end time.
|
||||||
// Each row: [activity index, start time, end time]
|
|
||||||
|
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
activities[i][0] = i; // Assign activity index
|
activities[i][0] = i; // Assign the activity index
|
||||||
activities[i][1] = startTimes[i]; // Assign start time
|
activities[i][1] = startTimes[i]; // Assign the start time of the activity
|
||||||
activities[i][2] = endTimes[i]; // Assign end time
|
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]));
|
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<Integer> selectedActivities = new ArrayList<>();
|
ArrayList<Integer> 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++) {
|
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) {
|
if (activities[i][1] >= lastEndTime) {
|
||||||
selectedActivities.add(activities[i][0]);
|
selectedActivities.add(activities[i][0]); // Select this activity
|
||||||
lastEndTime = activities[i][2];
|
lastEndTime = activities[i][2]; // Update the end time of the last selected activity
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return the list of selected activity indices.
|
||||||
return selectedActivities;
|
return selectedActivities;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user