给出长度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)解决方案
答案 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)));