题解 | #寻找两头牛的情报关联#
寻找两头牛的情报关联
https://www.nowcoder.com/practice/5cb34321b6dd41bcbea3db454c2f6e9f
知识点:哈希表
思路:
使用了一个哈希表mp来存储已经遍历过的数及其索引。初始化结果列表res为[-1, -1]。
通过遍历整数列表info的每个元素,依次进行如下操作:
- 计算目标重量
target_weight减去当前元素的差值t。 - 如果哈希表
mp中存在键mp,说明存在两个数之和等于目标重量。如果结果列表res的第一个元素为-1或者哈希表中对应键mp的值小于res的第一个元素,则更新结果列表res为[mp.get(t), i + 1],其中i是当前元素的索引。 - 如果哈希表
mp中不存在键mp,将当前元素插入哈希表mp的键值对中,键为当前元素,值为当前元素的索引加1。
最后,返回结果列表res。
编程语言:java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param info int整型一维数组
* @param target_weight int整型
* @return int整型一维数组
*/
public int[] findWeightRelation (int[] info, int target_weight) {
Map<Integer, Integer> mp = new HashMap<>();
int n = info.length;
List<Integer> res = new ArrayList<>();
res.add(-1);
res.add(-1);
for (int i = 0; i < n; i++) {
int t = target_weight - info[i];
if (mp.containsKey(t)) {
if (res.get(0) == -1 || mp.get(t) < res.get(0)) {
res.set(0, mp.get(t));
res.set(1, i + 1);
}
} else {
mp.put(info[i], i + 1);
}
}
return res.stream().mapToInt(Integer::intValue).toArray();
}
}