二分查找
- 有个问题就是为什么基于matrix[0] 按照一维数组进行操作,不正确,这个主要原因是因为传入的matrix不是在内存线性连续分布的,而是每个matrix每个的起始地址都是malloc得到的。
eg
matrix = calloc(matrixRowSize, sizeof(int *));
for(int i = 0 ; i < matrixRowSize;i++)
matrix[i] = calloc(matrixColSize, sizeof(int));
如果这样申请,就可以当做一维数组使用
int (matrix)[matrixColSize] = (int ()[matrixColSize])calloc(matrixRowSize*matrixColSize, sizeof(int));
针对2D matrix的题目,需要熟练理解多维数组和指针的关系
https://www.cnblogs.com/chenyangyao/p/5222696.html
a[1][2] :
a类型:int ()[2]
&a类型:int ()[1][2] &a+1 = &a +sizeof(a) = &a+ 12sizeof(int)
a[0]类型:int *
&a[0][0] a[0] a 地址一样,类型不一样
bool searchMatrix(int** matrix, int matrixRowSize, int matrixColSize, int target) {
int start = 0;
int end = matrixRowSize*matrixColSize-1;
int mid;
if(matrixRowSize == 0 || matrixColSize ==0)
return false;
while(start+1 < end){
mid = start+(end-start)/2;
//if(matrix[mid/matrixColSize][mid%matrixColSize] == target)
if(*(*(matrix+mid/matrixColSize)+mid%matrixColSize) == target)
return true;
else if(matrix[mid/matrixColSize][mid%matrixColSize] > target)
end = mid;
else
start = mid;
}
if(matrix[start/matrixColSize][start%matrixColSize] == target)
return true;
if(matrix[end/matrixColSize][end%matrixColSize] == target)
return true;
return false;
}