【劍指offer】[數組]二維數組中的查找

二維數組中的查找

題目描述

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

思路一

將數組的每一行視爲一個新數組,進行二分法遍歷
起始點start 中間點mid 結尾點end
當中間點值大於目標值,則結尾點移至中間點的前一個點,反之,起始點移至中間點後一個點
運行時間215ms 佔用內存5836K

代碼

# -*- coding:utf-8 -*-
class Solution:
    # array 二維列表
    def Find(self, target, array):
        # write code here
        h = len(array)
        for i in range(h):
            array_c = array[i]
            start = 0
            end = len(array_c)-1
            while start<=end:
                mid = int((start+end)/2)
                if target<array_c[mid]:
                    end = mid-1
                elif target>array_c[mid]:
                    start = mid+1
                else:
                    return True
        return False

思路二

從二維數組左下角開始遍歷,當值小於target則行數減1,當值大於target則列數加1
運行時間330ms 佔用內存 5716k

代碼

# -*- coding:utf-8 -*-
class Solution:
    # array 二維列表
    def Find(self, target, array):
        # write code here
        l = len(array)
        h = l-1
        w = 0
        while h>=0 and w<len(array[h]):
            if target<array[h][w]:
                h-=1
            elif target>array[h][w]:
                w+=1
            else:
                return True
        return False

思路三

遞歸查找 運行時間:63ms佔用內存:9604k

代碼

# -*- coding:utf-8 -*-
class Solution:    
# array 二維列表    
    def Find(self, target, array):        
    # write code here        
        n=len(array)        
        flag='false'        
        for i in range(n):            
            if target in array[i]:                
            flag='true';                
            break        
        return flag
    while True:    
        try:        
            S=Solution()   
            # 字符串轉爲list  
            #eval() 函數用來執行一個字符串表達式,並返回表達式的值。
            #raw_input讀取控制檯的輸入    
            L=list(eval(raw_input()))        
            array=L[1]        
            target=L[0]        
            print(S.Find(target, array))    
        except:        
            break
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章