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

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

Статья из группы Архив info.javarush
Кухня(); Задание N35. - 1 Правила [Одномерные массивы] 35. Дан целочисленный массив с количеством элементов n. "Сожмите" массив, выбросив из него каждый второй элемент (дополнительный массив при этом не использовать).
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
RabenokDmitry Уровень 21
24 февраля 2015
После долгих тестов получил, что хотел:)
public static int[] getLessArray(int[] data) {
        if (data.length < 2)
            return data;
        int numberCut = data.length / 2;

        int count = 1;
        if (data.length > 2) {


            for (int i = 2; i < data.length; i += 2) {
                data[count] = data[i];
                count++;
            }
            if (data.length % 2 == 0) {
                data = Arrays.copyOf(data, data.length / 2);
            } else {
                data = Arrays.copyOf(data, data.length / 2 + 1);
            }
        } else {
            data = Arrays.copyOf(data, data.length / 2);
        }
        return data;
    }
Vash_the_Stampede Уровень 11
7 сентября 2014
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(solve(new int[]{ 0, 1, 2, 3, 4, 5, 6, 7 })));
    }

    public static int[] solve(int[] arr) {
        // size of new array
        int pivot = (arr.length + 1) / 2;

        // process the array
        for (int i = 1; i < pivot; i++) {
            arr[i] = arr[2 * i];
        }

        // make backup of array
        TrimHelper start = new TrimHelper();
        TrimHelper cur = start;
        for (int i = 0; i < pivot; i++) {
            cur.value = arr[i];
            cur = cur.next = new TrimHelper();
        }

        // reinitialize array and restore its elements
        arr = new int[pivot];
        cur = start;
        for (int i = 0; i < pivot; i++) {
            arr[i] = cur.value;
            cur = cur.next;
        }

        return arr;
    }

    public static class TrimHelper {
        int value;
        TrimHelper next;
        TrimHelper(){};
    }

}
Vash_the_Stampede Уровень 11
4 сентября 2014
Но это все же читерство:
public static int[] copyOf(int[] original, int newLength) {
    int[] copy = new int[newLength];
    System.arraycopy(original, 0, copy, 0,
            Math.min(original.length, newLength));
    return copy;
}

Из исходников java.util.Arrays
Vash_the_Stampede Уровень 11
4 сентября 2014
public static int[] solve(int[] arr) {
    int pivot = (arr.length + 1) / 2;
    for (int i = 1; i < pivot; i++) {
        arr[i] = arr[2 * i];
    }
    return Arrays.copyOf(arr, pivot);
}
Docktor91 Уровень 40
4 сентября 2014
public static int[] getIt(int[] arr)
{
    for (int i = 0,int j = 0; j < arr.length; i++, j += 2)
        arr[i] = arr[j];
    arr = Arrays.copyOf(arr, (arr.length + arr.length % 2) / 2);
    return arr;
}
Vash_the_Stampede Уровень 11
4 сентября 2014
я правильно понял, нужно уменьшить размер массива также? И все классы и методы, имеющие среди своих полей массив использовать нельзя?