[オファー] [4] [検索]二次元アレイ

タイトル説明

  二次元アレイでは、各列から昇順に上から下へ各列を並べ替えるために、昇順ソートの順に左から右へ。完全な機能、例えば、二次元アレイと整数を入力し、配列の整数が含まれているか否かが判断されます。

アイデア解析

  あなたは、例えば、検索およびフィルタの二次元アレイを開始するために、1つのコーナー(上限または左下隅)を選択できるようにので、特定のグループの、底増分に左から右へ、上から2桁の増加である:右上から場合は、起動対象の数が digital'reが最初の行の下を探していることを示し、(原因左から右に増加する)番号の右上隅より大きい場合、最初の行の数を除外することができ、彼らができる、この方法を探し続けて調査対象の数値

Javaコード

public class Offer004 {
    public static void main(String[] args) {
//      int [][] arr = {{},{}}; 
        int [][] arr = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; 
//      System.out.println(arr.length);
//      System.out.println(arr[0].length);
        System.out.println(Offer004.findInPartiallySortedMatrix(arr, 11));
        System.out.println(Offer004.findInPartiallySortedMatrix(arr, 7));
    }
    public static boolean findInPartiallySortedMatrix(int[][] arr, int target) {
        return Solution1(arr, target);
    }
    
    /**
     * 从右上角开始找,如果目标数字小于右上角数字,j--,大于i++,依次缩小查找的范围
     *              
     * @param arr
     * @param target
     * @return
     */
    public static boolean Solution1(int[][] arr, int target) {
        if(arr==null || arr.length<=0 || arr[0].length<=0 ) {
            throw new IllegalArgumentException("参数非法!");
        }   
        int i=0;
        int j= arr[0].length-1;
        while(i<arr.length && j>=0) {
            if(target<arr[i][j]) {
                j--;
            }else if(target>arr[i][j]){
                i++;
            }else {
                return true;
            }
        }   
        return false;
    }
}

コードリンク

安全コードを証明するためにオファー-Java

おすすめ

転載: www.cnblogs.com/haoworld/p/offer4-er-wei-shu-zu-zhong-de-cha-zhao.html