【发布时间】:2018-07-28 20:40:25
【问题描述】:
我正在尝试在 LeetCode 上进行 Java 模拟面试。我有以下问题:
给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。
您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
我试图实现递归解决方案。但是,我在尝试运行我的代码时收到错误消息。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] sumnums = nums.clone();
//int[2] sol = {0,1};
int[] sol = new int[]{0,1};
sol = new int[2];
int j=sumnums.length;
int t=target;
for(int i=0;i<sumnums.length;i++){
if ((sumnums[i]+sumnums[j])==t){
sol[0]=i;
sol[1]=j;
//return sol;
}
}
j=j-1;
twoSum(sumnums,t);
return sol;
}
}
错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Solution.twoSum(Solution.java:12)
at __DriverSolution__.__helper__(__Driver__.java:8)
at __Driver__.main(__Driver__.java:54)
在我看来,错误可能与以下代码行有关:
if ((sumnums[i]+sumnums[j])==t){
因此,我想知道这是否是与语法相关的错误。我正在尝试检查两个数字加起来是否是一个不同的数字。
由于这是对递归解决方案的幼稚尝试,因此我很乐意接受任何其他批评。但我最关心的是让我在这个问题上的尝试能够与所有测试用例一起工作和运行。
谢谢。
【问题讨论】:
-
sumnums.length将是 2,而现有的唯一索引是 0 和 1。您可能打算这样做int j = sumnums.length - 1 -
谢谢。我的疏忽。至少这解决了我遇到的问题。