LeetCode 01:两数之和

45 阅读2分钟

该死的行业太卷了,谁能想到前端也要学算法,学习前端就是觉得算法太难,没想到...呜呜呜,一言难尽。边工作边学习,每天学一点,暂时还没找到学习算法的方法,就在这里每天记录一点吧。

问题描述

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

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

解法一:暴力枚举(JavaScript 实现)

最直接的方法是通过两层循环遍历数组中的每一对元素,并检查它们的和是否等于目标值。

	function twoSumBruteForce(nums, target) {  
	    const n = nums.length;  
	    for (let i = 0; i < n; i++) {  
	        for (let j = i + 1; j < n; j++) {  
	            if (nums[i] + nums[j] === target) {  
	                return [i, j];  
	            }  
	        }  
	    }  
	    // 如果没有找到符合条件的数对,返回一个空数组 
	    return [];  
	}

解法二:哈希表优化(JavaScript 实现)

为了优化时间复杂度,我们可以使用哈希表(在JavaScript中通常使用对象或Map)来存储已经遍历过的元素及其索引。这样,我们可以在O(1)的时间复杂度内查找某个数是否存在于哈希表中。

	function twoSumHashTable(nums, target) {
	    const numMap = {};
	    for (let i = 0; i < nums.length; i++) {  
	        const complement = target - nums[i];
	        if (complement in numMap) {
	            return [numMap[complement], i];
	        }
	        numMap[nums[i]] = i;
	    } 
	    return [];  
	}

总结

以为挺简单,实则一点也不简单,第一眼想到的是两个遍历解决问题,刚运行就翻车了,没有做判断,会有两个遍历都从第一个元素开始,业务能力还是不够呀。其次map对于我一个刚入行前端的小白来说基本没用过,这里的话发现其实用对象也是可以的,得加强下map的学习。。。


摸鱼时候再来战!