二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
具体思路:
- 实现方式一
- 从左下角开始查找,如果元素的值等于target,则返回true;
- 如果元素的值大于target,则向上查找,–i;
- 如果元素的值小于target,向右查找,++j;
- 实现方式二:
- 从右上角开始查找,如果元素的值等于target,则返回true;
- 如果元素的值大于target,向左查找,–j;
- 如果元素的值小于target,向下查找,++i;
方式一代码:
public class Solution {
//从左下角开始查找
public boolean find(int target, int[][] array) {
if(array==null){
return false;
}
int rows = array.length;
int columns = array[0].length;
int i = rows -1;
int j = 0;
while(i>=0 && j<columns) {
if(array[i][j]==target) {
return true;
}
if(array[i][j] > target) {
--i; //如果元素的值大于target,--i;
}else {
++j; //否则,++j
}
}
return false;
}
}
方式二代码
public class Solution {
//从右上角开始查找
public boolean find(int target, int[][] array) {
if(array==null){
return false;
}
int rows = array.length;
int columns = array[0].length;
int i = 0;
int j = columns - 1;
while(i < rows && j >=0) {
if(array[i][j] == target) {
return true;
}
if(array[i][j] > target) {
--j;
}else {
++i;
}
}
return false;
}
}