[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]

观察,从左到右递增,从上到下递增。
似乎找不到什么其他规律。
第一想法是二分,笨方法。

感觉这个是有序数组求两个数的和为sum的扩展。巧妙啊!看了题解才会的。

观察左下角或者右下角的元素。所有比18大的,都在18右边。比18小的都在它上边。

只能感叹啊!什么时候能有这样的功力呢?
bool searchMatrix(int** a, int m, int n, int target) {
    if(m * n == 0)  return false;
    
    int i = m-1;
    int j = 0;
    
    while( i >=0 && j< n)
    {
        if(a[i][j] == target)   return true;
        
        if(a[i][j] > target)    i--;
        else                    j++;
    }
    
    return false;
}

 

posted on 2017-12-14 10:27  newbird2017  阅读(99)  评论(0编辑  收藏  举报