每日演算法 搜尋二維矩陣

2022-09-09 17:51:35 字數 1657 閱讀 4506

目錄

這是 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...