Jianzhiオファー03:2次元配列で検索

❝
永远要这样写代码,好像最终维护你代码的人是个狂暴的、知道你住在哪里的精神病患者—— 小浩算法

❞

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;
    }
}

テストケース

  1. 2次元配列には、検索された数値が含まれます(検索された数値は、配列内の最大値と最小値です。検索された数値は、配列内の最大値と最小値の間にあります)。
  2. 2次元配列に検索された番号はありません(検索された番号は配列の最大値よりも大きい/小さいです;検索された番号は配列の最大値と最小値の間にありますが、そのような番号はありませんアレイ)
  3. 特別な入力テスト(入力ヌルポインター)。

私は自分が書いたすべての問題解決策を電子書籍にまとめてgithubに配置し、3日間でgithubランキングのトップになりました!ほぼ5w人がダウンロードして読んだ!入手したい場合は、以下のリンクにアクセスしてください(星を付けるのを忘れないでください)。

https://github.com/geekxh/hello-algorithm

おすすめ

転載: blog.51cto.com/15076236/2609652