我在范围列表中出现了多少次和索引

时间:2016-11-20 18:43:34

标签: algorithm

给出长度N的范围列表,其中起点和终点包括[(5,7),(1,4),(2,3),(6,8),(3,5) )]

并给出任何数字K,假设K = 8

在长度为K + 1的数组中,查找List

中某个范围内每个索引包含的次数

假设K = 8,我们将有一个从索引0到索引8的数组(arr)

ARR [0] = 0; ARR [1] = 1; {1仅包含在(1,4)}中 ARR [2] = 2; {2包含在(1,4)(2,3)中 ARR [3] = 3; {3包含在(1,4)(2,3)(3,5)中 ARR [4] = 2; {4包含在(1,4)(3,5)中 ARR [5] = 2; {5包含在(3,5)(5,7)}中 ARR [6] = 2; {6包含在(5,7)(6,8)}中 ARR [7] = 2; {7包含在(5,7)(6,8)}中 ARR [8] = 1; {8包含在(6,8)}

我正在寻找O(N + K)解决方案

1 个答案:

答案 0 :(得分:0)

您可以在JS中执行以下操作。它不是O(n + k),而是最坏情况O(nk)。

function nToIndices(d,n){
  return d.reduce(function(p,c){
                    for (var i = c[0]; i <= c[1] && i <= n; i++){
                      p[i] !== undefined ? p[i].push(c) : p[i] = [c];
                    }
                    return p;
                  },[[0]]);
}
var arr = [[5,7],[1,4],[2,3],[6,8],[3,5]];
console.log(JSON.stringify(nToIndices(arr,8)));