20170729_vector二维数组的应用
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> Solution(const vector<vector<int>> &matrix)
{
vector<vector<int>> result;
int m=matrix.size(); //二维数组的行数
int n=matrix[0].size(); //二维数组的列数
if(m==0 || n==0)
return result;
int flag=n-1,min=n;
for(int i=0; i<n; ++i)
{
if (matrix[0][i]==1)
{
flag=i;
vector<int> temp;
temp.push_back(1); //第一行
temp.push_back(n-flag); //n-flag个1
result.push_back(temp);
min=flag; //第一行1出现的标志位
break;
}
}
for (int i=1; i<m; ++i)
{
if(matrix[i][flag]==1) //不等于1的就不用考虑了,因为1的数量肯定比第一行少
{
while(matrix[i][flag]==1 && flag>=0)
flag--;
flag++; //找到该行的第一个1的位置
if(flag<min) //该行的1的数量 多于 第一行
{
min=flag;
vector<int> temp;
temp.push_back(i+1);
temp.push_back(n-flag);
result.clear(); //清空之前存储的temp
result.push_back(temp);
}
else if(flag==min) //该行的1的数量 等于 第一行
{
vector<int> temp;
temp.push_back(i+1);
temp.push_back(n-flag);
result.push_back(temp);
}
}
}
return result;
}
int main(void)
{
vector<vector<int>> matrix(6,vector<int>(12, 0)); //定义二维数组,所有元素初始化为0
int m[6][12]={
0,0,0,0,0,0,0,0,1,1,1,1,
0,0,0,0,0,0,0,0,1,1,1,1,
0,0,0,0,0,0,0,0,1,1,1,1,
0,0,0,0,0,0,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,1,1,1,1,
0,0,0,0,0,0,1,1,1,1,1,1 };
for(int i=0; i<6; ++i)
for(int j=0; j<12; ++j)
matrix[i][j]=m[i][j];
vector<vector<int>> result=Solution(matrix);
for(auto row:result)
{
for(auto mem:row)
cout<<mem<<" ";
cout<<endl;
}
cout<<endl;
system("pause");
return 0;
}