[打卡2:leetcode1-两数之和] |刷题打卡

437 阅读2分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

前言

第一次参加掘金打卡活动,别的不说 主要是奔着奖励来的。4.12开始为了达到14题小目标 冲冲冲!!!

image.png

题目描述

题目链接:两数之和

题目描述我用截图leetcode的为主,所以题目如下图

image.png

思路分析

依照题目可以知道,这是输入一个数组和一个target目标值,求两数和为目标值的下标。 我先考虑必定存在的情况,并且只存在一种的情况,那怎么样可以求出答案,因为和知道,所以我的想法去按照遍历数组然后target-item(当前值)的差是否存在于数组 是的话那么所得值和当前值的对应的下标就是要返回的答案。ps:不过我又想如果都保证是正正数的情况下,那是不是可以直接不考虑比target值大的情况,当然考虑了要是可以负正数反而错了。所以我按照常规解法去先来一下

image.png 最后通过两次修改才通过,我第一个数的求法思路是遍历数组然后然后从遍历的那个数之后的数组去找差值,存在则才是我们要的第一个数字。所以就有了个nums.slice(index+1),求出第一个数

image.png 我以为第二个数字更简单,直接从原来找差值的下标,好的这里踩了坑,这样会导致相同数字下标求错,所以换了个思路既然在保证第一个数正确的情况下直接把原数组reverse()然后再找差值求得反转下标 这样思路是对的,然后第二个值就等于数组长度-(所得的反转下标+1),我以为对了然后又踩了个坑 数组在反转后是会改变原来数组的值 所以我才添加了arr存原数组,然后才通过

image.png

AC 代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let arr = [...nums]
    if(nums&&nums.length>1){
        let firstNum = nums.findIndex((item,index)=>{
            return nums.slice(index+1).includes(target-item)
        })
        if(firstNum===-1){
            return []
        }else{
            let secondNum = nums.length-nums.reverse().indexOf(target-arr[firstNum])-1
            return [firstNum,secondNum]
        }
    }else{ 
        return []
    }
};

总结

考虑点要足,不然就有bug。第二题算法完成,坚持就是胜利

       ↓↓↓

算法系列链接

       ↑↑↑

这里可以点!这里可以点!这里可以点!