二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,
每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,
判断数组中是否含有该整数。
问题分析:
1,查找二维数组中的某个元素,最简单的就是暴力法,两个for循环逐个比对
2,也可以根据给出的数组特性,从右上角开始每次找最右边的开始比较,逐层向下(中间可以加上折半查找)
3,从左下找--对应上面的右上找
代码展示(javascript):
function Find(target, array)
{
// write code here
// [
// [1,2,8,9],
// [2,4,9,12],
// [4,7,10,13],
// [6,8,11,15]]
//target -- 7
// console.log(array.length);
//第一种方法:暴力求解,双循环
// for(let i=0;i<array.length;i++){
// for(let j=0;j<array[0].length;j++){
// if(array[i][j] == target)
// return true;
// }
// }
// return false;
//第二种方法 从右上角开始每次找最右边的开始比较,逐层向下(中间可以加上折半查找)
if(array.length == 0)
return false;
// if(target<array[0][0] || target>array[array.length][array[0].length])
// return false;
let rows = array.length;
let columns = array[0].length;
let row = 0;
let column = columns-1;
while(row<rows && column>=0){
if(array[row][column] == target)
return true;
if(array[row][column] > target)
column -=1;
else{
row +=1;
}
}
return false;
}
总结:
题目不难,重点应该在于优化上,对每行元素可以加入折半查找提高查找效率,
也可以根据条件进行一些简单的筛选;比如:右上找,左下找。
算是剑指offer--js版本的开始