面试题四:二维数组中的查找
二维数组中,左到右递增,上到下递增,寻找数组中的一个数
方法一:暴力遍历,时间复杂度(n*n)
方法二:剔除法
1.选择右上角数字
2.如果数字大于要查的数字,说明整一列都大于要查找的数字,剔除列,直到小于或等于,如果等于就找到了
3.如果数字小于于要查的数字,从上面那样一列中,这一列表示每一行的最大值,剔除行,直到大于或等于,如果等于就找到了
4.否则重复2,剔除列
1 boolean find(int [][]array ,int number ,int rows,int columns){ 2 3 boolean found=false; 4 if(array!=null && rows>0 && columns>0){ 5 int row=0; 6 int column=columns-1; 7 while(row<rows&& column>=0){ 8 if(arrays[row][ column]==number){ 9 found=true; 10 break; 11 } 12 else if(arrays[row][ column]>number) 13 column--; 14 else 15 row++; 16 17 } 19 } 20 return found; 21 22 }
浪波激泥