Menu
CoddyTech

Insert Interval

متوسطالفتراتpython iconjava iconcpp iconc iconjs icon+10

تحصل على فترات مرتبة حسب البداية في مصفوفتين: الفترة i هي [starts[i], ends[i]]، ولا تتداخل أي فترتين ولا تتلامسان. أدرج الفترة الجديدة [newStart, newEnd]، وادمجها مع كل فترة تتداخل معها أو تلامسها، ثم أعد جميع الفترات كأزواج [start, end] مرتبة حسب البداية.

تتلامس الفترات عندما تنتهي إحداها عند النقطة التي تبدأ عندها الأخرى، مثل [2, 4] و[4, 8]، وتُدمج الفترات المتلامسة. أما [1, 2] و[3, 4] فلا تشتركان في أي نقطة، لذا تبقيان منفصلتين.

الدالة

insertInterval(starts: integer-array, ends: integer-array, newStart: integer, newEnd: integer) → integer-2d-array
startsinteger-array
بداية كل فترة، بترتيب تصاعدي
endsinteger-array
نهاية كل فترة، مع مطابقة أوقات البدء
newStartinteger
بداية الفاصل الزمني المراد إدراجه
newEndinteger
نهاية الفترة الزمنية المراد إدراجها
تُرجعinteger-2d-array
الفواصل بعد الإدراج على هيئة أزواج [start, end]، مرتبة حسب start

القيود

  • 1 ≤ starts.length == ends.length ≤ 2000
  • 0 ≤ starts[i] ≤ ends[i] ≤ 105
  • ends[i] < starts[i+1]: الفترات مرتبة حسب بدايتها، ولا تتداخل أي فترتين منها أو تتلامسان.
  • 0 ≤ newStart ≤ newEnd ≤ 105

أمثلة

المدخلات
starts = [1, 5, 10, 15]ends = [3, 7, 12, 18]newStart = 6newEnd = 11
المخرجات
[[1, 3], [5, 12], [15, 18]]
الشرح
[6, 11] يتداخل مع [5, 7] و[10, 12]، لذا تصبح الفترات الثلاث [5, 12]. تنتهي [1, 3] قبل 6، وتبدأ [15, 18] بعد 12، لذا تبقى كلتاهما كما هما.
challenge icon

سؤال إضافي

إذا أدرجتَ العديد من الفترات واحدةً تلو الأخرى، فكيف ستخزّنها بحيث تكلّف كل عملية إدراج O(log n) بالإضافة إلى خطوة واحدة لكل فترة قديمة تبتلعها؟

إعادة ضبط الشيفرة
def insertInterval(starts, ends, newStart, newEnd):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

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

الإخراج المتوقع

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