Java中排序2D数组搜索的最佳时间复杂度

Java中排序2D数组搜索的最佳时间复杂度,java,Java,所以我有下面的代码来搜索一个排序的2D数组中的目标数,但我不确定这是否是最好的时间复杂度,因为在大的方面,哦,我读到有一种方法可以在O(N)中实现,但我不确定我的算法是否足够有效 public class Search2DArray { public static int search(int[][] arrayA, int number, int target) { int i = 0; int j = number - 1; while (i < number

所以我有下面的代码来搜索一个排序的2D数组中的目标数,但我不确定这是否是最好的时间复杂度,因为在大的方面,哦,我读到有一种方法可以在O(N)中实现,但我不确定我的算法是否足够有效

public class Search2DArray {

public static int search(int[][] arrayA, int number, int target) {
    int i = 0;
    int j = number - 1;
    while (i < number && j >= 0) {
        if (arrayA[i][j] == target) {
            System.out.printf("\n Found at %d, %d", i, j);
            return 1;
        }
        if (arrayA[i][j] > target) {
            j--;
        } else {
            i++;
        }
    }

    System.out.printf("\n Element not found");
    return 0;
}

public static void main(String[] args) {
    int arrayA[][] = {{1, 2, 3, 4}, 
                   {5, 6, 7, 8}, 
                   {9, 10, 11, 12}};
    search(arrayA, 3, 11);
}
}
公共类Search2DArray{
公共静态int搜索(int[][]数组、int编号、int目标){
int i=0;
int j=数字-1;
而(i=0){
if(arrayA[i][j]==目标){
System.out.printf(“\n在%d,%d”,i,j处找到);
返回1;
}
如果(arrayA[i][j]>目标){
j--;
}否则{
i++;
}
}
System.out.printf(“\n未找到元素”);
返回0;
}
公共静态void main(字符串[]args){
int arrayA[][]={{1,2,3,4},
{5, 6, 7, 8}, 
{9, 10, 11, 12}};
搜查(arrayA,3,11);
}
}

如果对2D数组进行了排序,您可以简单地减少要选择的行,并对您认为包含目标编号的行运行二进制搜索。这可能会降低复杂性,甚至更好,可能是按日志顺序排列的。

如果对2D数组进行了排序,您可以简单地减少要选择的行,并对目标编号运行二进制搜索您认为包含目标编号的行这可能会更好地降低复杂性,可能是按日志的顺序排列的

它仍然是二进制搜索;只需对每行的开头进行二进制搜索,然后对在第一次二进制搜索中找到的行进行二进制搜索。
number
参数应该做什么?@LouisWasserman是正确的,可能只需在外部二进制搜索期间对行的开头和结尾进行一次小的检查,然后,如前所述,对匹配行进行二进制搜索。我认为这将使逻辑更容易,因为您可以立即知道是否找到了正确的行,而无需任何回溯;只需对每行的开头进行二进制搜索,然后对在第一次二进制搜索中找到的行进行二进制搜索。
number
参数应该做什么?@LouisWasserman是正确的,可能只需在外部二进制搜索期间对行的开头和结尾进行一次小的检查,然后,如前所述,对匹配行进行二进制搜索。我认为这将使逻辑更容易,因为您可以立即知道是否找到了正确的行,而无需任何回溯。