环形相等 count_if unique, sort, nth_element, reverse解决方法
环形相等 count_if unique, sort, nth_element, reverse
如题://写一个函数 可以判断两个数组是否环型相等 环型相等指的是1,3,2 和 2,1,3相等注意效率。//
问题是这样的:我写的代码可以实现,但是效率太差太差了。师傅说让用stl 里的这几个函数count_if,unique, sort, nth_element, reverse就可以很简单地实现。我把这几个函数想了好几遍,还是实现不了,恳请高人给点思路,感激不尽!!!
我的代码如下:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
int main()
{
int count(0);
int j=0;
vector<int> num1;
vector<int> num2;
vector<int> num3;
vector<int> temp;
char m,n;
cout<<"请输入数组1数据(0表示结束):"<<endl;
while(cin>>n)
{
if(n=='0')
break;
num1.push_back(n);
}
num3=num1;
cout<<"请输入数组2数据(0表示结束):"<<endl;
while(cin>>m)
{
if(m=='0')
break;
num2.push_back(m);
//.....
}
if(num1.size()!=num2.size())
{
cout<<"两数组不环形相等"<<endl;
}
else
{
for(vector<int>::iterator iter=num1.begin();iter!=num1.end();iter++) {
vector<int>::iterator iter1=num3.begin();
*iter1=*iter;
if(*iter!=num2[0])
{
temp.push_back(*iter);
num3.erase(iter1);
j++;
}
if(num3.empty()||j==(num1.size()-1))
{
cout<<"两数组不环形相等"<<endl;
break;
}
如题://写一个函数 可以判断两个数组是否环型相等 环型相等指的是1,3,2 和 2,1,3相等注意效率。//
问题是这样的:我写的代码可以实现,但是效率太差太差了。师傅说让用stl 里的这几个函数count_if,unique, sort, nth_element, reverse就可以很简单地实现。我把这几个函数想了好几遍,还是实现不了,恳请高人给点思路,感激不尽!!!
我的代码如下:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
int main()
{
int count(0);
int j=0;
vector<int> num1;
vector<int> num2;
vector<int> num3;
vector<int> temp;
char m,n;
cout<<"请输入数组1数据(0表示结束):"<<endl;
while(cin>>n)
{
if(n=='0')
break;
num1.push_back(n);
}
num3=num1;
cout<<"请输入数组2数据(0表示结束):"<<endl;
while(cin>>m)
{
if(m=='0')
break;
num2.push_back(m);
//.....
}
if(num1.size()!=num2.size())
{
cout<<"两数组不环形相等"<<endl;
}
else
{
for(vector<int>::iterator iter=num1.begin();iter!=num1.end();iter++) {
vector<int>::iterator iter1=num3.begin();
*iter1=*iter;
if(*iter!=num2[0])
{
temp.push_back(*iter);
num3.erase(iter1);
j++;
}
if(num3.empty()||j==(num1.size()-1))
{
cout<<"两数组不环形相等"<<endl;
break;
}