题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
两种思路:
第一种,对每一行使用二分查找法进行查找,时间复杂度是O(nlogn)
第二种:从左下角或者右上角开始查找,例如从右上角开始,往左数字越来越小,往下数字越来越大,那就将target与右上角数字进行比较,如果target大,那么就往下走,如果target小,那么就往左走。
C++实现:
class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {

        int row = array.size();
        if(row == 0)
            return false;
        int colnum = array[0].size();
        int i = 0;
        int j = colnum-1;
        while(i>=0&&i<row&&j>=0&&j<colnum){
            if(target == array[i][j])
                return true;
            else if(target > array[i][j])
                i++;
            else
                j--;
        }
        return false;
    }
};

 java实现二分法:

public class Solution {
    public boolean Find(int target, int [][] array) {
        int row = array.length;
        if(row == 0)
            return false;
        int colunm = array[0].length;
        int low;
        int high;
        int mid;
        for(int i = 0;i<row;i++){
            low = 0;
            high = colunm-1;
            while(low<=high){
                mid = low + (high - low)/2;
                if(array[i][mid] == target)
                    return true;
                else if(array[i][mid]<target)
                    low = mid + 1;
                else
                    high = mid - 1;
            }
        }
        return false;
    }
}

 

 

 

 

posted on 2020-08-20 20:38  曹婷婷  阅读(114)  评论(0编辑  收藏  举报