Skip to content

Algorithms 算法

两个数之和

在给定的数组中找到两个值相加等于目标值

nums = [1, 3, 6, 9], t = 9

 因为nums[1] + num[2] = 9
 所以返回 [3, 6]

简单算法

for (let i =0; i < nums.length; i++) {
  for (let j = 0; j < nums.length; j++) {
    if (nums[i] + nums[j] === t) {
      return [nums[i], nums[j]]
    }
  }
}

我的思路

与目标值相减后的数组与元素组对应找匹配的值


// 
let n = nums.map(i => t - i)
var r = []
n.map(i => (nums.indexOf(i) > 0) && r.push(i))
console.dir(r)

// Ramda版本
let r = R.reduce((a, v) => R.lte(0, R.indexOf(v, nums)) ? R.append(v, a) : a, [], R.map(i => t - i, nums))
console.dir(r)

现实很残酷,通过对运行时间的测试,map的效率惨不忍睹, for在大数据下的执行速度远远高于map

Released under the ISC License.