两数之和

题目描述

  1. 题目地址::https://leetcode.cn/problems/two-sum
  2. 题目要求
    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那两个整数,并返回它们的数组下标。

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

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

方法1: 双循环,暴力解法

解题思路

  1. 首先肯定是想到暴力解法,通过双循环遍历数组,找nums[i] + nums[j] === target。

解题代码

var twoSum = function(nums, target) {
    for(let i = 0, len = nums.length;i < len;i++){
        // 因为同一元素不允许重复出现,所以从i的下一位开始遍历
        for(let j = i + 1;j < len;j++) {
            if(nums[i] + nums[j] === target) {
                return [i, j];
            }
        }
    }
    // 所有样例都是有返回结果的,这里无所谓
    return [-1, -1];
};

方法2: 一次循环,使用HashMap进行记录

解题思路

  1. 通过HashMap,在循环的时候进行查找我们将HashMap的Key定位nums[i],Value定义为i。
    那么,每次循环到一个数的时候,我们就可以在HashMap中查找是否存在key === target - nums[i],如果存在则可以直接返回对应的两个下标,否则,将当前的值记入到HashMap中。

解题代码

var twoSum = function(nums, target) {
    let map = new Map();
    for(let i = 0, len = nums.length; i < len; i++){
        if(map.has(target - nums[i])){
            return [map.get(target - nums[i]), i];
        }else{
            map.set(nums[i], i);
        }
    }
    return [];
};
posted @ 2022-09-25 21:06  fionna  阅读(16)  评论(0编辑  收藏  举报