Java给定一个整数数组 'nums' 和一个整数目标值 'target',请在数组中找到其和为目标值 'target' 的两个整数,并返回它们的数组索引。假设每个输入只对应一个答案。 示例: 输入: 2,7,11,15 (','是分割数字) 9 输出: 0 1
时间: 2024-12-06 08:23:28 浏览: 8
在Java中,这个问题通常通过哈希表或者双指针的方法解决。以下是使用双指针算法的一个简单示例:
```java
public int[] twoSum(int[] nums, int target) {
if (nums == null || nums.length < 2) {
return new int[0];
}
// 创建一个HashMap存储元素及其索引
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);
}
// 如果找不到符合条件的组合,返回空数组
return new int[0];
}
```
这个函数遍历一次数组,对于每一个元素,检查目标值减去它的差是否在映射中已经存在。如果存在,说明找到了一对和为目标值的数,返回这两个数的索引。如果没有找到,将当前元素及其索引加入到映射中继续查找。
相关问题
给定一个整数数组nums和一个整数目标值target,在数组中找出和等于目标值的那两个整数并返回数组下标
给定一个整数数组 `nums` 和一个整数 `target`,这是一个经典的“两数之和”问题,也称为“查找数组中和为目标值的元素”。你需要遍历数组,对于每个元素,检查是否存在另一个不同的元素使得它们的和等于 `target`。如果找到这样的组合,就返回这两个元素的下标,通常采用哈希表(如 Python 的 `dict` 或 Java 的 `HashMap`)来存储已经访问过的元素及其索引,以便于快速查找。
以下是算法的一个简单描述:
1. 创建一个空的哈希表。
2. 遍历数组 `nums`,对于每个元素 `num`:
- 计算 `target - num`,这是我们需要在哈希表中查找的目标值。
- 检查哈希表中是否存在这个差值对应的元素。如果存在,说明找到了一对和为目标值的元素,返回这两个元素的索引。
- 如果不存在,将当前元素的索引添加到哈希表中,键为 `num`,值为当前索引。
3. 如果遍历完整个数组都没有找到合适的一对数,返回空列表或表示未找到的特殊值(取决于编程语言的具体实现)。
给定整数数组nums和一个目标值target 在数组中找出和为目标值的两个整数 返回数组下标
题目描述:
给定一个整数数组 nums 和一个目标值 target,请在数组中找出和为目标值的两个整数,返回它们的数组下标。
示例:
输入:nums = [2, 7, 11, 15], target = 9
输出:[0, 1]
解释:nums[0] + nums[1] = 2 + 7 = 9,因此返回 [0, 1]。
思路:
暴力枚举法:对于每一个数,遍历整个数组,查找另一个数是否与它的和为目标值。
哈希表法:遍历数组,将每个数及其下标存储在哈希表中,同时查找哈希表中是否存在目标值减去当前数的差值。
代码实现:
暴力枚举法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
if (nums[i] + nums[j] == target) {
res.push_back(i);
res.push_back(j);
return res;
}
}
}
return res;
}
};
哈希表法:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> res;
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
if (map.find(target - nums[i]) != map.end()) {
res.push_back(map[target - nums[i]]);
res.push_back(i);
return res;
}
map[nums[i]] = i;
}
return res;
}
};
阅读全文