HashMap底层

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("]");
    }
}

http://img1.sycdn.imooc.com//climg/5cecaf7400014a5e03120318.jpg

要求是这个,我的测试用例是[2,5,516],和为10。我debug调试的时候HashMap中只有3个键值对,有一个重复的键值没有添加进去,并且最后键为16的变成第一个元素http://img1.sycdn.imooc.com//climg/5cecb0be0001249c03880242.jpg

执行查找键时,map中只有一个5,它是怎么输出两个5的位置索引的?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,1、首先,根据同学的代码,得到如下代码运行的内容,比如:

http://img1.sycdn.imooc.com//climg/5cecedcc000138ef09570524.jpg

最后得到的内容就是这样得到了2  1,由此得知,同学的代码并不符合贴出的题目要求!

2、然后,在map中只有一个5,它并没有输出两个键为5的两个位置索引,它只是在添加时的两个键值对,在最后田家湾后第二个键为5的键值对会覆盖第一个键为5的键值对!

3、根据贴出题目,有如下思路:

   遍历两边数组,第一遍从下标从0开始,第二遍下标从1开始,在遍历中直接将要求的数值和减去第一个值得到的值等于第二个值,例如:

http://img1.sycdn.imooc.com//climg/5cecf7e00001fb6908040228.jpg

可以按照这个思路来编写哦!

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • univers_prodigal 提问者 #1
    两个for循环的时间复杂度有点高。这个我能理解。
    2019-05-28 17:00:48
  • univers_prodigal 提问者 #2
    我看官方解决方式是把put函数加在if判断语句后面
    2019-05-28 17:44:34
  • 好帮手慕小班 回复 提问者 univers_prodigal #3
    同学你好,代码的实现有各种各样的实现形式,只要能实现都是可以的,但是因为同学的代码并没有达到最后的要求,所以不正确,同学也可以自己在敲一敲代码,查看具体的问题哦!继续加油! 如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2019-05-28 19:23:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师