Menu
CoddyTech

Search a 2D Matrix

لديك شبكة من الأعداد الصحيحة matrix تضم m صفوف وn أعمدة، وعدد صحيح target. كل صف مرتب ترتيبًا تصاعديًا، والقيمة الأولى في كل صف أكبر من القيمة الأخيرة في الصف الذي يسبقه. أعد true إذا ظهرت target في الشبكة، وfalse خلاف ذلك، في زمن O(log(m × n)).

الدالة

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
الشبكة، المعطاة كقائمة من الصفوف، مرتبة صفًا تلو الآخر
targetinteger
القيمة التي يجب البحث عنها
تُرجعboolean
صحيح إذا كان الهدف ضمن الشبكة، وخاطئ فيما عدا ذلك

القيود

  • 1 ≤ m, n ≤ 100، حيث m = matrix.length وn = matrix[i].length
  • لكل صف الطول نفسه n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • كل صف مرتب ترتيبًا تصاعديًا صارمًا، وتكون القيمة الأولى في كل صف أكبر من القيمة الأخيرة في الصف السابق.

أمثلة

المدخلات
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
المخرجات
true
الشرح
عند القراءة صفًا تلو الآخر، تشكّل القيم الـ12 قائمة مرتبة واحدة. يبحث البحث الثنائي في المواضع من 0 إلى 11، فيتحقق من 21 في الموضع 5 (أصغر من المطلوب)، ثم من 33 في الموضع 8 (أكبر من المطلوب)، ثم يعثر على 26 في الموضع 6.
challenge icon

سؤال إضافي

افترض أن الصفوف قد تكون بأطوال مختلفة، مع بقائها مرتبة من البداية إلى النهاية. كيف ستحوّل موضعًا إلى صف وعمود، وما تكلفة البحث؟

إعادة ضبط الشيفرة
def searchMatrix(matrix, target):
    # اكتب الكود هنا

اختبار #1

اختبار #2

الوسائط

matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]
target = 26

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

true