我应该使用哪种算法来优化我的代码?

帕拉斯贾恩

我有一个 N 个元素的数组 A 。我必须在其中执行 Q 查询。在每个查询中,我选择一个索引 I(0-based) 并执行以下操作

for j = I+1 to N:
  if A[j]<A[i]:
      A[j]=0

注意:查询不是相互独立的。

输入:

  1. 第一行包含 N(数组中的元素数)和 Q(查询数)
  2. 第二行包含 N 个空格分隔的整数
  3. Q 空间分隔的整数表示每个查询中选择的索引

5 2 
4 3 4 3 2
3 2

输出:

4 3 4 0 0

解释:

  1. 第一次查询后的数组:{4,3,4,3,0}
  2. 第二次查询后的数组:{4,3,4,0,0}

我尝试过需要 O(n*q) 的蛮力解决方案。这就是我所做的。

n,q = map(int,input().split())
A = list(map(int,input().split()))
query = list(map(int,input().split()))

for i in range(len(query)):
    for j in range(query[i]+1,n):
        if A[j]<A[query[i]]:
            A[j] = 0

print(A)

我想在小于 O(n*q) 的时间内完成上述问题。是否有可能 。你能告诉我们使用哪种算法吗?

康斯坦丁·约夫科夫

创建大小的辅助阵列N,其中每个元素将是1如果存在与值的查询i,或0,否则。

然后,我们可以迭代辅助数组并跟踪查询最大值多少x[i]

在每个步骤(让命名current),如果这是最大超过当前元素的值,更新元件0-这意味着有一个与值的查询p,其中x[p] > x[current],因此,x[current]被设定为0

这样,我们实现的整体运行时间O(n + q)O(n)内存。

让我们来看看这个例子:

n = 5
q = 2 
x = {4, 3, 4, 3, 2}
q[0] = 3 
q[1] = 2

最初,我们的辅助数组 a 将是a = {0, 0, 0, 0, 0}

第一个查询是q[0] = 3,因此我们更新a[3] = 1,因为在x[3]必要时必须与之后的所有内容进行比较x[3]和更新。

第二个查询是q[1] = 2,因此我们更新a[2] = 1,因为在x[2]必要时必须与之后的所有内容进行比较x[2]和更新。现在,这重叠与以前的查询,以便将它们结合起来,并决定我们是否应该更新的元素0或不,我们要以最大的x[2]x[3]

最后,我们迭代a并跟踪查询的当前最大值x我们更新x[i]0if任何查询的影响,其值小于影响它的查询的最大值。

我的代码是用 Java 编写的,但我希望它是不言自明的:

int n = in.nextInt(), q = in.nextInt();
int[] x = new int[n];
for (int i = 0; i < n; i++) {
  x[i] = in.nextInt();
}
int[] a = new int[n];
while (q-- > 0) {
  int i = in.nextInt();
  a[i] = 1;
}
int max = 0;
for (int i = 0; i < n; i++) {
  if (a[i] == 1) {
    max = Math.max(max, x[i]);
  }
  if (x[i] < max) {
    x[i] = 0;
  }
}
for (int i = 0; i < n; i++) {
  out.print(x[i]);
  out.print(' ');
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我应该使用哪种算法来分析所有商品之间的关系?

来自分类Dev

我应该使用哪种算法对学生进行排序?

来自分类Dev

我应该使用哪种算法对学生进行排序?

来自分类Dev

我应该对频率数据使用哪种聚类算法?

来自分类Dev

我应该使用哪种算法来获得有正权重的有向加权图中的所有可能路径?

来自分类Dev

我应该使用哪种GCP产品来实现微服务?

来自分类Dev

我应该使用哪种JOIN来联接这些表?

来自分类Dev

我应该选择哪种算法,为什么?

来自分类Dev

我应该为emacs中的RDFa代码使用哪种模式?

来自分类Dev

我应该使用哪种FunctionalInterface?

来自分类Dev

我应该使用哪种变量?

来自分类Dev

我应该使用哪种型号?

来自分类Dev

我应该使用什么技术来优化SQL查询

来自分类Dev

我可以使用循环来优化代码吗?

来自分类Dev

我应该使用 in 还是不使用 in 来优化我的 Redshift SQL

来自分类Dev

对于具有大量重复的列表,我应该使用哪种排序算法?

来自分类Dev

对于具有大量重复的列表,我应该使用哪种排序算法?

来自分类Dev

我应该使用哪种哈希算法检查文件的重复性

来自分类Dev

我应该使用哪种算法在数据库中查找相似之处?

来自分类Dev

Spark-我应该使用哪种语言?

来自分类Dev

我应该使用哪种Paypal SDK?

来自分类Dev

我应该使用哪种虚拟化软件?

来自分类Dev

铁路我应该使用哪种关系?

来自分类Dev

我应该使用哪种类型的关系?

来自分类Dev

我应该使用哪种收集方式?

来自分类Dev

我的UPS应该使用哪种插座?

来自分类Dev

我应该使用哪种“风味”或LAN类型?

来自分类Dev

我应该使用哪种类型的公式

来自分类Dev

我应该使用哪种贝宝服务

Related 相关文章

  1. 1

    我应该使用哪种算法来分析所有商品之间的关系?

  2. 2

    我应该使用哪种算法对学生进行排序?

  3. 3

    我应该使用哪种算法对学生进行排序?

  4. 4

    我应该对频率数据使用哪种聚类算法?

  5. 5

    我应该使用哪种算法来获得有正权重的有向加权图中的所有可能路径?

  6. 6

    我应该使用哪种GCP产品来实现微服务?

  7. 7

    我应该使用哪种JOIN来联接这些表?

  8. 8

    我应该选择哪种算法,为什么?

  9. 9

    我应该为emacs中的RDFa代码使用哪种模式?

  10. 10

    我应该使用哪种FunctionalInterface?

  11. 11

    我应该使用哪种变量?

  12. 12

    我应该使用哪种型号?

  13. 13

    我应该使用什么技术来优化SQL查询

  14. 14

    我可以使用循环来优化代码吗?

  15. 15

    我应该使用 in 还是不使用 in 来优化我的 Redshift SQL

  16. 16

    对于具有大量重复的列表,我应该使用哪种排序算法?

  17. 17

    对于具有大量重复的列表,我应该使用哪种排序算法?

  18. 18

    我应该使用哪种哈希算法检查文件的重复性

  19. 19

    我应该使用哪种算法在数据库中查找相似之处?

  20. 20

    Spark-我应该使用哪种语言?

  21. 21

    我应该使用哪种Paypal SDK?

  22. 22

    我应该使用哪种虚拟化软件?

  23. 23

    铁路我应该使用哪种关系?

  24. 24

    我应该使用哪种类型的关系?

  25. 25

    我应该使用哪种收集方式?

  26. 26

    我的UPS应该使用哪种插座?

  27. 27

    我应该使用哪种“风味”或LAN类型?

  28. 28

    我应该使用哪种类型的公式

  29. 29

    我应该使用哪种贝宝服务

热门标签

归档