判断数组中是否含有该整数

Posted zclun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断数组中是否含有该整数相关的知识,希望对你有一定的参考价值。

题目描述

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

思路:

①对于一般数组,普通遍历方式即可判断数组中是否含有该元素。对于二维数组,两层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                         

总结:

知道对于这种特殊排列的数组选择哪种遍历方式最有效(左下角开始寻找)


以上是关于判断数组中是否含有该整数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

剑指Offer-数组

二维数组的查找

二维数组查询算法

剑指offer之二维数组中的查找