问题描述:每行从左到右,每列从上到下递增的二维数组中,判断某个数是否存在。
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
7 9 12 18
思路 :从右上角开始呢?以上的矩阵,假如我们查找的是7,从右上角开始,先比较9和7,9比7大,9又是本列的第一个,那么可以确定,9所在的列数字都大于7,我们可以排除最后一列,前移一列。比较8和7,8大于7,同样的思想我们可以排除8所在的列。接下来比较2和7,2小于7,那么2所在的行前面的数字都小于7,可以不必再比较了,直接排除2所在的行。以此类推,我们很快就可以定位到7.
<script type="text/javascript">
let arr1 = [[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15],[7, 9, 12, 18]];
function findNumber (num, arr) {
let rows = arr.length;
let columns = arr[0].length;
let found = false;
if(typeof num === 'number' && rows > 0 && columns > 0) {
let row = 0;
let column = columns - 1;
while(row < rows && column >= 0) {
if(arr[row][column] == num) {
found = true;
break;
}
else if(arr[row][column] > num) {
column --;
}
else(arr[row][column] < num)
row ++;
}
}
return found;
}
console.log(findNumber(14, arr1));
</script>