Problem 3 二維陣列中的查詢

2021-09-12 23:05:03 字數 1036 閱讀 5649

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

首先分析該陣列的特點,在向下和向右方向上,數值會遞增。以二維陣列中任意位置元素為例,同行右側元素皆大於該點,同列下側元素皆大於該點,因此該點右下側元素皆大於該點。

而右上側和左下側點都可能有大於該點的點,初步可認為,大於該值的點位於右側和下側。

因此,我們可以根據該陣列的特點進行逐行剔除,達到縮小範圍,查詢目標值的目的。

首先確定初始點,由於剔除某行/列,需要與目標值對比。初始點大於目標值,需要往小側移動;初始點小於目標值,需要往大側移動。而四個頂點,只有左下角和右下角,進行橫向和縱向移動能高效篩選和剔除行列。

選擇右上角為初始點,執行下述操作

1)如果該點等於目標值,結束查詢

2)如果該點小於目標值,往大側移動,下移一行(列索引不變)

3)如果該點大於目標值,往小側移動,左移一列(行索引不變)

重複上述過程,直到索引超過陣列邊界。如果符合1,退出重複。這裡,我們認為本題找到目標值即可,無需查詢是否有其他位置的目標值。

根據上述思路,通過向左下移動,達到整行或者整列的剔除,實現比較快速的查詢。可以把這個過程理解為剝洋蔥,一層層剝開外層的非目標層,查詢內部的目標值。

源程式:

package jz_offer;

public class problem03

else if(arr[i][j]

}return flag;

}public static void main(string args),,,};

boolean found=findnum(array,7);

system.out.println("if the num 7 is in the array?"+found);

}

}

陣列 3 二維陣列中的查詢

coding utf 8 class solution array 二維列表 def find self,target,array if len array 0 or len array 0 0 return false for i in range len array for j in range...

3 二維陣列中的查詢

參考 二分查詢方法 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 劍指offer中提供的方法 如果我們從左上角開始查詢,那麼當查詢元素比左上元素大時,無法判斷是應該向下 向...

3)二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 這個題目相對前面三題比較簡單,假設該二維陣列為下圖 a 主要是思路上面過去,實現起來挺簡單的,下面我介紹一下實現思路,有種...