JavaScript两数之和算法(罗列常见三种)

尝试四种解法,其中双指针失败了,思路找错了,暂时没有更好的解题方法,不知道力扣100%的解题是咋写的。。。。

直接贴代码:

// 1.不推荐
        var Sum = function (nums, target) {
            var newarr = []
            for (let index = 0; index < nums.length; index++) {
                const item = nums[index];
                for (let i = 0; i < nums.length; i++) {
                    const t = nums[i];
                    if (index !== i) {
                        if (item + t === target){ newarr = [index,i];}
                    }
                }
                console.log(newarr);
            }
            return newarr
        };

        // 2.差值暴力 ---  通过相减来找到另一个数,查这个数存在且不等于它本身
        function tSum(array,target){
            for (let index = 0; index < array.length; index++) {
                let diff = target-array[index]
                let diffIndex = array.indexOf(diff)
                if(diffIndex !==-1 &&diffIndex!==index){
                    return [diffIndex,index]
                }
            }
            return []
        }
        var ts = tSum([3, 2, 7, 81, 3, 2, 5, 6, 4, 5, 2, 12, 9, 4], 6)
        console.error(ts);
        // 3.map解  -- 节省indexOf带来的循环 降低时间复杂度 但是增加空间复杂度(存储map)
        function mSum(array,target){
            let map = new Map()
            for (let index = 0; index < array.length; index++) {
                let diff = target-array[index]
                if(!map.has(diff)){
                    map.set(array[index],index)
                }else{
                    return [map.get(diff),index]
                }
            }
            return []
        }
        var ms = mSum([3, 2, 7, 81, 3, 2, 5, 6, 4, 5, 2, 12, 9, 4], 6)
        console.error(ms);
        // 2.双指针
        var twoSum = function (nums, target) {
            nums.sort(function(a,b){
                 return a - b
            })
            console.warn(nums);
            let arr
            let l = 0
            let r = nums.length - 1
            while (l < r) {
                if(nums[r]+nums[l]==target){
                    arr = [l,r]
                }
                nums[r] > target?r--:l++;
                console.log(r,l);
            }
            return arr
        };
        var d = twoSum([3, 2, 7, 81, 3, 2, 5, 6, 4, 5, 2, 12, 9, 4], 6)
        console.error(d);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值