剑指Offer-编程详解-二维数组中的查找

  • 题目描述

在一个二维数组中(每一个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。数组

  • 解析

特色:横坐标递增有序,纵坐标递增有序
方法1:横坐标二分查找,纵坐标二分查找;
方法2:假设矩阵从左下角增加,则有规律:矩阵左上角的元素,递减向下,递增向右。
则:从左上角元素比较,小于target则向下移动,大于target则向右移动;函数

  • 代码:
public class Solution {
    public boolean Find(int target, int [][] array) {
        int row = array.length;// 行数
        int col = array[0].length;// 列数
        for (int i = row - 1, j = 0; i >= 0 && j <= col - 1;) {// i,j只初始化一次,拿取左上角元素
            if (array[i][j] == target) {
                return true;
            } else if (array[i][j] < target) {
                j++;
            } else {
                i--;
            }
        }
        return false;
    }
}
相关文章
相关标签/搜索