面試題4 二維陣列中的查詢

2022-06-01 19:30:07 字數 2383 閱讀 7810

// 面試題4:二維陣列中的查詢

// 題目:在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按

// 照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個

// 整數,判斷陣列中是否含有該整數。

例如乙個陣列:

//  1   2   8   9

//  2   4   9   12

//  4   7   10  13

//  6   8   11  15

查詢7會返回true,查詢5會返回false

1、從第乙個元素開始慢慢比較,把所有元素全比較一遍,這是最笨的方法。

2、還可以縮小範圍,不必比較每個元素。

如果選取的元素大於目標數字,說明目標在元素的左方和上方。

如果選取的元素小於目標數字,說明目標在元素的右方和下方。

然後怎麼辦呢,將陰影部分的全部比較?

這樣確實是比第一種方法高明了一點點,但是思路還是很複雜,應該不能這麼做。

3、書裡提供了一種思路,嘗試選取右上角的元素來和目標數字比較。

比如選取右上角元素查詢7。

選取右上角的元素9,顯然9>7,9所在的第3列都大於7,剔除第3列。

再次選取右上角元素8,顯然8>7,8所在的第2列都大於7,剔除第2列。

再次選取右上角的元素2,顯然2<7,2所在的第0行都小於7(只剩下1和2),剔除第0行。

再次選取右上角的元素4,顯然4<7,4所在的第1行都小於7(只剩下2和4),剔除第1行。

再次選取右上角的元素7,顯然7=7,查詢結束,返回。

再比如選取右上角元素查詢5.

選取右上角的元素9,顯然9>5,9所在的第3列都大於5,剔除第3列。

選取右上角的元素8,顯然8>5,8所在的第2列都大於5,剔除第2列。

選取右上角的元素2,顯然2>5,2所在的第0行都小於於5(1和2),剔除第0行。

選取右上角的元素4,顯然4<5,4所在的第1行都小於5(2和4),剔除第1行。

選取右上角的元素7,顯然7>5,7所在的第1列都大於5(7和8),剔除第1列。

選取右上角的元素4,顯然4<5,4所在的第2行都小於5(4),剔除第2行。

選取最後乙個元素6,未查找到5,返回。

4、其實還可以選取左下角的元素來不斷縮小範圍,目前只寫了**,具體過程明天再寫。

5、但是選取左上角和右下角的元素,你是沒辦法縮小範圍的,只能確定選定的元素和目標數字的大小,沒辦法去掉整行或者整列,其實就是第1種方法的變形,效率很低,沒有什麼用處。。

選取右上角元素:

if

(引數輸入合法)

else

if(選取元素》目標數字)

去掉目標元素所在列;

else

去掉目標元素所在行;

}return

false

;}

選取左下角元素:

if

(引數輸入合法)

else

if(選取元素目標數字)

去掉目標元素所在列;

else

去掉目標元素所在行;

}return

false

;}

選取右上角元素:

bool find(int* matrix, int rows, int coloums, int

number)

//選取元素》目標數字,去掉選取元素所在列

else

if (matrix[row*coloums + coloum] >number)

coloum--;

////選取元素

《目標數字,去掉選取元素所在行

else

row++;}}

return

found;

}

選取左下角元素:

bool find(int* matrix, int rows, int coloums, int

number)

//選取元素》目標數字,去掉選取元素所在列

else

if (matrix[row*coloums + coloum]

coloum++;

//選取元素《目標數字,去掉選取元素所在行

else

row--;}}

return

found;

}

面試題4 二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。bool find int matrix,int cols,int rows,int target bool find int ...

面試題4 二維陣列中的查詢

題目 二維陣列中的查詢 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按 照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個 整數,判斷陣列中是否含有該整數。include bool find int matrix,int rows,int columns,int...

面試題4 二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下的遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。c 實現 includeusing namespace std bool find int numbers,int rows,...