二维数组中的查找(Python and C++解法)

题目:

  在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

来源:https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&&tqId=11154&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

思路:

  需要充分利用数组元素的大小关系。右上角的元素是第一行最大的,同时也是最后一列最小的,从该元素查起。

1 if(右上角元素 == 目标值)
2     查找结束
3 if(右上角元素 > 目标值)
4     排除右上角元素所在的列
5 if(右上角元素 < 目标值)
6     排除右上角元素所在的列

  这样每次查找都会将范围缩小一行或者一列。

Python解法:

 1 class Solution(object):
 2     def find_target(self, target, array):
 3         i = 0  #
 4         j = len(array[0]) - 1  #
 5         while i <= len(array[0])-1 and j >= 0:  # 当下标还在数组范围内时
 6             array_value = array[i][j]
 7             if array_value == target:
 8                 return True
 9             elif array_value < target:
10                 i += 1
11             else:
12                 j -= 1
13         return False  # 如果超出数组范围就是没有找到

C++解法:

 1 class Solution {
 2 public:
 3     bool Find(int target, vector<vector<int> > array) {
 4         int i = 0;
 5         int j = array[0].size() - 1;
 6         while(i <= array[0].size() - 1 && j >= 0) {
 7             int arrayValue = array[i][j];
 8             if(arrayValue == target)
 9                 return true;
10             else if (arrayValue < target)
11                 i += 1;
12             else
13                 j -= 1;
14         }
15         return false;
16     }
17 };
posted @ 2020-06-20 16:02  孔子?孟子?小柱子!  阅读(176)  评论(0编辑  收藏  举报