74、数组---二维数组中数的查找1

LeetCode第74题,注意此题和剑指offer面试题3、数组----二维数组中数的查找2中的题条件是不一样的。

解题思路参考 [LeetCode] Search a 2D Matrix 搜索一个二维矩阵

题目:

写出一个有效算法,查找一个m*n的二维数组,返回True或False。数组有如下性质:

  • 每一行的整数都从小到大的有序列表
  • 每一行的第一个整数都比前一行的最后一个整数要大

例子:

74、数组---二维数组中数的查找1_第1张图片

一、思路

  • 注意到此数组的性质,此数组平铺成一个一维数组的话,那就是一个有序数组,可以用二分法进行查找。
  • 于是剩下的问题就是怎么把数组平铺成一个一维数组了。python中是比较方便的,直接把两个list相加就行。

二分法参考笔记搜索与排序笔记

二、代码思路

2.1,功能上

  • 以二分法为基础,按照二分法的步骤写代码就行了:设置左右指针,从中间选择元素,比较大小,根据三种情况,决定下一步,循环一直到找到target。
  • 考虑两种情况,找到target返回True,找不多返回False。

2.3,特殊输入测试

输入一个空列表。

class Solution:
    def searchMatrix(self, matrix, target):
        """
        :type matrix: List[List[int]]
        :type target: int
        :rtype: bool
        """
        #若输入为一个空列表,返回False
        if not matrix:
            return False
        
        #把matrix平铺成一个一维数组
        list_flat = []
        for item in matrix:
            list_flat += item
        
        #一维有序数组构成,采用二分法查找target
        found = False
        left = 0
        right = len(list_flat) - 1
        
        while left <= right and not found:
            mid = (left + right)//2
            if list_flat[mid] == target:
                found = True
            elif list_flat[mid] > target:
                right = mid - 1
            else:
                left = mid + 1
        
        return found

你可能感兴趣的:(74、数组---二维数组中数的查找1)