Как заполнить массив целых чисел подчеркиванием в java

#java #arrays

Вопрос:

Я выполняю задачу по leetcode.com Удаление дубликатов из отсортированного массива

Учитывая целочисленный массив (например, [1,2,3,3,4,4,5]), и вывод должен быть похож на [1,2,3,4,5,,], вместо дубликатов я должен заполнить массив _

Мой вопрос в том, как заполнить массив подчеркиванием’_’? Ниже приведен мой код.

  public static int removeDuplicates(int[] nums){

        int l = nums.length;
        if(l==0){return 0;}
        int k =l;

        for(int i = 0;i<l;i  ){
            if(nums[i]!='_'){
                for(int j =i 1;j<l;j  ){
                    if(nums[i]==nums[j])
                    { nums[j]='_';
                    k=k-1;
                    }
                }
            }

        }

        Arrays.sort(nums);
        return k;
    }
 

ввод ->>> {-100,1,1,1,2,2,3,2,4,4}

вывод ->>> 5, цифры[-100, 1, 2, 3, 4, 95, 95, 95, 95, 95] >> _

Комментарии:

1. 95 — это значение _ . У вас есть массив целых чисел, а не символов. Очевидно, int что это не так char

2. Страница задачи находится за входом в систему, но вы можете либо а) вернуть массив строк, а затем поместить в него фактические символы подчеркивания, но тогда возвращаемое значение не будет равно an int , либо б) на основе подписи метода, возможно, на самом деле не ожидается, что вы где-либо разместите подчеркивания. В этом случае я бы предложил использовать Integer.MAX_VALUE их в качестве заполнителя, так как они всегда сортируются в конце int[] . И если c) _ действительно ожидается, но подпись правильная, после шага сортировки вы можете заполнить ими конец массива ( for(int i=k 1;i<l;i )nums[i]='_'; )

Ответ №1:

95-это ascii-код подчеркивания.

Тем не менее, вы не можете ожидать, что символ в целочисленном массиве. Это приводит к двум возможным решениям:

  1. Может быть, 95 достаточно, потому что это подчеркивание. Но я так не думаю.
  2. Вы переключаетесь на массив строк, в котором символ подчеркивания может быть представлен. Не знаю, разрешено ли это в вашем примере.

Тем не менее, если вы наткнетесь на цифру 95, у вас возникнет проблема, потому что трудно понять, является ли это подчеркиванием или цифрой.

Ответ №2:

В java вы не можете добавлять '_' в массив int. Он будет интерпретирован как символ '_' и преобразован в int. Фактически преобразование '_' в int дает вам 95, то есть код ascii '_' .

Будет лучше использовать специальное значение вместо '_' специального числа для размещения в конце вашего массива, попробуйте использовать Integer.MIN_VALUE

Ответ №3:

Ваша проблема в том, что вы пытаетесь присвоить значение '_' (которое равно 95 базовым 10 в ascii) an int . Вы могли бы превратить свой массив в строковый массив, выполнить синтаксический анализ и проверки, но это будет ОЧЕНЬ МЕДЛЕННО. Вы могли бы попробовать это вместо этого:

 import java.util.*;

class Solution {
    
    public static void main(String[] args) {
        
        int[] ints = ...; //Read the numbers however you like...
        
        HashSet<Integer> hints = new HashSet<>(); //In a hashset, you may only add any number once
        
        
        System.out.print('{'); //Print '{'
        hints.add(ints[0]); //Add the first number to the hashset...
        System.out.print(ints[0]);
        for(int ind=1;ind<ints.length;ind  ) {
            System.out.print(',');
            System.out.println(hints.add(ints[ind]) ? ints[ind] : '_'); //Prints the number, if it is the first time you encountered it, '_' otherwise.
        }
        System.out.println('}');
        
    }
    
}
 

Ответ №4:

Спасибо всем вам за ваши подсказки! Задание включает в себя следующие ограничения:

  1. 0длина
  2. -100 <= nums [i]
  3. числа сортируются в неубывающем порядке.

Поэтому я поставил 101 вместо _

/**

  • Учитывая целочисленный массив чисел, отсортированных в неубывающем порядке, удалите дубликаты на месте, чтобы каждый уникальный элемент появлялся только один раз.
  • Относительный порядок элементов должен быть сохранен прежним */

импорт java.util.Массивы;

общедоступный класс RemoveDuplicatesFromArray3 { общедоступный статический пустой основной(строка[] args) {

         int[] nums = {-100, 1, 1, 1, 2, 2, 3, 2, 4, 4,90};

        int k = removeDuplicates(nums);
        int[] expectedNums = new int[k];

        for(int j=0;j<k;j  ){
            expectedNums[j]=nums[j];
        }

        assert k == expectedNums.length;

        for (int i = 0; i < k; i  ) {

        assert nums[i] == expectedNums[i];
        }


        System.out.println(k   ","   " nums"   Arrays.toString(expectedNums));
    }

    public static int removeDuplicates ( int[] nums){

        int l = nums.length;
        if (l == 0) {
            return 0;
        }
        int k = l;

        for (int i = 0; i < l; i  ) {
            if (nums[i] != 101) {
                for (int j = i   1; j < l; j  ) {
                    if (nums[i] == nums[j]) {
                        nums[j] = 101;
                        k = k - 1;
                    }
                }
            }

        }

        Arrays.sort(nums);
        return k;
    }
}
 

//=>>> вывод 6, цифры[-100, 1, 2, 3, 4, 90]

// 🙂 спасибо!