时间限制:1秒 空间限制:32768K
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1 function Find(target, array) 2 { 3 var row = array.length; 4 var col = array[0].length; 5 // console.log(`row,col:${row},${col}`); 6 var i = 0, j = 0; 7 while(i<row && j<col) { 8 if (target > array[i][j]) { 9 i++; 10 j++; 11 } else if (target === array[i][j]) { 12 // console.log(`i,j: ${i},${j}`); 13 return true; 14 } else { 15 // 右上角 16 for (var m = i-1; m >= 0; m--) { 17 for(var n = j; n < col; n++) { 18 if (array[m][n] === target) { 19 return true; 20 } 21 } 22 } 23 // 左下角 24 for (m = i+1; m < row; m++) { 25 for (n = j-1; n>=0; n--) { 26 if (array[m][n] === target) { 27 return true; 28 } 29 } 30 } 31 return false; 32 } 33 } 34 return false; 35 }
emmmm......思路很简单,就是先和对角线元素比较,如果比对角线的某个元素小,则只能在对角线的右上角和左下角,如下图所示: