java 矩陣查詢

2021-07-26 01:32:31 字數 1930 閱讀 5912

//忽略**風格...大小寫比較隨意了  

private static final int matrix = ,,,

,};

/**

* 在二維陣列中查詢某個數是否存在

* 次二維陣列橫向與縱向都是單調遞增的

*/public static boolean testfindvalueinmatrix01(int matrix, int key) else if (key > matrix[matrix.length - 1][matrix[0].length - 1]) else else }}

}}

return false;

}

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 key=14

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 i=0

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 continue

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 i=1

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 continue

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 i=2

01-13 13:00:56.284 28607-28607/? i/testfindvalueinmatrix: testfindvalueinmatrix01 find it (2,4)

思路:

1.先與左上角的數字and 右下角的數字 對比,如果不在範圍內直接false;

2.與第一行最左 and最右的數字對比,不在範圍內,直接continue換下一行;

3.如果『可能』在行內,那麼遍歷這一行;

4.如果不在行內,進行下一行的遍歷;

ps:還有更好的方式,待續

方法2:

public static boolean testfindvalueinmatrix03(int matrix,int key)else if (var < key) else 

}return false;

}

網上有人叫上面這個方法是『定位法』,這個方法其實是前乙個方法的變種,從右上角那個數開始比較,如果右上角的數比key大,那麼就向左走,如果右上角的數比key小,就向下走;拿14為例,右上角的數比14小,所以一路向下走到第三行,16比14大,想走走,14剛好找到。

方法3:

採用遞迴+二分法 的方式。

public static boolean testfindvalueinmatrix02(

int left,

int right,

int top,

int bottom,

int matrix,

int key)

if(key > matrix[bottom][right])else if(key < matrix[top][left])elseelse if (key

例如第乙個mid位置的值是7,查詢14,14>7,那麼就在a,b,c三個區域再次查詢。

JAVA語言之有序矩陣查詢

現在有乙個行和列都排好序的矩陣,請設計乙個高效演算法,快速查詢矩陣中是否含有值x。給定乙個int矩陣mat,同時給定矩陣大小nxm及待查詢的數x,請返回乙個bool值,代表矩陣中是否存在x。所有矩陣中數字及x均為int範圍內整數。保證n和m均小於等於1000。測試樣例 1,2,3 4,5,6 7,8...

螺旋矩陣 JAVA

題目 給定乙個包含 m x n 個元素的矩陣 m 行,n 列 請按照順時針螺旋順序,返回矩陣中的所有元素。示例 1 輸入 1,2,3 4,5,6 7,8,9 輸出 1,2,3,6,9,8,7,4,5 示例 2 輸入 1,2,3,4 5,6,7,8 9,10,11,12 輸出 1,2,3,4,8,12...

楊氏矩陣查詢

題目為 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例如下面的二維陣列就是每行 每列都遞增排序,如果在這個陣列中查詢數字6,則返回true 如果查詢數字10,由於陣列不含有該數字...