[劍指offer by Python]二維數組中的查找


題目描述

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

主要思路
:首先選取右上角的數字,如果該數字大於target,則該列全大於target,刪除該列;如果該數字小於小於target,則該列全小於target,刪除該行。
      從右上角元素開始,當沒到左下角元素前,不斷判斷右上角元素和target的關系,可以不斷縮小查找范圍。
 1 # -*- coding:utf-8 -*-
 2 class Solution:
 3     # array 二維列表
 4     def insert2dArray(self, seq, row, col):
 5         # 沒有使用numpy的array
 6         # array = [[0] * col] * row 這種方式是淺拷貝,不好用
 7         array = [[0 for i in range(col)] for i in range(row)]
 8         for i in range(row):
 9             for j in range(col):
10                 array[i][j] = seq[i * row + j]
11         return array
12 
13     def Find(self, target, array):
14         # 主要思路:首先選取右上角的數字,如果該數字大於target,則該列全大於target,刪除該列;
15         # 如果該數字小於小於target,則該列全小於target,刪除該行。
16         found = False
17         row = len(array)
18         if row:
19             col = len(array[0])
20         else:
21             col = 0
22 
23         if row > 0 and col > 0:
24             # find index of top right-hand corner
25             i = 0
26             j = col - 1
27             # if never meets lower-left corner
28             while i < row and j >= 0:
29                 if array[i][j] == target:
30                     found = True
31                     # forget break
32                     break
33                 elif array[i][j] > target:
34                     j -= 1
35                 elif array[i][j] < target:
36                     i += 1
37         return found
38 
39 if __name__ == '__main__':
40     answer = Solution()
41     seq = [1, 2, 8, 9, 2, 4, 9, 12, 4, 7, 10, 13, 6, 8, 11, 15]
42     matrix = answer.insert2dArray(seq, 4, 4)
43     print(matrix)
44     print(answer.Find(7, matrix))

顯示如下:

[[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15]]
True

 筆記:循環中找到要找到的記得break。


免責聲明!

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



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