题目描述
两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解体思路
简单实现:
暴力求解,即多次遍历整数数组。
for i in nums:
for j in nums:
if(target - i ==j):
.......
但注意题目条件,nums数组中同一个元素不能使用两遍,显然此方法不符合题意。
改进方法
因此不妨设置一个目标集合,将结果集存起来,即初始化一个list,每当访问nums数组元素时,就将target-nums[i]的值存入list;
list集合与nums[i]比对,若相等,即可输出结果
for i in nums:
list.add(target-i)
for j in list:
if(j==i):
....
....
代码实现
class Solution {
public int[] twoSum(int[] nums, int target) {
List<Integer> result = new ArrayList<>();
int[] final_result = new int[2];
for(int i =0;i<nums.length;i++)
{
result.add(target-nums[i]);
for(int j = 0;j<result.size();j++)
{
if(result.get(j)==nums[i]&&i!=j)
{
final_result[0] = j;
final_result[1] = i;
}
}
}
return final_result;
}
}