劍指offer 1 二維陣列中的查詢

2021-10-03 12:31:09 字數 1668 閱讀 1908

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

看到這個題目的時候 首先我想到的是暴力求解,兩個for迴圈遍歷,直到(terget==array[i][j]),**示例:

public

class

solution}}

return

false;}

}

這時我們可以計算出時間複雜度:o(n^2)、空間複雜度:o(1)

然後我們進行第二種演算法

首先: 我們可以根據二維陣列的特性,在查詢陣列裡是否有這個整數時,我們可以按行和列去查詢。

int row=(int)array.size();

int rol=(int)array.size();

從題中知道:二維陣列,每一行從小到大,每一列從小到大 ,如圖所示:

我們可以看出

如果array[i][j] > target 則向左走 即 j–

如果array[i][j]< target 則向下走 即 i++

注意:

**示例:

class

solution

if(target

[0]||target>array[row-1]

[col-1]

)int i=0;

int j=col-1;

while

(i=0)

else

if(array[i]

[j]else

}return0;}};

時間複雜度:o(行高 + 列寬)

空間複雜度:o(1)

這時第二種演算法,但是我在看別人寫的**的時候,又發現了另外一種演算法:二分查詢

128

9249

124710

136811

15

比如說,我們要找10,首先我們可以把第一行和第一列第二列排除掉;

9

1210

1311

15

我再觀察第 1 列,發現最後一行是可以排除的,因為最後一行最小的數 11 是大於 10 的。同理,我觀察第 1 行,發現最後一列是可以排除的,因為這一列中最小的元素 12 大於 10。這樣以來就只餘下這些了:

9

10

基於以上發現,可以給行和列維護乙個範圍。交替地在餘下的矩陣的左上方和右下方做二分查詢,來縮小範圍。

**示例:

class

solution

else

if(target < array[i]

[middle]

)else

if(target > array[i]

[middle])}

}return

false;}

};

Python 劍指offer(1)二維陣列的查詢

題目 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。環境python2.7.3 解 coding utf 8 class solution array 二維...

劍指offer 1 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。二維陣列是有序的,比如下面的資料 1 2 3 4 5 6 7 8 9可以直接利用左下角數字開始查詢 大於 比較...

劍指offer 1 二維陣列查詢

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 首先是先模擬獲取隨機遞增陣列 public static int getarray int n,int m 初...