题目1:二维数组中的查找

第一次是这样做的,看到二维数组在行、列都是递增有序,就直接想到了算法书上学的二分搜素技术。于是,将二维数组的元素压缩,用一维数组存储。然后,再用二分查找的方法对一维数组查找并判断。代码如下:

#include <iostream>

using namespace std;

int a[1001][1001];
int b[1000001];
int i,j;

void judge(int b[],int mul,int t){
    int low,high,mid;
    low=0;
    high=mul-1;
    mid=0;
    if(t>b[high]||t<b[low])
        cout<<"No"<<endl;
    else{
        if(low<=high){
            mid=(low+high)/2;
            if(t==b[mid])
                cout<<"Yes"<<endl;
            if(t<b[mid])
                high=mid-1;
            else
                low=mid+1;
        }
        else
            cout<<"No"<<endl;
    }
}

int main()
{
    int m,n;
    int t;
    int p;
    int mul;
    while(cin>>m>>n>>t){
        p=0;
        mul=m*n;
        for(i=0;i<m;i++){
            for(j=0;j<n;j++,p++){
                cin>>a[i][j];
                b[p]=a[i][j];
            }
        }
        judge(b,mul,t);
    }
    return 0;
}


但是,WA了,原因超时。。。。。。。。

 

继续代码尝试:

#include <iostream>

using namespace std;

int a[1001][1001];
int i,j;

bool judge(int b[][1001],int m,int n,int num){
     bool find=false;
     if(m>0&&n>0){
        int row=0;
        int col=n-1;
        while(row<m&&col>=0){
            if(b[row][col]==num){
                find=true;
                break;
            }
            else if(b[row][col]>num)
               --col;
            else
               ++row;
        }
     }
     return find;
}

int main()
{
    int m,n;
    int t;
    while(cin>>m>>n>>t){
        bool flag=false;
        for(i=0;i<m;i++){
            for(j=0;j<n;j++){
                cin>>a[i][j];
            }
        }
        flag=judge(a,m,n,t);
        if(flag==true)
           cout<<"Yes"<<endl;
        else
           cout<<"No"<<endl;
    }
    return 0;
}


依旧超时。。。。。我很无语。。。。。。。。。。。。再想吧!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值