題目肾请;在一個二維數(shù)組中绘沉,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序既峡。請完成一個函數(shù),輸入這樣的一個二維數(shù)組和一個整數(shù)碧查,判斷數(shù)組中是否含有該整數(shù)涧狮。
思路:寫一個例子
1 ? ? 2 ? ?8 ? ?9
2 ? ?4 ? ?9 ? ?12
4 ? ?7 ? ?10 ? ?13
6 ? ?8 ? ?11 ? ?15 ??
從上面的數(shù)字矩陣可以看出,每一行都是遞增么夫,每一列都是遞增者冤。比如我們要查找的數(shù)字為10,?以第0行 第3列數(shù)字9 為例档痪,
(1) 9 < 10 涉枫,因為9是第一行最大的數(shù)字,所以整個第一行都不會有要查找的數(shù)字10腐螟,從查找范圍中刪除第0行愿汰。
(2)接著看第1行第3列的數(shù)字12, 12 ?> 10, 因為每列都是遞增的乐纸,所以第3列沒有符合要求的數(shù)字衬廷,從查找范圍中刪除第3列。
(3)接著從第1行第2列數(shù)字9開始比較汽绢,9 < 10 所以第1行沒有符合要求的數(shù)字吗跋,從查找范圍中刪除第1行。
(4)查找范圍變?yōu)閺牡?行第2列開始宁昭, 數(shù)字為10 正好符合要求跌宛,查找結(jié)束
總結(jié):數(shù)字矩陣右上角的數(shù)字,為一行的最大值积仗,一列的最小值疆拘,與目標(biāo)值進(jìn)行比對,這樣就可以直接從查找范圍中刪除一行或者一列寂曹,能夠有效的縮小查找范圍
代碼如圖1所示:
圖1