Sobes.tech
Middle+
52

Java-դ առաքելություններ 1. Գրեք մեթոդի իրականացմանը: /** * @param a – թվերի զանգված, զանգվածի երկարությունը կարող է լինել ավելի քան 10 միլիոն: * @return թվերի զանգված, առանց կրկնությունների: Օրիգինալ զանգվածի թվերի կարգը պետք է պահպանվի: Կրկնությունների դեպքում պետք է թողնել վերջին տարրը, օրինակ, {2,1,4,2,3} ճիշտ լուծումը կլինի {1,4,2,3}, ոչ թե {2,1,4,3} Եթե մուտքային զանգվածում կա տարր, որը փոքր է 0-ից, պետք է արտածել սխալ: Օրինակ, {2,3,-1,5} մշակումը պետք է ավարտվի սխալով: */ public static double[] task(double[] a) { }

Ընկերությունները, որտեղ հարցրել են
Мираполис

Պատասխան AI-ից

sobes.tech AI

Для решения задачи нужно:

  1. Проверить, что в массиве нет отрицательных чисел, иначе выбросить исключение.
  2. Определить для каждого числа его последнее вхождение в массив.
  3. Пройтись по массиву и оставить только те элементы, индекс которых совпадает с последним вхождением.

Так как массив может быть очень большим (более 10 млн элементов), важно использовать эффективные структуры данных и алгоритмы с линейной сложностью.

Пример реализации на Java:

import java.util.*;

public static double[] task(double[] a) {
    // Проверка на отрицательные элементы
    for (double num : a) {
        if (num < 0) {
            throw new IllegalArgumentException("Массив содержит отрицательное число: " + num);
        }
    }

    // Сопоставляем число с его последним индексом
    Map<Double, Integer> lastIndexMap = new HashMap<>();
    for (int i = 0; i < a.length; i++) {
        lastIndexMap.put(a[i], i);
    }

    // Собираем результат, оставляя только элементы, индекс которых совпадает с последним вхождением
    List<Double> resultList = new ArrayList<>();
    for (int i = 0; i < a.length; i++) {
        if (lastIndexMap.get(a[i]) == i) {
            resultList.add(a[i]);
        }
    }

    // Преобразуем список обратно в массив
    double[] result = new double[resultList.size()];
    for (int i = 0; i < result.length; i++) {
        result[i] = resultList.get(i);
    }

    return result;
}

Такой подход сохраняет порядок элементов и оставляет только последние вхождения дубликатов.