算法题18:二维数组中的查找

算法题18:二维数组中的查找

思路1:暴力查找

时间复杂度O(mn)

思路2:利用二分查找

时间复杂度O(mlogn)

思路3:线性查找

利用二维数组行列递增特性,时间复杂度O(m+n)

  • 首先从数组左下角搜索.
  • 如果当前数字大于target,那么查找往上移一位,如果当前数字小于target,那么查找往右移一位。
  • c.查找到target,返回true; 如果越界,返回false;

代码

bool Find(int target, vector<vector<int> > array) {
        // 从左下角开始查找,target比当前值大,就往右走,target比当前值小,就往左走,O(m+n)
        int i = array.size() - 1; // 左下角坐标
        int j = 0;
        while(i>=0 && j<array[0].size()){
            if(array[i][j] == target) return true;
            else{
                // 目标值更大,右移
                if(array[i][j] < target) j = j + 1;
                // 目标值更小,上移
                if(array[i][j] > target) i = i - 1;
            }
        }
        return false;
    }

你可能感兴趣的:(算法,数据结构,c++)