天天看點

NxN的數組矩陣,每一行,列均從左到右,從上之下遞增。

一、問題

NxN的數組矩陣,每一行,列均從左到右,從上之下遞增。

确定一個數x是否在該矩陣内。

二、解決代碼

public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        /*System.out.println("請輸入數字N");
        int n=scanner.nextInt();
        int a[][]=new int[n][n];
        System.out.println("請逐行輸入資料");
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                a[i][j]=scanner.nextInt();
            }
        }*/
        int a[][]=new int[][]{
                {,,,},
                {,,,},
                {,,,},
                {,,,}
        };
        System.out.println("請輸入你要查找的元素x");
        int x=scanner.nextInt();
        search(a, x);
    }

    private static void search(int[][] a, int k) {
        int m = a.length;
        int n = a[].length;
        for(int i = , j = n-; j >=  && i < n; ){
            if(a[i][j] == k){
                System.out.println(true);
                return;
            }else if(a[i][j] < k){
                i++;
            }else{
                j--;
            }
        }
        System.out.println(false);
    }
           

三、分析

因為矩陣是從左到右,從上到下遞增的,從矩陣的右上角開始,而右上角是第一行的最大值,如果目前元素小于要找的數x,說明改行不可能存在x,因為每一行中,第n-1列是該行最大值,是以就到下一行(i++),如果a[i] [j]大于要找的數,則說明該數存于這一行中,進行j–操作,因為此時的a[i] [j]是該列中最小的值了,不能再向下移動了。

Patience and perseverance will get paid.