題目:在一個二維數組中,每一行都按照從從左到右遞增的順序排序,每一列按照從上到下的順序遞增排序。輸入一個這樣的二維數組arrNum和一個整數value,判斷二維數組是否含有該整數
方案一:最樸素的方法枚舉整個數組,時間複雜度O(n^2),效率太低
方案二:觀察這個數組的特點就是每行每列都是遞增的順序。
例如二維數組如下,value值為7
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
我們從右上角那一點開始判斷和value的關系
(1)發現9大于value,說明value的值隻可能存在于左邊三列
1 2 8
2 4 9
4 7 10
6 8 11
(2)第二次拿剩下中右上角8判斷,8大于value,說明value的值隻能存在于左邊兩列
1 2
2 4
4 7
6 8
(3)第三次拿剩下中右上角2判斷,2小于value,說明value隻能在下面三行
(4)第四次拿剩下中右上角4判斷,4小于value,說明value隻能在下面兩行
(5)第五次拿剩下中右上角7判斷, 7等于value,說明value存在二維數組中
這個方法的每次可以排除一行或一列,是以最壞情況一個n行m列的二維數組要排除n行m列,總的時間複雜度為O(n+m),比O(n^2)效率高了很多。