【剑指offer】面试题 4:二维数组中的查找

来源:互联网 发布:苜蓿地 知乎 编辑:程序博客网 时间:2024/06/10 15:35

题目描述

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

时间限制:1秒 空间限制:32768K 热度指数:315456
本题知识点: 查找

思路:将二维数组当成矩阵,从右上角出发,比较目标数字与当前数字的大小。如果目标数字小于当前数字,则目标数字所处的列都不可能出现目标数字。(因为每一列按照从上往下递增);如果目标数字大于当前数字,则当前数字所处的行都不可能出现目标数字。(因为每一行按照从左往右递增)。按照这样的步骤,可以缩小查找的范围,直到找到要查找的数字,或者不存在目标数字。

参考代码:
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;       }   };

Python版本
# -*- coding:utf-8 -*-class Solution:    # array 二维列表    def Find(self, target, array):        # write code here        if array == [[]]:            return False                rawNum = len(array)        columnNum = len(array[0])                if type(target) == float and type(array[0][0]) == int:            target = int(target)        elif type(target) == int and type(array[0][0]) == float:            target = float(target)        elif type(target) != type(array[0][0]):            return False                i = columnNum - 1 # 列的位置        j = 0 # 行的位置        while i >= 0 and j < rawNum:            if array[j][i] < target:                j += 1            elif array[j][i] > target:                i -= 1            else:                return True        return False





阅读全文
0 0
原创粉丝点击