【劍指offer】-二維數組的查找-01/67

題目描述

在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

題目分析

題目中樣例大概可爲:

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8

  1. 第一個做法爲:
    直接暴力遍歷,查找有沒有該整數的存在,此做法複雜度和時間比較高(不建議)
  2. 第二個做法爲:
    觀察規律,可以得知,在最右上角的數字(5),在整行之中是屬於最大的,在整列之中是屬於最小的,根據這個規律,可以將整數與右上角數字相比較,若大於則直接換下一行,若小於,則直接換上一列。

代碼(java)

  1. 暴力代碼:
public class Solution {
    public boolean Find(int target, int [][] array) 
    {
        int hang = array.length;
        int lie = array[0].length;
        for(int i = 0; i < lie; i++)
        {
            for(int j = 0; j < hang; j++)
            {
                if(array[i][j] == target)
                {
                    return true;
                }
            }
        }
        return false;
    }
    
//運行時間:132ms
//佔用內存:17232k
  1. 規律代碼:
public class Solution {
    public boolean Find(int target, int [][] array) 
    {
        int hang = array.length - 1;
        int lie = array[0].length - 1;
        int i = 0;
        int j = lie;
        while(i <= hang && j >= 0){
            if(array[i][j] == target){
                return true;
            }else if(array[i][j] < target){
                i++;
            }else{
                j--;
            }
        }
        return false;
    }
}

//運行時間:180ms
//佔用內存:17596k

總結

在JAVA中,數組的行數和列數的求算方法爲:

java 是按行存儲數組的
假如一個二維數組 array,
它的行數爲: array.length
它的列數爲: array[0].length
三維數組則分別爲: array.length, array[0].length, array[0][0].length
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章