【javacript日刷算法第一天】两数之和与数组串联

127 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、两数之和

题目详情

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

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

比如

输入: nums = [3,2,4], target = 6
输出: [1,2]

我的题解:

var twoSum = function (nums, target) {
    const map = new Map()
    for (let i = 0; i < nums.length; i++) {   
        // 查询值为 target - num 的元素
        if (map.has(target-nums[i])) {
            // 返回这两个数的下标
            return [map.get(target-nums[i]), i]
        }
        map.set(nums[i], i)
        //找不到符合条件的目标,把当前数字加入,作为可能的待查找项
    }
};

思路

利用哈希表

(1)map对象存放的是(key,value),其中key为数值的值,value为数组下标。

(2)map.has()可以判断该数是否存在

(3)map.get()返回数组下标

其他解法

穷举法

var twoSum = function(nums, target) {
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            if (nums[j] === target - nums[i]) {
                return [i, j]
            }
        }
    }
    return [-1, -1]
};

二、数组串联

题目详情

给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:

ans[i] == nums[i] ans[i + n] == nums[i] 具体而言,ans 由两个 nums 数组 串联 形成。

返回数组 ans 。

比如
输入: nums = [1,3,2,1]
输出: [1,3,2,1,1,3,2,1]

题解

var getConcatenation = function(nums) {
    return [...nums,...nums]
};