题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数, 输入这样一个二维数组和一个整数,判断数组中是否有该数
解题思路:
右上角:左下角:1.首先选取数组中右上角的数字,如果该数字大于要要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行
2.矩阵是有序的,从右下角来看,向上数字递减,向 右数字递增,因此从左下角找,要查找数字比左下角 的数字大时,右移,要查找的数字比左下角数字小时上移。
右上角方法:
#include<iostream> using namespace std; bool find(int (*arr)[4],int row,int col,int number) { if(arr!=NULL && row>0 &&col>0 ) { int i=0; int j=col-1; while(i<=row && j>=0) { if(arr[i][j]==number) { return true; } else if(number>arr[i][j]) { ++i; continue; } else if(number<arr[i][j]) { --j; continue; } } } return false; }
左上角方法:
bool find(int (*arr)[4],int row,int col,int number) { if(arr!=NULL && row>0 && col>0) { int i=row-1; int j=0; while(i>=0 && j<col ) { if(arr[i][j]==number) { return true; } else if(arr[i][j]>number) { --i; continue; } else if(arr[i][j]<number) { ++j; continue; } } } return false; }
测试:
int main() { int arr[4][4]={ {1,2,8,9}, {2,4,9,12}, {4,7,10,13}, {6,8,11,15} }; cout<<find(arr,4,4,2)<<endl; }