📌  相关文章
📜  用于查询的 Javascript 程序在旋转数组中查找给定长度的最大和连续子数组

📅  最后修改于: 2022-05-13 01:56:06.569000             🧑  作者: Mango

用于查询的 Javascript 程序在旋转数组中查找给定长度的最大和连续子数组

给定一个包含N个整数的数组arr[]和以下两种类型的{X, Y}形式的Q个查询:

  • 如果X = 1 ,将给定数组向左旋转Y个位置。
  • 如果X = 2 ,则在数组的当前状态下打印长度为Y的最大和子数组。

例子:

朴素方法:最简单的方法是通过将元素一个一个地移动到距离Y来旋转数组,查询类型为 1 ,并生成长度为 Y 的所有子数组的总和,如果查询类型为 2 ,则打印最大总和.
时间复杂度: O(Q*N*Y)
辅助空间: O(N)

有效方法:为了优化上述方法,我们的想法是使用杂耍算法进行数组旋转并找到长度为Y的最大和子数组,使用滑动窗口技术。请按照以下步骤解决问题:

  1. 如果X = 1 ,使用杂耍算法将数组旋转Y
  2. 否则,如果X = 2 ,则使用滑动窗口技术找到长度为 Y 的最大和子数组。
  3. 如果查询X1 ,则打印数组。
  4. 否则,打印大小为Y的最大和子数组。

下面是上述方法的实现:

Javascript


输出:
3 4 5 1 2 
12
1 2 3 4 5 
2 3 4 5 1 
14

时间复杂度: O(Q*N),其中 Q 是查询数N 是给定数组的大小。
辅助空间: O(N)

请参阅有关查询的完整文章,以在旋转数组中查找给定长度的最大和连续子数组以获取更多详细信息!