可以帮我出一道简单的算法题吗
时间: 2023-10-06 18:10:09 浏览: 45
当然可以,以下是一道简单的算法题:
题目描述:
给定一个整数数组nums,找到两个数之和等于给定目标值target的下标。假设每个输入只有一个答案,并且不可以使用同一个元素两次。
示例:
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回[0, 1]
提示:
- 你可以假设每个输入都只有一个答案。
- 数组中的元素是唯一的。
- 你可以按任意顺序返回答案。
题目解析:
这道题可以使用哈希表来解决。我们可以遍历整个数组,对于每个元素,查找目标值与当前元素的差值是否在哈希表中。如果在哈希表中,说明找到了两个数之和等于目标值的下标;否则,将当前元素的值和下标存入哈希表。
以下是Java的代码实现:
```java
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");
}
```
在这个实现中,我们使用了一个哈希表来存储数组元素的值和下标。在遍历数组时,对于每个元素,我们计算目标值与当前元素的差值,并在哈希表中查找该差值的下标是否存在。如果存在,说明找到了两个数之和等于目标值的下标;否则,将当前元素的值和下标存入哈希表。如果最终没有找到解决方案,则抛出异常。