劍指offer刷題 二維陣列中的查詢

2021-09-27 13:51:15 字數 1420 閱讀 7025

時間限制:1秒 空間限制:32768k 熱度指數:1416236

本題知識點: 查詢 陣列

題目描述:

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

首先由二維陣列的單調性特殊,所以肯定放棄暴力查詢;由於是二維陣列,所以二分不太適用,想到的是從左下角開始查詢,因為左下角的數是該行最小的,又是該列最大的,比較有特點,可以據此向右上角過度,逐個查詢。

初始位置:左下角元素

終止位置:右上角元素

while 是否到達右上角元素:

如果 行數<0 or 列數溢位:

返回 false

如果 target《當前元素:

行數-1

如果 target>當前元素:

列數+1

否則:target=當前元素

返回true

import numpy as np

class

solution

:def

find

(self,target,array)

: m=

len(array)-1

n=0while m!=

0or n!=

len(array[0]

)-1:

if m<

0or n>

len(array[0]

)-1:

return

false

elif target < array[m]

[n]:

m-=1continue

elif target > array[m]

[n]:

n+=1continue

else

:return

true

if __name__ ==

'__main__'

: target=

int(

input()

) n =

int(

input()

) a =

for _ in

range

(n):

list

(map

(int

,input()

.rstrip(

).split())

))array=np.array(a)

s=solution(

)print

(s.find(target, array)

)

其需要重視的是,由輸入的二維陣列轉換的方法

rstrip()刪除string末尾的指定字元,預設為空格

《劍指offer》二維陣列題

本文完全自己學習記錄,以便將來回顧 未排版 思路 從最後一列的首行開始與number比較 比如上圖中的數字9 若大於該number,則此列可跳過,繼續比較前面一列首行數字,若大於number繼續上一步,若小於,則看此列下一行數字,若找到則true,若此列遇到大於number的數字,還未找到numbe...

劍指offer刷題 04 二維陣列中的查詢

在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個高效的函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。示例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,1...

《劍指offer》刷題筆記 1 二維陣列的查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路一 遍歷陣列 思路二 利用二維陣列從左到右 從上到下遞增的規律,從左下角或右上角的元素 array x y...