我给了一个n整数的数组A
,并且Q
形式为X D
查询每个查询我必须找到子数组{{1}中的最大元素}}
例如:
[Ax , A(x-D),A(x-2D)..]
我们如何以比A = [1,2,3,4,5,6,17,8]
we have query 7 2
Sub Array [17,5,3,1] Ans=17
更好的时间复杂度解决这个问题,因为没有索引更新,可以通过某种技术离线解决
我认为O(Q*N)
不会在这里发挥作用。
答案 0 :(得分:1)
让D
大于sqrt(N)
。然后序列x,x-d,x-2 * d,...最多包含sqrt(N)
个元素。因此,在这种情况下,每个查询的天真解决方案适用于O(sqrt(N))
。
让D <= sqrt(N)
。最多只有sqrt(N)
个D
个d
个。让我们迭代它们。对于固定值f[i] = max(a[i], f[i - d])
,我们可以在线性时间内为所有i
计算(X, D)
(边界条件需要正确处理)。所有查询的答案D = d
,其中f[X]
只是O((N + Q) * sqrt(N))
。
总时间复杂度为ionViewCanLeave(): Promise<void> {
return new Promise((resolve, reject) => {
let confirm = this.alertCtrl.create({
title: 'Are you sure?',
message: 'Bunnies will die :(',
buttons: [{
text: 'OK',
handler: () => {
resolve();
},
}, {
text: 'Cancel',
handler: () => {
reject();
}
}],
});
confirm.present();
})
}
。此解决方案使用线性空间量。