題目描述:
在乙個二維陣列中,每一行都按照從左到右遞增的順序排列,每一列都按照從上到下遞增的順序排列。請完成乙個函式,輸入這樣的乙個二維陣列和乙個正數,判斷陣列中是否含有該正數。
輸入描述:
array: 待查詢的二維陣列
target: 查詢的數字
輸出描述:
查詢到返回true,查詢不到返回false
遍歷查詢顯然不是我們期望的結果。題意描述的二維陣列的排列規則,應該引起我們的注意。
當二維陣列中的某個元素與target比較時,只存在三種情況,相等,大於,小於。
相等直接返回true即可;當當前元素的值大於或者小於target的值,我們需要明確定位下乙個同target比較的元素的位置。
二維陣列的四個角上的元素是我們的突破口。
似乎我們總是忍不住首先考慮陣列的第乙個(左上角)元素。但是,馬上我們就能找到從左上角元素開始查詢不合適的理由。
當第乙個元素和target比較之後,如果不幸二者不相等,接下來的問題就是,我們無法確定下個和target比較的是哪個元素。因為,無論第乙個元素的右邊還是下面的元旦都比第乙個元素大。
右下角的元素存在同樣問題。
依照這種思路,我們不能發現,左下角和右上角的元素存在乙個共同特點:
當target大於當前元素的值時,下乙個需要和target比較的元素必在當前元素的下方;
當target小於當前元素的值是,下乙個需要和target比較的元素必在當前元旦是左方。
那為什麼不從左下角或右上角元素開始呢?
從右上角元素開始
classsolution
return
false
; }
};
從左下角元素開始
classsolution
return
false
; }
};
二維陣列中查詢
1.問題描述 在乙個二維陣列中,每一行按照從左到右的遞增順序排序,每一列按照從上到下的遞增的順序排序,請完成這樣乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列是否含有該整數。來自 劍指offer 2.分析 首先選取陣列中右上角的數字。如果該數字等於要查詢的數字,查詢過程結束 如果該數字大於要查...
二維陣列中查詢
乙個二維陣列,每一行從左到右,每一列從上到下,都是按遞增順序排列,輸入乙個二維陣列和某個數,判斷陣列中是否存在這個數 排除行和列 比如從右上角元素出發。先確定列的範圍,如果查詢數大於當前列的第一行數,那麼這一行的所有數都大於查詢數,排除,繼續查詢左邊列 確定行範圍,在前面列的範圍內,如果最右邊元素小...
二維陣列中查詢
題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路解析 這是一道比較基礎的題,就是找二維陣列中的乙個數。方案一 暴力 function find target,array...