Итерировать массив до заданной длины вместе с поиском покрытых им элементов count, игнорируя один и тот же элемент, если он появляется более одного раза - PullRequest
0 голосов
/ 06 мая 2020

У меня есть метод под названием m1(int input1,int input2,int[] input3), который имеет три параметра. Какое бы значение ни было определено в input1, тот же номер элемента должен содержаться в input3[], т.е. длина input3 будет такой же, как значение input1. И какое бы значение ни было определено в input2, итерация будет выполняться в int input3 до этой длины. И он должен дать счет, сколько элементов он повторил, но если одно и то же число повторяется, значение счетчика не увеличивается. В первый раз счет будет увеличиваться, но после того же, без повторов, счет остается постоянным, и когда он получит разные элементы, счет будет увеличиваться, но итерация будет выполняться до длины, указанной в input2.

ПРИМЕР:

int input1 =5;
int input2= 3;
int[] input3 ={1,2,1,3,4};

Ожидается: здесь input1 равно 5, поэтому длина input3 также равна 5. И здесь значение input2 равно 3, поэтому при итерации input3 он должен повторяться до 2-го индекса, т.е. до длины 3. Итак, здесь итерация будет выполняться до {1,2,1}, и счет должен прийти до 2, поскольку 1 повторяется 2 раза.

Ответы [ 3 ]

0 голосов
/ 06 мая 2020

Нам не нужен первый аргумент, мы можем использовать input3.length для получения этого атрибута. Я дал два типа решения этой проблемы:

один - использовать Set, а другой - использовать поток. Set - это структура данных, которая сохраняет уникальное значение элементов, даже если вы добавляете элемент дважды, он сохранит только один из них, чтобы вы могли получить из него количество отдельных элементов.

Второй - использовать Java потоковый API, в котором вы можете просто использовать Limit и различные операции для получения уникального счетчика.

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

class Solution {
    public static int findUniqueCountUsingSet(int length, int range, int[] input) {
        Set<Integer> integers = new HashSet<>();
        for (int i = 0; i < range; i++) {
            integers.add(input[i]);
        }
        return integers.size();
    }

    public static int findUniqueCountUsingStream(int length, int range, int[] input) {
        return (int) Arrays.stream(input).limit(range).distinct().count();
    }

    public static void main(String[] args) {
        System.out.println(findUniqueCountUsingSet(5, 3, new int[]{1, 2, 1, 3, 4}));
        System.out.println(findUniqueCountUsingStream(5, 3, new int[]{1, 2, 1, 3, 4}));
    }
}
0 голосов
/ 06 мая 2020

Еще один способ - использовать stream

Stream.of(input3).limit(input2).distinct().count()

Это даст количество отдельных элементов

0 голосов
/ 06 мая 2020

Если вы используете язык, имеющий уникальный контейнер, такой как наборы C ++, это может быть одним из способов sh этого. В противном случае вы можете поместить каждое значение во временный массив и проверить с помощью оператора if (с небольшим алгоритмом поиска), не было ли оно еще добавлено. Затем просто верните размер этого нового массива.

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