JavaScript--《剑指offer》-题一

来源:互联网 发布:java中cgi是什么 编辑:程序博客网 时间:2024/06/08 19:59

原题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

我的解决方案,通过了牛客网测试,但不一定是最好的方案,还希望大家指教。

 function Find(target, array) {      var row=array.length-1,j,i;      for(i=row,j=0;i>=0&&j<=array[i].length-1;){          if(target>array[i][j]){              j++;              continue;          }          else if( target<array[i][j]){              i--;              continue;          }else{              return true;          }      }      return false;  }

分析题目:从题上看,这是一个有一定排序的数组,一排右边最大,一行最上边数最小,所以我们可以利用这个特征来遍历数组比较我们输入的数,已达到遍历次数最少,所以我们可以从左下或者右上开始遍历,我这里是采用从左下开始遍历的。

知识点
1:二维数组arr[i][j],i表示行,j表示列。二维数组的length等于列数(j)。可以用console.log()查看二维数组矩阵排列形式,以及length长度。

2:for()循坏条件的使用

for (语句 1; 语句 2; 语句 3){被执行的代码块}

语句1:在循环(代码块)开始前执行
语句2:定义运行循环(代码块)的条件
语句3:在循环(代码块)已被执行之后执行

如常见的for(var i=0; i<10; i++)要是我们只是想输出1~10那么还可以这样写:for(var i=10; i-- ;) 我们可能会问为什么会这么写,条件都没有写完。其实不然,在语句2中,加的判断条件,实际是为了让它判断为true,也就是说只要是被判断为true的,此循环就还是会执行,在js中0,null,undefined,false,”,”“作为条件判断时,结果都是false,也就是说当 i 减到0时,就是false,循环也就终止。但是循环条件中的语句不是必选的,可根据情况选择。

原创粉丝点击