在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
方法一:由于每行都是从左到右递增,每列都是从上到下递增可得:
左下角的数m,是该行的最小值,该列的最大值,从左下角开始遍历
若 target>m,右移一位,遍历整行
若target<m,上移一位,从上行开始遍历
若target=m,return true
function Find(target, array) { let rows = array.length; let cols = array[0].length; if(rows == 0||cols==0){ return false; } // 左下 let row = rows-1; let col = 0; while(row>=0 && col<cols){ if(target>array[row][col]){ col++; }else if(target<array[row][col]){ row--; }else{ return true; } } return false; }
方法二:从右上方开始遍历,右上方数字n为该行最大值,该列最小值
若targe>n,下移一位,从下行开始遍历
若target<n,左移一位,遍历整行
若target=n,return true
function Find(target, array) { let rows = array.length; let cols = array[0].length; if(rows == 0||cols==0){ return false; } // 右上 let row = 0; let col = cols-1; while(row<rows && col>=0){ if(target>array[row][col]){ row++ }else if(target<array[row][col]){ col-- }else{ return true; } } return false; }