【发布时间】:2013-07-20 11:31:06
【问题描述】:
“在按行和按列排序的矩阵中搜索”的变体
给定一个按行和按列排序的二维矩阵。您必须以最佳方式返回负数的计数。
我可以想到这个解决方案
初始化 rowindex=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 x 行和 y 列的矩阵的运行时间 O(xlogy)
如果我在时间复杂度或代码实现方面有错误,请纠正我
有没有人有比这更好的想法来提高运行时复杂性?
【问题讨论】:
-
-ve 数表示小于零的数
-
就说否定吧。
-
不是很彻底。我们是否应该同等重视您的问题?
-
抱歉先生,我会尽快添加更多细节
-
在排序矩阵中搜索使用“左下”方法。复杂度:NxN 矩阵的 O(N)
标签: c++ algorithm multidimensional-array