求数组中两数之和等于给定的值

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求数组中两数之和等于给定的值相关的知识,希望对你有一定的参考价值。

一、题目

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标(假设每种输入智慧对应一个答案,但是数组中同一个元素在答案里不能重复出现),你可以按任意顺序返回答案。

示例1
输入:nums=[2,7,11,15] ,target=9
输出:[0,1]
解析:因为nums[0] + nums[1] == 9,因此返回[0,1]

示例2
输入:nums=[3,2,4] ,target=6
输出:[1,2]
解析:因为nums[1] + nums[2] == 6,因此返回[1,2]

二、题目代码解析

1、代码

package com.xz.leetcode.day1;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: xz
 * @create: 2021-06-11 22:43
 */
public class Demo {
    public static void main(String[] args) {
        int[] nums= {2,7,11,15,8};
        int target=15;
        int[] arr=twoSum(nums,target);
        System.out.println("数组下标分别为["+arr[0]+","+arr[1]+"]");
    }

    public static int[] twoSum(int[] nums,int target){
        Map<Integer,Integer> map =new HashMap();
        //初始化第一个元素值和第一个元素值的位置
        map.put(nums[0],0);
        //遍历nums数组
        for(int i=1;i<nums.length;i++){
            //nums[i]和matchedNum的索引即为所求
            int matchedNum=target-nums[i];
            //如果map存储过matchedNum的映射,则返回索引和索引对应的值
            if(map.containsKey(matchedNum)){
                int index1=i;//索引赋值给index1
                int index2=map.get(matchedNum);//索引的值赋值给index2
                return new int[]{index1,index2};//放到一个新的数组中返回
            }else{//否则,map没有存储过matchedNum的映射,继续存储到map集合中
                map.put(nums[i],i);
            }
        }
        return null;
    }

}

2、输出结果

在这里插入图片描述

以上是关于求数组中两数之和等于给定的值的主要内容,如果未能解决你的问题,请参考以下文章

给定一个数组和一个目标整数,找出数组中两数之和和整数相等的数

给定一个数组,求两数之和等于某个值

1879. 两数之和 VII

leetcode_01两数之和

LeeCode 第1题

leetcode 两数之和 II - 输入有序数组 题解分析