我正在从Leetcode做“两个和”问题,我正在尝试提出一种算法,给定一个整数数组和一个目标整数,检查数组中是否有任何整数对添加达到目标。我意识到这不是最有效的算法,但我尝试做的是使用for循环来检查所选元素是否未被添加到自身,然后遍历所有对。这是我的代码:
package leetcodeproblem;
public class Leet {
public int[] twoSum(int[] nums, int target) {
for(int i=nums[0];i<nums.length;i++){
for(int x:nums){
if (x!=i & (i+x)==target){
int i2 = java.util.Arrays.asList(nums).indexOf(i);
int x2 = java.util.Arrays.asList(nums).indexOf(x);
int[] answer = {i2,x2};
return answer;
}else{
return nums;
}
}
}
}
我不断收到此错误:“此方法必须返回int []”
类型的结果我认为我有两种可能性都包含在if / else语句中,并且该函数在两种情况下都返回一个int []。有什么想法吗?
答案 0 :(得分:3)
如果nums[0]
是2
和nums.length = 1
会怎样?
循环从不运行,因为i < nums.length
将为false,因此最后没有return语句。只需在最后一个花括号之前添加return nums;
,它就会编译
答案 1 :(得分:1)
有可能for循环甚至不会运行一次然后都不会执行return语句,所以在for循环之外写一个return语句。
答案 2 :(得分:1)
您的for循环有可能无法运行,因此方法中不会返回任何内容。在for循环后添加return null;
。
答案 3 :(得分:1)
Java编译器认为循环可能不会执行(例如,nums [0]大于长度)。在这种情况下,您的方法不会调用返回。所以你必须在最后做出回报。
public int[] twoSum(int[] nums, int target) {
for(int i=nums[0];i<nums.length;i++){
for(int x:nums){
if (x!=i & (i+x)==target){
int i2 = java.util.Arrays.asList(nums).indexOf(i);
int x2 = java.util.Arrays.asList(nums).indexOf(x);
int[] answer = {i2,x2};
return answer;
}else{
return nums;
}
}
}
return nums; //or whatever you want (maybe null, or an empty array)
}