iterative....reverse
Apr 9, 2008 at 8:57am UTC
hey guys i havta write an O(n) iterative function which when passed 2 vectors of ints v1 and v2 will return true if v1 is the reverse of v2.
bool isReverse(vector <int> v1, vector <int> v2)
{
}
can ne1 help me
Apr 9, 2008 at 11:02am UTC
The following code returns true if one of the given vectors is a reverse vector of another. Assuming that n is the size of the vectors, it works in O(n).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
using namespace std;
#include<iostream>
#include<vector>
bool isReverse(vector <int > v1, vector <int > v2)
{
if (v1.size() != v2.size())
return false ;
int n = v1.size();
for (int i=0;i < n; i++)
{
if (v1.at(i) != v2.at(n-i-1))
return false ;
}
return true ;
}
int main()
{
vector <int > v1, v2, v3;
for (int i=0;i<10;i++)
v1.push_back(i);
for (int i=9;i>=0;i--)
v2.push_back(i);
for (int i=0;i<10;i++)
v3.push_back(i*2);
cout<<"IsReverse(v1,v2)? " <<isReverse(v1,v2)<<"\n"
<<"IsReverse(v1,v3)? " <<isReverse(v1,v3);
return 0;
}
Apr 10, 2008 at 6:09pm UTC
Using std::equal
1 2 3 4 5 6 7 8 9 10 11
#include <algorithm>
#include <vector>
using std::vector;
bool isReverse(const vector<int >& v1, const vector<int >& v2)
{
if (v1.size() != v2.size())
return false ;
return std::equal(v1.begin(), v1.end(), v2.rbegin());
}
Note1: Using "v2.rbegin" as opposed to "v2.begin" makes it compare reversely.
Note2: You SHOULD declare the function arguments like this, with const &, because it can give better performance.
Last edited on Apr 10, 2008 at 6:12pm UTC
Topic archived. No new replies allowed.