二維陣列中的查詢(C 簡單區)

2021-10-24 09:20:20 字數 1599 閱讀 1637

題目:

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

示例:現有矩陣 matrix 如下:

[[1, 4, 7, 11, 15],

[2, 5, 8, 12, 19],

[3, 6, 9, 16, 22],

[10, 13, 14, 17, 24],

[18, 21, 23, 26, 30]

]給定 target = 5,返回 true。

給定 target = 20,返回 false。

限制:0 <= n <= 1000

0 <= m <= 1000

首先最先想到的暴力方法是通過遍歷整個二維陣列,通過每個元素與目標值比對來判斷目標值是否在陣列中。不過由於題目給定的限制條件是n(0-1000)、m(0-1000),所以考慮到演算法的時間複雜度,這種方法不可用。

然後通過題目可知,矩陣的行和列都是遞增的,因此我們可以想到從矩陣的右上角的第乙個元素開始,通過元素與目標值進行比對,若目標值小於當前元素,那麼讓當前元素在當前行左移一位;若目標值大於當前元素,那麼讓當前元素在當前列下移一位;

如下圖所示:假設目標值target=16,而右上角第乙個元素為15.由於15<16,故讓元素從當前列下移一位再進行判斷。

下移後的效果圖如下所示:

可以看到下移後19>16,於是讓元素從當前行向左移動一位再進行判斷。

到這裡可以發現12<16,故讓元素從當前列下移一位再進行判斷。

這個例子可以發現下一步就能找到與目標值匹配的元素,所以返回true;如果通過迴圈條件判斷,當元素移出了矩陣邊界還沒有找到匹配項,那麼返回false,表示矩陣無與目標值匹配到的元素。

**如下(示例):

class

solution

//獲取矩陣的行、列

int n=matrix.

size()

;int m=matrix[0]

.size()

;//從矩陣的右上角第乙個元素開始

int i=

0,j=m-1;

//判斷邊界條件

while

(i=0)

//如果當前元素的值小於目標值,則向下移動一位再進行判斷

else

if(target>matrix[i]

[j])

//若兩者相等,則直接返回true

else

}return

false;}

};

執行用時:52 ms, 在所有 c++ 提交中擊敗了94.98%的使用者

記憶體消耗:13 mb, 在所有 c++ 提交中擊敗了86.58%的使用者

二維陣列中的查詢 C

class solution if array i j target if array i j target if flag true return false else return true 個人總結 這裡有三個地方需要注意 1 用vector表示二位陣列的表示方法 vector array 注...

二維陣列中查詢

1.問題描述 在乙個二維陣列中,每一行按照從左到右的遞增順序排序,每一列按照從上到下的遞增的順序排序,請完成這樣乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列是否含有該整數。來自 劍指offer 2.分析 首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束 如果該數字大於要查...

二維陣列中查詢

乙個二維陣列,每一行從左到右,每一列從上到下,都是按遞增順序排列,輸入乙個二維陣列和某個數,判斷陣列中是否存在這個數 排除行和列 比如從右上角元素出發。先確定列的範圍,如果查詢數大於當前列的第一行數,那麼這一行的所有數都大於查詢數,排除,繼續查詢左邊列 確定行範圍,在前面列的範圍內,如果最右邊元素小...