zoukankan      html  css  js  c++  java
  • 剑指offer:二维数组中查找

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

    示例如下:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]

    思路有三种,一种是暴力算法,这种要求不高,但是对程序开销要求大,即每一个数组元素都得遍历一遍,这里就不用细说了,会写双重循环就可以。

    第二种是我采取的思路,利用折半查找:先确定目标指所在的数组,比如在二维数组的 array[3]里,然后再在array[3]里利用折半查找查目标值

    第三种思路是参考其他伙伴的,这种思路利用了二维数组的数字规律,即题目里有一句:每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序

    从矩阵左下角开始(右上角也可以,但是走的方式就不一样了),查找下一个目标,大于则向上走,小于则向右走,十分形象,而且有点像数据结构里面对有序二叉树的遍历,把整个矩阵当作有序数据结构,而不是只利用一维有序来进行查找,非常有新意,比较佩服所以记录在这里,而且我自己也更加倾向第三种算法。

    折半查找python实现方法:

     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     
     4     def Find(self,target,array):
     5         if len(array)==0 or len(array[0])==0:
     6             return  False 
     7         for x in array:#折半查找
     8             if x[0]<=target<=x[-1]:
     9                 lindex=0#左下标
    10                 rindex=len(x)-1#右下标
    11                 while lindex<=rindex:
    12                     mid=(lindex+rindex)/2#数组中间位置元素
    13                     if x[mid]==target:
    14                         return True
    15                     if x[mid]>target:
    16                         rindex=mid-1
    17                     else:
    18                         lindex=mid+1
    19         return False
    20 
    21    

    路径的方式实现方法:

     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     # array 二维列表
     4     def Find(self, target, array):
     5         # write code here
     6         rows = len(array) - 1
     7         cols= len(array[0]) - 1
     8         i = rows
     9         j = 0
    10         while j<=cols and i>=0:
    11             if target<array[i][j]:
    12                 i -= 1
    13             elif target>array[i][j]:
    14                 j += 1
    15             else:
    16                 return True
    17         return False
  • 相关阅读:
    CDN缓存服务器现状,squid、nginx、trafficserver、ATS性能测试
    [钉钉通知系列]Jenkins发布后自动通知
    查税号,税号查询,纳税人识别号查询
    体验万象优图鉴黄服务
    红象云腾
    我眼中的领域驱动设计
    手工DIY:手机变身扫描仪_极客迷
    【CZURET-16】成者科技(CZUR)ET16智能扫描仪OCR文字识别书籍文档票据零边距高速A3A4高拍仪高清1600万像素【行情 报价 价格 评测】-京东
    技术漫谈 | 使用docker-compose进行python开发
    饿了么的 PWA 升级实践
  • 原文地址:https://www.cnblogs.com/honor260/p/14081869.html
Copyright © 2011-2022 走看看