Я предпринял попытку первого LeetCode. Проблема: Учитывая массив целых чисел, вернуть индексы двух чисел так, чтобы они складывались до заданной c цели.
Вы можете предположить, что каждый вход будет иметь точно одно решение, и вы не можете использовать один и тот же элемент дважды.
Пример:
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
I Я не очень привык использовать многомерные массивы и видел в этом прекрасную возможность использовать их и учиться. Я предоставил свой код, может кто-нибудь помочь мне понять, почему это не удается?
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);
}
}