《剑指offer》 二维数组中的查找

本题目是《剑指offer》中的题目 二维数组中的查找

题目:

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

思路:

  step1:首先取数组中右上角的数字

  step2:判断如果等于目标值,则查找过程结束

  step3:如果该数字大于目标值,剔除这个数字所在的列

  step4:如果该数字小于目标值,剔除这个数在所在的行

C++ code

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        bool result = false;                        //返回结果值,默认为false,后期找到会更改此值
        if (!array.empty()){                        //审核数组是否为空,不为空进入,若为空,直接返回false
            int rows = array.size();                //提取二维数组的行数
            int row = 0;                            //定义行迭代变量,从0开始迭代
            int col = array[0].size()-1;            //定义列迭代变量,从末尾开始迭代
            while (row < rows && col >= 0){         //循环结束条件为行或者列超标
                if (array[row][col] == target){     //判断相等,更改返回值,并跳出循环
                    result = true;
                    break;
                }else if (array[row][col] > target){//如果大于目标值则去掉行
                    col -= 1;
                }else{                              //如果小于目标值则去掉列
                    row += 1;
                }
            }
        }
        return result;
    }
};

Python Code

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        result = False                        #该值后期当找到其值时候会被改变
        if array:                             #审核边界条件
            rows = len(array)                 #全部的行
            row = 0                           #迭代的行数
            col = len(array[0])-1             #迭代的列数,遍历时候要减一开始
            while row < rows and col >= 0:    #条件是行列符合规则
                if array[row][col] == target: #当找到该值时候
                    result = True             #修改返回值,并且推出循环
                    break
                elif array[row][col] > target:#当大于该值,去掉这一列
                    col -= 1
                else:                         #当小于该值时候,去掉这一行
                    row += 1
        return result 

总结:

  二维数组的遍历,自习查看该题目的特点,是有顺序的,所以要查找规律。仔细查看循环的遍历条件。

posted @ 2019-04-22 13:44  weilongyitian  阅读(190)  评论(0编辑  收藏  举报