在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
輸入陣列:[[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]
如果輸入查詢數值為7,則返回true,(掃瞄法) o(m+n)如果輸入查詢數值為5,則返回false。
主要就是發現這個二維陣列的規律:每行中最右側數最大,每列中最下側數最大。
從最右上方開始進行掃瞄,時間複雜度分析:最差的情況是二維陣列(m*n)中沒有要找的值,走了m+n步,時間複雜度o(m+n)。若當前值array[i][j]正好等於target,返回true;
否則若當前值array[i][j]小於target,則說明當前位置正左側的數都小於target,行號i加1;
否則若當前值array[i][j]大於target,則說明當前位置正下側的數都大於target,列號j減1。
直至遍歷到最左下方仍沒有找到與target相同的值,返回false。
c **
bool searcharray(int** array, int arrayrowsize, int arraycolsize, int target)
return false;
}
#### python3 **
class solution(object):
def searcharray(self, array, target):
""":type array: list[list[int]]
:type target: int
:rtype: bool
"""# 如果陣列為空
if not array or not array[0]: return false
# 獲取二維陣列的行數和列數
rowlen, collen = len(array), len(array[0])
# 0賦給i,collen-1賦給j
i, j = 0, collen - 1
while i < rowlen and j >= 0:
if array[i][j] == target:
return true
elif array[i][j] < target:
i += 1
else:
j -= 1
return false
每日一練 二維陣列中的查
內容 在乙個二維陣列中,每一行都按照從左往右遞增的順序排列,每一列都按照從上到下遞增的順序排列。請完成乙個函式,輸入這樣的乙個二維陣列,判斷是否含有該整數。解題思路 首先選取陣列中右上角的數字,如果該數字等於要查詢的數字,則查詢結束 如果該數字大於要查詢的數字,則剔除這個數字所在的列 如果該數字小於...
二維陣列及二維陣列的遍歷
一 如果陣列的元素是一維陣列 則該陣列是二維陣列 如果陣列的元素是二維陣列 則該陣列是三維陣列 注意 二維陣列的長度 是陣列內一維陣列的個數 獲取二維陣列內的元素 第一步獲取該元素在哪乙個一維陣列內 第二步獲取該元素在一維陣列的那個位置 false var arr 1,2,3 var arr1 你好...
二維陣列中的查詢 陣列
題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思想 因為有序,所以二分查詢。從上到下,從左到右,都是遞增。但是把二維變成一維之後就不是遞增的了 行進行二分查詢,確定在哪一...