剑指 Offer - 01 - 二维数组中的查找
题目
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解析
- 这个题目比较好的解题思路是从右上角或者左下角开始找;这个是题目给定的每一行从左到右递增和每一列从上到下递增的原因;
- 例如,从右上角开始找,设置两个变量
row
,col
分别代表行坐标和列坐标, 如果要找的数就是target
,则直接返回; - 如果
arr[row][col] < target
,那row = row + 1
,因为它左边的都会arr[row][col]
小,这是因为列增加的性质; - 如果
arr[row][col] > target
,那col = col - 1
,因为它下面的都会arr[row][col]
大,这是因为行增加的性质;
从右上角开始查找代码
public class Solution {
public boolean Find(int target, int[][] array) {
int r = 0, c = array[0].length - 1;
while (r < array.length && c >= 0)
if (array[r][c] == target)
return true;
else if (array[r][c] > target)
c--;
else
r++;
return false;
}
}
从左下角开始查找代码
public class Solution {
public boolean Find(int target, int[][] array) {
int r = array.length - 1, c = 0;
while (r >= 0 && c < array[0].length)
if (array[r][c] == target)
return true;
else if (array[r][c] > target)
r--;
else
c++;
return false;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论