剑指offer编程题01

来源:互联网 发布:java高内聚低耦合 编辑:程序博客网 时间:2024/06/06 14:02

剑指offer编程题01

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

分析
如下图所示
这里写图片描述

以红线为对角线,处于对角线上的元素所在行的左侧都比该元素小,处于对角线上的元素所在行的右侧都比该元素大;处于对角线上的元素所在列上方元素都比该元素小,处于对角线上的元素所在列下方元素都比该元素大。

所以可以取i为行号,j为列号。i从最大开始,j从0开始,比较目标值与第行第0列的数,目标值大于该数,则j++,目标值小于该数则i–,知道找到为止。

c/c++代码:

class Solution {public:    bool Find(int target, vector<vector<int> > array) {        int rowCount = array.size();        int colCount = array[0].size();        int i,j;        for(i=rowCount-1,j=0;i>=0&&j<colCount;){            if(target==array[i][j]){                return true;            }            if(target<array[i][j]){                i--;                continue;            }            if(target>array[i][j]){                j++;                continue;            }        }        return false;    }};

java代码:

public class Solution {    public boolean Find(int target, int [][] array) {        int rowCount = array.length;        int colCount = array[0].length;        int i,j;        for(i=rowCount-1,j=0;i>=0&&j<colCount;){            if(target==array[i][j]){                return true;            }            if(target<array[i][j]){                i--;                continue;            }            if(target>array[i][j]){                j++;                continue;            }        }        return false;    }}
0 0
原创粉丝点击