二维数组中的查找(Python and C++解法)
题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
需要充分利用数组元素的大小关系。右上角的元素是第一行最大的,同时也是最后一列最小的,从该元素查起。
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 };