基础
function twoSum(nums: number[], target: number): number[] {
const len: number = nums.length
for(let i: number = 0; i < len; i++) {
let index = nums.indexOf(target - nums[i], i + 1);
if (index !== -1) {
return [index, i]
}
}
return []
};
哈希表
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 []
};