算法|二維數組中的查找


題目:

在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

思路:

  首先選取數組中右上角的數字。如果該數字等於要查找的數字,查找過程結束;如果該數字大於要查找的數組,剔除這個數字所在的列;如果該數字小於要查找的數字,剔除這個數字所在的行。也就是說如果要查找的數字不在數組的右上角,則每一次都在數組的查找范圍中剔除一行或者一列,這樣每一步都可以縮小查找的范圍,直到找到要查找的數字,或者查找范圍為空。

舉例:

如果在一個二維數組中找到數字7,存在則返回True,如果沒找到則返回False。

首先,8大於7,下一次只需要在8的左邊區域查找;然后,5小於7,下一次只需要在5的下方區域查找;按照這種規則進行查找,如果查找到相同的,則返回True,否則返回False。

Python實現:

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

if __name__ =='__main__':
    target = 15
    array = [[1,2,3],[4,5,6],[7,8,9],[10,12,13]]
    answer = Solution()
    print(answer.Find(target,array))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM