「行方向および列方向にソートされたマトリックスでの検索」のバリエーション
行ごとおよび列ごとに並べ替えられた 2D マトリックスが与えられます。最も最適な方法で負の数の数を返す必要があります。
私はこの解決策を考えることができました
行インデックスを初期化 = 0
行インデックス>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 列の行列
時間の複雑さやコードの実装が間違っている場合は修正してください
ランタイムの複雑さを改善するために、これよりも優れたアイデアを持っている人はいますか?