Arrays LeetCode二和问题-多维数组帮助Java

Arrays LeetCode二和问题-多维数组帮助Java,arrays,multidimensional-array,Arrays,Multidimensional Array,我尝试了第一个LeetCode问题:给定一个整数数组,返回两个数字的索引,以便它们相加到一个特定的目标 您可以假设每个输入都有一个解决方案,并且不能两次使用同一个元素 例如: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. 但是,我不断遇到类似的运行时错误: Finished in N/A java.lang.ArrayIndexOutOfBoun

我尝试了第一个LeetCode问题:给定一个整数数组,返回两个数字的索引,以便它们相加到一个特定的目标

您可以假设每个输入都有一个解决方案,并且不能两次使用同一个元素

例如:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
但是,我不断遇到类似的运行时错误:

 Finished in N/A
 java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
 at line 67, Solution.sortArr
 at line 11, Solution.twoSum
我不太习惯使用多维数组,我认为这是使用多维数组和学习多维数组的绝佳机会。我已经提供了我的代码,有人能帮我找出为什么失败吗

class Solution {
public int[] twoSum(int[] nums, int target) 
{
    int[] targetIndex = {0,0};

    int arrEndIndex = nums.length - 1;

    int[][] copyArr = new int[nums.length][];
    copyArr = copyArrWithIndex(nums);

    int[][] sortedArr = new int[nums.length][];
    sortedArr = sortArr(copyArr);

    int firstIndex = 0;
    int secondIndex = arrEndIndex;

    int firstElement = 0;
    int secondElement = 0;

    while(firstIndex != secondIndex)
    {

        firstElement = sortedArr[firstIndex][0];
        secondElement = sortedArr[secondIndex][0];

        if(firstElement + secondElement == target)
        {
            targetIndex[0] = sortedArr[firstIndex][1];
            targetIndex[1] = sortedArr[secondIndex][1];
            break;
        }
        else if(firstElement + secondElement < target)
        {
            firstIndex++;
        }
        else
        {
            secondIndex--;
        }     
    }

    return targetIndex;
}

/*
This function sorts a 2D array of ints from least to greatest based 
on the values in the first column and returns a 2D array of ints
*/

private int[][] sortArr(int[][] arr)
{

    int temp = 0;

    int firstIndex = 0;
    int secondIndex = 1; 
    int firstElement = 0;
    int secondElement = 0;

    int i = 0;
    while(i < arr[0].length)
    {

        firstElement = arr[firstIndex][0];
        secondElement = arr[secondIndex][0];

        if(firstElement < secondElement)
        {
            firstIndex++;
            secondIndex++; 
        }

        else /*if(firstElement > secondElement)*/
        {
            temp = firstElement;
            arr[firstIndex][0] = secondElement;
            arr[secondIndex][0] = temp;

            temp = firstIndex;
            arr[firstIndex][1] = secondIndex;
            arr[secondIndex][1] = temp;

            if(firstIndex != 0)
            {
                firstIndex--;
                secondIndex--;
            }
            else
            {
                firstIndex++;
                secondIndex++;
            }
         }
    }

    return(arr);
  }

 /*
This function accepts a 1D array and returns a 2D array of ints with the index int in the     first 
column and the original index of the presorted number adjacently in the second
column
*/

private int [][] copyArrWithIndex(int[] arr)
{
    int[][] copyArr = new int [arr.length][2]; 

    for(int i = 0; i < arr.length; i++)
    {
        copyArr[i][0] = arr[i];
        copyArr[i][1] = i;
    }

    return(copyArr);
   }
   }
类解决方案{
公共int[]twoSum(int[]nums,int目标)
{
int[]targetIndex={0,0};
int arrEndIndex=nums.length-1;
int[][]copyArr=新int[nums.length][];
copyArr=copyArrWithIndex(nums);
int[]sortedar=新int[nums.length][];
分拣机=分拣机(copyArr);
int firstIndex=0;
int secondIndex=arrEndIndex;
int firstElement=0;
int第二元素=0;
while(firstIndex!=secondIndex)
{
firstElement=分拣机[firstIndex][0];
secondElement=分拣机[secondIndex][0];
如果(第一个元素+第二个元素==目标)
{
targetIndex[0]=分拣机[firstIndex][1];
targetIndex[1]=分拣机[secondIndex][1];
打破
}
否则如果(第一个元素+第二个元素<目标)
{
firstIndex++;
}
其他的
{
第二指数--;
}     
}
返回targetIndex;
}
/*
此函数用于根据最小值到最大值对整数的二维数组进行排序
返回第一列中的值,并返回整数的二维数组
*/
专用int[]]sortArr(int[]]arr)
{
内部温度=0;
int firstIndex=0;
int secondIndex=1;
int firstElement=0;
int第二元素=0;
int i=0;
而(i第二元素)*/
{
温度=第一元素;
arr[firstIndex][0]=第二个元素;
arr[secondIndex][0]=温度;
温度=第一指数;
arr[firstIndex][1]=第二个索引;
arr[secondIndex][1]=温度;
if(firstIndex!=0)
{
第一索引--;
第二指数--;
}
其他的
{
firstIndex++;
secondIndex++;
}
}
}
返回(arr);
}
/*
此函数接受一个一维数组,并返回一个索引为int的二维int数组
列和第二列中相邻的预排序数字的原始索引
柱
*/
私有int[]copyArrWithIndex(int[]arr)
{
int[]copyArr=新int[arr.length][2];
对于(int i=0;i
sortArr
中将
i
设置为0后,您永远不会对其执行任何操作。您可能打算使用
firstIndex
secondIndex
@Chronicle谢谢!我的意思是使用
firstIndex
,这是主要问题;在纠正了这个错误之后,我尝试了一些测试用例,现在它可以工作了,除了测试输入中只有两个元素的测试用例。在那种情况下,我会越界;我正试图找出原因,但这肯定是我这边的一个逻辑错误。在
sortArr
中将
I
设置为0后,你永远不会对它做任何事情。您可能打算使用
firstIndex
secondIndex
@Chronicle谢谢!我的意思是使用
firstIndex
,这是主要问题;在纠正了这个错误之后,我尝试了一些测试用例,现在它可以工作了,除了测试输入中只有两个元素的测试用例。在那种情况下,我会越界;我正试图找出原因,但这绝对是我的逻辑错误。