本文主要是介绍【剑指offer】1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
我们可以根据二维数组的特性,在查找数组里是否有这个整数时,我们可以按行和列去查找。
我们可以看到以上二维数组的存储则:
行数:int row = (int)array.size();
列数:int col = (int)array[0].size();
1.有了行和列,我们就得在数组中选取一个数去array[ i][ j]和target比较大小,在这里我选取的是右上角的数去和target比较
a)如果array[ i][ j] > target 则向左走 即 j--
b) 如果array[ i][ j] < target 则向下走 即 i++
注意:
1.我们在选取第一个数来与target比较大小时,一定要选取数组中最靠边的数也就是每行每列最后一个数。因为这样在比较大小时,在选取第二个数比较时不会出现冲突。
2.在比较前可以判断数组是否为空,查找的这个数是否在数组中。
代码部分:
class Solution {
public:bool Find(int target, vector<vector<int> > array) {int row = (int)array.size();int col = (int)array[0].size();if (row == 0 || col == 0)return false;if (target < array[0][0] || target > array[row - 1][col - 1])return false;int i = 0;int j = col - 1;while (i < row && j >= 0){if (array[i][j] > target){j--;}else if (array[i][j] < target){i++;}else{return 1;}}return 0;}
};
这种的时间复杂度为:
O(m+n)
这篇关于【剑指offer】1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!