剑指offer 1.二维数组的查找

二维数组中的查找

http://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e

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


思路
数组是有序的,每行递增,每列递增,所以可以取右上角或者左下角,如果从左下角开始查找,当要查找数字比左下角数字大时,右移;要查找数字比左下角数字小时,上移。同理当从右上角开始查找时,当要查找数字比右上角数字大时,下移;要查找数字比右上角数字小时,左移。


代码实现

# -*- coding:utf-8 -*-
# 从右上角开始查找
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        rows = len(array)
        cols = len(array[0])        
        temp_rows = 0
        temp_cols = cols-1
        while(temp_rows<=rows-1 and temp_cols>=0):
            if(array[temp_rows][temp_cols] == target):
                return True
            elif(array[temp_rows][temp_cols]<target):
                temp_rows+=1
            elif(array[temp_rows][temp_cols]>target):
                temp_cols-=1
        return False
# -*- coding:utf-8 -*-
# 从左下角开始查找
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        left = 0
        right = len(array[0])-1
        top = 0
        bottom = len(array)-1

        while(top<=bottom and left<=right):
            select_num = array[bottom][left]
            if(select_num == target):
                return True
            elif(target > select_num):
                left+=1
                continue
            elif(target < select_num):
                bottom-=1
                continue
        return False
全部评论

相关推荐

昨天 16:37
云南大学 Java
一面常规八股,几乎全部答出来二面简单描述项目之后聊天,聊了入职情况等,以为稳了,两天直接感谢信,KPI建议避雷背景学院本,垫底211人智硕
BerC:这家公司贼恶心,面试官一脸蔑视,本来想着拿来面试练手,还被嘲讽,就是坨屎
投递趣链科技等公司6个岗位 >
点赞 评论 收藏
分享
03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
你背过凌晨4点的八股文么:简历挂了的话会是流程终止,像我一样
点赞 评论 收藏
分享
马上要带我人生中的第一个实习生了,想问问大家都喜欢什么的mentor?好让我有个努力的目标
拒绝996的劳伦斯很勇敢:看得见目标且护犊子的 具体就是明确告诉组员要干什么,然后当别的组甩dirty work时能护的组自家新人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务