Menu
CoddyTech

Merge Intervals

Trung bìnhKhoảngSắp xếppython iconjava iconcpp iconc iconjs icon+10

Bạn nhận được một tập hợp các khoảng, mỗi khoảng là một dãy số nguyên từ điểm bắt đầu đến điểm kết thúc. Gộp từng nhóm khoảng chồng lấp thành một khoảng bao phủ toàn bộ nhóm, rồi trả về các khoảng đã gộp, được sắp xếp theo điểm bắt đầu. Các khoảng chỉ chạm nhau, như [1, 4] và [4, 5], cũng được tính là chồng lấp.

Các khoảng được truyền vào dưới dạng hai mảng có cùng độ dài: khoảng i là [starts[i], ends[i]]. Bạn trả về một mảng 2D, tức danh sách các cặp [start, end].

Hàm

mergeIntervals(starts: integer-array, ends: integer-array) → integer-2d-array
startsinteger-array
phần đầu của mỗi khoảng
endsinteger-array
ở cuối mỗi khoảng, tại cùng chỉ số với điểm bắt đầu của khoảng đó
Trả vềinteger-2d-array
các khoảng đã gộp dưới dạng các cặp [start, end], sắp xếp theo start

Ràng buộc

  • 1 ≤ starts.length == ends.length ≤ 104
  • 0 ≤ starts[i] ≤ ends[i] ≤ 104
  • Các khoảng thời gian có thể đến theo bất kỳ thứ tự nào.
  • Các khoảng chỉ tiếp xúc tại một đầu mút cũng được tính là chồng lấp.

Ví dụ

Đầu vào
starts = [5, 1, 12, 3]ends = [7, 4, 14, 6]
Đầu ra
[[1, 7], [12, 14]]
Giải thích
Theo thứ tự bắt đầu, [1, 4] chồng lấn với [3, 6], khoảng này chồng lấn với [5, 7], nên cả ba hợp thành [1, 7]. [12, 14] bắt đầu sau 7 và vẫn đứng riêng.
challenge icon

Câu hỏi mở rộng

Các khoảng đã được gộp và sắp xếp theo điểm bắt đầu. Bạn cần thêm một khoảng mới. Bạn có thể trả về danh sách đã gộp trong thời gian O(n) mà không sắp xếp lại không?

Đặt lại code
def mergeIntervals(starts, ends):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Đối số

starts = [5, 1, 12, 3]
ends = [7, 4, 14, 6]

Đầu ra mong đợi

[[1, 7], [12, 14]]