二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
菜鸡解法。。。O(nlogm)
1 public class Solution { 2 public boolean Find(int target, int [][] array) { 3 int row = array.length;//二维数组行数 4 int col = array[0].length;//列数 5 int left = 0; 6 int right = col-1; 7 int mid = 0; 8 for(int i=0;i<row;i++){//行遍历循环 9 left = 0; 10 right = col-1; 11 while(left<=right){//列折半查找 12 mid = (left+right)/2; 13 if(target == array[i][mid]) 14 return true; 15 else if(target>array[i][mid]) 16 left = mid+1; 17 else 18 right = mid-1; 19 } 20 } 21 return false; 22 } 23 }
牛客大神解法:O(m+n)
public class Solution { public boolean Find(int [][] array,int target) { boolean found = false; int lie = array[0].length; int hang = array.length; int column = lie -1; int row =0; while(row<hang &&column>=0){ int value = array[row][column]; if(target>value){ row++; }else if(value>target){ column--; }else{ found = true; break; } } return found; } }
从右上角开始遍历,每次向下或向左移动一格,即如果target大于当前元素便向下移动一格,若target小于当前元素则向左移动一格,直到target等于当前元素或超出界限
💪💪💪💪💪💪💪💪💪💪