javascript - 找到总和等于给定值且复杂度为 o(n) 的对

标签 javascript

我有一个包含数字的数组。我想找到一对总和等于给定值且复杂度为 o(n) 的数字。

let data = [5,8,9,6];

var x = {};

function findSum(arr, sum){

     data.forEach(function(item){
       if(item > sum){
         return null
       }
         var diff = sum - item;
       x[item] = diff
     })

  console.log(x);
}

findSum(data, 7);

复杂度为 O(n2)。

let data = [2, 4, 11, 3, 5, 8, 9, 1, 6, 5]

function findSum(arr, sum) {
  let sortArray = arr.sort(function(a, b) {
    return a - b
  });


  let findIndex = arr.indexOf(arr.find(function(item) {
    return item >= sum
  }))

  let iterateValues = sortArray.slice(0, findIndex);

  var pairs = [];
  console.log(iterateValues)
  iterateValues.forEach(function(value, index) {
    let getDiff = sum - value;
    let findDiff = iterateValues.find(function(diff, index) {
      return diff === getDiff
    });
    if (findDiff) {
      let firstPair = value.toString()
      let secondPair = findDiff.toString();
      let merge = firstPair + ',' + secondPair;
      pairs.push(merge)
    }
  })

  console.log(pairs)
}

findSum(data, 7);

最佳答案

尝试以下操作,需要 O(n) 时间才能找到总和等于给定值的对:

let data = [5,8,9,6];
var sum = 17;
var map = {};
var found = false;
for(var i = 0; i < data.length; i++){
  map[data[i]] = i;
}

for(var i = 0; i < data.length; i++){
  if(map[sum - data[i]] && map[sum - data[i]] != i){
    found = true;
    console.log(data[map[sum - data[i]]] + " "+data[i]);
    break;
  }
}
if(!found)
  console.log("No pair found");

关于javascript - 找到总和等于给定值且复杂度为 o(n) 的对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50679307/

相关文章:

javascript - 如何在图像鼠标悬停时显示复选框?

javascript - 无法将单击事件附加到 JQuery 中的按钮

javascript - 为具有高时间精度的桌面创建时间敏感的浏览器应用程序的最佳方法?

javascript - 读取代码点时出现偏移问题

javascript - 如何防止 onclick 监听器的垃圾邮件?

javascript - 如何默认分配今天日期

javascript - 创建一个函数内带有 getJSON 的 jQuery 插件

javascript - MVC JavaScript 相对路径

javascript - 获取HTML页面与node-xmpp/xmpp服务器通信

javascript - 一个在javascript中找到数组最大值的函数?