查找满足一组条件的数字序列的算法

时间:2018-11-07 07:42:25

标签: algorithm sorting data-structures sequence

问题

给出一个整数列表,确定序列,其中相距正好N个索引的连续数字的值等于N乘以序列中的前一个数字。

规则:

  • N必须大于1

  • 条目少于3个的序列应为 忽略

  • 返回的序列必须始终尽可能长 给定N

  • 全零的序列不计算

我的解决方案

  1. 迭代长度为M的数字列表
  2. 每次迭代:

    1.a分别在current_numbercurrent_index中保存当前数字和当前索引。

    1.b计算current_number可以容纳的连续数字序列的最大可能数目,并将此数字保存在nested_iteration_count中。

    1.c以nested_iteration_count的循环计数和N的最小可能值N = 2开始嵌套迭代

    1.c.1检查序列是否存在。如果存在,则将序列存储在数组中

    1.c.2将N递增1,然后重复循环,直到内部循环迭代完成为止。

  3. 为下一个号码重复外循环

示例

请考虑以下整数列表:

数字2 10 4 3 8 6 9 9 18 27

索引0 1 2 3 4 5 6 7 8 9

找到以下序列:

  • 2、4、8
  • 3、9、27

该算法显然具有O(n^2)复杂度。有可能对此进行改进吗?

1 个答案:

答案 0 :(得分:2)

使用@ user3386109优化的快速Python实现

第一阶段检查乘数N是否随第i个项目继续进行

第二阶段-检索每个N的最长序列-可能会更简洁

var ki = kd = 1; function increase() { ki++; $.ajax({ type: "POST", url: 'inc/functions.php', data: {'page':ki}, success: function(response) { content.html(response); } }); } function decrease() { kd--; $.ajax({ type: "POST", url: 'inc/functions.php', data: {'page':kd}, success: function(response) { content.html(response); } }); }包含res (N:(count, endingindex)

中最长的进度
{2: (3, 4), 3: (3, 9)}