Menu
CoddyTech

Insert Interval

Trung bìnhKhoảngpython iconjava iconcpp iconc iconjs icon+10

Bạn nhận được các khoảng đã sắp xếp theo điểm bắt đầu dưới dạng hai mảng: khoảng thứ i là [starts[i], ends[i]], và không có hai khoảng nào chồng lấp hoặc tiếp giáp nhau. Chèn khoảng mới [newStart, newEnd], gộp khoảng này với mọi khoảng chồng lấp hoặc tiếp giáp với nó, rồi trả về tất cả các khoảng dưới dạng cặp [start, end], được sắp xếp theo điểm bắt đầu.

Các khoảng tiếp giáp nhau khi điểm kết thúc của khoảng này trùng với điểm bắt đầu của khoảng kia, như [2, 4] và [4, 8], và các khoảng tiếp giáp sẽ được gộp. [1, 2] và [3, 4] không có điểm chung, nên chúng vẫn tách rời.

Hàm

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
điểm bắt đầu của mỗi khoảng, theo thứ tự tăng dần
endsinteger-array
điểm kết thúc của mỗi khoảng, tương ứng với điểm bắt đầu
newStartinteger
điểm bắt đầu của khoảng cần chèn
newEndinteger
điểm kết thúc của khoảng cần chèn
Trả vềinteger-2d-array
các khoảng sau khi chèn dưới dạng cặp [start, end], được sắp xếp theo start

Ràng buộc

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: các khoảng được sắp xếp theo điểm bắt đầu, và không có hai khoảng nào chồng lấn hoặc tiếp giáp nhau.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Ví dụ

Đầu vào
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Đầu ra
[[1, 3], [5, 12], [15, 18]]
Giải thích
[6, 11] chồng lấn với [5, 7] và [10, 12], nên cả ba hợp thành [5, 12]. [1, 3] kết thúc trước 6 và [15, 18] bắt đầu sau 12, nên cả hai vẫn giữ nguyên.
challenge icon

Câu hỏi mở rộng

Nếu bạn chèn nhiều khoảng thời gian liên tiếp, bạn sẽ lưu chúng như thế nào để mỗi lần chèn tốn O(log n) cộng thêm một bước cho mỗi khoảng thời gian cũ mà nó gộp vào?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

starts = [1, 5, 10, 15]
ends = [3, 7, 12, 18]
newStart = 6
newEnd = 11

Đầu ra mong đợi

[[1, 3], [5, 12], [15, 18]]