4. 二維數組中的查找[java]

題目描述 在線編程

給定一個二維數組,其每一行從左到右遞增排序,從上到下也是遞增排序。給定一個數,判斷這個數是否在該二維數組中。編程

 

Consider the following matrix:
[
  [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]
]

Given target = 5, return true.
Given target = 20, return false.

解題思路

時間複雜度 O(M + N),空間複雜度 O(1)數組

若逐行或逐列用二分法遍歷,效率太慢了,咱們但願能夠以對角線的方向去遍歷,ide

對角線方向有4種:spa

1.  從左上角向右下角出發:往左往下的數都是比當前大的,不可用二分法,放棄;code

2.從右上角向左下角出發: 往左的數變小,往下的數增大,可用二分法;blog

3.從左下角向右上角出發:往上的數變小,往右的數增大,可用二分法;排序

4.從右下角向左上角出發:往上的數變小,往左的數變小,不可用二分法,放棄;get

 

 

咱們來實現第3種方法,第2種留給讀者實現io

 

public class Solution {
    public boolean Find(int target, int [][] array) {
        int rows=array.length,cols=array[0].length;
        int c=0,r=rows-1;
        while(r>=0&&c<=cols-1){
            if(array[r][c]==target){
                return true;
            }
            if(array[r][c]>target)
                r--;
            else
                c++;
        }
        return false;
    }
}
相關文章
相關標籤/搜索