面试题3:二维数组中的查找

代码如下:

 

 1 # coding:utf-8
 2 """
 3 =========================================
 4 File:SearchMatrix.py
 5 Author:Nobita
 6 Time:2019/12/18 20:46
 7 E-main:364942727@qq.com
 8 Description:面试题3:二堆数组中的查找
 9 Software:PyCharm
10 =========================================
11 """
12 
13 '''
14 题目:
15 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
16 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该整数。
17 
18 输入:
19 matrix = [
20   [1,   3,  5,  7],
21   [10, 11, 16, 20],
22   [23, 30, 34, 50]
23 ]
24 target_true = 3
25 输出: True
26 target_false = 13
27 输出: False
28 '''
29 class Solution:
30     def searchMarix(self, matrix, target):
31         num_row = len(matrix)
32         num_col = len(matrix[0])
33         if num_row > 0 and num_col > 0:
34             i, j = 0, num_col - 1
35             while i < num_row and j >= 0:
36                 if target == matrix[i][j]:
37                     return True
38                 elif target < matrix[i][j]:
39                     j -= 1
40                 else:
41                     i += 1
42         return False
43 
44 if __name__ == '__main__':
45     matrix = [
46         [1, 3, 5, 7],
47         [10, 11, 16, 20],
48         [23, 30, 34, 50]
49     ]
50     target_true = 3
51     target_false = 13
52     print(Solution().searchMarix(matrix, target_true))
53     print(Solution().searchMarix(matrix, target_false))

 

 

代码自测:

 

 1 # -*- coding: utf-8 -*-
 2 """
 3 @File:test_SearchMatrix.py    
 4 @E-mail:364942727@qq.com
 5 @Time:2019-12-19 8:24 
 6 @Author:Nobita   
 7 @Version:1.0   
 8 @Desciption:对SearchMatrix函数进行单元测试
 9 """
10 
11 import unittest
12 from .SearchMatrix import Solution
13 
14 
15 class TestSearchMatrix(unittest.TestCase):
16     def setUp(self):
17         global matrix
18         matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]
19 
20     def test_01_MaxNum_in_Matrix(self):
21         '''测试二维数组中的最大值,预期输出:True'''
22         target = 50
23         result = Solution().searchMarix(matrix, target)
24         self.assertEqual(result, True, msg='test_01_测试失败!')
25 
26     def test_02_MinNum_in_Matrix(self):
27         '''测试二维数组中的最小值,预期输出:True'''
28         target = 1
29         result = Solution().searchMarix(matrix, target)
30         self.assertEqual(result, True, msg='test_02_测试失败!')
31 
32     def test_03_MidNum_in_Matrix(self):
33         '''测试二维数组中的中间值,预期输出:True'''
34         target = 11
35         result = Solution().searchMarix(matrix, target)
36         self.assertEqual(result, True, msg='test_03_测试失败!')
37 
38     def test_04_OverMaxNum_not_in_Matrix(self):
39         '''测试二维数组中超过最大值的数,预期输出:False'''
40         target = 51
41         result = Solution().searchMarix(matrix, target)
42         self.assertEqual(result, False, msg='test_04_测试失败!')
43 
44     def test_05_LessMinNum_not_in_Matrix(self):
45         '''测试二维数组中小于最小值的数,预期输出:False'''
46         target = 0
47         result = Solution().searchMarix(matrix, target)
48         self.assertEqual(result, False, msg='test_05_测试失败!')
49 
50     def test_06_MatrixIsNull(self):
51         '''测试二维数组中空值矩阵,预期输出:False'''
52         target = 1
53         null_matrix = [[]]
54         result = Solution().searchMarix(null_matrix, target)
55         self.assertEqual(result, False, msg='test_06_测试失败!')
56 
57 
58 if __name__ == '__main__':
59     unittest.main()
posted @ 2019-12-20 13:13  charseki  阅读(210)  评论(0编辑  收藏  举报