Menu
CoddyTech

Search a 2D Matrix

Bạn nhận được một lưới số nguyên matrix có m hàng và n cột, cùng một số nguyên target. Mỗi hàng được sắp xếp theo thứ tự tăng dần, và giá trị đầu tiên của mỗi hàng lớn hơn giá trị cuối cùng của hàng phía trên. Trả về true nếu target xuất hiện trong lưới, ngược lại trả về false, trong thời gian O(log(m × n)).

Hàm

searchMatrix(matrix: integer-2d-array, target: integer) → boolean
matrixinteger-2d-array
lưới, được biểu diễn dưới dạng danh sách các hàng, sắp xếp theo từng hàng
targetinteger
giá trị cần tìm
Trả vềboolean
true nếu target nằm trong lưới, false nếu không

Ràng buộc

  • 1 ≤ m, n ≤ 100, trong đó m = matrix.length và n = matrix[i].length
  • Mỗi hàng đều có cùng độ dài n.
  • -104 ≤ matrix[i][j], target ≤ 104
  • Mỗi hàng được sắp xếp theo thứ tự tăng dần nghiêm ngặt, và giá trị đầu tiên của mỗi hàng lớn hơn giá trị cuối cùng của hàng trước đó.

Ví dụ

Đầu vào
matrix = [[2, 5, 9, 14], [17, 21, 26, 30], [33, 38, 45, 52]]target = 26
Đầu ra
true
Giải thích
Đọc từng hàng, 12 giá trị tạo thành một danh sách đã được sắp xếp. Tìm kiếm nhị phân trong các vị trí từ 0 đến 11 kiểm tra 21 ở vị trí 5 (quá nhỏ), 33 ở vị trí 8 (quá lớn), rồi tìm thấy 26 ở vị trí 6.
challenge icon

Câu hỏi mở rộng

Giả sử các hàng có thể có độ dài khác nhau nhưng vẫn được sắp xếp nối tiếp nhau. Bạn sẽ chuyển một vị trí thành hàng và cột như thế nào, và chi phí tìm kiếm là bao nhiêu?

Đặt lại code
def searchMatrix(matrix, target):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Đối số

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

Đầu ra mong đợi

true