面试题 -- 有序二维数组的查找
2014-02-14 10:54
106 查看
vs2010测试通过,代码如下:
/** *解题思路: * 题目中给出的二维数组是:从左到右,从上到下依次递增, 可以从行的最大值 列的最小值 或是 行的最小值 列的最大值 开始查找, 如果该值大于要查找的数字,则该数值所在的列可以排除, 如果该数值小于要查找的数字,则该数值所在的行可以排除, 依次缩小查找的范围,最终得出结果 *以下代码是从行的最大值 列的最小值 开始查找的(即二维数字的右上角的数字) */ #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #define ROWS 4 #define COLUMNS 4 bool findNumber(int *matrix ,int rows,int columns ,int number); int _tmain(int argc, _TCHAR* argv[]){ int arr[ROWS][COLUMNS] ={{1,3,6,9}, {2,5,9,11}, {3,7,10,13}, {4,9,14,22}}; bool isfound; int *matrix = &arr[0][0] ; isfound = findNumber(matrix,ROWS,COLUMNS,7); if(isfound){ printf("查找成功!"); system("pause"); return true; } printf("查找失败!"); system("pause"); return false; } bool findNumber(int *matrix ,int rows , int columns, int number){ bool found = false ; if(matrix != NULL && rows >0 && columns > 0 ){ int row =0 ; int column = columns -1 ; while(row < rows && column >= 0){ if(matrix[row*columns + column] == number){ found = true; break; }else if(matrix[row*columns + column] > number){ --column; }else{ ++row; } } } return found; }
相关文章推荐
- 面试题3:针对部分有序的二维数组的查找
- 《剑指Offer》面试题3:二维数组中的查找(行列分别有序数组的二分查找)
- 有序二维数组中的查找
- 面试题2:二维数组中的查找
- 《剑指offer》面试题3 二维数组中的查找(杨氏矩阵)
- 面试题【1】二维数组中的查找
- 面试题 ——— 二维数组的查找
- 剑指offer面试题3之二维数组中的查找
- 【百度面试题】循环有序数组的查找问题
- 有序二维数组中的查找
- 剑指offer面试题:二维数组中的查找
- 剑指Offer系列-面试题3:二维数组中的查找
- 剑指offer-面试题3 二维数组中的查找
- 面试题之二维数组中的查找
- 面试题(三)二维数组中的查找
- 算法题001 剑指Offer 面试题三:二维数组中的查找
- 剑指offer:面试题三:二维数组中的查找
- 剑指offer-chapter2-面试题3-二维数组的查找(java)
- 《剑指offer》面试题04:二维数组中的查找
- 面试题之二维数组中的查找