3)二維陣列中的查詢

2021-09-24 19:38:48 字數 2264 閱讀 8612

題目:

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

思路:

這個題目相對前面三題比較簡單,假設該二維陣列為下圖(a),主要是思路上面過去,實現起來挺簡單的,下面我介紹一下實現思路,有種思路是分成幾部分去查詢,但是會出現重疊的部分,因此可以考慮從右上角或者左上角進行比對,因為無論從左到右還是從上到下都是有序的,所以每一行的右邊總比左邊大,每一列的下面總比上邊大,因此,找乙個數的時候,假設是7,

從右上角開始比較,a[0][4] = 9  所以a[0] [4] 這一列所有的數都大於等於9,因此該列可以刪除,同理,可以刪除[3]列,得到(b)

依照同樣的方法,從右上角開始刪除行,可以刪除和行。只剩下兩行兩列,比較右上角的數字,相等則返回

(a) 12

8924

91247

101368

1115

(b) 12

2447

68**實現

/**

* @description 二維陣列中的查詢

* * @author hsk

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

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

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

public class findinpartiallysortedmatrix 代表不存在

*/public int find(int matrix, int a) ;

// 判斷陣列是否正確

if (matrix == null || matrix.length <= 0)

// 判斷陣列數字的大小是否符合大小規則

int columns = matrix[0].length;

for (int i = 0; i < matrix.length; i++)

for (int j = 0; j < matrix[i].length; j++)

} else if (j == 0)

} else if (matrix[i][j] < matrix[i - 1][j] || matrix[i][j] < matrix[i][j - 1]) }}

// 正式查詢

int row = 0; // 行數

int column = matrix[0].length - 1; // 列數

while (row <= matrix.length - 1 && column >= 0) else if (a < matrix[row][column]) else

}system.out.println("陣列中不含數字:" + a);

return index;

}// ******************************====測試********************************====

// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數在陣列中

public void test1() , , , };

int index = find(matrix, 7);

}// 1 2 8 9

// 2 4 9 12

// 4 7 10 13

// 6 8 11 15

// 要查詢的數不在陣列中

public void test2() , , , };

int index = find(matrix, 5);

}// 陣列為空

public void test3()

// 1 2 8 9

// 4 3 9 12

// 4 7 10 13

// 6 8 11 15

// 陣列不滿足大小規則

public void test4() , , , };

int index = find(matrix, 7);

}// 陣列每行長度不一致

public void test5() , , , };

int index = find(matrix, 7);

}public static void main(string args)

}

3 二維陣列中的查詢

參考 二分查詢方法 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 劍指offer中提供的方法 如果我們從左上角開始查詢,那麼當查詢元素比左上元素大時,無法判斷是應該向下 向...

3 二維陣列中的查詢

題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解析 取二維陣列的右上方的頂點與要找的數字比較,如果要找的數字比頂點的數字小,那麼捨棄該列 colu...

3 二維陣列中的查詢

編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性 每行的元素從左到右公升序排列。每列的元素從上到下公升序排列。示例 現有矩陣 matrix 如下 給定 target 5,返回 true。給定 target 20,返回 false。因為二維陣...