Menu
CoddyTech

Insert Interval

OrtaAralıklarpython iconjava iconcpp iconc iconjs icon+10

Başlangıç değerlerine göre sıralanmış bir aralık listesi alıyorsun; bu liste, aynı uzunlukta iki dizi olarak veriliyor: i. aralık [starts[i], ends[i]] şeklindedir. Bu aralıklardan hiçbiri örtüşmez veya birbirine değmez. Ayrıca yeni bir aralık, [newStart, newEnd], alıyorsun. Bu aralığı ekle, örtüştüğü veya değdiği her aralıkla birleştir ve başlangıç değerlerine göre sıralanmış, [start, end] çiftlerinden oluşan 2 boyutlu bir dizi olarak tüm aralıkları döndür.

Bir aralığın bitiş noktası diğerinin başlangıç noktasıysa bu iki aralık birbirine değer; örneğin [2, 4] ve [4, 8] gibi. Birbirine değen aralıklar tek bir aralıkta birleştirilir. [1, 2] ve [3, 4] hiçbir noktayı paylaşmaz, bu yüzden ayrı kalırlar.

Fonksiyon

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
her aralığın başlangıcı, artan sırada
endsinteger-array
her aralığın sonu, başlangıçlarla eşleşir
newStartinteger
eklenecek aralığın başlangıcı
newEndinteger
eklenecek aralığın sonu
Döndürürinteger-2d-array
ekleme işleminden sonraki aralıkları [start, end] çiftleri olarak, start değerine göre sıralanmış biçimde

Kısıtlar

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: aralıklar başlangıç zamanına göre sıralıdır ve hiçbir ikisi çakışmaz veya birbirine değmez.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Örnekler

Girdi
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Çıktı
[[1, 3], [5, 12], [15, 18]]
Açıklama
[6, 11], [5, 7] ve [10, 12] ile çakışır; bu yüzden üçü [5, 12] olur. [1, 3], 6'dan önce biter ve [15, 18], 12'den sonra başlar; bu yüzden ikisi de olduğu gibi kalır.

lock iconGönderirken +20 gizli test

challenge icon

Ek soru

Aynı listeye art arda birçok yeni aralık eklediğinizi varsayalım. Her ekleme O(log n) maliyetine ve içine aldığı her eski aralık için bir adıma mal olacak şekilde aralıkları nasıl saklardınız?

Kodu sıfırla
def insertInterval(starts, ends, newStart, newEnd):
    # Kodu buraya yazın
Test durumları

Durum 1

Durum 2

Durum 3

Girdi

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

Beklenen

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