问题:
给出以num num升序排列的整数数组,找到 给定目标值的开始和结束位置。
示例:输入: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 []?
答案 0 :(得分:2)
我将从一个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 };
}
答案 1 :(得分:1)
您尝试返回Integer[]
的数组,但是您的方法返回int[]
,因此出现编译错误。
要解决此问题,您应该将searchRange(...)
的返回类型更改为Integer[]
。
答案 2 :(得分:1)
返回的searchRange
类型是int
数组,但是您返回的是Integer
数组。
使用Java-8流将
ArrayList<Integer>
转换为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();
答案 3 :(得分:1)
一种方法是流式传输列表,将Integer
s转换为int
s并收集到数组:
return index.stream().mapToInt(Integer::intValue).toArray();
答案 4 :(得分:0)
如何将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);
}
}
}
答案 5 :(得分:0)
嗨,您可以将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;
}
答案 6 :(得分:0)
如果您使用的是旧版本,可以这样做
包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);
}
}
}
答案 7 :(得分:-1)
如果您使用的是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);
}
}
}