python 搜索二维矩阵
生活随笔
收集整理的這篇文章主要介紹了
python 搜索二维矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
搜索二維矩陣
編寫一個高效的算法來判斷 m x n 矩陣中,是否存在一個目標值。該矩陣具有如下特性:
每行中的整數從左到右按升序排列。
每行的第一個整數大于前一行的最后一個整數。
示例 1:
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
輸出:true
示例 2:
輸入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
輸出:false
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
題解
class Solution:"""處理思路:1.先對列進行二分處理,找到小于target 的最大第一個元素的列2.對此列進行二分, 找到推行的target3.空間復雜度為O1 時間復雜的為log(m+n)"""def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:col_first = 0col_last = len(matrix) - 1row_first = 0row_last = len(matrix[0]) - 1row_data = self.column_binary(matrix, col_first, col_last, target)return self.row_binary(row_data, row_first, row_last, target)def column_binary(self, matrix, col_first, col_last, target):if col_last == 0:return matrix[0]# 對列的第一個元素進行二分對比while col_last >= col_first:mid = col_first + (col_last-col_first)//2print('mid:', mid)if matrix[mid][0] <= target:# mid + 1 > col_last 處理[[1],[3]] 3 這種情況if mid+1 > col_last or matrix[mid+1][0] > target:# matrix[mid] 就是我們想要找的列:return matrix[mid]else:col_first = mid + 1else:col_last = mid - 1return matrix[col_last]def row_binary(self, row_data, row_first, row_last, target):# 對行進行二分while row_last >= row_first:mid = row_first + (row_last-row_first)//2print('mid_Val:', row_data[mid])if row_data[mid] == target:return Trueelif row_data[mid] > target:row_last = mid - 1else:row_first = mid + 1return False總結
以上是生活随笔為你收集整理的python 搜索二维矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 寻找峰值
- 下一篇: python两数之和(hash 表)