Add uniqueIntervals Method for Non-Overlapping Interval Calculation #139
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem:
When working with multiple overlapping periods, I faced a challenge in breaking down these intervals into unique, non-overlapping segments. Existing methods in the library were not sufficient to address this scenario, especially when multiple periods partially overlap or fully contain each other.
For example, given the following intervals:
The desired result would be a collection of distinct, non-overlapping intervals:
In this case, the overlapping segments needed to be separated to provide a clear view of all unique time intervals.
Solution:
This pull request introduces a new uniqueIntervals method to the PeriodCollection class, which generates a collection of non-overlapping intervals from any set of overlapping or intersecting periods. The method recursively breaks down intervals until all overlaps are resolved, resulting in distinct intervals that fully represent the original periods without overlaps.
The solution includes:
• uniqueIntervals() Method: A public method that initiates the process of breaking down overlapping intervals into unique segments.
• Recursive Processing: An internal processIntervalsRecursively() function that iterates over each period, identifies overlaps, and recursively splits intervals as necessary. This ensures that all possible overlaps are handled and only unique intervals remain.