Menu
CoddyTech

Non-overlapping Intervals

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

Khoảng thời gian i kéo dài từ starts[i] đến ends[i]. Hãy trả về số khoảng thời gian nhỏ nhất cần loại bỏ để không có hai khoảng nào còn lại chồng lấn. Hai khoảng chỉ tiếp xúc nhau, nghĩa là một khoảng kết thúc đúng tại điểm khoảng kia bắt đầu, thì không chồng lấn.

Hàm

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
phần đầu của mỗi khoảng thời gian
endsinteger-array
ở cuối mỗi khoảng, tại cùng chỉ số với điểm bắt đầu
Trả vềinteger
số khoảng thời gian ít nhất cần loại bỏ để các khoảng còn lại không chồng lấn

Ràng buộc

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Các khoảng không được sắp xếp. Hai khoảng có thể giống hệt nhau.

Ví dụ

Đầu vào
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Đầu ra
2
Giải thích
Theo thứ tự bắt đầu, các khoảng là [1,4], [2,3], [3,6] và [5,7]. Giữ lại [2,3] và [3,6], vì chúng chỉ chạm nhau, đồng thời loại bỏ 2 khoảng còn lại. Không thể giữ lại 3 khoảng: [1,4] chồng lấn với [2,3], còn [3,6] chồng lấn với [5,7].
challenge icon

Câu hỏi mở rộng

Giả sử mỗi khoảng có một giá trị và bạn muốn tìm tổng giá trị lớn nhất của các khoảng không chồng lấn. Việc chọn khoảng kết thúc sớm nhất có còn hiệu quả không?

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

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

2