HashMap底层
package com.leetcode.test;
import java.util.HashMap;
import java.util.Map;
public class TwoSum {
public int[] twoSum(int[] nums,int target) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<nums.length;i++) {
map.put(nums[i],i);
}
for(int i=0;i<nums.length;i++) {
if (map.containsKey(target-nums[i])) {
return new int[] {map.get(target-nums[i]),i};
}
}
throw new IllegalArgumentException("No two sum solution");
}
public static void main(String[] args) {
TwoSum t = new TwoSum();
int[] array = {2,5,5,16};
int[] result = t.twoSum(array,10);
System.out.print("[");
for(int i:result) {
System.out.print(i+" ");
}
System.out.println("]");
}
}
要求是这个,我的测试用例是[2,5,516],和为10。我debug调试的时候HashMap中只有3个键值对,有一个重复的键值没有添加进去,并且最后键为16的变成第一个元素
执行查找键时,map中只有一个5,它是怎么输出两个5的位置索引的?
2
收起
正在回答
1回答
同学你好,1、首先,根据同学的代码,得到如下代码运行的内容,比如:

最后得到的内容就是这样得到了2 1,由此得知,同学的代码并不符合贴出的题目要求!
2、然后,在map中只有一个5,它并没有输出两个键为5的两个位置索引,它只是在添加时的两个键值对,在最后田家湾后第二个键为5的键值对会覆盖第一个键为5的键值对!
3、根据贴出题目,有如下思路:
遍历两边数组,第一遍从下标从0开始,第二遍下标从1开始,在遍历中直接将要求的数值和减去第一个值得到的值等于第二个值,例如:

可以按照这个思路来编写哦!
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星