【发布时间】:2018-10-09 01:18:57
【问题描述】:
有一个数组:[1,1,1,1,2,3,4],计算数组中所有相同差异的集合 ※数组中每个集合的差值可以不一样
Way to count one set have same difference:
-1,0,1 -> count = 1 with diff = 1
1,1,1 -> count = 1 with diff = 0
1,2,3,4 -> count = 3 with diff = 1 ([1,2,3],[1,2,3,4],[2,3,4])
0,1 -> not count
0,1,3 -> not count
0,1,1,2 -> not count , althought it has 0,1 and 1,2 with diff = 1 but it is not continous
As the above array [1,1,1,1,2,3,4] count = 6
There are 6 sets has the same difference value:
[1,1,1],[1,1,1,1],[1,1,1] with difference = 0
[1,2,3],[1,2,3,4],[2,3,4] with difference = 1
这是我的蛮力方法 O(n2) 我可以使用带记忆的 DP 来更有效地改进它吗?
function run(pArray){
var count = 0;
var length = pArray.length;
for(var i = 0;i<length - 2;i++){
var nextIdx = i + 1;
var diff = pArray[nextIdx]-pArray[i];
while(true){
nextIdx ++;
if(nextIdx > length - 1){
break;
}
if(pArray[nextIdx] - pArray[nextIdx - 1] !== diff){
break;
}else{
count ++;
}
}
}
console.log(count);
}
run([1,1,1,1,2,3,4]);
【问题讨论】:
-
请把你的问题说清楚。对数组和差值进行算法的输入是什么?在您的示例中,输入 arr = [1,1,1,1,2,3,4] 和 difference = 1 ?
-
嗨 SomeDue 我已经更清楚地编辑了问题。输入只是一个整数数组(在纬度线我调用函数 run(
) 输出是一个计数集 -
抱歉您的问题还不清楚。 “※差值可以不一样”是什么意思?
-
我已经用例子解释了更多:“由于上面的数组[1,1,1,1,2,3,4] count = 6 有6个集合具有相同的差异值:[ 1,1,1],[1,1,1,1],[1,1,1] 差 = 0 和 [1,2,3],[1,2,3,4],[2, 3,4] 差异 = 1 "
-
好的,因此所有元素之间具有相同差异的集合,即 diff(element - element_to_its_left) 对于所有元素都是相同的 - 需要计算在内。现在还有一个问题:为什么不将 [1,1] 算作差异 0 的另一组?
标签: arrays algorithm dynamic-programming