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
true אם היעד נמצא ברשת, false אחרת

אילוצים

  • 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