Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在O(n)时间内查看值是否在二维数组中的方法有什么问题?_Java_Multidimensional Array_Big O - Fatal编程技术网

Java 在O(n)时间内查看值是否在二维数组中的方法有什么问题?

Java 在O(n)时间内查看值是否在二维数组中的方法有什么问题?,java,multidimensional-array,big-o,Java,Multidimensional Array,Big O,我正在尝试编写一个方法,它接受一个2D数组(按从左到右的递增顺序排列每一行中的元素,每一列中的元素按从上到下的递增顺序排列)和一个int,并查看int是否在2D数组中。我想使用嵌套循环,但这将使它在O(N^2)时间内运行。因此,我试图制作条件,使其测试int是否小于其中一个子数组中的第一个,是否大于最后一个,如果是,则进入下一个子数组。以下是我所拥有的: static boolean has(int number, int[][] a) { int q = 0; boolean

我正在尝试编写一个方法,它接受一个2D数组(按从左到右的递增顺序排列每一行中的元素,每一列中的元素按从上到下的递增顺序排列)和一个int,并查看int是否在2D数组中。我想使用嵌套循环,但这将使它在O(N^2)时间内运行。因此,我试图制作条件,使其测试int是否小于其中一个子数组中的第一个,是否大于最后一个,如果是,则进入下一个子数组。以下是我所拥有的:

 static boolean has(int number, int[][] a) {
    int q = 0;
    boolean c = false;

    for (int i = 0; i < a[q].length-1; i++){
      if ((number < a[i][q]) || (number > a[a[j].length-1][i])){
        q++;
      }
      else if (number == a[i][q]){
        c = true;
        break;
      }
      else c = false;
    }
    return c;
  }
static boolean has(int number,int[]a){
int q=0;
布尔c=假;
对于(int i=0;ia[a[j].长度-1][i])){
q++;
}
else if(number==a[i][q]){
c=正确;
打破
}
否则c=假;
}
返回c;
}
我需要一些帮助。这个方法编译,但给了我无限的感谢

此解决方案在O(n+m)中运行:

static boolean has(int number,int[]a){
int行=0;
int col=a[0]。长度为-1;
while(行=0){
int n=一[行][列];
如果(n<数字){
行++;
}否则如果(n>数字){
col--;
}否则{
返回true;
}
}
返回false;
}

您可以在O(log(n)+log(m))中解决此问题,首先使用二进制搜索(因为列已排序)找到包含要查找的整数的行,然后通过执行另一个二进制搜索(因为行已排序)找到整数在该行中的确切位置。

如果您遇到异常,在sun.reflect.NativeMethodAccessorImpl.invoke(未知源)的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)的sun.reflect.NativeMethodAccessorImpl.invoke(未知源)的HasIt.main(HasIt.java:10)的“outOfBounds”下贴上堆栈跟踪。我在哪里可以找到它在edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)的java.lang.reflect.Method.invoke(未知源代码)中,哪一行是10?
static boolean has(int number, int[][] a) {
    int row = 0;
    int col = a[0].length - 1;
    while (row < a.length && col >= 0) {
        int n = a[row][col];
        if (n < number) {
            row++;
        } else if (n > number) {
            col--;
        } else {
            return true;
        }
    }
    return false;
}