単位配列の番号を探します

単位配列の番号を探します人々は震え質問に直面しています


単位配列の番号を探します我々は、対象に見える
増加操作のために左から右へ、二次元配列の各行を。各列は、上から下に昇順にソート。完了コードは、このような二次元アレイと整数の入力には、アレイは、整数が含まれているか否かを判断します

単位配列の番号を探しますルを解決する方法は?
分析:単位配列の番号を探しますこれは、2次元配列である場合には、再度、配列を横断することは完全に可能な問題を解決するために、しかし効率のために、我々は最も少ない数字を通過するために、我々は行と列を分離する必要があり、時間の複雑さを軽減する必要があります。そこで、我々は唯一の問題は、例えば、10時間より10の左と上のエッジを見つけるために、で複雑、かつ以下および10よりも右になったでしょう、何気なく番号を探して、しかし、デジタル裁判官から配列を検索します大きいので、我々は唯一のいくつかの特定のポイントを見つけることができ、例えば、右上には、左下には、あなたの選択をする唯一の方法があります。数字がちょうど++行、9つ以上を探している場合、[行]は[COL]、我々は、例えば、9を取る;数字は9より小さく見える場合、ちょうどcol--、最終的に必要な数を見つけるまで。
単位配列の番号を探しますコードを見てください

#include<iostream>
using namespace std;

bool find(int *arr, int row, int col, int n)
{
    bool flag = false;//标记
    if (arr != nullptr&&row > 0 && col > 0)//判断数组是否存在
    {
        int _row = 0;
        int _col = col - 1;
        while (_col>0&&_row<row)
        {
            if (arr[_row*col + _col] > n)
            {
                _col--;
            }
            else if (arr[_row*col + _col] < n)
            {
                _row++;
            }
            else
            {
                flag = true;
                return flag;
            }
        }
    }
    return flag;
}
int main()
{
    int arr[4][4] = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
    bool ret=find((int *)arr, 4, 4, 7);//
    cout << boolalpha << ret<<endl;//boolapha使返回值变成true输出
    return 0;
}

おすすめ

転載: blog.51cto.com/14233078/2437860