用于快速设置操作的算法

时间:2018-02-17 16:44:37

标签: javascript algorithm sorting

我以(a,b)的形式设置为

(2,4)(1,3)(4,5)(1,2)

给出类似< 2,1>的列表。我想找到列表中有2或1作为第一个元素的所有集合,在这种情况下(2,4)(1,3)(1,2)并从它们获得最大值(b)...这种情况将是4。

如何尽快做到最好?

我的第一个方法是,从集合中获取所有内容并使用< 2,1>对它们进行交集。然后在集合中执行所有b的最大值....但是这对于大集合来说不会很好地扩展。 另外,如果需要,我们也可以改变数据结构,或者如果它有帮助就做任何预处理......

即时通讯使用普通的javascript,我将它们作为元组的数组或具有2个属性的对象int,int

感谢任何建议

1 个答案:

答案 0 :(得分:0)

以下是两种简单的方法,一种使用for循环,另一种使用reduce。

function findMax (list,filter) {
   let  max = 0; 
   for (let [key,val] of list) {
        if (filter.includes (key))
            max = Math.max (max, val)
   }
   return max;
}

function findMax2 (list, filter) {
     const toMax = (max,[key,val]) => Math.max (filter.includes(key) * val, max);
     return list.reduce (toMax, 0);
}

const data = [
  [2, 4],
  [1, 3],
  [4, 5],
  [1, 2]
]

const filter = [1, 2];

console.log(findMax(data, filter))
console.log(findMax2(data, filter))