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

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

Статья из группы Архив info.javarush
участников
Кухня(); Задание N45 - 1 Правила [Одномерные массивы] 45. Дан массив, состоящий из n натуральных чисел. Образовать новый массив, элементами которого будут элементы исходного, оканчивающиеся на цифру k. Кухня(); Задание N45 - 2
Комментарии (10)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
aiv
Уровень 27
16 сентября 2014, 12:20
Еще можно так:

    public static int[] endsByK (int[] arr, int k){
        if (k < 0)
            return new int[0];

        int count = 0;

        for (int n : arr) {
            if (Math.abs(n) % 10 == k)
                count++;
        }

        int[] res = new int[count];
        count = 0;
        for (int n : arr) {
            if (Math.abs(n) % 10 == k)
                res[count++] = n;
        }

        return res;
    }
Airon
Уровень 34
16 сентября 2014, 11:15
<code>public static int[] arrayOfK(int k, int... array) {    
    int[] temp = new int[0];
    String sK = String.valueOf(k);
    for (int x : array) {
        String sX = String.valueOf(x);        
        if (sX.endsWith(sK)) {
            temp = Arrays.copyOf(temp, temp.length + 1);
            temp[temp.length - 1] = x;
        }
    }
    return temp;
}</code>
Насколько я пока понял, с обычными массивами будем работать редко, скорее использоваться будут списки, так как они быстрее всего. И утруждать код двумя циклами перебора одного и того же для задания длины не особо нужно. Если это не так, пожалуйста объясните или киньте какую нибудь авторитетную (конечно же на ваш взгляд) ссылку. Очень благодарен.
Kashey
Уровень 11
16 сентября 2014, 11:21
Я сам проверил в задаче N5 время выполнения 3мя разными способами, растущий массив занял в 26 раз больше времени, чем через 2 цикла.
При размере массива в 10000, метод с растущим массивом выполняется за 26 мс! Метод с ArrayList — 2 мс, ну а самый простой со счетчиком 1 — мс!
Airon
Уровень 34
16 сентября 2014, 12:00
Так все верно, то я читал, но в будущем вряд ли будут использоваться массивы для неизвестного количества элементов. Плюс там же как раз и было написано что List самый быстрый, то есть использоваться будут листы для задач с неизвестным кол-вом.
ЗЫ: а LinkedLIst тоже как и ArrayLIst не так быстр?
Airon
Уровень 34
16 сентября 2014, 12:13
ЗЫЗЫ: а ну конечно с обёртки в примитив и опять (дважды) копирование будет немного дольше чем с двумя циклами и одним копированием. Но опять же зачем обратно в обычный массив переводить если можно для всех тех же целей использовать уже List.
Kashey
Уровень 11
16 сентября 2014, 12:16
45. Дан массив, состоящий из n натуральных чисел. Образовать новый массив, элементами которого будут элементы исходного, оканчивающиеся на цифру k.
Патамушта, патамушта…
Kashey
Уровень 11
12 сентября 2014, 12:33
public static  int[] newArrayWithLastK (int[] array, int k) {
        if (k < 0) {
            System.out.print("k is " + k + ", k must be greater than 0!");
            return new int[0];
        }
        int count = 0;

        for (int i = 0; i < array.length; i++) {
            if (Integer.toString(array[i]).endsWith(Integer.toString(k))) {
                count++;
            }
        }
        System.out.println(count);

        int[] newArr = new int[count];
        count = 0;
        for (int i = 0; i < array.length; i++) {
            if (Integer.toString(array[i]).endsWith(Integer.toString(k))) {
                newArr[count++] = array[i];
            }
        }
        return newArr;
}
Vash_the_Stampede
Уровень 11
10 сентября 2014, 18:17
public static int[] solve(int[] arr, int k) {
    int n = arr.length;
    int count = 0;

    for (int i = 0; i < n; i++) {
        if (Integer.toString(i).endsWith(Integer.toString(k))) {
            count++;
        }
    }

    int[] res = new int[count];
    count = 0;
    for (int i = 0; i < n; i++) {
        if (Integer.toString(i).endsWith(Integer.toString(k))) {
            res[count++] = arr[i];
        }
    }

    return res;
}
Kashey
Уровень 11
12 сентября 2014, 12:40
Пробывал запускать свой код? у тебя в первом же цикле:
if (Integer.toString(i).endsWith(Integer.toString(k)))

а должно быть:
if (Integer.toString(array[i]).endsWith(Integer.toString(k)))

У тебя ищет числа, оканчивающиеся на k, не в массиве, а в индексах массива.
Vash_the_Stampede
Уровень 11
10 сентября 2014, 17:36
очепятка в конце задания