JavaRush/Java блог/Архив info.javarush/Кухня(); Задание N57
terranum
28 уровень

Кухня(); Задание N57

Статья из группы Архив info.javarush
участников
Кухня(); Задание N57 - 1 Правила [Одномерные массивы] 57. Дан одномерный массив чисел, среди элементов которого есть одинаковые. Создать новый массив из различных элементов исходного массива.
Комментарии (10)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
BappekM
Уровень 34
24 сентября 2014, 15:05
<code>public static int[] solution(int[] source) {
        // *** active length
        int length = source.length;

        // *** general sequence
        for (int i = 0; i < length; i++) {
            boolean flag = false;

            // *** inner sequence, find element equal i-element
            for (int j = i+1; j < length; j++) {
                if(source[i] == source[j]) {
                    int temp = source[--length];
                    source[length] = source[j];
                    source[j--] = temp;
                    flag = true;
                }
            }

            // *** swap i-element
            if (flag) {
                int temp = source[--length];
                source[length] = source[i];
                source[i--] = temp;
            }

        }
        return Arrays.copyOfRange(source, 0, length);
    }</code>
BappekM
Уровень 34
24 сентября 2014, 15:05
так ли я понял?)
Docktor91
Уровень 40
25 сентября 2014, 00:38
с трудом, я почти понял что ты написал))
если не сложно объясни про // *** swap i-element
aiv
Уровень 27
25 сентября 2014, 07:09
Я тоже не совсем понял условие, у меня было два варианта:
1. надо вернуть только те числа, которые встречаются в массиве 1 раз.
2. надо убрать дубли, оставив все числа по 1 разу.
Ваш метод по первому варианту отрабатывает нормально, только еще и сортирует исходный массив.
aiv
Уровень 27
25 сентября 2014, 07:42
Здесь
<code>// *** inner sequence, find element equal i-element</code>
в конец массива перемещаются все элементы, равные i-му.
А здесь
<code>// *** swap i-element</code>
в конец перемещается сам i-й элемент.
BappekM
Уровень 34
25 сентября 2014, 10:04
Не красиво получается (упустил), но решаемо добавление одной строки)
а первый или второй вариант разница невелика)
BappekM
Уровень 34
25 сентября 2014, 10:06
aiv совершенно верно написал, на самом деле я хотел написать, что свап и-элемента в конец, но не хватило моих знаний английского, поэтому выразился более лаконично)))
Docktor91
Уровень 40
25 сентября 2014, 11:28
to end)))
вот оно че, этот блок можно убрать, так как в задании нужно убрать дубликаты…
это как если бы мы в сет добавляли, должно получиться
Airon
Уровень 34
25 сентября 2014, 20:18
1)
public static int[] getUniqueValuesArrays2(int... array) {
    int[] temp = new int[array.length];
    int count = 0;
    for (int i = 0; i < array.length; i++) {
        for (int j = i + 1; j < array.length; j++)
            if (array[i] == array[j]) {
                temp[i]++;
                temp[j]++;
                break;      // возможность уменьшить хоть как то кол-во итераций и присваиванией, без этого можно получить кол-во повторений в массиве
            }
        if(temp[i] < 1)
            temp[count++] = array[i];
    }
    return Arrays.copyOf(temp, count);
}

2)
public static int[] getUniqueValuesArrays(int... array) {
    int[] temp = new int[array.length];
    int count = 0;
    label1: for (int i = 0; i < array.length; i++) {
        for (int j = i + 1; j < array.length; j++)
            if (array[i] == array[j])
                continue label1;
        temp[count++] = array[i];
    }
    return Arrays.copyOf(temp, count);
}
Docktor91
Уровень 40
24 сентября 2014, 13:11
up