【问题标题】:Integer to int[] conversion in JavaJava中的整数到int []的转换
【发布时间】:2019-05-28 08:08:46
【问题描述】:

问题:

给定一个按升序排序的整数数组,找到 给定目标值的开始和结束位置。

示例:输入:nums = [5,7,7,8,8,10],目标 = 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[]?

【问题讨论】:

  • 我在这里遗漏了什么吗?为什么还要使用 ArrayList?由于数组是排序的,所以只需要两个值来获取一个range,第一个找到目标值first的索引值和找到最后一个目标值。 必须之间的任何内容都是相同的目标值。我也会使用一个 2 元素 int[] 数组,每个元素都初始化为 -1。然后在填充后返回该数组。尽管示例数组很小,但一旦迭代的数组元素值大于目标值,跳出循环可能不会有什么坏处。
  • 我想你应该做一些事情来使用输入已排序的事实......
  • 对于这个问题,你应该尝试用二分搜索找出O(lgn) 的解决方案。

标签: java class for-loop integer


【解决方案1】:

一种方法是流式传输列表,将Integers 转换为ints 并收集到一个数组:

return index.stream().mapToInt(Integer::intValue).toArray();

【讨论】:

  • 我想一定是stream,而不是steam。 steam报错。
  • @Encipher 是的,这是我这边的一个错字,感谢您的注意!已编辑和修复。
【解决方案2】:

如何将 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);
        }
    }

}

【讨论】:

    【解决方案3】:

    searchRange 的返回类型是 int 数组,但您返回的是 Integer 数组。

    使用 java-8 流将 ArrayList&lt;Integer&gt; 转换为 int[] 并返回

     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();
    

    【讨论】:

      【解决方案4】:

      如果你使用的是java 8或更高版本,你可以使用这个代码

      包 com.stackoverflow;

      导入 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);
          }
      }
      

      }

      【讨论】:

        【解决方案5】:

        如果你使用的是旧版本,你可以这样做

        包 com.stackoverflow;

        导入 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);
            }
        }
        

        }

        【讨论】:

        • 你为什么要发布你的答案两次
        • @NicholasK 一个用于 java 7,第二个用于 java 8 及更高版本
        • 您可以编辑原始答案并将两者都添加进去,而不是提供 2 个答案。
        【解决方案6】:

        您好,您可以将 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;
        }
        

        【讨论】:

          【解决方案7】:

          我将从 firstIndexlastIndex 初始化为 -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 };
          }
          

          【讨论】:

            【解决方案8】:

            您试图返回Integer[] 的数组,但您的方法返回int[],因此出现编译错误。

            要修复它,您应该将searchRange(...) 的返回类型更改为Integer[]

            【讨论】:

              猜你喜欢
              • 2015-10-09
              • 2014-02-26
              • 2015-10-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-05-07
              • 2021-09-23
              • 1970-01-01
              相关资源
              最近更新 更多