https://leetcode-cn.com/problems/two-sum/ 数组、哈希表

基础

  1. function twoSum(nums: number[], target: number): number[] {
  2. const len: number = nums.length
  3. for(let i: number = 0; i < len; i++) {
  4. let index = nums.indexOf(target - nums[i], i + 1);
  5. if (index !== -1) {
  6. return [index, i]
  7. }
  8. }
  9. return []
  10. };

哈希表

function twoSum(nums: number[], target: number): number[] {
    const hash: { [key: string]: number } = {};
    nums.forEach((item, i) => hash[item] = i);
    const len: number = nums.length;
    for (let i: number = 0; i < len; i++) {
        let need = target - nums[i];
        if (hash[need] && i !== hash[need]) {
            return [i, hash[need]]
        }
    }
    return []
};

Map

性能最好,且先插入再循环性能更好

// 边循环边插入
function twoSum(nums: number[], target: number): number[] {
    const map = new Map();
    const len: number = nums.length;
    for (let i: number = 0; i < len; i++) {
        let need: number = target - nums[i];
        if (map.has(need)) {
            return [map.get(need), i]
        }
        map.set(nums[i], i)
    }
    return []
};

// 先插入再循环 这个性能比上面略好
function twoSum(nums: number[], target: number): number[] {
    const map = new Map();
    const len: number = nums.length;
    nums.forEach((item, index) => map.set(item, index))
    for (let i: number = 0; i < len; i++) {
        let need: number = target - nums[i];
        if (map.has(need) && map.get(need) !== i) {
            return [map.get(need), i]
        }
    }
    return []
};