記事のディレクトリ
タイトル説明
(同一の各一次元アレイの長さ)は、上から下に増加する順に、二次元アレイの各列をソートし、ソート昇順の順に左から右へ、各行。完全な機能は、そのような二次元アレイと整数を入力し、配列の整数が含まれているか否かが判断されます。
分析
よると対象の説明、このような私たちの二次元数のヘッド:
この配列の注意深い観察は、要素の左下に見出すことができる(4)それが大きい場合よりも右側の要素という特徴を有し、それは、上記の元素よりも小さいです。提供してくれます。この特定の要素は非常に良い検索パス現在の要素が目標値よりも小さい場合、我々は、我々は要素が大きな要素を見つけるために、引き続き比較することによって、正しい道に歩くだろうことができ、そうでなければアップ歩行パス。
アルゴリズム
そのプロパティの使用、当社のアルゴリズムは、現在の要素が少なく、目標値を超える場合、目標に現在の要素を比較し、左下の要素から開始することで、我々は再び比較するの右側の要素に移動します。それどころか、私たちは、要素の最上部に移動し、再び比較します。我々はターゲットを見つけ、または配列境界まで移動するまで、このプロセスが続行されます。
マップのプレゼンテーションを移動します
Javaコード
public class Solution {
public boolean Find(int target, int [][] array) {
int rows = array.length;
int cols = array[0].length;
// 此为左下角元素的位置
int i = rows - 1;
int j = 0;
while (i >= 0 && j < cols) {
int value = array[i][j];
if (target == value) {
return true;
}
if (target < value) {
// 如果当前元素大于目标值,向上移动
i--;
} else {
// 如果当前元素小于目标值,向右移动
j++;
}
}
return false;
}
}
アルゴリズムの効率解析
従動図を見ることができ、このアルゴリズムは、行毎時間負となり、または、最悪の場合では、ランクを通過し、従って、アルゴリズムの効率です。
O (M + N)
Mは、行の数であり、Nは列の数です。