2020-10-18 力扣小白之两数之和--哈希表的使用

题目描述

给定一个整数数组nums 和一个目标值target,请在该数组中找出和为目标值得那两个数,并返回数组下标
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍

分析:

1.已知【整数数组】+【目标值】
2.寻找【两数之和为目标值】
3.返回 两数【下标】
重要:寻找(查找)目标数组是否存在目标元素的方法

暴力法+哈希表的使用

class Solution {
    public int[] twoSum(int[] nums, int target) {
      //暴力解法:
      /*
      注意:一维数组的创建、初始化
      时间复杂度:n^2
      */
        for(int i=0;i<nums.length;i++){
            for(int j=i+1;j<nums.length;j++){
                
                    if(nums[i]+nums[j]==target){
                       return new int[]{i,j};
                    } 
            }
        }
        return new int[0];//返回一个空的int[]

        //哈希表解法  --使用hashset?还是hashMap 判断
        HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            
            if(map.containsKey(target-nums[i])){
                return new int[]{map.get(target-nums[i]),i};
            }
            map.put(nums[i],i);//这行要放在判断后边[3,2,4] 6  测试用例过不去
        }
        return new int[0];//返回一个空的int[]


    }
}

本题中,数组中存在不重复的元素,不用考虑HashMap解决冲突问题

哈希表

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
有两种不同类型的哈希表
哈希集合Set:是集合数据结构的实现之一,用于存储非重复的值
哈希映射Map:是映射数据结构的实现之一,用于存储(key,value)键值对

哈希集合

MyHashSet hashSet = new MyHashSet();
hashSet.add(1);
hashSet.add(2);
hashSet.contains(1); // 返回 true
hashSet.contains(3); // 返回 false (未找到)
hashSet.add(2);
hashSet.contains(2); // 返回 true
hashSet.remove(2);
hashSet.contains(2); // 返回 false (已经被删除)

哈希映射

MyHashMap hashMap = new MyHashMap();
hashMap.put(1, 1);          
hashMap.put(2, 2);        
hashMap.get(1);            // 返回 1
hashMap.get(3);            // 返回 -1 (未找到)
hashMap.put(2, 1);         // 更新已有的值
hashMap.get(2);            // 返回 1
hashMap.remove(2);         // 删除键为2的数据
hashMap.get(2);            // 返回 -1 (未找到)

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/hash-table/xhqwd3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页