思路:
我们可以根据二维数组的特性,在查找数组里是否有这个整数时,我们可以按行和列去查找。
我们可以看到以上二维数组的存储则:
行数: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)
本文发布于:2024-02-04 19:40:58,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170714992558917.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |