题目:在一个二维数组中,每行都按照从左到右递增的的顺序排序,每列都按照从上到下递增的顺序排序。请完成这样一个函数:输入这样的一个二维数组和一个整数,判断数组中是否含有改整数。
方法一:从最后一行的第一个元素开始比较,我们采用java来写:
JAVA: public boolean searchMatrix(int[][] matrix, int target) { int row=matrix.length; int column=matrix[0].length; if(matrix==null||row<=0||column<=0) { return false; } //从坐下角开始搜索 int nCol = 0; int nRow = row- 1; boolean found = false; while (nCol < column && nRow >= 0) { if (matrix[nRow][nCol] == target) { found = true; break; } else if (matrix[nRow][nCol]<target) { nCol ++; } else { nRow --; } } return found; }
方法二:从第一行的最后一个元素开始比较,我们采用C++来写:
bool FindArray(int *pArray,int nWidth,int nheight,int nKey) { if (NULL == pArray || nWidth <= 0 || nheight <= 0) { return false; } int nCol = nWidth - 1; int nRow = 0; bool bFound = false; while (nCol >= 0 && nRow <= nheight-1) { if (pArray[nRow*nWidth+nCol] == nKey) { bFound = true; break; } else if (pArray[nRow*nWidth+nCol] < nKey) { nRow ++; } else { nCol --; } } return bFound; }