有一个数组,和一个目标值,请在数组中找出和为目标值的两个数,并这两个数的下标。
FE: nums = [2 ,7 ,11,15],target = 9
num[ 0 ] + num[ 1 ] = 2 + 7 = 9
返回的下标是[ 0,1 ]
Moth ①:遍历每个元素,查找一个值等于 target - x
C++代码:
int *TwoSum(int *nums, int target,int length)
{
for (int i = 0; i < length; i++)
{
for (int j = i + 1; j < length; j++)
{
if (nums[i] == target - nums[j])
{
printf("%d = %d - %d\n", nums[i], target, nums[j]);
printf("%d %d \n", i, j);
return new int[2] {i, j};
}
else
{
printf("%d != %d - %d\n", nums[i], target, nums[j]);
}
}
}
}
Java
Moth②:二遍历哈希表,查找元素(target-nums[i])是否存在表中。使用STL map
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {//第一次迭代添加元素
map.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {//第二次迭代查找元素
int complement = target - nums[i];
if (map.containsKey(complement) && map.get(complement) != i) {
return new int[] { i, map.get(complement) };
}
}
throw new IllegalArgumentException("No two sum solution");
}
Java
Moth③:一遍哈希表
public int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {//迭代时插入元素并查找比较
int complement = target - nums[i];
if (map.containsKey(complement)) {
return new int[] { map.get(complement), i };
}
map.put(nums[i], i);
}
throw new IllegalArgumentException("No two sum solution");
}
注:
欢迎各位笔友在评论栏提出宝贵的意见!
Together with progress!!!
因篇幅问题不能全部显示,请点此查看更多更全内容