天天看點

面試題 -- 有序二維數組的查找

面試題 -- 有序二維數組的查找

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;
}
           

繼續閱讀