劍指offer(1)

嗯最近要秋招了,讓自己進入一個編程的狀態,既然寫完代碼,那就來捋下思路吧!

本題主要是考察二維數組的應用。

package jianzhioffer;

import java.util.Scanner;
/**
*題目: 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
思路:從右上角開始找,這樣每次能夠去掉一行或者一列。
* @author Dan
*
*/
public class FindIn2Weishuzu {
public static void main(String[] args) {
/**
* 二維數組的定義和初始化
*/
int[][] a = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
boolean find7 = Find(7, a);
System.out.println(find7);

}
public static boolean Find(int target, int [][] array) {
    //定義一個初值
    boolean find = false;
    //判斷數組是否爲空,否者會拋出空指針異常
    if (array != null) {
        //得到數組的行與列
        int rows = array.length;
        int columns = array[0].length;

        //查找過程中的行與列
        int row = 0;
        int column = columns - 1;
        while (row < rows && column >= 0) {
            //每次從右上角開始查找,如果右上角比所找目標要大,說明右上角這一列都比該數大,可以刪掉
            if (array[row][column] > target) {
                column--;//忽略該列
            } else if (array[row][column] < target) {
            //如果右上角比所找目標要小,說明右上角這一行都比該數小,可以刪掉
                row++;
            } else {
                //找到目標
                find = true;
                break;
            }
        }
    }
    return find;
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章