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

2022-01-29 06:12:02 字數 1132 閱讀 3858

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

首先看到這個題目我們可以想到舉乙個類似矩陣的例子,如下

通過觀察這個例子我們可以看出,左上角的數字是最小的,右下角的數字是最大的,我們首先就要判斷target是不是小於最小或者大於最大,是的話直接返回false,以減少計算量。

再有就是如果target在兩個數之間我們就要好好考慮一下該怎麼做了。其實我們很簡單就可以想到暴力遍歷的方法,對每一行的陣列進行判斷,看看到底有沒有target這個數字,有的話返回true,**如下:

// 暴力遍歷

function find(target, array)

for(let item of array)

if(item[col-1]>=target && item.includes(target))

}return false;

}

但是,這樣子的話不是最優解,演算法超時,我們就要想辦法優化這個演算法。

我們考慮如果從最左上角開始遍歷,它的右邊和下邊都是比他它的數,所以我們不好進行遍歷,我們的目標是要找乙個數,它的兩個分別是大於它的數和小於它的數,這樣我們就可以通過遍歷判斷他是否包含target。從上圖的矩陣中我們可以看到乙個符合條件的數字,就是最左下角的數字4,比4大的數字在4的右邊,比4小的數字在4的左邊,這樣我們就可以根據target的大小進行迴圈遍歷,**如下:

function find(target, array)

let x = row-1;

let y = 0;

while(true)

if(target>array[x][y])

else if(target

else}}

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 初...