合并重叠区间触发AttributeError问题及算法实现需求
Hey there! Let's break down why your code is throwing an AttributeError and get it working properly.
The Root Cause
Your code assumes every element in the intervals list is a custom Interval class instance with .start and .end attributes. But based on the example input you provided ([1,3],[2,6],...), it looks like you're passing in regular lists instead of these custom objects. Lists don't have .start or .end attributes, so when your code tries to access them, Python throws that error.
The Fix
We just need to adjust the code to work with list-based intervals instead of custom class instances. Here's the updated version:
class Solution: # @param intervals, a list of lists # @return a list of lists def merge(self, intervals): if not intervals: return [] # Sort intervals by their starting value (first element of each list) intervals.sort(key=lambda x: x[0]) merged = [intervals[0]] for current_interval in intervals[1:]: last_merged = merged[-1] # Check if current interval overlaps with the last merged interval if current_interval[0] <= last_merged[1]: # Merge them: update the end to the maximum of both intervals' ends last_merged[1] = max(last_merged[1], current_interval[1]) else: # No overlap, add the current interval to the merged list merged.append(current_interval) return merged
Key Changes Made
- Replaced all
.startreferences with[0](since the first element of each list is the interval start) - Replaced all
.endreferences with[1](second element is the interval end) - Added a clearer check for empty input upfront
- Renamed variables for better readability (you can keep your original variable names if you prefer!)
Testing with Your Example
If you run this code with the input [[1,3],[2,6],[8,10],[15,18]], it will correctly return:[[1,6],[8,10],[15,18]]
What If You Are Using a Custom Interval Class?
If you intended to work with a custom Interval type, make sure the class is properly defined with start and end attributes, like this:
class Interval: def __init__(self, start, end): self.start = start self.end = end
With this class defined, your original code should work as expected (just make sure you pass in instances of this class instead of lists).
内容的提问来源于stack exchange,提问作者Tarun Chitturi

