Menu
CoddyTech

Insert Interval

SedangIntervalpython iconjava iconcpp iconc iconjs icon+10

Kamu mendapatkan interval yang diurutkan berdasarkan titik awal dalam dua array: interval i adalah [starts[i], ends[i]], dan tidak ada dua interval yang tumpang tindih atau bersentuhan. Sisipkan interval baru [newStart, newEnd], gabungkan dengan setiap interval yang tumpang tindih atau bersentuhan dengannya, lalu kembalikan semua interval sebagai pasangan [start, end] yang diurutkan berdasarkan titik awal.

Interval bersentuhan ketika titik akhir salah satunya berada di titik awal yang lain, seperti pada [2, 4] dan [4, 8], dan interval yang bersentuhan akan digabungkan. [1, 2] dan [3, 4] tidak memiliki titik yang sama, jadi keduanya tetap terpisah.

Fungsi

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
awal setiap interval, dalam urutan menaik
endsinteger-array
akhir setiap interval, mencocokkan titik awal
newStartinteger
awal interval yang akan disisipkan
newEndinteger
ujung interval yang akan disisipkan
Mengembalikaninteger-2d-array
interval setelah penyisipan sebagai pasangan [start, end], diurutkan berdasarkan start

Batasan

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: interval diurutkan berdasarkan waktu mulai, dan tidak ada dua interval yang tumpang tindih atau bersentuhan.
  • 0 ≤ newStart ≤ newEnd ≤ 105

Contoh

Input
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
Output
[[1, 3], [5, 12], [15, 18]]
Penjelasan
[6, 11] bertumpang tindih dengan [5, 7] dan [10, 12], sehingga ketiganya menjadi [5, 12]. [1, 3] berakhir sebelum 6 dan [15, 18] dimulai setelah 12, sehingga keduanya tetap.
challenge icon

Pertanyaan lanjutan

Jika kamu menyisipkan banyak interval satu demi satu, bagaimana kamu akan menyimpannya agar setiap penyisipan membutuhkan biaya O(log n) ditambah satu langkah untuk setiap interval lama yang ditelannya?

Reset kode
def insertInterval(starts, ends, newStart, newEnd):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

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