Преобразование целых чисел в int [] в Java - PullRequest
0 голосов
/ 01 января 2019

Проблема:

По заданному массиву целых чисел, отсортированных в порядке возрастания, найти начальную и конечную позиции заданного целевого значения.

Пример: Input: nums = [5,7,7,8,8,10], target = 8 Вывод: [3,4]

Мой код:

class Solution34{
public int[] searchRange(int[] nums, int target) {
    ArrayList<Integer> index=new ArrayList<>();
    for(int i=0;i<nums.length;i++){
        if(nums[i]==target){
            index.add(i);
        }
    }
    Integer[] index_arr = new Integer[index.size()];
    index_arr = index.toArray(index_arr);

    System.out.println(index);
  return index_arr;
}
}

System.out.println (index) - Мой код дал мне желаемый результат. (Если я опускаю инструкцию return).

В последней строке я получил ошибку return index_arr.Ошибка: Несовместимые типы: Обязательный int [] Найдено Java.lang.Integer.

Затем я искал, как преобразовать Integer в int, и нашел .int.Value, использующийся для преобразования Integer в int.Когда я использую его в своем коде, я получаю еще одну ошибку до неузнаваемой команды.Как я могу конвертировать Integer в int []?

Ответы [ 8 ]

0 голосов
/ 01 января 2019

если вы используете Java 8 или выше, вы можете использовать этот код

пакет com.stackoverflow;

import java.util.ArrayList;

открытый класс Solution34{

public int[] searchRange(int[] nums, int target) {
    ArrayList<Integer> index = new ArrayList<>();
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] == target) {
            index.add(i);
        }
    }

    return index.stream().mapToInt(x -> x).toArray();
}

public static void main(String[] args) {
    int[] nums = { 5, 7, 7, 8, 8, 10 };
    int target = 8;

    Solution34 s34 = new Solution34();
    int[] result = s34.searchRange(nums, target);
    for (int i : result) {
        System.out.println(i);
    }
}

}

0 голосов
/ 01 января 2019

Привет, вы можете изменить свой массив Integer на String, а затем на charArrays и, наконец, на int [], чтобы ваш метод хотел получить его как возвращаемое значение.Как это:

 public int[] searchRange(int[] nums, int target) {
    ArrayList<Integer> index = new ArrayList<Integer>();
    for (int i = -0; i < nums.length; i++) {
        if (nums[i] == target) {
            index.add(i);
        }
    }
    Integer[] index_arr = new Integer[index.size()];
    index_arr = index.toArray(index_arr);
    String i = index_arr.toString();
    char[] characters = i.toCharArray();
    int[] list = new int[characters.length];

    for (int z = 0; z < characters.length; z++) {
        list[z] = characters[z];
    }

    System.out.println(index);
    return list;
}
0 голосов
/ 01 января 2019

Если вы используете старую версию, вы можете сделать так:

пакет com.stackoverflow;

import java.util.ArrayList;

открытый класс Solution34 {

public int[] searchRange(int[] nums, int target) {
    ArrayList<Integer> index = new ArrayList<>();
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] == target) {
            index.add(i);
        }
    }
    Integer[] index_arr = new Integer[index.size()];
    index_arr = index.toArray(index_arr);

    System.out.println(index);

    int[] int_index_arr = new int[index_arr.length];

    for (int i = 0; i < index_arr.length; i++) {
        int_index_arr[i] = index_arr[i];
    }

    return int_index_arr;
}

public static void main(String[] args) {
    int[] nums = { 5, 7, 7, 8, 8, 10 };
    int target = 8;

    Solution34 s34 = new Solution34();
    int[] result = s34.searchRange(nums, target);
    for (int i : result) {
        System.out.println(i);
    }
}

}

0 голосов
/ 01 января 2019

Как я могу преобразовать Integer в int []?

Вы не можете этого сделать.Если вы хотите конвертировать Integer[] в int[], попробуйте сделать это следующим образом в java8:

int[] intArray = Arrays.stream(index_arr).mapToInt(Integer::intValue).toArray();

Обновление:

только для leetcode 34,попробуйте этот код с временной сложностью O(lgn), в которой используется двоичный поиск.

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] res=new int[]{Integer.MAX_VALUE,Integer.MIN_VALUE};
        binarySearch(nums,0,nums.length-1,target,res);
        if(res[0]==Integer.MAX_VALUE&&res[1]==Integer.MIN_VALUE)
            return new int[]{-1,-1};
        else
            return res;
    }

    private void binarySearch(int[] nums,int lo,int hi,int t,int[] res){
        if(hi<lo)
            return;
        int mid=lo+(hi-lo)/2;
        if(nums[mid]==t){
            if(mid<res[0])
                res[0]=mid;
            if(res[1]<mid)
                res[1]=mid;
            binarySearch(nums,lo,mid-1,t,res);
            binarySearch(nums,mid+1,hi,t,res);
        }else if(nums[mid]<t){
            binarySearch(nums,mid+1,hi,t,res);
        }else if(t<nums[mid]){
            binarySearch(nums,lo,mid-1,t,res);
        }
    }

}
0 голосов
/ 01 января 2019

Я бы начал с firstIndex и lastIndex, инициализированных -1.Затем выполните итерацию массива nums для поиска target.Если найдено, firstIndex - -1, инициализируйте и его, и lastIndex - в противном случае обновите только lastIndex.Вернуть новый массив в конце.Мол,

public static int[] searchRange(int[] nums, int target) {
    int firstIndex = -1, lastIndex = -1;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] == target) {
            if (firstIndex == -1) {
                lastIndex = firstIndex = i;
            } else {
                lastIndex = i;
            }
        }
    }
    if (firstIndex == -1) {
        return new int[] { -1 };
    }
    return new int[] { firstIndex, lastIndex };
}
0 голосов
/ 01 января 2019

Одним из подходов будет потоковая передача списка, преобразование Integer s в int s и сбор в массив:

return index.stream().mapToInt(Integer::intValue).toArray();
0 голосов
/ 01 января 2019

тип возвращаемого значения searchRange - это массив int, но вы возвращаете массив Integer.

Преобразование ArrayList<Integer> в int[] с использованием потоков java-8 и возврат

 public int[] searchRange(int[] nums, int target) {
        ArrayList<Integer> index=new ArrayList<>();
        for(int i=0;i<nums.length;i++){
            if(nums[i]==target){
                index.add(i);
            }
        }
        System.out.println(index);
      return index.stream().mapToInt(Integer::intValue).toArray();
0 голосов
/ 01 января 2019

Вы пытаетесь вернуть массив Integer[], но ваш метод возвращает int[], следовательно, ошибка компиляции.

Чтобы исправить это, вы должны изменить тип возвращаемого значения searchRange(...) на Integer[].

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