《劍指offer》第1題:二維數組中的查找

1 題目描述、要求

題目描述
  在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
題目要求:
  時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 32M,其他語言64M

2 分析及題解

 2.1 方法一:暴力法

  直接循環遍歷數組中的每個元素,當遇到輸入整數與所遍歷元素相等時返回True,否則繼續遍歷,若最終遍歷完不存在相等情況,返回False。算法時間複雜度O(m*n)

#暴力法1:所謂的一行代碼,開闢了新數組空間
class Solution:
    # array 二維列表
    def Find(self, target, array):
        # write code here
        return True if target in [i for arr in array for i in arr] else False
#暴力法二:雙重for循環遍歷,和上面原理是一樣
class Solution:
    # array 二維列表
    def Find(self, target, array):
        # write code here
        for i in array:
            for j in i:
                if target == j:
                    return True
        return False

結果:
在這裏插入圖片描述

 2.2 方法二:右上元素移動法(左下同理)

  需要緊扣題目中的左到右,上到下遞增
  假設給定如圖數組,輸入整數位7,從右上角開始遍歷,若元素小於輸入整數,此時解可能位於該元素下方(第一行左側數都比4小),同理,若是元素大於輸入整數,那麼解只能位於元素左側,依次遍歷,直到找到相等值或者遍歷結束。算法時間複雜度O(m+n)
在這裏插入圖片描述

class Solution:
    # array 二維列表
    def Find(self, target, array):
        # write code here
        rows = 0
        cols = len(array)- 1
        while rows <=len(array[0])-1 and cols >= 0:
            if array[rows][cols] == target:
                return True
            if array[rows][cols] < target:
                rows += 1
            else:
                cols -= 1
        return False

結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章