java - 最长的数字序列

标签 java arrays algorithm arraylist longest-substring

我最近在一次采访中被问到这个问题,我可以给出 O(nlogn) 解决方案,但找不到 O(n) 的逻辑。有人可以帮我解决 O(n) 问题吗?

在数组中找到最长数字序列的长度

示例: 输入:2 4 6 7 3 1 输出:4(因为 1,2,3,4 是一个序列,即使它们不在连续的位置)

该解决方案在占用空间方面也应该是现实的。即即使有 10 亿个数字的数组,解决方案也应该是现实的

最佳答案

对于非连续数字,您需要一种在 O(n) 中对它们进行排序的方法。在这种情况下,您可以使用 BitSet。

int[] ints = {2, 4, 6, 7, 3, 1};
BitSet bs = new BitSet();
IntStream.of(ints).forEach(bs::set); 

// you can search for the longer consecutive sequence.
int last = 0, max = 0;
do {
    int set = bs.nextSetBit(last);
    int clear = bs.nextClearBit(set + 1);
    int len = clear - set;
    if (len > max)
        max = len;
    last = clear;
} while (last > 0);
System.out.println(max);

关于java - 最长的数字序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35244340/

相关文章:

java - 在 Scala 中使用 java 迭代器

java - 基本抽象数据类型程序

java - Apache Camel 中的解码 (JSON)

c - 如何使用c将目录的文件名添加到数组结构中

Python 图形工具 - 删除未连接的顶点

java - Bellman Ford检测最短长度的负循环

java - 可调用的 Dao 动态方法

Java Buffer 可以判断它是否脏了

c - C中的字符串数组

algorithm - 给定一个 preOrder 和 inOrder 序列,可能有多少级阶 BST 序列?