У меня есть массив с целыми числами, мне просто нужно подсчитать пары и вернуть это подсчитанное значение.

static int StockMerchant(int n , int arr[]){
    int[] temp = new int[n];
    int count = 0;
    for(int i =0  ; i<n ; i++){
            for(int j= i+1 ; j<n ; j++){

                if(arr[i]==arr[j]){

                   arr[j] = '0';
                   arr[i] ='0';
                   count++;
                }
            }


    }
        return count;
}

Когда я пытаюсь: 1 1 2 2 2: дает результат 2

Но когда я меняю вход на 1 2 1 2 2: дает выход 3

Я хочу, чтобы и во втором случае на выходе было 2. пожалуйста помоги.

1
Ajay Kumar Sinha 10 Ноя 2019 в 07:52
1
Что именно вы считаете «соответствующей парой»? На мой взгляд, ваш первый результат должен быть 4.
 – 
DevilsHnd
10 Ноя 2019 в 08:30
Да, уточните вопрос, пожалуйста.
 – 
Sourish Mukherjee
10 Ноя 2019 в 08:32
Извините за мой английский. все, что я хочу сказать, что если массив имеет 2 одинаковых элемента, то это одна пара ... и я должен подсчитать эти пары.
 – 
Ajay Kumar Sinha
10 Ноя 2019 в 08:34
Обнуление уже найденных пар - неправильный способ убедиться, что вы их больше не пересчитаете. В первом случае так получается. Но во втором случае вы находите единицы в позициях 0 и 2 и устанавливаете их в ноль (счетчик 1); затем вы находите 2 в позициях 1 и 3 и устанавливаете их на ноль (счет 2). Затем вы найдете нули в позициях 2 и 3 (счет 3).
 – 
Kevin Anderson
10 Ноя 2019 в 08:40

2 ответа

* Извините за мои плохие навыки рисования.

Надеюсь, я смог указать на вашу ошибку :)

Mistake

Вот мое решение: сначала он сортирует массив и проверяет, соответствует ли он значению приращения i позиции до j + 1 и j как i + 1

static int StockMerchant(int n, int arr[]) {
        Arrays.sort(arr);
        int count = 0;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                if (arr[i] == arr[j]) {
                    i = j + 1;
                    j = i;
                    count++;
                }
            }

        }
        return count;
    }
1
Sourish Mukherjee 10 Ноя 2019 в 09:19
Отметьте ответ правильно. Если решение верное. Надеюсь, это поможет :)
 – 
Sourish Mukherjee
10 Ноя 2019 в 13:05

Здесь я предполагаю, что все ваши тестовые входные данные содержат положительные целые числа, эта логика работает только для положительных значений.

static int StockMerchant(int n , int arr[]){
            int starter = n>0 && arr[0] != 0 ? 0 : -1;
            int temp = starter;
            int count = 0;
            Arrays.sort(arr);
            for(int i =0  ; i<n ; i++){
                if(temp == arr[i]){
                    temp = starter;
                    count++;
                }else{
                    temp = arr[i];
                }
            }
            return count;
        }
0
Tanish 10 Ноя 2019 в 08:59
Спасибо за помощь .. но я не понимаю, в чем ошибся ..
 – 
Ajay Kumar Sinha
10 Ноя 2019 в 09:06