時間限制: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...