天天看點

【17】二維數組中的查找

題目:在一個二維數組中,每一行都按照從從左到右遞增的順序排序,每一列按照從上到下的順序遞增排序。輸入一個這樣的二維數組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)效率高了很多。

繼續閱讀