面试题1:二维数组中的查找

来源:互联网 发布:淘宝分销商能赚钱吗 编辑:程序博客网 时间:2024/05/22 17:27

来源:《剑指Offer》
题目:
在一个二维数组中,每一行按照从左到右递增的顺序排列,每一列按照从上到下递增排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

分析:
从左下角或者右上角开始比较,每次比较,如果相等,则返回true,如果不等,则可以排除一行或者一列,重复此过程即可。

代码(C++):

#include<iostream>using namespace std;#define MAX_ROW 4#define MAX_COL 4void initData(int data[][MAX_COL],int total);bool search(int data[][MAX_COL],int value);int main(){    int data[MAX_ROW][MAX_COL];// 声明一个二维数组//  int data[MAX_ROW][MAX_COL]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};    int value;      int total;    total=MAX_ROW * MAX_COL;    // 输入数组    cout<<"请输入"<<total<<"个整数作为数组元素"<<endl;    initData(data,total);    cout<<"请输入要查找的数\n";    cin>>value;    cout<<(search(NULL,value)?"true":"false")<<endl;    return 0;}// 从控制台输入数组void initData(int data[][MAX_COL],int total){    int num;        num=0;    for(int i=0,j=0;num<total;i++,j++)    {               cin>>data[i%MAX_ROW][j%MAX_COL];        num++;    }}bool search(int data[][MAX_COL],int value){    int i,j;    if(data==NULL)        return false;    i=0;    j=MAX_COL-1;    while(true)    {        if(i>=MAX_ROW||i<0||j>=MAX_COL||j<0)            return false;        if(data[i][j]==value)        {            return true;        }        if(data[i][j]<value)        {            // 去掉一行            i++;            continue;        }        if(data[i][j]>value)        {            // 去掉一列            j--;            continue;        }    }}
0 0
原创粉丝点击