Array
//brute force O(n^2) - O(1)
var twoSum = function (nums, target) {
if (!Array.isArray(nums) || nums.length < 2) {
throw new TypeError(`invalid parameter, nums=${nums}`)
}
if (
typeof target !== 'number' ||
Number.isNaN(target) ||
!Number.isFinite(target)
) {
throw new TypeError(`invalid parameter, target=${target}`)
}
for (let i = 0, len = nums.length; i < len - 1; i++) {
for (let j = i + 1; j < len; j++) {
if (nums[i] + nums[j] === target) return [i, j]
}
}
}
//两次哈希 O(n) - O(n)
//obj or map
var twoSum = function (nums, target) {
const hash = {},
len = nums.length
for (let i = 0; i < len; i++) {
//[2, 7] 9, store 7,the below loop search 7
hash[target - nums[i]] = i
}
for (let j = 0; j < len; j++) {
//exclude hash[nums[j]] is falsy and same item
if (hash[nums[j]] !== undefined && hash[nums[j]] !== j) {
return [j, hash[nums[j]]]
}
}
}
//一次哈希 optimal,先判断要找的值在不在hash里面,再放要找的值则不需要判重
//obj or map
var twoSum = function (nums, target) {
const hash = {}
for (let i = 0, len = nums.length; i < len; i++) {
//exclude hash[nums[i]] is falsy
if (hash[nums[i]] !== undefined) return [hash[nums[i]], i]
hash[target - nums[i]] = i
}
}Last updated