整数nxn
整数矩阵的行和列的元素按非递减顺序排序。验证数组中是否存在数字的最佳方法是什么?例如,如果给定的矩阵是5x5。
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
答案 0 :(得分:0)
首先通过对第1列执行二进制搜索来找到该数字必须处于的行。如果找不到完全匹配,请找到最接近但小于所需数字的数字。所需的数字必须在该行中。
然后,在该行上执行二进制搜索。要么你找到了号码,要么你没有。
答案 1 :(得分:0)
蛮力O(n ^ 2)应该不是问题。
O(log(row_count * col_count)解决方案是
public bool func_name(int[][] input, int target) {
int row_num = input.length;
int col_num = input[0].length;
int b = 0, e = row_num * col_num - 1;
while(b <= e){
int m = (b + e) / 2;
int mid_value = input[m/col_num][m%col_num];
if( mid_value == target){
return true;
}else if(mid_value < target){
b = m+1;
}else{
e = m-1;
}
}
return false;
}
您可以使用O(row_count + col_count)解决方案。步骤将是。
intitalize row = 0 and coloumn as col_count-1
1.if input[row][coloumn]<target, increment row value.
2.If the value is greater decrement the coloumn value.