
方法一:暴力枚举
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 []};
复杂度分析:
- 时间复杂度分析:
- 空间复杂度分析:
方法二:哈希表
暴力枚举的方法时间复杂度之所以高,主要原因是在查找 nums[i] + nums[j] === target 的时候时间复杂度高。当使用 Map 的时候,则可以将这个查找的过程从时间复杂度 降到
。
function twoSum(nums: number[], target: number): number[] {const map = new Map()for(let i = 0; i < nums.length; i++) {// 等价于暴力枚举中 nums[i] + nums[j] === target 的过程// 但时间复杂度从 O(n) 降到 O(1)const diff = target - nums[i]if (map.has(diff)) {return [map.get(diff), i]}map.set(nums[i], i);}return []};
复杂度分析:
- 时间复杂度分析:
- 空间复杂度分析:
