001两数之和

86 阅读2分钟

本文已参与[新人创作]活动,一起开启掘金创作之路。

题目 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

已知两数之和即target,遍历数组,求差值,判断map中是否存在该值,存在则返回遍历的数的下标和map中的值,否则存入map中 在这里插入图片描述

代码

class Solution {
    public int[] twoSum(int[] nums, int target) {
        /*
        题目重点:
        返回的是下标
        对应一个答案
        同一元素不能重复出现
         */
        //  创建动态哈希表,元素顺序存取顺序不能保持一致
        Map<Integer,Integer>map=new HashMap<Integer,Integer>();
        // 遍历数组
        for(int i=0;i<nums.length;i++){
            // 求差值
            int sub=target-nums[i];
            // 判断哈希表中的key值是否有该差值
            if(map.containsKey(sub)){
                // 如果有
                return new int[] {i,map.get(sub) };
            }
            else{
                // 如果没有,则存入哈希表
                // key为元素
                // value为下标
                map.put(nums[i],i);
            }
        }
        return null;
    }
}

知识点

1)
    Map 是一种键-值对(key-value)集合,
    Map 集合中的每一个元素都包含一个键对象和一个值对象。
    其中,键对象不允许重复,而值对象可以重复,
    并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。
    (2)
    Map 接口主要有两个实现类:HashMap 类和 TreeMap 类。
    其中,HashMap 类按哈希算法来存取键对象,
    而 TreeMap 类可以对键对象进行排序。
(3)函数
	1. containsKey() 方法检查 hashMap 中是否存在指定的 key 对应的映射关系。
	containsKey() 方法的语法为:
	map.containsKey(Object key)
	如果 hashMap 中存在指定的 key 对应的映射关系返回 true,否则返回 false2.put() 方法将指定的键/值对插入到 HashMap 中。
	put() 方法的语法为:
	hashmap.put(K key,V value)
	注:hashmap 是 HashMap 类的一个对象。
	参数说明:
	key - 键
	value - 值
	返回值
	如果插入的 key 对应的 value 已经存在,则执行 value 替换操作,
	返回旧的 value 值,如果不存在则执行插入,返回 null。
	3.get() 方法获取指定 key 对应对 value。
	get() 方法的语法为:
	hashmap.get(Object key)
	注:hashmap 是 HashMap 类的一个对象。
	参数说明:
	key - 键
	返回值
	回与指定 key 所关联的 value。