Welcome to Day 54 of the #80DaysOfChallenges journey! This intermediate challenge solves the famous Summary Ranges problem (LeetCode #228), where you take a sorted list of unique integers and compress consecutive numbers into range strings like "0->2", while leaving isolated numbers as is "7". The solution uses a single linear pass with a clever "start of range" tracker, achieving O(n) time and O(1) extra space (beyond output), making it optimal and beautiful.
Example:
[0,1,2,4,5,7,8,10] → ["0->2","4->5","7->8","10"]
If you're grinding LeetCode, preparing for interviews, or processing data like IP ranges, timestamps, or IDs, this "Python summary ranges" solution is clean, fast, and the exact pattern top companies expect.
💡 Key Takeaways from Day 54: Summary Ranges Function
This challenge delivers a crystal-clear single-pass algorithm that tracks the current range start and closes ranges when a gap appears. We'll break it down: function with start tracker, loop for gap detection and range closing, and final range handling.
1. Function Design: Start Tracker and Empty Check
def summary_ranges(nums: list[int]) -> list[str]:
if not nums:
return []
result = []
start = nums[0] # beginning of current range
Immediate empty list return, no wasted work.
start = nums[0] is the genius: we always know where the current range began, so when it ends, we can format it perfectly.
2. Main Loop: Detect Gaps and Close Ranges
for i in range(1, len(nums)):
# If current number is not consecutive, close the previous range
if nums[i] != nums[i - 1] + 1:
end = nums[i - 1]
if start == end:
result.append(str(start))
else:
result.append(f"{start}->{end}")
start = nums[i] # start a new range
This is the core magic:
- Compare current with previous +1
- If gap found, close previous range using saved
start - Format as "start" or "start->end"
- Update start to current number
No extra variables needed. Pure elegance.
3. Final Range: Don't Forget the Last One!
# Handle the final range
end = nums[-1]
if start == end:
result.append(str(start))
else:
result.append(f"{start}->{end}")
return result
The loop misses the last range, so we handle it separately. Classic pattern in range problems.
🎯 Summary and Reflections
This summary ranges solution is short, optimal, and teaches one of the most useful patterns in array processing: the "range tracker" with start variable. It reinforced:
- Single pass efficiency: O(n) time, O(1) space (beyond output)
-
Gap detection logic:
nums[i] != nums[i-1] + 1is the key check - Edge case mastery: Empty list, single element, all consecutive, all isolated
This exact code passes LeetCode in 32ms (faster than 95% of Python submissions). It's production-ready.
Advanced Alternatives:
- Use itertools.groupby with key=lambda x: x - i
- Generator version for huge inputs
- Return indices instead of strings
But this version wins for clarity and speed.
🚀 Next Steps and Resources
Day 54 delivered LeetCode-level mastery in just 15 lines. Try [1] → ["1"] or [] → []
- Source Code for Challenge #54: scripts/summary_ranges.py
- Main Repository: 80-days-of-challenges
- Daily Updates: Twitter/X (@Shahrouzlogs)
What's your favorite one-liner array trick? Drop it below! 🔥
Top comments (0)