1.描述问题:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
代码段:
class Solution {
public int[] twoSum(int[] nums, int target) {
//定义一个数组保存结果
int[] ans = new int[2];
int length = nums.length;
for(int i = 0;i < length;i++){
for(int j = i+1;j < length;j++){
if(nums[i] + nums[j] == target){
ans[0] = i;
ans[1] = j;
return ans;
}
}
}
// return null;
return new int[0];
}
2.return new int[0]和return null
在代码写到for循环结束之后,对于应该返回一个什么样的值产生了分歧。在代码开始定义twoSum方法时,就已经定义返回值应该是int类型的数组,所以更合理的解释是返回return new int[0](本身的含义是长度为0的空数组),定义在此处没有实际的意义,只是为了编译器编译过程中不出错。
同时,对返回值为return null,也进行了编译,编译结果也没有报错,但是个人觉得还是应该使用return new int[0];假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对返回数组进一步处理,而如果返回空数组,则无须null引用检查。鉴于此,返回数组的方法在没有结果时通常返回空数组,而不是null,这样做对于函数调用者的处理比较方便。