Есть ли способ улучшить этот код массива? - PullRequest
0 голосов
/ 03 июля 2019

Это была одна из проблем при приеме в App Academy. Они не были сложными, но мои знания в Java чрезвычайно ограничены, поэтому это заняло больше времени, чем обычно. У меня была проблема: заданный массив чисел и целевое число, если элементы в массиве кратны целевому числу, возвращают их в формате массива. Пример: {7, 12, 9, 5, 15}, 3 вернет только 12, 9, 15

Мой мыслительный процесс: у меня просто будет пустой массив с равными элементами, переданными в массиве. Создайте переменную count для увеличения временного массива. Цикл и присвоить значения. Создайте новую переменную для вывода того же типа, что и метод, и передайте все от временного массива до нового массива. Возвращение.

Я чувствую, что есть более простой способ сделать это, но я не знаю, как / что посмотреть.

    public static Integer[] multipleSelect(Integer[] nums, int target) {
        int [] temp = new int[nums.length];
        int count = 0;
        for(int x = 0; x < nums.length; x++)
        {
            if(nums[x] % target == 0)
            {
                temp[count] = nums[x];
                count++;
            }
        }
        Integer[] output = new Integer[count];
        for(int y = 0; y < count; y++)
        {
            output[y] = temp[y];
        }

        return output;
    }

Сайт принял это, но мне это не очень понравилось. Как мне улучшить это?

Ответы [ 3 ]

2 голосов
/ 03 июля 2019

Что ж, вы можете улучшить пространственную сложность программы, используя список массивов, и когда ваше условие удовлетворяет, вы можете добавить значения в список, чтобы улучшить пространственную сложность первого массива, тогда, если вы воспользуетесь приведенным выше кодом, вы можете преобразоватьсписок массивов в массив по

Integer[] output = {name of arraylist}.toArray(); 

тогда вы можете вернуть этот массив из функции

1 голос
/ 03 июля 2019

Пока вы можете использовать Java 8 или выше, это идеальное место для использования Stream, который позволяет вам делать то, что вы хотите в одной строке:

import java.util.Arrays;

public class X {

    public static Integer[] multipleSelect(Integer[] nums, int target) {
        return Arrays.stream(nums).filter( x -> x % target == 0).toArray(Integer[]::new);
    }

    public static void main(String[] args) {
        Integer[] input = new Integer[] {7, 12, 9, 5, 15};
        Integer[] output = multipleSelect(input, 3);
        for (Integer i : output)
            System.out.println(i);
    }
}

Результат:

12
9
15
0 голосов
/ 03 июля 2019

Вы можете удалить второй массив и цикл, используя два увеличивающихся значения: $ i для текущего индекса входного массива и $ j для индекса в выходных данных. Как отмечено выше / ниже, вы бы выиграли от использования типа данных arraylist или нефиксированной длины для вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...