题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,
判断数组中是否含有该整数。
思路:
①对于一般数组,普通遍历方式即可判断数组中是否含有该元素。对于二维数组,两层for循环即可,时间复杂读为o(n*n);
②对于本题,二维数组行按升序排列,列也按升序排列,我们可以使用一点小技巧:从数组的左下角开始遍历数组,能更有效率的解决问题。
具体代码:
1 public class test3 { 2 public static void main(String[] args) { 3 int[][] arr = {{11,22,33,44},{12,23,34,45},{13,24,35,46},{14,25,36,47}}; 4 System.out.println(Find(12,arr)); 5 6 } 7 public static boolean Find(int target, int [][] array) { 8 int hang=array.length;//获取行数 9 int lie=array[0].length;//获取 10 int i=hang-1; 11 int j=0; //从左下角开始 12 while(target!=array[i][j]) { 13 if(target<array[i][j]) {//比目标元素大,则行号减1 14 i--; 15 } 16 else if(target>array[i][j]) {//比目标元素小,则列号加1 17 j++; 18 } 19 if(i<0||j>lie-1) {//当行或列超出数组范围则返回false,表示没找到,不然就在循环体里一直找 20 return false; 21 } 22 } 23 return true; 24 25 26 } 27 } 28
总结:
知道对于这种特殊排列的数组选择哪种遍历方式最有效(左下角开始寻找)
原文地址:https://www.cnblogs.com/zclun/p/9961100.html
时间: 2024-11-05 22:45:50