3

「行方向および列方向にソートされたマトリックスでの検索」のバリエーション

行ごとおよび列ごとに並べ替えられた 2D マトリックスが与えられます。最も最適な方法で負の数の数を返す必要があります。

私はこの解決策を考えることができました

  1. 行インデックスを初期化 = 0

  2. 行インデックス>0 行インデックス++ の場合
    それ以外の場合は二分探索を適用

そして、5X5マトリックスのこのコードで実装されています

#include<iostream>
#include<cstdio>
using namespace std;
int arr[5][5];

int func(int row)
{
    int hi=4;
    int lo=0;
    int mid=(lo+hi)/2;
    while(hi>=lo)
    {
        mid=(lo+hi)/2;
        .
        if(mid==4)
        {
            return 5;
        }
        if(arr[row][mid]<0 && arr[row][mid+1]<0)
        {
            lo=mid+1;
        }
        else if(arr[row][mid]>0 && arr[row][mid+1]>0)
        {
            hi=mid-1;
        }
        else if(arr[row][mid]<0 && arr[row][mid+1]>0)
        {
            return mid+1;
        }
    }
}

int main()
{
    int ri,ci,sum;
    ri=0;   //rowindex
    ci=0;   //columnindex
    sum=0;
    for(int i=0; i<5; i++)
    {
        for(int j=0; j<5; j++)
        {
            cin>>arr[i][j];
        }
    }
    while(ri<5)
    {
        if(arr[ri][ci]>=0)
        {
            ri++;
        }
        else if(arr[ri][ci]<0)
        {
            int p=func(ri);
            sum+=p;
            ri++;
        }
    }
    printf("%d\n",sum);
}

ここでコードを実行しましたhttp://ideone.com/PIlNd2 ランタイム O(xlogy) x 行と y 列の行列

時間の複雑さやコードの実装が間違っている場合は修正してください

ランタイムの複雑さを改善するために、これよりも優れたアイデアを持っている人はいますか?

4

2 に答える 2