Мне приходит в голову следующий алгоритм:
- C = A v B
- Частичная сортировка #A (число A) Элементы C
- Вычтите сумму последних #B элементов из C из суммы первых #A элементов из C.
Вы должны заметить, что вам не нужно сортировать все элементы, достаточно найти количество самых маленьких элементов.Ваш приведенный пример:
- C = {5, 1, 3, 2, 4, 9}
- C = {1, 2, 3, 5, 4, 9}
- (1 + 2 + 3) - (5 + 4 + 9) = -12
Решение C ++:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
// Initialize 'a' and 'b'
int ai[] = { 5, 1, 3 };
int bi[] = { 2, 4, 9 };
std::vector<int> a(ai, ai + 3);
std::vector<int> b(bi, bi + 3);
// 'c' = 'a' merged with 'b'
std::vector<int> c;
c.insert(c.end(), a.begin(), a.end());
c.insert(c.end(), b.begin(), b.end());
// partitially sort #a elements of 'c'
std::partial_sort(c.begin(), c.begin() + a.size(), c.end());
// build the difference
int result = 0;
for (auto cit = c.begin(); cit != c.end(); ++cit)
result += (cit < c.begin() + a.size()) ? (*cit) : -(*cit);
// print result (and it's -12)
std::cout << result << std::endl;
}