zoukankan      html  css  js  c++  java
  • [算法题] 二维数组中的查找

    题目内容

    题目来源:剑指offer、LeetCode

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

    • Integers in each row are sorted from left to right.
    • The first integer of each row is greater than the last integer of the previous row.

    题目思路

    这个题目最直接的想法就是从左上角开始看,假设要查找的数是大于左上角的数字,那么要查找的数必然在该数字的右边或者下边。那么问题来了,右边或者下边就意味着右下角的矩形部分是重复的,这就给编程带来了难度。

    因此经过仔细观察,发现本题可以用如下方式规避上述问题。从右上角或者左下角入手进行比较。以左下角为例,假如该数字大于左下角的数,那么左下角数所在的这一列都可以被排除了,假如该数字小于左下角的数,那么左下角的数所在的这一行就可以都被排除了。通过这样的方法,一次就可以排除一行或者一列,大大降低了难度。不会出现重叠的情况了。

    这种题目就是比较巧妙,学习经验。

    Python代码

    # -*- coding:utf-8 -*-
    class Solution:
        # array 二维列表
        def Find(self, target, array):
            # write code here
            if not array or not target:
                return
            row=len(array)
            col=len(array[0])
            if row==1 and col==0:
                return False
            i=row-1
            j=0
            while j<col and i>=0:
                if target>array[i][j]:
                    j+=1
                elif target<array[i][j]:
                        i-=1
                elif target==array[i][j]:
                    return True
            return False
    
    
    
  • 相关阅读:
    Rancher之Pipeline JAVA demo
    rancher使用fluentd-pilot收集日志分享
    SFTP 命令列表以备查询
    WPF中异步更新UI元素
    Android 开发环境在 Windows7 下的部署安装
    Android Studio vs. Eclipse ADT Comparison
    JQuery 滚动条插件perfect-scrollbar
    nginx+php 在windows下的简单配置安装
    MySql 管理操作常用命令
    JS事件调试
  • 原文地址:https://www.cnblogs.com/chengyuanqi/p/7263566.html
Copyright © 2011-2022 走看看