二维数组查找

时间限制: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......思路很简单,就是先和对角线元素比较,如果比对角线的某个元素小,则只能在对角线的右上角和左下角,如下图所示:

原文地址:https://www.cnblogs.com/zou20134585/p/8650786.html