美文网首页剑指offer- python实现
面试题4:二维数组中的查找

面试题4:二维数组中的查找

作者: 不会编程的程序猿甲 | 来源:发表于2020-01-30 15:17 被阅读0次

题目一:

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

解法1: 依次遍历,但不是最优的结果,时间复杂度O(n*n),要点获取数组的行数列数,使用len(),对于二维数组返回的是行数,然后再对第一行元素len即可得到列数

 row, line = len(array),len(array[0])

解法2:动态规划的思想,不断地减小查找的范围,直到找到对应的数值或者遍历结束。根据该数组的特点,从右上角的元素或者左下角开始都可以。本代码从右上角开始与目标比较,如果相等,则返回true;如果该元素大于目标值,则说明元素所在列都大于目标值,于是查找范围中将该元素所在列排除;如果该元素小于目标值,该元素作为此行最大值,则说明本行不存在符合要求的元素,将该行排除。

该算法只需要O(n)的时间复杂度,比解法1更优。

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        row,line = len(array),len(array[0]) #二维数组len默认返回行数,对第一行元素求len即可得到列数
        if row==0 or line ==0:
            return False
        i = 0
        j = line-1
        while i< row and j>=0:
            if array[i][j]== target:
                return True
            elif array[i][j]> target:
                j-=1
            else:
                i+=1
        return False

相关文章

  • 剑指offer

    面试题3——数组中重复的数字 使用LinkedHashMap,有序存放。 面试题4——二维数组中的查找 首先选...

  • 剑指offer面试题分类总结

    数组: 面试题3:数组中重复的数字面试题4:二维数组中的查找面试题21:调整数组顺序使奇数位于偶数前面面试题39:...

  • 2.3.1 数组

    面试题3:数组中重复的数字 面试题4:二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一...

  • 剑指offer第二版-4.二维数组中的查找

    本系列导航:剑指offer(第二版)java实现导航帖 面试题4:二维数组中的查找 题目要求:一个二维数组中,每一...

  • 二维数组中的查找

    《剑指offer》面试题4:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都...

  • 剑指offer每日一更

    题目 // 面试题4:二维数组中的查找// 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按...

  • LeetCode | 面试题04. 二维数组中的查找【剑指Off

    LeetCode 面试题04. 二维数组中的查找【剑指Offer】【Easy】【Python】【数组】 问题 力扣...

  • 《剑指Offer》-Exercise(C语言)

    面试题4:二维数组中的查找 面试题6:从尾到头打印链表 单链表从尾到头打印(用栈或递归) 单链表结构 面试题7:重...

  • 剑指offer目录

    目录 面试题3 在二维数组中查找 面试题15 链表中倒数第K个数 面试题16 反转链表 面试题44 扑克牌的顺子

  • 算法题

    行列都是有序的二维数组,查找k是否存在【查找法】 二维数组中的查找(行列分别有序数组的二分查找)【递归法】 快速排...

网友评论

    本文标题:面试题4:二维数组中的查找

    本文链接:https://www.haomeiwen.com/subject/yeptactx.html