目錄
這是 leetcode 上的 74.搜尋二維矩陣,
難度為 【中等】
編寫乙個高效的演算法來判斷 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
-10^4 <= matrix[i][j], target <= 10^4
兩種解法,一種暴力解法,直接逐個判斷是否與target相等,相等則直接返回true,ac 24 ms
因為矩陣從左到右遞增,每行的第乙個整數大於前一行的最後乙個整數,所以可以先找到target屬於哪一行
for i in range(行):
if target==matrix[i][-1]:
return true
elif target逐行與最後乙個數字進行比較,如果小於最後乙個數字,則target可能就會在這此行,有二維轉換為一維的
然後再用二分查詢法在那行裡面查詢target
left,right=0,len(matrix[0])-1
nums=matrix[i]#target的可能存在的行,
while left<=right:
mid=(left+right)//2
if nums[mid]==target: return true
if nums[mid]>target:
right=mid-1:
else:
left=mid+1
class solution(object):
def searchmatrix(self, matrix, target):
hang=len(matrix)
lie=len(matrix[0])
for i in range(hang):
if matrix[i][-1]==target:
return true
elif targetbreak
left,right=0,lie-1
nums=matrix[i]
# print(nums)
while left<=right:
mid=(left+right)//2
if nums[mid]==target:
return true
if nums[mid]left=mid+1
else:
right=mid-1
return false
搜尋二維矩陣
寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 每行中的整數從左到右是排序的。每行的第乙個數大於上一行的最後乙個整數。樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出 target 3,返回 true 思路一 最容易想到的一種解法就是兩層f...
搜尋二維矩陣
寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出target 3,返回true 解題思路 可以把這個矩陣,看成是乙個大的一維陣列,1,3,5,7,10,11,16,20,23,34,50。然後...
搜尋二維矩陣
二分查詢第一題 衝 先看題目 編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 例 輸入 matrix 1,3,5,7 10,11,16,20 23,30,34,60 target 3 輸出 true 我的解法 public boolean searchmatr...