美文网首页
数组查找

数组查找

作者: 微斯人_吾谁与归 | 来源:发表于2019-07-15 15:24 被阅读0次

题目描述

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

解决思路

  • 暴力解法,时间复杂度O(mn)
  • 二叉查找法 ,时间复杂度O(mlog(n))
  • 利用二维数组由上到下,由左到右递增的规律,那么选取左下角或者右上角的元素a[i][j]与target进行比较,当target大于元素a[i][j]时,那么target必定在元素a所在行的右边,即j++;当target大于元素a[i][j]时,那么target必定在元素a所在列的上边,即i--;时间复杂度O(m+n)

我的代码

思路二

class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        """二分查找法"""
        m=len(array);
        n=len(array[0])
        for i in range(m):
            left=0;
            right=n-1;
            while (left<=right):
                middle=(left+right)//2;
                if (target>array[i][middle]):
                    left=middle+1;
                elif (target<array[i][middle]):
                    right=middle-1;
                else:
                    return True;
            return False

思路三

class Solution:
    # array 二维列表 target 一个数
    def Find(self, target, array):
        """ 查找二维数组array中是否存在target,存在返回True,不存在返回False"""

        m=len(array);
        n=len(array[0]);
        i,j=0,n-1;

        #取右上角为第一个开始比较
        while (i<=n-1 and j>=0):#表示在这个数的下面
            if (target>array[i][j]):
                i=i+1;
            elif (target<array[i][j]):#表示在这个数的右面
                j=j-1;
            else:
                return True;#相等
        return False;

相关文章

  • 顺序查找

    1、顺序查找a为数组,n为查找的数组个数,key为要查找的关键字; 2、顺序查找_哨兵 3、折半查找算法假设数组a...

  • INDEX MATCH

    = INDEX(数组,行号)--一列的位置= MATCH( 查找值,查找数组,匹配类型)=INDEX(数组, ...

  • 36个常用js代码片段

    数组 Array 数组去重 查找数组最大 查找数组最小 返回已 size 为长度的数组分割的原数组 检查数组中某元...

  • php 操作数据库

    删除 查找//登录查找 查找以数组的形式输出

  • 工作中常用的JavaScript函数片段

    数组 Array 1、数组去重 2、查找数组最大 3、查找数组最小 4、返回已size为长度的数组分割的原数组 5...

  • 查找

    顺序查找 二分查找 插值查找 查找子数组最大和

  • 算法题

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

  • JS数组的二分查找算法

    用途:对有序数组进行查找。如:查找指定元素在数组中的下标

  • 数据结构和算法面试题整理

    #数组 - [查找数组中第二小的元素] - [查找第一个没有重复的数组元素] - [合并 2 个排序好的数组] -...

  • 数组查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增...

网友评论

      本文标题:数组查找

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