❝
永远要这样写代码,好像最终维护你代码的人是个狂暴的、知道你住在哪里的精神病患者—— 小浩算法
❞
2次元配列でのルックアップ
タイトル説明
2次元配列(各1次元配列の長さは同じ)では、各行は左から右に昇順で並べ替えられ、各列は上から下に昇順で並べ替えられます。関数を完成させ、そのような2次元配列と整数を入力して、整数が配列に含まれているかどうかを判別してください。
解決
2次元配列の右上から検索します。
- 要素の値がtargetと等しい場合は、trueを返します。
- 要素の値がターゲットよりも大きい場合は、この列、つまり--jを切り取ります。
- 要素の値がターゲットよりも小さい場合は、この行、つまり++ iを切り取ります。
2次元配列の左下から検索することもできます。次のコードでは、左下を検索の開始点として使用しています。
検索範囲が狭くならないため、左上または右下の番号を選択できないことに注意してください。
public class Solution {
/**
* 二维数组中的查找
* @param target 目标值
* @param array 二维数组
* @return boolean
*/
public boolean find(int target, int[][] array) {
if (array == null) {
return false;
}
int rows = array.length;
int columns = array[0].length;
int i = rows - 1;
int j = 0;
while (i >= 0 && j < columns) {
if (array[i][j] == target) {
return true;
}
if (array[i][j] < target) {
++j;
} else {
--i;
}
}
return false;
}
}
テストケース
- 2次元配列には、検索された数値が含まれます(検索された数値は、配列内の最大値と最小値です。検索された数値は、配列内の最大値と最小値の間にあります)。
- 2次元配列に検索された番号はありません(検索された番号は配列の最大値よりも大きい/小さいです;検索された番号は配列の最大値と最小値の間にありますが、そのような番号はありませんアレイ)
- 特別な入力テスト(入力ヌルポインター)。
私は自分が書いたすべての問題解決策を電子書籍にまとめてgithubに配置し、3日間でgithubランキングのトップになりました!ほぼ5w人がダウンロードして読んだ!入手したい場合は、以下のリンクにアクセスしてください(星を付けるのを忘れないでください)。