题目:
分析:
感觉是考排序的题,给以一组数,相同的数的相对顺序不发生变化,想一想是哪种排序呢?
代码:
int A[m.size()];//存放士兵的个数
vector<int> B;//0-0
for(int i=0;i<m.size();i++)
{
//二分查找
int b=0;
int e=m[0].size()-1;
while(b<e)
{
int c=b+(e-b)/2;
if(m[i][c]) b=c+1;
else e=c;
}
if(m[i][m[0].size()-1]) b++;
A[i]=b;
}
for(int i=0;i<m.size();i++) B.push_back(0);
//选择排序吧。
for(int i=0;i<m.size()-1;i++)
{
for(int j=0;j<m.size()-i-1;j++)
{
if(A[j]>A[j+1])
{
int c=A[j];A[j]=A[j+1];A[j+1]=c;
int c2=B[j];B[j]=B[j+1];B[j+1]=c2;
}
}
}
vector<int> D;
for(int i=0;i<k;i++) D.push_back(B[i]);
return D;
结果:
不错,首次内存最少!