算法题:1. 两数之和

这题其实1年前就做过, 不过当时只会暴力枚举法,现在再补过hash表的解法

暴力枚举

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

hash表

function twoSum(nums: number[], target: number): number[] {
    const map = new Map<number,number>()
    for(let i = 0; i < nums.length; i++){
        if(map.has(target - nums[i])){
            return[map.get(target - nums[i]), i];
        }
        map.set(nums[i], i);
    }
    return [];
};

总结

从结果中可以看出:hash表写法省时间,但是占空间;而暴力枚举省空间但是花费的时间较多。
两种方法没有谁优谁劣,根据场景使用。

还有就是发现leetcode一年前的代码拿到现在提交的话,同一份代码执行会多出几十ms:

评论

0 / 800
全部评论()