Leetcode 9월 Day12
2190 단어 pythoncomputerscience
간격이 처음에 시작 시간*에 따라 정렬되었다고 가정할 수 있습니다.
예시 -
""
입력: 간격 = [[1,3],[6,9]], newInterval = [2,5]
출력: [[1,5],[6,9]]
""
내 초기 접근 방식 - 간격 배열이 각 간격의 시작을 기준으로 정렬 된 상태로 유지되도록 위치에
newInterval
를 삽입하십시오.newInterval을 삽입한 후 가능한 모든 간격을 병합할 수 있습니다.
해결책
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
if len(intervals) == 0:
return [newInterval]
intervals.append(newInterval)
intervals = sorted(intervals, key = lambda x : x[0])
# now merge the intervals
i = 1
while i < len(intervals):
p_i = intervals[i-1]
c_i = intervals[i]
if p_i[0] <= c_i[0] and c_i[0] <= p_i[-1]:
intervals[i-1] = [p_i[0], max(c_i[-1], p_i[-1])]
del intervals[i]
else:
i += 1
return intervals
TC - 정렬 및 삭제 때문에 O(nlogn + n^2).
어떻게 최적화할 수 있습니까 ??
이진 검색을 사용하여 인덱스를 결정할 수 있습니다.
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
if len(intervals) == 0:
return [newInterval]
intervals.append(newInterval)
intervals = sorted(intervals, key = lambda x : x[0])
lo = 0
hi = len(intervals) - 1
idx = 0
while lo < hi:
mid = (lo + hi)//2
if intervals[mid][0] <= newInterval[0]:
idx = max(idx, mid)
lo = mid + 1
else:
hi = mid - 1
intervals.insert(idx + 1, newInterval)
# now merge the intervals
i = 1
while i < len(intervals):
p_i = intervals[i-1]
c_i = intervals[i]
if p_i[0] <= c_i[0] and c_i[0] <= p_i[-1]:
intervals[i-1] = [p_i[0], max(c_i[-1], p_i[-1])]
del intervals[i]
else:
i += 1
return intervals
Reference
이 문제에 관하여(Leetcode 9월 Day12), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/skbhagat40/leetcode-september-day12-3lgk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)