【问题标题】:How to find length of largest contiguous segment which forms an arithmetic progression in range [L R] of a given array of length N?如何找到在长度为 N 的给定数组的 [L R] 范围内形成算术级数的最大连续段的长度?
【发布时间】:2019-10-24 08:33:21
【问题描述】:

考虑数组1 2 3 5 5

  1. 查询[L R D]=[1 5 1],输出为3
  2. 查询[1 1 1],输出为1

还有对0<Q<10^6所以蛮力不起作用的问题的Q查询!

注意:索引从 1 开始

注2:D代表AP的公差

【问题讨论】:

  • 欢迎来到 Stack Overflow!您能否添加更多示例来说明您想要实现的目标?这个措辞有点困难,只有一个测试用例。
  • Like an Array [1 1 1 2 1 1 1 2 3 1 1 1 1 5 6] 如果给出查询以查找由 range[L,R] 中的 1 组成的子数组的最大长度例如,在 [4 8] 之间从 1 ans 获取索引将是 3
  • @KnightKnight 为给定的示例输入提供示例输出,编辑您的问题以添加此类示例。
  • L 表示我们从 R 开始的索引我们结束于 !! D 代表我们必须找到最大子数组长度的值!
  • 对不起,这完全不清楚你在问什么。请编辑您的问题,使其至少包含 4 个结构清晰的测试用例。每个测试都有一个输入、一个查询和一个输出。请使用回车来构建您的测试用例。

标签: algorithm math


【解决方案1】:

您的问题可以简化为找到具有给定公差的最长等差数列,数组 = [L, R] 和 sizen = R - L + 1

然后您可以从Geeksforgeeks找到解决方案

朴素方法:对于每个元素,计算它可以形成的最长 AP 的长度并打印其中的最大值。它涉及 O(n^2) 时间复杂度。

一种有效的方法是使用散列

创建一个映射,其中键是 AP 的起始元素及其 value 是该 AP 中的元素数。这个想法是更新 键“a”处的值(位于索引 i 处且其起始元素不是 但在地图中)只要索引 j(>i) 处的元素可以 在“a”的 AP 中(作为起始元素)。然后我们打印 地图中所有值中的最大值。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2011-12-13
    • 2016-11-04
    • 1970-01-01
    • 2013-01-04
    • 2013-05-19
    相关资源
    最近更新 更多