Другие языки программирования и технологии

2 массива. Найти масимальную подпоследовательность с помощью указателей

Люди, помощь нужна!
2 массива. Найти масимальную подпоследовательность с помощью указателей. C++
заранее спасибо:)
Ни тебе пример массивов, ни структуры массивов, телепаты одним словом здесь находятся. )))
Андрей Бетц
Андрей Бетц
573
Лучший ответ
#include <iostream>
#include <algorithm>

using namespace std;

template <typename T>
void GetLargestCommonSubsequence(const T* &result, int & cresult, const T * a, int ca, const T * b, int cb) {
const int solution_length = cb + 1;

int * previous = new int[solution_length];
int * current = new int[solution_length];

for (int i = 0; i < solution_length; i++) {
previous[i] = 0;
}

int max_length = 0;
const int * start = a;

for(int i = ca - 1; i >= 0; i--) {
for(int j = cb - 1; j >= 0; j--) {
if(a[i] != b[j]) {
current[j] = 0;
}
else {
const int length = 1 + previous[j + 1];
if (length > max_length) {
max_length = length;
start = a + i;
}

current[j] = length;
}
}

swap(previous, current);
}

delete[] previous;
delete[] current;

result = start;
cresult = max_length;
}

template <typename T, int N>
int CountOf(const T(&)[N]) {
return N;
}

int main() {
int a[] = { 1, 2, 3, 2, 1 };
int b[] = { 3, 2, 1, 2, 3, 2, 3 };

const int * result;
int length;

GetLargestCommonSubsequence(result, length, a, CountOf(a), b, CountOf(b));
for (int i = 0; i < length; i++) {
cout << result[i] << endl;
}
}
Курсант Мхо
Курсант Мхо
9 617

Похожие вопросы