Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Обработка уникальных чисел из двух сортированных массивов на Pascal

Delphi , Синтаксис , Массивы

Задача, с которой столкнулся пользователь, заключается в объединении двух сортированных массивов таким образом, чтобы в результирующем массиве были только уникальные числа, не повторяющиеся в обоих исходных массивах. Это означает, что если число присутствует в обоих массивах, оно не должно быть включено в итоговый массив.

Для решения этой задачи можно использовать следующий алгоритм:

  1. Инициализируем два указателя, которые будут перемещаться по массивам a1 и a2.
  2. Сравниваем элементы массивов по указателям.
  3. Если элементы различаются, добавляем меньший элемент в результирующий массив и перемещаем соответствующий указатель.
  4. Если элементы равны, перемещаем оба указателя, пока не найдем различающиеся элементы.
  5. Повторяем шаги 2-4, пока не достигнем конца одного из массивов.
  6. После достижения конца одного из массивов, добавляем оставшиеся элементы другого массива в результирующий массив.

Пример кода на Object Pascal:

program MergeUniqueArrays;
{$APPTYPE CONSOLE}
uses
  System.SysUtils;

procedure MergeUniqueArrays(var a1, a2: array of Integer; n1, n2: NativeInt; var a3: array of Integer; var n3: NativeInt);
var
  i, j: NativeInt;
begin
  n3 := 0;
  i := 0;
  j := 0;
  SetLength(a3, n1 + n2);

  while (i < n1) and (j < n2) do
  begin
    if a1[i] < a2[j] then
    begin
      if (n3 = 0) or (a3[n3 - 1] <> a1[i]) then
      begin
        a3[n3] := a1[i];
        Inc(n3);
      end;
      Inc(i);
    end
    else if a1[i] > a2[j] then
    begin
      if (n3 = 0) or (a3[n3 - 1] <> a2[j]) then
      begin
        a3[n3] := a2[j];
        Inc(n3);
      end;
      Inc(j);
    end
    else
    begin
      // Оба элемента равны, пропускаем их
      Inc(i);
      Inc(j);
    end;
  end;

  // Добавляем оставшиеся элементы из a1, если они уникальны
  while (i < n1) do
  begin
    if (n3 = 0) or (a3[n3 - 1] <> a1[i]) then
    begin
      a3[n3] := a1[i];
      Inc(n3);
    end;
    Inc(i);
  end;

  // Добавляем оставшиеся элементы из a2, если они уникальны
  while (j < n2) do
  begin
    if (n3 = 0) or (a3[n3 - 1] <> a2[j]) then
    begin
      a3[n3] := a2[j];
      Inc(n3);
    end;
    Inc(j);
  end;
end;

var
  a1, a2, a3: array of Integer;
  n1, n2, n3: NativeInt;
begin
  SetLength(a1, 9);
  SetLength(a2, 4);
  a1 := [1, 2, 3, 4, 4, 4, 5, 5, 6];
  a2 := [1, 4, 7, 9];
  n1 := Length(a1);
  n2 := Length(a2);
  SetLength(a3, n1 + n2);

  MergeUniqueArrays(a1, a2, n1, n2, a3, n3);

  // Выводим результат
  for var i := 0 to n3 - 1 do
    Write(a3[i], ' ');
  Writeln;
  Readln;
end.

Этот код решает поставленную задачу, объединяя два массива с учетом уникальности чисел. Результирующий массив a3 будет содержать уникальные числа из обоих исходных массивов a1 и a2 в отсортированном виде.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с задачей объединения двух отсортированных массивов в один, содержащий уникальные числа, которые не повторяются в обоих исходных массивах, и при этом итоговый массив должен быть отсортирован.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 15:30:33/0.02310585975647/0