给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
算法的本质特征是通用,因此,若非不得已,不要分类讨论。我之前尝试过一种分类的做法,即先将数组进行排序,然后判断target与其中数字的大小关系。然而这样做的隐患是,你还需要判断数组中是否存在负数,如果存在,则操作流程又不同了。此外,分散会更容易出错,因为思维更容易存在漏洞。因此,算法应该追求通用的流程,而不是分散。
话说回来,此题最通用的方法就是,也不用排序,直接嵌套遍历,第一重遍历从第一个数开始遍历到最后一个数,第二重遍历从i开始往后,寻找target-nums[i],找到就返回,找不到就继续循环。
代码如下:
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
int[] result = new int[2];
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if(nums[i]+nums[j]==target){
result[0] = i;
result[1] = j;
return result;
}
}
}
return result;
}
网友评论