Menu
CoddyTech
flag Ar iconالعربيةdown icon

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، لذا يبقيان كما هما.

lock icon+20 اختبارات مخفية عند الإرسال

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]]