题解 | #寻找两头牛的情报关联#
寻找两头牛的情报关联
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(); } }